UNPKG

aivmlib-web

Version:

Aivis Voice Model File (.aivm/.aivmx) Utility Library for Web

1 lines 439 kB
{"version":3,"file":"onnx.mjs","sources":["../../src/onnx-protobuf/onnx.js"],"sourcesContent":["/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/\n'use strict';\n\n// var $protobuf = require('protobufjs');\nimport $protobuf from 'protobufjs';\n\n// Common aliases\nvar $Reader = $protobuf.Reader,\n  $Writer = $protobuf.Writer,\n  $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots['default'] || ($protobuf.roots['default'] = {});\n\n$root.onnx = (function () {\n  /**\n   * Namespace onnx.\n   * @exports onnx\n   * @namespace\n   */\n  var onnx = {};\n\n  /**\n   * Version enum.\n   * @name onnx.Version\n   * @enum {number}\n   * @property {number} _START_VERSION=0 _START_VERSION value\n   * @property {number} IR_VERSION_2017_10_10=1 IR_VERSION_2017_10_10 value\n   * @property {number} IR_VERSION_2017_10_30=2 IR_VERSION_2017_10_30 value\n   * @property {number} IR_VERSION_2017_11_3=3 IR_VERSION_2017_11_3 value\n   * @property {number} IR_VERSION_2019_1_22=4 IR_VERSION_2019_1_22 value\n   * @property {number} IR_VERSION_2019_3_18=5 IR_VERSION_2019_3_18 value\n   * @property {number} IR_VERSION_2019_9_19=6 IR_VERSION_2019_9_19 value\n   * @property {number} IR_VERSION_2020_5_8=7 IR_VERSION_2020_5_8 value\n   * @property {number} IR_VERSION_2021_7_30=8 IR_VERSION_2021_7_30 value\n   * @property {number} IR_VERSION=9 IR_VERSION value\n   */\n  onnx.Version = (function () {\n    var valuesById = {},\n      values = Object.create(valuesById);\n    values[(valuesById[0] = '_START_VERSION')] = 0;\n    values[(valuesById[1] = 'IR_VERSION_2017_10_10')] = 1;\n    values[(valuesById[2] = 'IR_VERSION_2017_10_30')] = 2;\n    values[(valuesById[3] = 'IR_VERSION_2017_11_3')] = 3;\n    values[(valuesById[4] = 'IR_VERSION_2019_1_22')] = 4;\n    values[(valuesById[5] = 'IR_VERSION_2019_3_18')] = 5;\n    values[(valuesById[6] = 'IR_VERSION_2019_9_19')] = 6;\n    values[(valuesById[7] = 'IR_VERSION_2020_5_8')] = 7;\n    values[(valuesById[8] = 'IR_VERSION_2021_7_30')] = 8;\n    values[(valuesById[9] = 'IR_VERSION')] = 9;\n    return values;\n  })();\n\n  onnx.AttributeProto = (function () {\n    /**\n     * Properties of an AttributeProto.\n     * @memberof onnx\n     * @interface IAttributeProto\n     * @property {string|null} [name] AttributeProto name\n     * @property {string|null} [refAttrName] AttributeProto refAttrName\n     * @property {string|null} [docString] AttributeProto docString\n     * @property {onnx.AttributeProto.AttributeType|null} [type] AttributeProto type\n     * @property {number|null} [f] AttributeProto f\n     * @property {number|Long|null} [i] AttributeProto i\n     * @property {Uint8Array|null} [s] AttributeProto s\n     * @property {onnx.ITensorProto|null} [t] AttributeProto t\n     * @property {onnx.IGraphProto|null} [g] AttributeProto g\n     * @property {onnx.ISparseTensorProto|null} [sparseTensor] AttributeProto sparseTensor\n     * @property {onnx.ITypeProto|null} [tp] AttributeProto tp\n     * @property {Array.<number>|null} [floats] AttributeProto floats\n     * @property {Array.<number|Long>|null} [ints] AttributeProto ints\n     * @property {Array.<Uint8Array>|null} [strings] AttributeProto strings\n     * @property {Array.<onnx.ITensorProto>|null} [tensors] AttributeProto tensors\n     * @property {Array.<onnx.IGraphProto>|null} [graphs] AttributeProto graphs\n     * @property {Array.<onnx.ISparseTensorProto>|null} [sparseTensors] AttributeProto sparseTensors\n     * @property {Array.<onnx.ITypeProto>|null} [typeProtos] AttributeProto typeProtos\n     */\n\n    /**\n     * Constructs a new AttributeProto.\n     * @memberof onnx\n     * @classdesc Represents an AttributeProto.\n     * @implements IAttributeProto\n     * @constructor\n     * @param {onnx.IAttributeProto=} [properties] Properties to set\n     */\n    function AttributeProto(properties) {\n      this.floats = [];\n      this.ints = [];\n      this.strings = [];\n      this.tensors = [];\n      this.graphs = [];\n      this.sparseTensors = [];\n      this.typeProtos = [];\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * AttributeProto name.\n     * @member {string} name\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.name = '';\n\n    /**\n     * AttributeProto refAttrName.\n     * @member {string} refAttrName\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.refAttrName = '';\n\n    /**\n     * AttributeProto docString.\n     * @member {string} docString\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.docString = '';\n\n    /**\n     * AttributeProto type.\n     * @member {onnx.AttributeProto.AttributeType} type\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.type = 0;\n\n    /**\n     * AttributeProto f.\n     * @member {number} f\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.f = 0;\n\n    /**\n     * AttributeProto i.\n     * @member {number|Long} i\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.i = $util.Long ? $util.Long.fromBits(0, 0, false) : 0;\n\n    /**\n     * AttributeProto s.\n     * @member {Uint8Array} s\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.s = $util.newBuffer([]);\n\n    /**\n     * AttributeProto t.\n     * @member {onnx.ITensorProto|null|undefined} t\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.t = null;\n\n    /**\n     * AttributeProto g.\n     * @member {onnx.IGraphProto|null|undefined} g\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.g = null;\n\n    /**\n     * AttributeProto sparseTensor.\n     * @member {onnx.ISparseTensorProto|null|undefined} sparseTensor\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.sparseTensor = null;\n\n    /**\n     * AttributeProto tp.\n     * @member {onnx.ITypeProto|null|undefined} tp\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.tp = null;\n\n    /**\n     * AttributeProto floats.\n     * @member {Array.<number>} floats\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.floats = $util.emptyArray;\n\n    /**\n     * AttributeProto ints.\n     * @member {Array.<number|Long>} ints\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.ints = $util.emptyArray;\n\n    /**\n     * AttributeProto strings.\n     * @member {Array.<Uint8Array>} strings\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.strings = $util.emptyArray;\n\n    /**\n     * AttributeProto tensors.\n     * @member {Array.<onnx.ITensorProto>} tensors\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.tensors = $util.emptyArray;\n\n    /**\n     * AttributeProto graphs.\n     * @member {Array.<onnx.IGraphProto>} graphs\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.graphs = $util.emptyArray;\n\n    /**\n     * AttributeProto sparseTensors.\n     * @member {Array.<onnx.ISparseTensorProto>} sparseTensors\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.sparseTensors = $util.emptyArray;\n\n    /**\n     * AttributeProto typeProtos.\n     * @member {Array.<onnx.ITypeProto>} typeProtos\n     * @memberof onnx.AttributeProto\n     * @instance\n     */\n    AttributeProto.prototype.typeProtos = $util.emptyArray;\n\n    /**\n     * Creates a new AttributeProto instance using the specified properties.\n     * @function create\n     * @memberof onnx.AttributeProto\n     * @static\n     * @param {onnx.IAttributeProto=} [properties] Properties to set\n     * @returns {onnx.AttributeProto} AttributeProto instance\n     */\n    AttributeProto.create = function create(properties) {\n      return new AttributeProto(properties);\n    };\n\n    /**\n     * Encodes the specified AttributeProto message. Does not implicitly {@link onnx.AttributeProto.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.AttributeProto\n     * @static\n     * @param {onnx.IAttributeProto} message AttributeProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    AttributeProto.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.name != null && Object.hasOwnProperty.call(message, 'name'))\n        writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.name);\n      if (message.f != null && Object.hasOwnProperty.call(message, 'f'))\n        writer.uint32(/* id 2, wireType 5 =*/ 21).float(message.f);\n      if (message.i != null && Object.hasOwnProperty.call(message, 'i'))\n        writer.uint32(/* id 3, wireType 0 =*/ 24).int64(message.i);\n      if (message.s != null && Object.hasOwnProperty.call(message, 's'))\n        writer.uint32(/* id 4, wireType 2 =*/ 34).bytes(message.s);\n      if (message.t != null && Object.hasOwnProperty.call(message, 't'))\n        $root.onnx.TensorProto.encode(message.t, writer.uint32(/* id 5, wireType 2 =*/ 42).fork()).ldelim();\n      if (message.g != null && Object.hasOwnProperty.call(message, 'g'))\n        $root.onnx.GraphProto.encode(message.g, writer.uint32(/* id 6, wireType 2 =*/ 50).fork()).ldelim();\n      if (message.floats != null && message.floats.length) {\n        writer.uint32(/* id 7, wireType 2 =*/ 58).fork();\n        for (var i = 0; i < message.floats.length; ++i) writer.float(message.floats[i]);\n        writer.ldelim();\n      }\n      if (message.ints != null && message.ints.length) {\n        writer.uint32(/* id 8, wireType 2 =*/ 66).fork();\n        for (var i = 0; i < message.ints.length; ++i) writer.int64(message.ints[i]);\n        writer.ldelim();\n      }\n      if (message.strings != null && message.strings.length)\n        for (var i = 0; i < message.strings.length; ++i)\n          writer.uint32(/* id 9, wireType 2 =*/ 74).bytes(message.strings[i]);\n      if (message.tensors != null && message.tensors.length)\n        for (var i = 0; i < message.tensors.length; ++i)\n          $root.onnx.TensorProto.encode(message.tensors[i], writer.uint32(/* id 10, wireType 2 =*/ 82).fork()).ldelim();\n      if (message.graphs != null && message.graphs.length)\n        for (var i = 0; i < message.graphs.length; ++i)\n          $root.onnx.GraphProto.encode(message.graphs[i], writer.uint32(/* id 11, wireType 2 =*/ 90).fork()).ldelim();\n      if (message.docString != null && Object.hasOwnProperty.call(message, 'docString'))\n        writer.uint32(/* id 13, wireType 2 =*/ 106).string(message.docString);\n      if (message.tp != null && Object.hasOwnProperty.call(message, 'tp'))\n        $root.onnx.TypeProto.encode(message.tp, writer.uint32(/* id 14, wireType 2 =*/ 114).fork()).ldelim();\n      if (message.typeProtos != null && message.typeProtos.length)\n        for (var i = 0; i < message.typeProtos.length; ++i)\n          $root.onnx.TypeProto.encode(\n            message.typeProtos[i],\n            writer.uint32(/* id 15, wireType 2 =*/ 122).fork(),\n          ).ldelim();\n      if (message.type != null && Object.hasOwnProperty.call(message, 'type'))\n        writer.uint32(/* id 20, wireType 0 =*/ 160).int32(message.type);\n      if (message.refAttrName != null && Object.hasOwnProperty.call(message, 'refAttrName'))\n        writer.uint32(/* id 21, wireType 2 =*/ 170).string(message.refAttrName);\n      if (message.sparseTensor != null && Object.hasOwnProperty.call(message, 'sparseTensor'))\n        $root.onnx.SparseTensorProto.encode(\n          message.sparseTensor,\n          writer.uint32(/* id 22, wireType 2 =*/ 178).fork(),\n        ).ldelim();\n      if (message.sparseTensors != null && message.sparseTensors.length)\n        for (var i = 0; i < message.sparseTensors.length; ++i)\n          $root.onnx.SparseTensorProto.encode(\n            message.sparseTensors[i],\n            writer.uint32(/* id 23, wireType 2 =*/ 186).fork(),\n          ).ldelim();\n      return writer;\n    };\n\n    /**\n     * Encodes the specified AttributeProto message, length delimited. Does not implicitly {@link onnx.AttributeProto.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.AttributeProto\n     * @static\n     * @param {onnx.IAttributeProto} message AttributeProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    AttributeProto.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes an AttributeProto message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.AttributeProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.AttributeProto} AttributeProto\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    AttributeProto.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.AttributeProto();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            message.name = reader.string();\n            break;\n          }\n          case 21: {\n            message.refAttrName = reader.string();\n            break;\n          }\n          case 13: {\n            message.docString = reader.string();\n            break;\n          }\n          case 20: {\n            message.type = reader.int32();\n            break;\n          }\n          case 2: {\n            message.f = reader.float();\n            break;\n          }\n          case 3: {\n            message.i = reader.int64();\n            break;\n          }\n          case 4: {\n            message.s = reader.bytes();\n            break;\n          }\n          case 5: {\n            message.t = $root.onnx.TensorProto.decode(reader, reader.uint32());\n            break;\n          }\n          case 6: {\n            message.g = $root.onnx.GraphProto.decode(reader, reader.uint32());\n            break;\n          }\n          case 22: {\n            message.sparseTensor = $root.onnx.SparseTensorProto.decode(reader, reader.uint32());\n            break;\n          }\n          case 14: {\n            message.tp = $root.onnx.TypeProto.decode(reader, reader.uint32());\n            break;\n          }\n          case 7: {\n            if (!(message.floats && message.floats.length)) message.floats = [];\n            if ((tag & 7) === 2) {\n              var end2 = reader.uint32() + reader.pos;\n              while (reader.pos < end2) message.floats.push(reader.float());\n            } else message.floats.push(reader.float());\n            break;\n          }\n          case 8: {\n            if (!(message.ints && message.ints.length)) message.ints = [];\n            if ((tag & 7) === 2) {\n              var end2 = reader.uint32() + reader.pos;\n              while (reader.pos < end2) message.ints.push(reader.int64());\n            } else message.ints.push(reader.int64());\n            break;\n          }\n          case 9: {\n            if (!(message.strings && message.strings.length)) message.strings = [];\n            message.strings.push(reader.bytes());\n            break;\n          }\n          case 10: {\n            if (!(message.tensors && message.tensors.length)) message.tensors = [];\n            message.tensors.push($root.onnx.TensorProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 11: {\n            if (!(message.graphs && message.graphs.length)) message.graphs = [];\n            message.graphs.push($root.onnx.GraphProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 23: {\n            if (!(message.sparseTensors && message.sparseTensors.length)) message.sparseTensors = [];\n            message.sparseTensors.push($root.onnx.SparseTensorProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 15: {\n            if (!(message.typeProtos && message.typeProtos.length)) message.typeProtos = [];\n            message.typeProtos.push($root.onnx.TypeProto.decode(reader, reader.uint32()));\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes an AttributeProto message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.AttributeProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.AttributeProto} AttributeProto\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    AttributeProto.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies an AttributeProto message.\n     * @function verify\n     * @memberof onnx.AttributeProto\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    AttributeProto.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      if (message.name != null && message.hasOwnProperty('name'))\n        if (!$util.isString(message.name)) return 'name: string expected';\n      if (message.refAttrName != null && message.hasOwnProperty('refAttrName'))\n        if (!$util.isString(message.refAttrName)) return 'refAttrName: string expected';\n      if (message.docString != null && message.hasOwnProperty('docString'))\n        if (!$util.isString(message.docString)) return 'docString: string expected';\n      if (message.type != null && message.hasOwnProperty('type'))\n        switch (message.type) {\n          default:\n            return 'type: enum value expected';\n          case 0:\n          case 1:\n          case 2:\n          case 3:\n          case 4:\n          case 5:\n          case 11:\n          case 13:\n          case 6:\n          case 7:\n          case 8:\n          case 9:\n          case 10:\n          case 12:\n          case 14:\n            break;\n        }\n      if (message.f != null && message.hasOwnProperty('f'))\n        if (typeof message.f !== 'number') return 'f: number expected';\n      if (message.i != null && message.hasOwnProperty('i'))\n        if (\n          !$util.isInteger(message.i) &&\n          !(message.i && $util.isInteger(message.i.low) && $util.isInteger(message.i.high))\n        )\n          return 'i: integer|Long expected';\n      if (message.s != null && message.hasOwnProperty('s'))\n        if (!((message.s && typeof message.s.length === 'number') || $util.isString(message.s)))\n          return 's: buffer expected';\n      if (message.t != null && message.hasOwnProperty('t')) {\n        var error = $root.onnx.TensorProto.verify(message.t);\n        if (error) return 't.' + error;\n      }\n      if (message.g != null && message.hasOwnProperty('g')) {\n        var error = $root.onnx.GraphProto.verify(message.g);\n        if (error) return 'g.' + error;\n      }\n      if (message.sparseTensor != null && message.hasOwnProperty('sparseTensor')) {\n        var error = $root.onnx.SparseTensorProto.verify(message.sparseTensor);\n        if (error) return 'sparseTensor.' + error;\n      }\n      if (message.tp != null && message.hasOwnProperty('tp')) {\n        var error = $root.onnx.TypeProto.verify(message.tp);\n        if (error) return 'tp.' + error;\n      }\n      if (message.floats != null && message.hasOwnProperty('floats')) {\n        if (!Array.isArray(message.floats)) return 'floats: array expected';\n        for (var i = 0; i < message.floats.length; ++i)\n          if (typeof message.floats[i] !== 'number') return 'floats: number[] expected';\n      }\n      if (message.ints != null && message.hasOwnProperty('ints')) {\n        if (!Array.isArray(message.ints)) return 'ints: array expected';\n        for (var i = 0; i < message.ints.length; ++i)\n          if (\n            !$util.isInteger(message.ints[i]) &&\n            !(message.ints[i] && $util.isInteger(message.ints[i].low) && $util.isInteger(message.ints[i].high))\n          )\n            return 'ints: integer|Long[] expected';\n      }\n      if (message.strings != null && message.hasOwnProperty('strings')) {\n        if (!Array.isArray(message.strings)) return 'strings: array expected';\n        for (var i = 0; i < message.strings.length; ++i)\n          if (\n            !(\n              (message.strings[i] && typeof message.strings[i].length === 'number') ||\n              $util.isString(message.strings[i])\n            )\n          )\n            return 'strings: buffer[] expected';\n      }\n      if (message.tensors != null && message.hasOwnProperty('tensors')) {\n        if (!Array.isArray(message.tensors)) return 'tensors: array expected';\n        for (var i = 0; i < message.tensors.length; ++i) {\n          var error = $root.onnx.TensorProto.verify(message.tensors[i]);\n          if (error) return 'tensors.' + error;\n        }\n      }\n      if (message.graphs != null && message.hasOwnProperty('graphs')) {\n        if (!Array.isArray(message.graphs)) return 'graphs: array expected';\n        for (var i = 0; i < message.graphs.length; ++i) {\n          var error = $root.onnx.GraphProto.verify(message.graphs[i]);\n          if (error) return 'graphs.' + error;\n        }\n      }\n      if (message.sparseTensors != null && message.hasOwnProperty('sparseTensors')) {\n        if (!Array.isArray(message.sparseTensors)) return 'sparseTensors: array expected';\n        for (var i = 0; i < message.sparseTensors.length; ++i) {\n          var error = $root.onnx.SparseTensorProto.verify(message.sparseTensors[i]);\n          if (error) return 'sparseTensors.' + error;\n        }\n      }\n      if (message.typeProtos != null && message.hasOwnProperty('typeProtos')) {\n        if (!Array.isArray(message.typeProtos)) return 'typeProtos: array expected';\n        for (var i = 0; i < message.typeProtos.length; ++i) {\n          var error = $root.onnx.TypeProto.verify(message.typeProtos[i]);\n          if (error) return 'typeProtos.' + error;\n        }\n      }\n      return null;\n    };\n\n    /**\n     * Creates an AttributeProto message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.AttributeProto\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.AttributeProto} AttributeProto\n     */\n    AttributeProto.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.AttributeProto) return object;\n      var message = new $root.onnx.AttributeProto();\n      if (object.name != null) message.name = String(object.name);\n      if (object.refAttrName != null) message.refAttrName = String(object.refAttrName);\n      if (object.docString != null) message.docString = String(object.docString);\n      switch (object.type) {\n        default:\n          if (typeof object.type === 'number') {\n            message.type = object.type;\n            break;\n          }\n          break;\n        case 'UNDEFINED':\n        case 0:\n          message.type = 0;\n          break;\n        case 'FLOAT':\n        case 1:\n          message.type = 1;\n          break;\n        case 'INT':\n        case 2:\n          message.type = 2;\n          break;\n        case 'STRING':\n        case 3:\n          message.type = 3;\n          break;\n        case 'TENSOR':\n        case 4:\n          message.type = 4;\n          break;\n        case 'GRAPH':\n        case 5:\n          message.type = 5;\n          break;\n        case 'SPARSE_TENSOR':\n        case 11:\n          message.type = 11;\n          break;\n        case 'TYPE_PROTO':\n        case 13:\n          message.type = 13;\n          break;\n        case 'FLOATS':\n        case 6:\n          message.type = 6;\n          break;\n        case 'INTS':\n        case 7:\n          message.type = 7;\n          break;\n        case 'STRINGS':\n        case 8:\n          message.type = 8;\n          break;\n        case 'TENSORS':\n        case 9:\n          message.type = 9;\n          break;\n        case 'GRAPHS':\n        case 10:\n          message.type = 10;\n          break;\n        case 'SPARSE_TENSORS':\n        case 12:\n          message.type = 12;\n          break;\n        case 'TYPE_PROTOS':\n        case 14:\n          message.type = 14;\n          break;\n      }\n      if (object.f != null) message.f = Number(object.f);\n      if (object.i != null)\n        if ($util.Long) (message.i = $util.Long.fromValue(object.i)).unsigned = false;\n        else if (typeof object.i === 'string') message.i = parseInt(object.i, 10);\n        else if (typeof object.i === 'number') message.i = object.i;\n        else if (typeof object.i === 'object')\n          message.i = new $util.LongBits(object.i.low >>> 0, object.i.high >>> 0).toNumber();\n      if (object.s != null)\n        if (typeof object.s === 'string')\n          $util.base64.decode(object.s, (message.s = $util.newBuffer($util.base64.length(object.s))), 0);\n        else if (object.s.length >= 0) message.s = object.s;\n      if (object.t != null) {\n        if (typeof object.t !== 'object') throw TypeError('.onnx.AttributeProto.t: object expected');\n        message.t = $root.onnx.TensorProto.fromObject(object.t);\n      }\n      if (object.g != null) {\n        if (typeof object.g !== 'object') throw TypeError('.onnx.AttributeProto.g: object expected');\n        message.g = $root.onnx.GraphProto.fromObject(object.g);\n      }\n      if (object.sparseTensor != null) {\n        if (typeof object.sparseTensor !== 'object')\n          throw TypeError('.onnx.AttributeProto.sparseTensor: object expected');\n        message.sparseTensor = $root.onnx.SparseTensorProto.fromObject(object.sparseTensor);\n      }\n      if (object.tp != null) {\n        if (typeof object.tp !== 'object') throw TypeError('.onnx.AttributeProto.tp: object expected');\n        message.tp = $root.onnx.TypeProto.fromObject(object.tp);\n      }\n      if (object.floats) {\n        if (!Array.isArray(object.floats)) throw TypeError('.onnx.AttributeProto.floats: array expected');\n        message.floats = [];\n        for (var i = 0; i < object.floats.length; ++i) message.floats[i] = Number(object.floats[i]);\n      }\n      if (object.ints) {\n        if (!Array.isArray(object.ints)) throw TypeError('.onnx.AttributeProto.ints: array expected');\n        message.ints = [];\n        for (var i = 0; i < object.ints.length; ++i)\n          if ($util.Long) (message.ints[i] = $util.Long.fromValue(object.ints[i])).unsigned = false;\n          else if (typeof object.ints[i] === 'string') message.ints[i] = parseInt(object.ints[i], 10);\n          else if (typeof object.ints[i] === 'number') message.ints[i] = object.ints[i];\n          else if (typeof object.ints[i] === 'object')\n            message.ints[i] = new $util.LongBits(object.ints[i].low >>> 0, object.ints[i].high >>> 0).toNumber();\n      }\n      if (object.strings) {\n        if (!Array.isArray(object.strings)) throw TypeError('.onnx.AttributeProto.strings: array expected');\n        message.strings = [];\n        for (var i = 0; i < object.strings.length; ++i)\n          if (typeof object.strings[i] === 'string')\n            $util.base64.decode(\n              object.strings[i],\n              (message.strings[i] = $util.newBuffer($util.base64.length(object.strings[i]))),\n              0,\n            );\n          else if (object.strings[i].length >= 0) message.strings[i] = object.strings[i];\n      }\n      if (object.tensors) {\n        if (!Array.isArray(object.tensors)) throw TypeError('.onnx.AttributeProto.tensors: array expected');\n        message.tensors = [];\n        for (var i = 0; i < object.tensors.length; ++i) {\n          if (typeof object.tensors[i] !== 'object') throw TypeError('.onnx.AttributeProto.tensors: object expected');\n          message.tensors[i] = $root.onnx.TensorProto.fromObject(object.tensors[i]);\n        }\n      }\n      if (object.graphs) {\n        if (!Array.isArray(object.graphs)) throw TypeError('.onnx.AttributeProto.graphs: array expected');\n        message.graphs = [];\n        for (var i = 0; i < object.graphs.length; ++i) {\n          if (typeof object.graphs[i] !== 'object') throw TypeError('.onnx.AttributeProto.graphs: object expected');\n          message.graphs[i] = $root.onnx.GraphProto.fromObject(object.graphs[i]);\n        }\n      }\n      if (object.sparseTensors) {\n        if (!Array.isArray(object.sparseTensors)) throw TypeError('.onnx.AttributeProto.sparseTensors: array expected');\n        message.sparseTensors = [];\n        for (var i = 0; i < object.sparseTensors.length; ++i) {\n          if (typeof object.sparseTensors[i] !== 'object')\n            throw TypeError('.onnx.AttributeProto.sparseTensors: object expected');\n          message.sparseTensors[i] = $root.onnx.SparseTensorProto.fromObject(object.sparseTensors[i]);\n        }\n      }\n      if (object.typeProtos) {\n        if (!Array.isArray(object.typeProtos)) throw TypeError('.onnx.AttributeProto.typeProtos: array expected');\n        message.typeProtos = [];\n        for (var i = 0; i < object.typeProtos.length; ++i) {\n          if (typeof object.typeProtos[i] !== 'object')\n            throw TypeError('.onnx.AttributeProto.typeProtos: object expected');\n          message.typeProtos[i] = $root.onnx.TypeProto.fromObject(object.typeProtos[i]);\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Creates a plain object from an AttributeProto message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.AttributeProto\n     * @static\n     * @param {onnx.AttributeProto} message AttributeProto\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    AttributeProto.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.arrays || options.defaults) {\n        object.floats = [];\n        object.ints = [];\n        object.strings = [];\n        object.tensors = [];\n        object.graphs = [];\n        object.typeProtos = [];\n        object.sparseTensors = [];\n      }\n      if (options.defaults) {\n        object.name = '';\n        object.f = 0;\n        if ($util.Long) {\n          var long = new $util.Long(0, 0, false);\n          object.i = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n        } else object.i = options.longs === String ? '0' : 0;\n        if (options.bytes === String) object.s = '';\n        else {\n          object.s = [];\n          if (options.bytes !== Array) object.s = $util.newBuffer(object.s);\n        }\n        object.t = null;\n        object.g = null;\n        object.docString = '';\n        object.tp = null;\n        object.type = options.enums === String ? 'UNDEFINED' : 0;\n        object.refAttrName = '';\n        object.sparseTensor = null;\n      }\n      if (message.name != null && message.hasOwnProperty('name')) object.name = message.name;\n      if (message.f != null && message.hasOwnProperty('f'))\n        object.f = options.json && !isFinite(message.f) ? String(message.f) : message.f;\n      if (message.i != null && message.hasOwnProperty('i'))\n        if (typeof message.i === 'number') object.i = options.longs === String ? String(message.i) : message.i;\n        else\n          object.i =\n            options.longs === String\n              ? $util.Long.prototype.toString.call(message.i)\n              : options.longs === Number\n                ? new $util.LongBits(message.i.low >>> 0, message.i.high >>> 0).toNumber()\n                : message.i;\n      if (message.s != null && message.hasOwnProperty('s'))\n        object.s =\n          options.bytes === String\n            ? $util.base64.encode(message.s, 0, message.s.length)\n            : options.bytes === Array\n              ? Array.prototype.slice.call(message.s)\n              : message.s;\n      if (message.t != null && message.hasOwnProperty('t'))\n        object.t = $root.onnx.TensorProto.toObject(message.t, options);\n      if (message.g != null && message.hasOwnProperty('g'))\n        object.g = $root.onnx.GraphProto.toObject(message.g, options);\n      if (message.floats && message.floats.length) {\n        object.floats = [];\n        for (var j = 0; j < message.floats.length; ++j)\n          object.floats[j] =\n            options.json && !isFinite(message.floats[j]) ? String(message.floats[j]) : message.floats[j];\n      }\n      if (message.ints && message.ints.length) {\n        object.ints = [];\n        for (var j = 0; j < message.ints.length; ++j)\n          if (typeof message.ints[j] === 'number')\n            object.ints[j] = options.longs === String ? String(message.ints[j]) : message.ints[j];\n          else\n            object.ints[j] =\n              options.longs === String\n                ? $util.Long.prototype.toString.call(message.ints[j])\n                : options.longs === Number\n                  ? new $util.LongBits(message.ints[j].low >>> 0, message.ints[j].high >>> 0).toNumber()\n                  : message.ints[j];\n      }\n      if (message.strings && message.strings.length) {\n        object.strings = [];\n        for (var j = 0; j < message.strings.length; ++j)\n          object.strings[j] =\n            options.bytes === String\n              ? $util.base64.encode(message.strings[j], 0, message.strings[j].length)\n              : options.bytes === Array\n                ? Array.prototype.slice.call(message.strings[j])\n                : message.strings[j];\n      }\n      if (message.tensors && message.tensors.length) {\n        object.tensors = [];\n        for (var j = 0; j < message.tensors.length; ++j)\n          object.tensors[j] = $root.onnx.TensorProto.toObject(message.tensors[j], options);\n      }\n      if (message.graphs && message.graphs.length) {\n        object.graphs = [];\n        for (var j = 0; j < message.graphs.length; ++j)\n          object.graphs[j] = $root.onnx.GraphProto.toObject(message.graphs[j], options);\n      }\n      if (message.docString != null && message.hasOwnProperty('docString')) object.docString = message.docString;\n      if (message.tp != null && message.hasOwnProperty('tp'))\n        object.tp = $root.onnx.TypeProto.toObject(message.tp, options);\n      if (message.typeProtos && message.typeProtos.length) {\n        object.typeProtos = [];\n        for (var j = 0; j < message.typeProtos.length; ++j)\n          object.typeProtos[j] = $root.onnx.TypeProto.toObject(message.typeProtos[j], options);\n      }\n      if (message.type != null && message.hasOwnProperty('type'))\n        object.type =\n          options.enums === String\n            ? $root.onnx.AttributeProto.AttributeType[message.type] === undefined\n              ? message.type\n              : $root.onnx.AttributeProto.AttributeType[message.type]\n            : message.type;\n      if (message.refAttrName != null && message.hasOwnProperty('refAttrName'))\n        object.refAttrName = message.refAttrName;\n      if (message.sparseTensor != null && message.hasOwnProperty('sparseTensor'))\n        object.sparseTensor = $root.onnx.SparseTensorProto.toObject(message.sparseTensor, options);\n      if (message.sparseTensors && message.sparseTensors.length) {\n        object.sparseTensors = [];\n        for (var j = 0; j < message.sparseTensors.length; ++j)\n          object.sparseTensors[j] = $root.onnx.SparseTensorProto.toObject(message.sparseTensors[j], options);\n      }\n      return object;\n    };\n\n    /**\n     * Converts this AttributeProto to JSON.\n     * @function toJSON\n     * @memberof onnx.AttributeProto\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    AttributeProto.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for AttributeProto\n     * @function getTypeUrl\n     * @memberof onnx.AttributeProto\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    AttributeProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.AttributeProto';\n    };\n\n    /**\n     * AttributeType enum.\n     * @name onnx.AttributeProto.AttributeType\n     * @enum {number}\n     * @property {number} UNDEFINED=0 UNDEFINED value\n     * @property {number} FLOAT=1 FLOAT value\n     * @property {number} INT=2 INT value\n     * @property {number} STRING=3 STRING value\n     * @property {number} TENSOR=4 TENSOR value\n     * @property {number} GRAPH=5 GRAPH value\n     * @property {number} SPARSE_TENSOR=11 SPARSE_TENSOR value\n     * @property {number} TYPE_PROTO=13 TYPE_PROTO value\n     * @property {number} FLOATS=6 FLOATS value\n     * @property {number} INTS=7 INTS value\n     * @property {number} STRINGS=8 STRINGS value\n     * @property {number} TENSORS=9 TENSORS value\n     * @property {number} GRAPHS=10 GRAPHS value\n     * @property {number} SPARSE_TENSORS=12 SPARSE_TENSORS value\n     * @property {number} TYPE_PROTOS=14 TYPE_PROTOS value\n     */\n    AttributeProto.AttributeType = (function () {\n      var valuesById = {},\n        values = Object.create(valuesById);\n      values[(valuesById[0] = 'UNDEFINED')] = 0;\n      values[(valuesById[1] = 'FLOAT')] = 1;\n      values[(valuesById[2] = 'INT')] = 2;\n      values[(valuesById[3] = 'STRING')] = 3;\n      values[(valuesById[4] = 'TENSOR')] = 4;\n      values[(valuesById[5] = 'GRAPH')] = 5;\n      values[(valuesById[11] = 'SPARSE_TENSOR')] = 11;\n      values[(valuesById[13] = 'TYPE_PROTO')] = 13;\n      values[(valuesById[6] = 'FLOATS')] = 6;\n      values[(valuesById[7] = 'INTS')] = 7;\n      values[(valuesById[8] = 'STRINGS')] = 8;\n      values[(valuesById[9] = 'TENSORS')] = 9;\n      values[(valuesById[10] = 'GRAPHS')] = 10;\n      values[(valuesById[12] = 'SPARSE_TENSORS')] = 12;\n      values[(valuesById[14] = 'TYPE_PROTOS')] = 14;\n      return values;\n    })();\n\n    return AttributeProto;\n  })();\n\n  onnx.ValueInfoProto = (function () {\n    /**\n     * Properties of a ValueInfoProto.\n     * @memberof onnx\n     * @interface IValueInfoProto\n     * @property {string|null} [name] ValueInfoProto name\n     * @property {onnx.ITypeProto|null} [type] ValueInfoProto type\n     * @property {string|null} [docString] ValueInfoProto docString\n     */\n\n    /**\n     * Constructs a new ValueInfoProto.\n     * @memberof onnx\n     * @classdesc Represents a ValueInfoProto.\n     * @implements IValueInfoProto\n     * @constructor\n     * @param {onnx.IValueInfoProto=} [properties] Properties to set\n     */\n    function ValueInfoProto(properties) {\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * ValueInfoProto name.\n     * @member {string} name\n     * @memberof onnx.ValueInfoProto\n     * @instance\n     */\n    ValueInfoProto.prototype.name = '';\n\n    /**\n     * ValueInfoProto type.\n     * @member {onnx.ITypeProto|null|undefined} type\n     * @memberof onnx.ValueInfoProto\n     * @instance\n     */\n    ValueInfoProto.prototype.type = null;\n\n    /**\n     * ValueInfoProto docString.\n     * @member {string} docString\n     * @memberof onnx.ValueInfoProto\n     * @instance\n     */\n    ValueInfoProto.prototype.docString = '';\n\n    /**\n     * Creates a new ValueInfoProto instance using the specified properties.\n     * @function create\n     * @memberof onnx.ValueInfoProto\n     * @static\n     * @param {onnx.IValueInfoProto=} [properties] Properties to set\n     * @returns {onnx.ValueInfoProto} ValueInfoProto instance\n     */\n    ValueInfoProto.create = function create(properties) {\n      return new ValueInfoProto(properties);\n    };\n\n    /**\n     * Encodes the specified ValueInfoProto message. Does not implicitly {@link onnx.ValueInfoProto.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.ValueInfoProto\n     * @static\n     * @param {onnx.IValueInfoProto} message ValueInfoProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    ValueInfoProto.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.name != null && Object.hasOwnProperty.call(message, 'name'))\n        writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.name);\n      if (message.type != null && Object.hasOwnProperty.call(message, 'type'))\n        $root.onnx.TypeProto.encode(message.type, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();\n      if (message.docString != null && Object.hasOwnProperty.call(message, 'docString'))\n        writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.docString);\n      return writer;\n    };\n\n    /**\n     * Encodes the specified ValueInfoProto message, length delimited. Does not implicitly {@link onnx.ValueInfoProto.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.ValueInfoProto\n     * @static\n     * @param {onnx.IValueInfoProto} message ValueInfoProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    ValueInfoProto.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a ValueInfoProto message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.ValueInfoProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.ValueInfoProto} ValueInfoProto\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    ValueInfoProto.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.ValueInfoProto();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            message.name = reader.string();\n            break;\n          }\n          case 2: {\n            message.type = $root.onnx.TypeProto.decode(reader, reader.uint32());\n            break;\n          }\n          case 3: {\n            message.docString = reader.string();\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes a ValueInfoProto message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.ValueInfoProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.ValueInfoProto} ValueInfoProto\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    ValueInfoProto.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a ValueInfoProto message.\n     * @function verify\n     * @memberof onnx.ValueInfoProto\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    ValueInfoProto.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      if (message.name != null && message.hasOwnProperty('name'))\n        if (!$util.isString(message.name)) return 'name: string expected';\n      if (message.type != null && message.hasOwnProperty('type')) {\n        var error = $root.onnx.TypeProto.verify(message.type);\n        if (error) return 'type.' + error;\n      }\n      if (message.docString != null && message.hasOwnProperty('docString'))\n        if (!$util.isString(message.docString)) return 'docString: string expected';\n      return null;\n    };\n\n    /**\n     * Creates a ValueInfoProto message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.ValueInfoProto\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.ValueInfoProto} ValueInfoProto\n     */\n    ValueInfoProto.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.ValueInfoProto) return object;\n      var message = new $root.onnx.ValueInfoProto();\n      if (object.name != null) message.name = String(object.name);\n      if (object.type != null) {\n        if (typeof object.type !== 'object') throw TypeError('.onnx.ValueInfoProto.type: object expected');\n        message.type = $root.onnx.TypeProto.fromObject(object.type);\n      }\n      if (object.docString != null) message.docString = String(object.docString);\n      return message;\n    };\n\n    /**\n     * Creates a plain object from a ValueInfoProto message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.ValueInfoProto\n     * @static\n     * @param {onnx.ValueInfoProto} message ValueInfoProto\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    ValueInfoProto.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.defaults) {\n        object.name = '';\n        object.type = null;\n        object.docString = '';\n      }\n      if (message.name != null && message.hasOwnProperty('name')) object.name = message.name;\n      if (message.type != null && message.hasOwnProperty('type'))\n        object.type = $root.onnx.TypeProto.toObject(message.type, options);\n      if (message.docString != null && message.hasOwnProperty('docString')) object.docString = message.docString;\n      return object;\n    };\n\n    /**\n     * Converts this ValueInfoProto to JSON.\n     * @function toJSON\n     * @memberof onnx.ValueInfoProto\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    ValueInfoProto.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for ValueInfoProto\n     * @function getTypeUrl\n     * @memberof onnx.ValueInfoProto\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    ValueInfoProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.ValueInfoProto';\n    };\n\n    return ValueInfoProto;\n  })();\n\n  onnx.NodeProto = (function () {\n    /**\n     * Properties of a NodeProto.\n     * @memberof onnx\n     * @interface INodeProto\n     * @property {Array.<string>|null} [input] NodeProto input\n     * @property {Array.<string>|null} [output] NodeProto output\n     * @property {string|null} [name] NodeProto name\n     * @property {string|null} [opType] NodeProto opType\n     * @property {string|null} [domain] NodeProto domain\n     * @property {Array.<onnx.IAttributeProto>|null} [attribute] NodeProto attribute\n     * @property {string|null} [docString] NodeProto docString\n     */\n\n    /**\n     * Constructs a new NodeProto.\n     * @memberof onnx\n     * @classdesc Represents a NodeProto.\n     * @implements INodeProto\n     * @constructor\n     * @param {onnx.INodeProto=} [properties] Properties to set\n     */\n    function NodeProto(properties) {\n      this.input = [];\n      this.output = [];\n      this.attribute = [];\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * NodeProto input.\n     * @member {Array.<string>} input\n     * @memberof onnx.NodeProto\n     * @instance\n     */\n    NodeProto.prototype.input = $util.emptyArray;\n\n    /**\n     * NodeProto output.\n     * @member {Array.<string>} output\n     * @memberof onnx.NodeProto\n     * @instance\n     */\n    NodeProto.prototype.output = $util.emptyArray;\n\n    /**\n     * NodeProto name.\n     * @member {string} name\n     * @memberof onnx.NodeProto\n     * @instance\n     */\n    NodeProto.prototype.name = '';\n\n    /**\n     * NodeProto opType.\n     * @member {string} opType\n     * @memberof onnx.NodeProto\n     * @instance\n     */\n    NodeProto.prototype.opType = '';\n\n    /**\n     * NodeProto domain.\n     * @member {string} domain\n     * @memberof onnx.NodeProto\n     * @instance\n     */\n    NodeProto.prototype.domain = '';\n\n    /**\n     * NodeProto attribute.\n     * @member {Array.<onnx.IAttributeProto>} attribute\n     * @memberof onnx.NodeProto\n     * @instance\n     */\n    NodeProto.prototype.attribute = $util.emptyArray;\n\n    /**\n     * NodeProto docString.\n     * @member {string} docString\n     * @memberof onnx.NodeProto\n     * @instance\n     */\n    NodeProto.prototype.docString = '';\n\n    /**\n     * Creates a new NodeProto instance using the specified properties.\n     * @function create\n     * @memberof onnx.NodeProto\n     * @static\n     * @param {onnx.INodeProto=} [properties] Properties to set\n     * @returns {onnx.NodeProto} NodeProto instance\n     */\n    NodeProto.create = function create(properties) {\n      return new NodeProto(properties);\n    };\n\n    /**\n     * Encodes the specified NodeProto message. Does not implicitly {@link onnx.NodeProto.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.NodeProto\n     * @static\n     * @param {onnx.INodeProto} message NodeProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    NodeProto.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.input != null && message.input.length)\n        for (var i = 0; i < message.input.length; ++i)\n          writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.input[i]);\n      if (message.output != null && message.output.length)\n        for (var i = 0; i < message.output.length; ++i)\n          writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.output[i]);\n      if (message.name != null && Object.hasOwnProperty.call(message, 'name'))\n        writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.name);\n      if (message.opType != null && Object.hasOwnProperty.call(message, 'opType'))\n        writer.uint32(/* id 4, wireType 2 =*/ 34).string(message.opType);\n      if (message.attribute != null && message.attribute.length)\n        for (var i = 0; i < message.attribute.length; ++i)\n          $root.onnx.AttributeProto.encode(\n            message.attribute[i],\n            writer.uint32(/* id 5, wireType 2 =*/ 42).fork(),\n          ).ldelim();\n      if (message.docString != null && Object.hasOwnProperty.call(message, 'docString'))\n        writer.uint32(/* id 6, wireType 2 =*/ 50).string(message.docString);\n      if (message.domain != null && Object.hasOwnProperty.call(message, 'domain'))\n        writer.uint32(/* id 7, wireType 2 =*/ 58).string(message.domain);\n      return writer;\n    };\n\n    /**\n     * Encodes the specified NodeProto message, length delimited. Does not implicitly {@link onnx.NodeProto.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.NodeProto\n     * @static\n     * @param {onnx.INodeProto} message NodeProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    NodeProto.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a NodeProto message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.NodeProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.NodeProto} NodeProto\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    NodeProto.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.NodeProto();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            if (!(message.input && message.input.length)) message.input = [];\n            message.input.push(reader.string());\n            break;\n          }\n          case 2: {\n            if (!(message.output && message.output.length)) message.output = [];\n            message.output.push(reader.string());\n            break;\n          }\n          case 3: {\n            message.name = reader.string();\n            break;\n          }\n          case 4: {\n            message.opType = reader.string();\n            break;\n          }\n          case 7: {\n            message.domain = reader.string();\n            break;\n          }\n          case 5: {\n            if (!(message.attribute && message.attribute.length)) message.attribute = [];\n            message.attribute.push($root.onnx.AttributeProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 6: {\n            message.docString = reader.string();\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes a NodeProto message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.NodeProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.NodeProto} NodeProto\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    NodeProto.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a NodeProto message.\n     * @function verify\n     * @memberof onnx.NodeProto\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    NodeProto.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      if (message.input != null && message.hasOwnProperty('input')) {\n        if (!Array.isArray(message.input)) return 'input: array expected';\n        for (var i = 0; i < message.input.length; ++i)\n          if (!$util.isString(message.input[i])) return 'input: string[] expected';\n      }\n      if (message.output != null && message.hasOwnProperty('output')) {\n        if (!Array.isArray(message.output)) return 'output: array expected';\n        for (var i = 0; i < message.output.length; ++i)\n          if (!$util.isString(message.output[i])) return 'output: string[] expected';\n      }\n      if (message.name != null && message.hasOwnProperty('name'))\n        if (!$util.isString(message.name)) return 'name: string expected';\n      if (message.opType != null && message.hasOwnProperty('opType'))\n        if (!$util.isString(message.opType)) return 'opType: string expected';\n      if (message.domain != null && message.hasOwnProperty('domain'))\n        if (!$util.isString(message.domain)) return 'domain: string expected';\n      if (message.attribute != null && message.hasOwnProperty('attribute')) {\n        if (!Array.isArray(message.attribute)) return 'attribute: array expected';\n        for (var i = 0; i < message.attribute.length; ++i) {\n          var error = $root.onnx.AttributeProto.verify(message.attribute[i]);\n          if (error) return 'attribute.' + error;\n        }\n      }\n      if (message.docString != null && message.hasOwnProperty('docString'))\n        if (!$util.isString(message.docString)) return 'docString: string expected';\n      return null;\n    };\n\n    /**\n     * Creates a NodeProto message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.NodeProto\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.NodeProto} NodeProto\n     */\n    NodeProto.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.NodeProto) return object;\n      var message = new $root.onnx.NodeProto();\n      if (object.input) {\n        if (!Array.isArray(object.input)) throw TypeError('.onnx.NodeProto.input: array expected');\n        message.input = [];\n        for (var i = 0; i < object.input.length; ++i) message.input[i] = String(object.input[i]);\n      }\n      if (object.output) {\n        if (!Array.isArray(object.output)) throw TypeError('.onnx.NodeProto.output: array expected');\n        message.output = [];\n        for (var i = 0; i < object.output.length; ++i) message.output[i] = String(object.output[i]);\n      }\n      if (object.name != null) message.name = String(object.name);\n      if (object.opType != null) message.opType = String(object.opType);\n      if (object.domain != null) message.domain = String(object.domain);\n      if (object.attribute) {\n        if (!Array.isArray(object.attribute)) throw TypeError('.onnx.NodeProto.attribute: array expected');\n        message.attribute = [];\n        for (var i = 0; i < object.attribute.length; ++i) {\n          if (typeof object.attribute[i] !== 'object') throw TypeError('.onnx.NodeProto.attribute: object expected');\n          message.attribute[i] = $root.onnx.AttributeProto.fromObject(object.attribute[i]);\n        }\n      }\n      if (object.docString != null) message.docString = String(object.docString);\n      return message;\n    };\n\n    /**\n     * Creates a plain object from a NodeProto message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.NodeProto\n     * @static\n     * @param {onnx.NodeProto} message NodeProto\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    NodeProto.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.arrays || options.defaults) {\n        object.input = [];\n        object.output = [];\n        object.attribute = [];\n      }\n      if (options.defaults) {\n        object.name = '';\n        object.opType = '';\n        object.docString = '';\n        object.domain = '';\n      }\n      if (message.input && message.input.length) {\n        object.input = [];\n        for (var j = 0; j < message.input.length; ++j) object.input[j] = message.input[j];\n      }\n      if (message.output && message.output.length) {\n        object.output = [];\n        for (var j = 0; j < message.output.length; ++j) object.output[j] = message.output[j];\n      }\n      if (message.name != null && message.hasOwnProperty('name')) object.name = message.name;\n      if (message.opType != null && message.hasOwnProperty('opType')) object.opType = message.opType;\n      if (message.attribute && message.attribute.length) {\n        object.attribute = [];\n        for (var j = 0; j < message.attribute.length; ++j)\n          object.attribute[j] = $root.onnx.AttributeProto.toObject(message.attribute[j], options);\n      }\n      if (message.docString != null && message.hasOwnProperty('docString')) object.docString = message.docString;\n      if (message.domain != null && message.hasOwnProperty('domain')) object.domain = message.domain;\n      return object;\n    };\n\n    /**\n     * Converts this NodeProto to JSON.\n     * @function toJSON\n     * @memberof onnx.NodeProto\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    NodeProto.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for NodeProto\n     * @function getTypeUrl\n     * @memberof onnx.NodeProto\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    NodeProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.NodeProto';\n    };\n\n    return NodeProto;\n  })();\n\n  onnx.TrainingInfoProto = (function () {\n    /**\n     * Properties of a TrainingInfoProto.\n     * @memberof onnx\n     * @interface ITrainingInfoProto\n     * @property {onnx.IGraphProto|null} [initialization] TrainingInfoProto initialization\n     * @property {onnx.IGraphProto|null} [algorithm] TrainingInfoProto algorithm\n     * @property {Array.<onnx.IStringStringEntryProto>|null} [initializationBinding] TrainingInfoProto initializationBinding\n     * @property {Array.<onnx.IStringStringEntryProto>|null} [updateBinding] TrainingInfoProto updateBinding\n     */\n\n    /**\n     * Constructs a new TrainingInfoProto.\n     * @memberof onnx\n     * @classdesc Represents a TrainingInfoProto.\n     * @implements ITrainingInfoProto\n     * @constructor\n     * @param {onnx.ITrainingInfoProto=} [properties] Properties to set\n     */\n    function TrainingInfoProto(properties) {\n      this.initializationBinding = [];\n      this.updateBinding = [];\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * TrainingInfoProto initialization.\n     * @member {onnx.IGraphProto|null|undefined} initialization\n     * @memberof onnx.TrainingInfoProto\n     * @instance\n     */\n    TrainingInfoProto.prototype.initialization = null;\n\n    /**\n     * TrainingInfoProto algorithm.\n     * @member {onnx.IGraphProto|null|undefined} algorithm\n     * @memberof onnx.TrainingInfoProto\n     * @instance\n     */\n    TrainingInfoProto.prototype.algorithm = null;\n\n    /**\n     * TrainingInfoProto initializationBinding.\n     * @member {Array.<onnx.IStringStringEntryProto>} initializationBinding\n     * @memberof onnx.TrainingInfoProto\n     * @instance\n     */\n    TrainingInfoProto.prototype.initializationBinding = $util.emptyArray;\n\n    /**\n     * TrainingInfoProto updateBinding.\n     * @member {Array.<onnx.IStringStringEntryProto>} updateBinding\n     * @memberof onnx.TrainingInfoProto\n     * @instance\n     */\n    TrainingInfoProto.prototype.updateBinding = $util.emptyArray;\n\n    /**\n     * Creates a new TrainingInfoProto instance using the specified properties.\n     * @function create\n     * @memberof onnx.TrainingInfoProto\n     * @static\n     * @param {onnx.ITrainingInfoProto=} [properties] Properties to set\n     * @returns {onnx.TrainingInfoProto} TrainingInfoProto instance\n     */\n    TrainingInfoProto.create = function create(properties) {\n      return new TrainingInfoProto(properties);\n    };\n\n    /**\n     * Encodes the specified TrainingInfoProto message. Does not implicitly {@link onnx.TrainingInfoProto.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.TrainingInfoProto\n     * @static\n     * @param {onnx.ITrainingInfoProto} message TrainingInfoProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    TrainingInfoProto.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.initialization != null && Object.hasOwnProperty.call(message, 'initialization'))\n        $root.onnx.GraphProto.encode(message.initialization, writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();\n      if (message.algorithm != null && Object.hasOwnProperty.call(message, 'algorithm'))\n        $root.onnx.GraphProto.encode(message.algorithm, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();\n      if (message.initializationBinding != null && message.initializationBinding.length)\n        for (var i = 0; i < message.initializationBinding.length; ++i)\n          $root.onnx.StringStringEntryProto.encode(\n            message.initializationBinding[i],\n            writer.uint32(/* id 3, wireType 2 =*/ 26).fork(),\n          ).ldelim();\n      if (message.updateBinding != null && message.updateBinding.length)\n        for (var i = 0; i < message.updateBinding.length; ++i)\n          $root.onnx.StringStringEntryProto.encode(\n            message.updateBinding[i],\n            writer.uint32(/* id 4, wireType 2 =*/ 34).fork(),\n          ).ldelim();\n      return writer;\n    };\n\n    /**\n     * Encodes the specified TrainingInfoProto message, length delimited. Does not implicitly {@link onnx.TrainingInfoProto.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.TrainingInfoProto\n     * @static\n     * @param {onnx.ITrainingInfoProto} message TrainingInfoProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    TrainingInfoProto.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a TrainingInfoProto message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.TrainingInfoProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.TrainingInfoProto} TrainingInfoProto\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    TrainingInfoProto.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.TrainingInfoProto();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            message.initialization = $root.onnx.GraphProto.decode(reader, reader.uint32());\n            break;\n          }\n          case 2: {\n            message.algorithm = $root.onnx.GraphProto.decode(reader, reader.uint32());\n            break;\n          }\n          case 3: {\n            if (!(message.initializationBinding && message.initializationBinding.length))\n              message.initializationBinding = [];\n            message.initializationBinding.push($root.onnx.StringStringEntryProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 4: {\n            if (!(message.updateBinding && message.updateBinding.length)) message.updateBinding = [];\n            message.updateBinding.push($root.onnx.StringStringEntryProto.decode(reader, reader.uint32()));\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes a TrainingInfoProto message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.TrainingInfoProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.TrainingInfoProto} TrainingInfoProto\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    TrainingInfoProto.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a TrainingInfoProto message.\n     * @function verify\n     * @memberof onnx.TrainingInfoProto\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    TrainingInfoProto.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      if (message.initialization != null && message.hasOwnProperty('initialization')) {\n        var error = $root.onnx.GraphProto.verify(message.initialization);\n        if (error) return 'initialization.' + error;\n      }\n      if (message.algorithm != null && message.hasOwnProperty('algorithm')) {\n        var error = $root.onnx.GraphProto.verify(message.algorithm);\n        if (error) return 'algorithm.' + error;\n      }\n      if (message.initializationBinding != null && message.hasOwnProperty('initializationBinding')) {\n        if (!Array.isArray(message.initializationBinding)) return 'initializationBinding: array expected';\n        for (var i = 0; i < message.initializationBinding.length; ++i) {\n          var error = $root.onnx.StringStringEntryProto.verify(message.initializationBinding[i]);\n          if (error) return 'initializationBinding.' + error;\n        }\n      }\n      if (message.updateBinding != null && message.hasOwnProperty('updateBinding')) {\n        if (!Array.isArray(message.updateBinding)) return 'updateBinding: array expected';\n        for (var i = 0; i < message.updateBinding.length; ++i) {\n          var error = $root.onnx.StringStringEntryProto.verify(message.updateBinding[i]);\n          if (error) return 'updateBinding.' + error;\n        }\n      }\n      return null;\n    };\n\n    /**\n     * Creates a TrainingInfoProto message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.TrainingInfoProto\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.TrainingInfoProto} TrainingInfoProto\n     */\n    TrainingInfoProto.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.TrainingInfoProto) return object;\n      var message = new $root.onnx.TrainingInfoProto();\n      if (object.initialization != null) {\n        if (typeof object.initialization !== 'object')\n          throw TypeError('.onnx.TrainingInfoProto.initialization: object expected');\n        message.initialization = $root.onnx.GraphProto.fromObject(object.initialization);\n      }\n      if (object.algorithm != null) {\n        if (typeof object.algorithm !== 'object') throw TypeError('.onnx.TrainingInfoProto.algorithm: object expected');\n        message.algorithm = $root.onnx.GraphProto.fromObject(object.algorithm);\n      }\n      if (object.initializationBinding) {\n        if (!Array.isArray(object.initializationBinding))\n          throw TypeError('.onnx.TrainingInfoProto.initializationBinding: array expected');\n        message.initializationBinding = [];\n        for (var i = 0; i < object.initializationBinding.length; ++i) {\n          if (typeof object.initializationBinding[i] !== 'object')\n            throw TypeError('.onnx.TrainingInfoProto.initializationBinding: object expected');\n          message.initializationBinding[i] = $root.onnx.StringStringEntryProto.fromObject(\n            object.initializationBinding[i],\n          );\n        }\n      }\n      if (object.updateBinding) {\n        if (!Array.isArray(object.updateBinding))\n          throw TypeError('.onnx.TrainingInfoProto.updateBinding: array expected');\n        message.updateBinding = [];\n        for (var i = 0; i < object.updateBinding.length; ++i) {\n          if (typeof object.updateBinding[i] !== 'object')\n            throw TypeError('.onnx.TrainingInfoProto.updateBinding: object expected');\n          message.updateBinding[i] = $root.onnx.StringStringEntryProto.fromObject(object.updateBinding[i]);\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Creates a plain object from a TrainingInfoProto message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.TrainingInfoProto\n     * @static\n     * @param {onnx.TrainingInfoProto} message TrainingInfoProto\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    TrainingInfoProto.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.arrays || options.defaults) {\n        object.initializationBinding = [];\n        object.updateBinding = [];\n      }\n      if (options.defaults) {\n        object.initialization = null;\n        object.algorithm = null;\n      }\n      if (message.initialization != null && message.hasOwnProperty('initialization'))\n        object.initialization = $root.onnx.GraphProto.toObject(message.initialization, options);\n      if (message.algorithm != null && message.hasOwnProperty('algorithm'))\n        object.algorithm = $root.onnx.GraphProto.toObject(message.algorithm, options);\n      if (message.initializationBinding && message.initializationBinding.length) {\n        object.initializationBinding = [];\n        for (var j = 0; j < message.initializationBinding.length; ++j)\n          object.initializationBinding[j] = $root.onnx.StringStringEntryProto.toObject(\n            message.initializationBinding[j],\n            options,\n          );\n      }\n      if (message.updateBinding && message.updateBinding.length) {\n        object.updateBinding = [];\n        for (var j = 0; j < message.updateBinding.length; ++j)\n          object.updateBinding[j] = $root.onnx.StringStringEntryProto.toObject(message.updateBinding[j], options);\n      }\n      return object;\n    };\n\n    /**\n     * Converts this TrainingInfoProto to JSON.\n     * @function toJSON\n     * @memberof onnx.TrainingInfoProto\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    TrainingInfoProto.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for TrainingInfoProto\n     * @function getTypeUrl\n     * @memberof onnx.TrainingInfoProto\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    TrainingInfoProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.TrainingInfoProto';\n    };\n\n    return TrainingInfoProto;\n  })();\n\n  onnx.ModelProto = (function () {\n    /**\n     * Properties of a ModelProto.\n     * @memberof onnx\n     * @interface IModelProto\n     * @property {number|Long|null} [irVersion] ModelProto irVersion\n     * @property {Array.<onnx.IOperatorSetIdProto>|null} [opsetImport] ModelProto opsetImport\n     * @property {string|null} [producerName] ModelProto producerName\n     * @property {string|null} [producerVersion] ModelProto producerVersion\n     * @property {string|null} [domain] ModelProto domain\n     * @property {number|Long|null} [modelVersion] ModelProto modelVersion\n     * @property {string|null} [docString] ModelProto docString\n     * @property {onnx.IGraphProto|null} [graph] ModelProto graph\n     * @property {Array.<onnx.IStringStringEntryProto>|null} [metadataProps] ModelProto metadataProps\n     * @property {Array.<onnx.ITrainingInfoProto>|null} [trainingInfo] ModelProto trainingInfo\n     * @property {Array.<onnx.IFunctionProto>|null} [functions] ModelProto functions\n     */\n\n    /**\n     * Constructs a new ModelProto.\n     * @memberof onnx\n     * @classdesc Represents a ModelProto.\n     * @implements IModelProto\n     * @constructor\n     * @param {onnx.IModelProto=} [properties] Properties to set\n     */\n    function ModelProto(properties) {\n      this.opsetImport = [];\n      this.metadataProps = [];\n      this.trainingInfo = [];\n      this.functions = [];\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * ModelProto irVersion.\n     * @member {number|Long} irVersion\n     * @memberof onnx.ModelProto\n     * @instance\n     */\n    ModelProto.prototype.irVersion = $util.Long ? $util.Long.fromBits(0, 0, false) : 0;\n\n    /**\n     * ModelProto opsetImport.\n     * @member {Array.<onnx.IOperatorSetIdProto>} opsetImport\n     * @memberof onnx.ModelProto\n     * @instance\n     */\n    ModelProto.prototype.opsetImport = $util.emptyArray;\n\n    /**\n     * ModelProto producerName.\n     * @member {string} producerName\n     * @memberof onnx.ModelProto\n     * @instance\n     */\n    ModelProto.prototype.producerName = '';\n\n    /**\n     * ModelProto producerVersion.\n     * @member {string} producerVersion\n     * @memberof onnx.ModelProto\n     * @instance\n     */\n    ModelProto.prototype.producerVersion = '';\n\n    /**\n     * ModelProto domain.\n     * @member {string} domain\n     * @memberof onnx.ModelProto\n     * @instance\n     */\n    ModelProto.prototype.domain = '';\n\n    /**\n     * ModelProto modelVersion.\n     * @member {number|Long} modelVersion\n     * @memberof onnx.ModelProto\n     * @instance\n     */\n    ModelProto.prototype.modelVersion = $util.Long ? $util.Long.fromBits(0, 0, false) : 0;\n\n    /**\n     * ModelProto docString.\n     * @member {string} docString\n     * @memberof onnx.ModelProto\n     * @instance\n     */\n    ModelProto.prototype.docString = '';\n\n    /**\n     * ModelProto graph.\n     * @member {onnx.IGraphProto|null|undefined} graph\n     * @memberof onnx.ModelProto\n     * @instance\n     */\n    ModelProto.prototype.graph = null;\n\n    /**\n     * ModelProto metadataProps.\n     * @member {Array.<onnx.IStringStringEntryProto>} metadataProps\n     * @memberof onnx.ModelProto\n     * @instance\n     */\n    ModelProto.prototype.metadataProps = $util.emptyArray;\n\n    /**\n     * ModelProto trainingInfo.\n     * @member {Array.<onnx.ITrainingInfoProto>} trainingInfo\n     * @memberof onnx.ModelProto\n     * @instance\n     */\n    ModelProto.prototype.trainingInfo = $util.emptyArray;\n\n    /**\n     * ModelProto functions.\n     * @member {Array.<onnx.IFunctionProto>} functions\n     * @memberof onnx.ModelProto\n     * @instance\n     */\n    ModelProto.prototype.functions = $util.emptyArray;\n\n    /**\n     * Creates a new ModelProto instance using the specified properties.\n     * @function create\n     * @memberof onnx.ModelProto\n     * @static\n     * @param {onnx.IModelProto=} [properties] Properties to set\n     * @returns {onnx.ModelProto} ModelProto instance\n     */\n    ModelProto.create = function create(properties) {\n      return new ModelProto(properties);\n    };\n\n    /**\n     * Encodes the specified ModelProto message. Does not implicitly {@link onnx.ModelProto.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.ModelProto\n     * @static\n     * @param {onnx.IModelProto} message ModelProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    ModelProto.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.irVersion != null && Object.hasOwnProperty.call(message, 'irVersion'))\n        writer.uint32(/* id 1, wireType 0 =*/ 8).int64(message.irVersion);\n      if (message.producerName != null && Object.hasOwnProperty.call(message, 'producerName'))\n        writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.producerName);\n      if (message.producerVersion != null && Object.hasOwnProperty.call(message, 'producerVersion'))\n        writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.producerVersion);\n      if (message.domain != null && Object.hasOwnProperty.call(message, 'domain'))\n        writer.uint32(/* id 4, wireType 2 =*/ 34).string(message.domain);\n      if (message.modelVersion != null && Object.hasOwnProperty.call(message, 'modelVersion'))\n        writer.uint32(/* id 5, wireType 0 =*/ 40).int64(message.modelVersion);\n      if (message.docString != null && Object.hasOwnProperty.call(message, 'docString'))\n        writer.uint32(/* id 6, wireType 2 =*/ 50).string(message.docString);\n      if (message.graph != null && Object.hasOwnProperty.call(message, 'graph'))\n        $root.onnx.GraphProto.encode(message.graph, writer.uint32(/* id 7, wireType 2 =*/ 58).fork()).ldelim();\n      if (message.opsetImport != null && message.opsetImport.length)\n        for (var i = 0; i < message.opsetImport.length; ++i)\n          $root.onnx.OperatorSetIdProto.encode(\n            message.opsetImport[i],\n            writer.uint32(/* id 8, wireType 2 =*/ 66).fork(),\n          ).ldelim();\n      if (message.metadataProps != null && message.metadataProps.length)\n        for (var i = 0; i < message.metadataProps.length; ++i)\n          $root.onnx.StringStringEntryProto.encode(\n            message.metadataProps[i],\n            writer.uint32(/* id 14, wireType 2 =*/ 114).fork(),\n          ).ldelim();\n      if (message.trainingInfo != null && message.trainingInfo.length)\n        for (var i = 0; i < message.trainingInfo.length; ++i)\n          $root.onnx.TrainingInfoProto.encode(\n            message.trainingInfo[i],\n            writer.uint32(/* id 20, wireType 2 =*/ 162).fork(),\n          ).ldelim();\n      if (message.functions != null && message.functions.length)\n        for (var i = 0; i < message.functions.length; ++i)\n          $root.onnx.FunctionProto.encode(\n            message.functions[i],\n            writer.uint32(/* id 25, wireType 2 =*/ 202).fork(),\n          ).ldelim();\n      return writer;\n    };\n\n    /**\n     * Encodes the specified ModelProto message, length delimited. Does not implicitly {@link onnx.ModelProto.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.ModelProto\n     * @static\n     * @param {onnx.IModelProto} message ModelProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    ModelProto.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a ModelProto message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.ModelProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.ModelProto} ModelProto\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    ModelProto.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.ModelProto();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            message.irVersion = reader.int64();\n            break;\n          }\n          case 8: {\n            if (!(message.opsetImport && message.opsetImport.length)) message.opsetImport = [];\n            message.opsetImport.push($root.onnx.OperatorSetIdProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 2: {\n            message.producerName = reader.string();\n            break;\n          }\n          case 3: {\n            message.producerVersion = reader.string();\n            break;\n          }\n          case 4: {\n            message.domain = reader.string();\n            break;\n          }\n          case 5: {\n            message.modelVersion = reader.int64();\n            break;\n          }\n          case 6: {\n            message.docString = reader.string();\n            break;\n          }\n          case 7: {\n            message.graph = $root.onnx.GraphProto.decode(reader, reader.uint32());\n            break;\n          }\n          case 14: {\n            if (!(message.metadataProps && message.metadataProps.length)) message.metadataProps = [];\n            message.metadataProps.push($root.onnx.StringStringEntryProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 20: {\n            if (!(message.trainingInfo && message.trainingInfo.length)) message.trainingInfo = [];\n            message.trainingInfo.push($root.onnx.TrainingInfoProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 25: {\n            if (!(message.functions && message.functions.length)) message.functions = [];\n            message.functions.push($root.onnx.FunctionProto.decode(reader, reader.uint32()));\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes a ModelProto message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.ModelProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.ModelProto} ModelProto\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    ModelProto.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a ModelProto message.\n     * @function verify\n     * @memberof onnx.ModelProto\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    ModelProto.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      if (message.irVersion != null && message.hasOwnProperty('irVersion'))\n        if (\n          !$util.isInteger(message.irVersion) &&\n          !(message.irVersion && $util.isInteger(message.irVersion.low) && $util.isInteger(message.irVersion.high))\n        )\n          return 'irVersion: integer|Long expected';\n      if (message.opsetImport != null && message.hasOwnProperty('opsetImport')) {\n        if (!Array.isArray(message.opsetImport)) return 'opsetImport: array expected';\n        for (var i = 0; i < message.opsetImport.length; ++i) {\n          var error = $root.onnx.OperatorSetIdProto.verify(message.opsetImport[i]);\n          if (error) return 'opsetImport.' + error;\n        }\n      }\n      if (message.producerName != null && message.hasOwnProperty('producerName'))\n        if (!$util.isString(message.producerName)) return 'producerName: string expected';\n      if (message.producerVersion != null && message.hasOwnProperty('producerVersion'))\n        if (!$util.isString(message.producerVersion)) return 'producerVersion: string expected';\n      if (message.domain != null && message.hasOwnProperty('domain'))\n        if (!$util.isString(message.domain)) return 'domain: string expected';\n      if (message.modelVersion != null && message.hasOwnProperty('modelVersion'))\n        if (\n          !$util.isInteger(message.modelVersion) &&\n          !(\n            message.modelVersion &&\n            $util.isInteger(message.modelVersion.low) &&\n            $util.isInteger(message.modelVersion.high)\n          )\n        )\n          return 'modelVersion: integer|Long expected';\n      if (message.docString != null && message.hasOwnProperty('docString'))\n        if (!$util.isString(message.docString)) return 'docString: string expected';\n      if (message.graph != null && message.hasOwnProperty('graph')) {\n        var error = $root.onnx.GraphProto.verify(message.graph);\n        if (error) return 'graph.' + error;\n      }\n      if (message.metadataProps != null && message.hasOwnProperty('metadataProps')) {\n        if (!Array.isArray(message.metadataProps)) return 'metadataProps: array expected';\n        for (var i = 0; i < message.metadataProps.length; ++i) {\n          var error = $root.onnx.StringStringEntryProto.verify(message.metadataProps[i]);\n          if (error) return 'metadataProps.' + error;\n        }\n      }\n      if (message.trainingInfo != null && message.hasOwnProperty('trainingInfo')) {\n        if (!Array.isArray(message.trainingInfo)) return 'trainingInfo: array expected';\n        for (var i = 0; i < message.trainingInfo.length; ++i) {\n          var error = $root.onnx.TrainingInfoProto.verify(message.trainingInfo[i]);\n          if (error) return 'trainingInfo.' + error;\n        }\n      }\n      if (message.functions != null && message.hasOwnProperty('functions')) {\n        if (!Array.isArray(message.functions)) return 'functions: array expected';\n        for (var i = 0; i < message.functions.length; ++i) {\n          var error = $root.onnx.FunctionProto.verify(message.functions[i]);\n          if (error) return 'functions.' + error;\n        }\n      }\n      return null;\n    };\n\n    /**\n     * Creates a ModelProto message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.ModelProto\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.ModelProto} ModelProto\n     */\n    ModelProto.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.ModelProto) return object;\n      var message = new $root.onnx.ModelProto();\n      if (object.irVersion != null)\n        if ($util.Long) (message.irVersion = $util.Long.fromValue(object.irVersion)).unsigned = false;\n        else if (typeof object.irVersion === 'string') message.irVersion = parseInt(object.irVersion, 10);\n        else if (typeof object.irVersion === 'number') message.irVersion = object.irVersion;\n        else if (typeof object.irVersion === 'object')\n          message.irVersion = new $util.LongBits(object.irVersion.low >>> 0, object.irVersion.high >>> 0).toNumber();\n      if (object.opsetImport) {\n        if (!Array.isArray(object.opsetImport)) throw TypeError('.onnx.ModelProto.opsetImport: array expected');\n        message.opsetImport = [];\n        for (var i = 0; i < object.opsetImport.length; ++i) {\n          if (typeof object.opsetImport[i] !== 'object')\n            throw TypeError('.onnx.ModelProto.opsetImport: object expected');\n          message.opsetImport[i] = $root.onnx.OperatorSetIdProto.fromObject(object.opsetImport[i]);\n        }\n      }\n      if (object.producerName != null) message.producerName = String(object.producerName);\n      if (object.producerVersion != null) message.producerVersion = String(object.producerVersion);\n      if (object.domain != null) message.domain = String(object.domain);\n      if (object.modelVersion != null)\n        if ($util.Long) (message.modelVersion = $util.Long.fromValue(object.modelVersion)).unsigned = false;\n        else if (typeof object.modelVersion === 'string') message.modelVersion = parseInt(object.modelVersion, 10);\n        else if (typeof object.modelVersion === 'number') message.modelVersion = object.modelVersion;\n        else if (typeof object.modelVersion === 'object')\n          message.modelVersion = new $util.LongBits(\n            object.modelVersion.low >>> 0,\n            object.modelVersion.high >>> 0,\n          ).toNumber();\n      if (object.docString != null) message.docString = String(object.docString);\n      if (object.graph != null) {\n        if (typeof object.graph !== 'object') throw TypeError('.onnx.ModelProto.graph: object expected');\n        message.graph = $root.onnx.GraphProto.fromObject(object.graph);\n      }\n      if (object.metadataProps) {\n        if (!Array.isArray(object.metadataProps)) throw TypeError('.onnx.ModelProto.metadataProps: array expected');\n        message.metadataProps = [];\n        for (var i = 0; i < object.metadataProps.length; ++i) {\n          if (typeof object.metadataProps[i] !== 'object')\n            throw TypeError('.onnx.ModelProto.metadataProps: object expected');\n          message.metadataProps[i] = $root.onnx.StringStringEntryProto.fromObject(object.metadataProps[i]);\n        }\n      }\n      if (object.trainingInfo) {\n        if (!Array.isArray(object.trainingInfo)) throw TypeError('.onnx.ModelProto.trainingInfo: array expected');\n        message.trainingInfo = [];\n        for (var i = 0; i < object.trainingInfo.length; ++i) {\n          if (typeof object.trainingInfo[i] !== 'object')\n            throw TypeError('.onnx.ModelProto.trainingInfo: object expected');\n          message.trainingInfo[i] = $root.onnx.TrainingInfoProto.fromObject(object.trainingInfo[i]);\n        }\n      }\n      if (object.functions) {\n        if (!Array.isArray(object.functions)) throw TypeError('.onnx.ModelProto.functions: array expected');\n        message.functions = [];\n        for (var i = 0; i < object.functions.length; ++i) {\n          if (typeof object.functions[i] !== 'object') throw TypeError('.onnx.ModelProto.functions: object expected');\n          message.functions[i] = $root.onnx.FunctionProto.fromObject(object.functions[i]);\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Creates a plain object from a ModelProto message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.ModelProto\n     * @static\n     * @param {onnx.ModelProto} message ModelProto\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    ModelProto.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.arrays || options.defaults) {\n        object.opsetImport = [];\n        object.metadataProps = [];\n        object.trainingInfo = [];\n        object.functions = [];\n      }\n      if (options.defaults) {\n        if ($util.Long) {\n          var long = new $util.Long(0, 0, false);\n          object.irVersion =\n            options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n        } else object.irVersion = options.longs === String ? '0' : 0;\n        object.producerName = '';\n        object.producerVersion = '';\n        object.domain = '';\n        if ($util.Long) {\n          var long = new $util.Long(0, 0, false);\n          object.modelVersion =\n            options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n        } else object.modelVersion = options.longs === String ? '0' : 0;\n        object.docString = '';\n        object.graph = null;\n      }\n      if (message.irVersion != null && message.hasOwnProperty('irVersion'))\n        if (typeof message.irVersion === 'number')\n          object.irVersion = options.longs === String ? String(message.irVersion) : message.irVersion;\n        else\n          object.irVersion =\n            options.longs === String\n              ? $util.Long.prototype.toString.call(message.irVersion)\n              : options.longs === Number\n                ? new $util.LongBits(message.irVersion.low >>> 0, message.irVersion.high >>> 0).toNumber()\n                : message.irVersion;\n      if (message.producerName != null && message.hasOwnProperty('producerName'))\n        object.producerName = message.producerName;\n      if (message.producerVersion != null && message.hasOwnProperty('producerVersion'))\n        object.producerVersion = message.producerVersion;\n      if (message.domain != null && message.hasOwnProperty('domain')) object.domain = message.domain;\n      if (message.modelVersion != null && message.hasOwnProperty('modelVersion'))\n        if (typeof message.modelVersion === 'number')\n          object.modelVersion = options.longs === String ? String(message.modelVersion) : message.modelVersion;\n        else\n          object.modelVersion =\n            options.longs === String\n              ? $util.Long.prototype.toString.call(message.modelVersion)\n              : options.longs === Number\n                ? new $util.LongBits(message.modelVersion.low >>> 0, message.modelVersion.high >>> 0).toNumber()\n                : message.modelVersion;\n      if (message.docString != null && message.hasOwnProperty('docString')) object.docString = message.docString;\n      if (message.graph != null && message.hasOwnProperty('graph'))\n        object.graph = $root.onnx.GraphProto.toObject(message.graph, options);\n      if (message.opsetImport && message.opsetImport.length) {\n        object.opsetImport = [];\n        for (var j = 0; j < message.opsetImport.length; ++j)\n          object.opsetImport[j] = $root.onnx.OperatorSetIdProto.toObject(message.opsetImport[j], options);\n      }\n      if (message.metadataProps && message.metadataProps.length) {\n        object.metadataProps = [];\n        for (var j = 0; j < message.metadataProps.length; ++j)\n          object.metadataProps[j] = $root.onnx.StringStringEntryProto.toObject(message.metadataProps[j], options);\n      }\n      if (message.trainingInfo && message.trainingInfo.length) {\n        object.trainingInfo = [];\n        for (var j = 0; j < message.trainingInfo.length; ++j)\n          object.trainingInfo[j] = $root.onnx.TrainingInfoProto.toObject(message.trainingInfo[j], options);\n      }\n      if (message.functions && message.functions.length) {\n        object.functions = [];\n        for (var j = 0; j < message.functions.length; ++j)\n          object.functions[j] = $root.onnx.FunctionProto.toObject(message.functions[j], options);\n      }\n      return object;\n    };\n\n    /**\n     * Converts this ModelProto to JSON.\n     * @function toJSON\n     * @memberof onnx.ModelProto\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    ModelProto.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for ModelProto\n     * @function getTypeUrl\n     * @memberof onnx.ModelProto\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    ModelProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.ModelProto';\n    };\n\n    return ModelProto;\n  })();\n\n  onnx.StringStringEntryProto = (function () {\n    /**\n     * Properties of a StringStringEntryProto.\n     * @memberof onnx\n     * @interface IStringStringEntryProto\n     * @property {string|null} [key] StringStringEntryProto key\n     * @property {string|null} [value] StringStringEntryProto value\n     */\n\n    /**\n     * Constructs a new StringStringEntryProto.\n     * @memberof onnx\n     * @classdesc Represents a StringStringEntryProto.\n     * @implements IStringStringEntryProto\n     * @constructor\n     * @param {onnx.IStringStringEntryProto=} [properties] Properties to set\n     */\n    function StringStringEntryProto(properties) {\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * StringStringEntryProto key.\n     * @member {string} key\n     * @memberof onnx.StringStringEntryProto\n     * @instance\n     */\n    StringStringEntryProto.prototype.key = '';\n\n    /**\n     * StringStringEntryProto value.\n     * @member {string} value\n     * @memberof onnx.StringStringEntryProto\n     * @instance\n     */\n    StringStringEntryProto.prototype.value = '';\n\n    /**\n     * Creates a new StringStringEntryProto instance using the specified properties.\n     * @function create\n     * @memberof onnx.StringStringEntryProto\n     * @static\n     * @param {onnx.IStringStringEntryProto=} [properties] Properties to set\n     * @returns {onnx.StringStringEntryProto} StringStringEntryProto instance\n     */\n    StringStringEntryProto.create = function create(properties) {\n      return new StringStringEntryProto(properties);\n    };\n\n    /**\n     * Encodes the specified StringStringEntryProto message. Does not implicitly {@link onnx.StringStringEntryProto.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.StringStringEntryProto\n     * @static\n     * @param {onnx.IStringStringEntryProto} message StringStringEntryProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    StringStringEntryProto.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.key != null && Object.hasOwnProperty.call(message, 'key'))\n        writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.key);\n      if (message.value != null && Object.hasOwnProperty.call(message, 'value'))\n        writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.value);\n      return writer;\n    };\n\n    /**\n     * Encodes the specified StringStringEntryProto message, length delimited. Does not implicitly {@link onnx.StringStringEntryProto.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.StringStringEntryProto\n     * @static\n     * @param {onnx.IStringStringEntryProto} message StringStringEntryProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    StringStringEntryProto.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a StringStringEntryProto message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.StringStringEntryProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.StringStringEntryProto} StringStringEntryProto\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    StringStringEntryProto.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.StringStringEntryProto();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            message.key = reader.string();\n            break;\n          }\n          case 2: {\n            message.value = reader.string();\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes a StringStringEntryProto message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.StringStringEntryProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.StringStringEntryProto} StringStringEntryProto\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    StringStringEntryProto.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a StringStringEntryProto message.\n     * @function verify\n     * @memberof onnx.StringStringEntryProto\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    StringStringEntryProto.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      if (message.key != null && message.hasOwnProperty('key'))\n        if (!$util.isString(message.key)) return 'key: string expected';\n      if (message.value != null && message.hasOwnProperty('value'))\n        if (!$util.isString(message.value)) return 'value: string expected';\n      return null;\n    };\n\n    /**\n     * Creates a StringStringEntryProto message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.StringStringEntryProto\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.StringStringEntryProto} StringStringEntryProto\n     */\n    StringStringEntryProto.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.StringStringEntryProto) return object;\n      var message = new $root.onnx.StringStringEntryProto();\n      if (object.key != null) message.key = String(object.key);\n      if (object.value != null) message.value = String(object.value);\n      return message;\n    };\n\n    /**\n     * Creates a plain object from a StringStringEntryProto message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.StringStringEntryProto\n     * @static\n     * @param {onnx.StringStringEntryProto} message StringStringEntryProto\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    StringStringEntryProto.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.defaults) {\n        object.key = '';\n        object.value = '';\n      }\n      if (message.key != null && message.hasOwnProperty('key')) object.key = message.key;\n      if (message.value != null && message.hasOwnProperty('value')) object.value = message.value;\n      return object;\n    };\n\n    /**\n     * Converts this StringStringEntryProto to JSON.\n     * @function toJSON\n     * @memberof onnx.StringStringEntryProto\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    StringStringEntryProto.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for StringStringEntryProto\n     * @function getTypeUrl\n     * @memberof onnx.StringStringEntryProto\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    StringStringEntryProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.StringStringEntryProto';\n    };\n\n    return StringStringEntryProto;\n  })();\n\n  onnx.TensorAnnotation = (function () {\n    /**\n     * Properties of a TensorAnnotation.\n     * @memberof onnx\n     * @interface ITensorAnnotation\n     * @property {string|null} [tensorName] TensorAnnotation tensorName\n     * @property {Array.<onnx.IStringStringEntryProto>|null} [quantParameterTensorNames] TensorAnnotation quantParameterTensorNames\n     */\n\n    /**\n     * Constructs a new TensorAnnotation.\n     * @memberof onnx\n     * @classdesc Represents a TensorAnnotation.\n     * @implements ITensorAnnotation\n     * @constructor\n     * @param {onnx.ITensorAnnotation=} [properties] Properties to set\n     */\n    function TensorAnnotation(properties) {\n      this.quantParameterTensorNames = [];\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * TensorAnnotation tensorName.\n     * @member {string} tensorName\n     * @memberof onnx.TensorAnnotation\n     * @instance\n     */\n    TensorAnnotation.prototype.tensorName = '';\n\n    /**\n     * TensorAnnotation quantParameterTensorNames.\n     * @member {Array.<onnx.IStringStringEntryProto>} quantParameterTensorNames\n     * @memberof onnx.TensorAnnotation\n     * @instance\n     */\n    TensorAnnotation.prototype.quantParameterTensorNames = $util.emptyArray;\n\n    /**\n     * Creates a new TensorAnnotation instance using the specified properties.\n     * @function create\n     * @memberof onnx.TensorAnnotation\n     * @static\n     * @param {onnx.ITensorAnnotation=} [properties] Properties to set\n     * @returns {onnx.TensorAnnotation} TensorAnnotation instance\n     */\n    TensorAnnotation.create = function create(properties) {\n      return new TensorAnnotation(properties);\n    };\n\n    /**\n     * Encodes the specified TensorAnnotation message. Does not implicitly {@link onnx.TensorAnnotation.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.TensorAnnotation\n     * @static\n     * @param {onnx.ITensorAnnotation} message TensorAnnotation message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    TensorAnnotation.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.tensorName != null && Object.hasOwnProperty.call(message, 'tensorName'))\n        writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.tensorName);\n      if (message.quantParameterTensorNames != null && message.quantParameterTensorNames.length)\n        for (var i = 0; i < message.quantParameterTensorNames.length; ++i)\n          $root.onnx.StringStringEntryProto.encode(\n            message.quantParameterTensorNames[i],\n            writer.uint32(/* id 2, wireType 2 =*/ 18).fork(),\n          ).ldelim();\n      return writer;\n    };\n\n    /**\n     * Encodes the specified TensorAnnotation message, length delimited. Does not implicitly {@link onnx.TensorAnnotation.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.TensorAnnotation\n     * @static\n     * @param {onnx.ITensorAnnotation} message TensorAnnotation message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    TensorAnnotation.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a TensorAnnotation message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.TensorAnnotation\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.TensorAnnotation} TensorAnnotation\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    TensorAnnotation.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.TensorAnnotation();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            message.tensorName = reader.string();\n            break;\n          }\n          case 2: {\n            if (!(message.quantParameterTensorNames && message.quantParameterTensorNames.length))\n              message.quantParameterTensorNames = [];\n            message.quantParameterTensorNames.push($root.onnx.StringStringEntryProto.decode(reader, reader.uint32()));\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes a TensorAnnotation message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.TensorAnnotation\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.TensorAnnotation} TensorAnnotation\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    TensorAnnotation.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a TensorAnnotation message.\n     * @function verify\n     * @memberof onnx.TensorAnnotation\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    TensorAnnotation.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      if (message.tensorName != null && message.hasOwnProperty('tensorName'))\n        if (!$util.isString(message.tensorName)) return 'tensorName: string expected';\n      if (message.quantParameterTensorNames != null && message.hasOwnProperty('quantParameterTensorNames')) {\n        if (!Array.isArray(message.quantParameterTensorNames)) return 'quantParameterTensorNames: array expected';\n        for (var i = 0; i < message.quantParameterTensorNames.length; ++i) {\n          var error = $root.onnx.StringStringEntryProto.verify(message.quantParameterTensorNames[i]);\n          if (error) return 'quantParameterTensorNames.' + error;\n        }\n      }\n      return null;\n    };\n\n    /**\n     * Creates a TensorAnnotation message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.TensorAnnotation\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.TensorAnnotation} TensorAnnotation\n     */\n    TensorAnnotation.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.TensorAnnotation) return object;\n      var message = new $root.onnx.TensorAnnotation();\n      if (object.tensorName != null) message.tensorName = String(object.tensorName);\n      if (object.quantParameterTensorNames) {\n        if (!Array.isArray(object.quantParameterTensorNames))\n          throw TypeError('.onnx.TensorAnnotation.quantParameterTensorNames: array expected');\n        message.quantParameterTensorNames = [];\n        for (var i = 0; i < object.quantParameterTensorNames.length; ++i) {\n          if (typeof object.quantParameterTensorNames[i] !== 'object')\n            throw TypeError('.onnx.TensorAnnotation.quantParameterTensorNames: object expected');\n          message.quantParameterTensorNames[i] = $root.onnx.StringStringEntryProto.fromObject(\n            object.quantParameterTensorNames[i],\n          );\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Creates a plain object from a TensorAnnotation message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.TensorAnnotation\n     * @static\n     * @param {onnx.TensorAnnotation} message TensorAnnotation\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    TensorAnnotation.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.arrays || options.defaults) object.quantParameterTensorNames = [];\n      if (options.defaults) object.tensorName = '';\n      if (message.tensorName != null && message.hasOwnProperty('tensorName')) object.tensorName = message.tensorName;\n      if (message.quantParameterTensorNames && message.quantParameterTensorNames.length) {\n        object.quantParameterTensorNames = [];\n        for (var j = 0; j < message.quantParameterTensorNames.length; ++j)\n          object.quantParameterTensorNames[j] = $root.onnx.StringStringEntryProto.toObject(\n            message.quantParameterTensorNames[j],\n            options,\n          );\n      }\n      return object;\n    };\n\n    /**\n     * Converts this TensorAnnotation to JSON.\n     * @function toJSON\n     * @memberof onnx.TensorAnnotation\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    TensorAnnotation.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for TensorAnnotation\n     * @function getTypeUrl\n     * @memberof onnx.TensorAnnotation\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    TensorAnnotation.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.TensorAnnotation';\n    };\n\n    return TensorAnnotation;\n  })();\n\n  onnx.GraphProto = (function () {\n    /**\n     * Properties of a GraphProto.\n     * @memberof onnx\n     * @interface IGraphProto\n     * @property {Array.<onnx.INodeProto>|null} [node] GraphProto node\n     * @property {string|null} [name] GraphProto name\n     * @property {Array.<onnx.ITensorProto>|null} [initializer] GraphProto initializer\n     * @property {Array.<onnx.ISparseTensorProto>|null} [sparseInitializer] GraphProto sparseInitializer\n     * @property {string|null} [docString] GraphProto docString\n     * @property {Array.<onnx.IValueInfoProto>|null} [input] GraphProto input\n     * @property {Array.<onnx.IValueInfoProto>|null} [output] GraphProto output\n     * @property {Array.<onnx.IValueInfoProto>|null} [valueInfo] GraphProto valueInfo\n     * @property {Array.<onnx.ITensorAnnotation>|null} [quantizationAnnotation] GraphProto quantizationAnnotation\n     */\n\n    /**\n     * Constructs a new GraphProto.\n     * @memberof onnx\n     * @classdesc Represents a GraphProto.\n     * @implements IGraphProto\n     * @constructor\n     * @param {onnx.IGraphProto=} [properties] Properties to set\n     */\n    function GraphProto(properties) {\n      this.node = [];\n      this.initializer = [];\n      this.sparseInitializer = [];\n      this.input = [];\n      this.output = [];\n      this.valueInfo = [];\n      this.quantizationAnnotation = [];\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * GraphProto node.\n     * @member {Array.<onnx.INodeProto>} node\n     * @memberof onnx.GraphProto\n     * @instance\n     */\n    GraphProto.prototype.node = $util.emptyArray;\n\n    /**\n     * GraphProto name.\n     * @member {string} name\n     * @memberof onnx.GraphProto\n     * @instance\n     */\n    GraphProto.prototype.name = '';\n\n    /**\n     * GraphProto initializer.\n     * @member {Array.<onnx.ITensorProto>} initializer\n     * @memberof onnx.GraphProto\n     * @instance\n     */\n    GraphProto.prototype.initializer = $util.emptyArray;\n\n    /**\n     * GraphProto sparseInitializer.\n     * @member {Array.<onnx.ISparseTensorProto>} sparseInitializer\n     * @memberof onnx.GraphProto\n     * @instance\n     */\n    GraphProto.prototype.sparseInitializer = $util.emptyArray;\n\n    /**\n     * GraphProto docString.\n     * @member {string} docString\n     * @memberof onnx.GraphProto\n     * @instance\n     */\n    GraphProto.prototype.docString = '';\n\n    /**\n     * GraphProto input.\n     * @member {Array.<onnx.IValueInfoProto>} input\n     * @memberof onnx.GraphProto\n     * @instance\n     */\n    GraphProto.prototype.input = $util.emptyArray;\n\n    /**\n     * GraphProto output.\n     * @member {Array.<onnx.IValueInfoProto>} output\n     * @memberof onnx.GraphProto\n     * @instance\n     */\n    GraphProto.prototype.output = $util.emptyArray;\n\n    /**\n     * GraphProto valueInfo.\n     * @member {Array.<onnx.IValueInfoProto>} valueInfo\n     * @memberof onnx.GraphProto\n     * @instance\n     */\n    GraphProto.prototype.valueInfo = $util.emptyArray;\n\n    /**\n     * GraphProto quantizationAnnotation.\n     * @member {Array.<onnx.ITensorAnnotation>} quantizationAnnotation\n     * @memberof onnx.GraphProto\n     * @instance\n     */\n    GraphProto.prototype.quantizationAnnotation = $util.emptyArray;\n\n    /**\n     * Creates a new GraphProto instance using the specified properties.\n     * @function create\n     * @memberof onnx.GraphProto\n     * @static\n     * @param {onnx.IGraphProto=} [properties] Properties to set\n     * @returns {onnx.GraphProto} GraphProto instance\n     */\n    GraphProto.create = function create(properties) {\n      return new GraphProto(properties);\n    };\n\n    /**\n     * Encodes the specified GraphProto message. Does not implicitly {@link onnx.GraphProto.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.GraphProto\n     * @static\n     * @param {onnx.IGraphProto} message GraphProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    GraphProto.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.node != null && message.node.length)\n        for (var i = 0; i < message.node.length; ++i)\n          $root.onnx.NodeProto.encode(message.node[i], writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();\n      if (message.name != null && Object.hasOwnProperty.call(message, 'name'))\n        writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.name);\n      if (message.initializer != null && message.initializer.length)\n        for (var i = 0; i < message.initializer.length; ++i)\n          $root.onnx.TensorProto.encode(\n            message.initializer[i],\n            writer.uint32(/* id 5, wireType 2 =*/ 42).fork(),\n          ).ldelim();\n      if (message.docString != null && Object.hasOwnProperty.call(message, 'docString'))\n        writer.uint32(/* id 10, wireType 2 =*/ 82).string(message.docString);\n      if (message.input != null && message.input.length)\n        for (var i = 0; i < message.input.length; ++i)\n          $root.onnx.ValueInfoProto.encode(\n            message.input[i],\n            writer.uint32(/* id 11, wireType 2 =*/ 90).fork(),\n          ).ldelim();\n      if (message.output != null && message.output.length)\n        for (var i = 0; i < message.output.length; ++i)\n          $root.onnx.ValueInfoProto.encode(\n            message.output[i],\n            writer.uint32(/* id 12, wireType 2 =*/ 98).fork(),\n          ).ldelim();\n      if (message.valueInfo != null && message.valueInfo.length)\n        for (var i = 0; i < message.valueInfo.length; ++i)\n          $root.onnx.ValueInfoProto.encode(\n            message.valueInfo[i],\n            writer.uint32(/* id 13, wireType 2 =*/ 106).fork(),\n          ).ldelim();\n      if (message.quantizationAnnotation != null && message.quantizationAnnotation.length)\n        for (var i = 0; i < message.quantizationAnnotation.length; ++i)\n          $root.onnx.TensorAnnotation.encode(\n            message.quantizationAnnotation[i],\n            writer.uint32(/* id 14, wireType 2 =*/ 114).fork(),\n          ).ldelim();\n      if (message.sparseInitializer != null && message.sparseInitializer.length)\n        for (var i = 0; i < message.sparseInitializer.length; ++i)\n          $root.onnx.SparseTensorProto.encode(\n            message.sparseInitializer[i],\n            writer.uint32(/* id 15, wireType 2 =*/ 122).fork(),\n          ).ldelim();\n      return writer;\n    };\n\n    /**\n     * Encodes the specified GraphProto message, length delimited. Does not implicitly {@link onnx.GraphProto.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.GraphProto\n     * @static\n     * @param {onnx.IGraphProto} message GraphProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    GraphProto.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a GraphProto message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.GraphProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.GraphProto} GraphProto\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    GraphProto.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.GraphProto();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            if (!(message.node && message.node.length)) message.node = [];\n            message.node.push($root.onnx.NodeProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 2: {\n            message.name = reader.string();\n            break;\n          }\n          case 5: {\n            if (!(message.initializer && message.initializer.length)) message.initializer = [];\n            message.initializer.push($root.onnx.TensorProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 15: {\n            if (!(message.sparseInitializer && message.sparseInitializer.length)) message.sparseInitializer = [];\n            message.sparseInitializer.push($root.onnx.SparseTensorProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 10: {\n            message.docString = reader.string();\n            break;\n          }\n          case 11: {\n            if (!(message.input && message.input.length)) message.input = [];\n            message.input.push($root.onnx.ValueInfoProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 12: {\n            if (!(message.output && message.output.length)) message.output = [];\n            message.output.push($root.onnx.ValueInfoProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 13: {\n            if (!(message.valueInfo && message.valueInfo.length)) message.valueInfo = [];\n            message.valueInfo.push($root.onnx.ValueInfoProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 14: {\n            if (!(message.quantizationAnnotation && message.quantizationAnnotation.length))\n              message.quantizationAnnotation = [];\n            message.quantizationAnnotation.push($root.onnx.TensorAnnotation.decode(reader, reader.uint32()));\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes a GraphProto message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.GraphProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.GraphProto} GraphProto\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    GraphProto.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a GraphProto message.\n     * @function verify\n     * @memberof onnx.GraphProto\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    GraphProto.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      if (message.node != null && message.hasOwnProperty('node')) {\n        if (!Array.isArray(message.node)) return 'node: array expected';\n        for (var i = 0; i < message.node.length; ++i) {\n          var error = $root.onnx.NodeProto.verify(message.node[i]);\n          if (error) return 'node.' + error;\n        }\n      }\n      if (message.name != null && message.hasOwnProperty('name'))\n        if (!$util.isString(message.name)) return 'name: string expected';\n      if (message.initializer != null && message.hasOwnProperty('initializer')) {\n        if (!Array.isArray(message.initializer)) return 'initializer: array expected';\n        for (var i = 0; i < message.initializer.length; ++i) {\n          var error = $root.onnx.TensorProto.verify(message.initializer[i]);\n          if (error) return 'initializer.' + error;\n        }\n      }\n      if (message.sparseInitializer != null && message.hasOwnProperty('sparseInitializer')) {\n        if (!Array.isArray(message.sparseInitializer)) return 'sparseInitializer: array expected';\n        for (var i = 0; i < message.sparseInitializer.length; ++i) {\n          var error = $root.onnx.SparseTensorProto.verify(message.sparseInitializer[i]);\n          if (error) return 'sparseInitializer.' + error;\n        }\n      }\n      if (message.docString != null && message.hasOwnProperty('docString'))\n        if (!$util.isString(message.docString)) return 'docString: string expected';\n      if (message.input != null && message.hasOwnProperty('input')) {\n        if (!Array.isArray(message.input)) return 'input: array expected';\n        for (var i = 0; i < message.input.length; ++i) {\n          var error = $root.onnx.ValueInfoProto.verify(message.input[i]);\n          if (error) return 'input.' + error;\n        }\n      }\n      if (message.output != null && message.hasOwnProperty('output')) {\n        if (!Array.isArray(message.output)) return 'output: array expected';\n        for (var i = 0; i < message.output.length; ++i) {\n          var error = $root.onnx.ValueInfoProto.verify(message.output[i]);\n          if (error) return 'output.' + error;\n        }\n      }\n      if (message.valueInfo != null && message.hasOwnProperty('valueInfo')) {\n        if (!Array.isArray(message.valueInfo)) return 'valueInfo: array expected';\n        for (var i = 0; i < message.valueInfo.length; ++i) {\n          var error = $root.onnx.ValueInfoProto.verify(message.valueInfo[i]);\n          if (error) return 'valueInfo.' + error;\n        }\n      }\n      if (message.quantizationAnnotation != null && message.hasOwnProperty('quantizationAnnotation')) {\n        if (!Array.isArray(message.quantizationAnnotation)) return 'quantizationAnnotation: array expected';\n        for (var i = 0; i < message.quantizationAnnotation.length; ++i) {\n          var error = $root.onnx.TensorAnnotation.verify(message.quantizationAnnotation[i]);\n          if (error) return 'quantizationAnnotation.' + error;\n        }\n      }\n      return null;\n    };\n\n    /**\n     * Creates a GraphProto message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.GraphProto\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.GraphProto} GraphProto\n     */\n    GraphProto.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.GraphProto) return object;\n      var message = new $root.onnx.GraphProto();\n      if (object.node) {\n        if (!Array.isArray(object.node)) throw TypeError('.onnx.GraphProto.node: array expected');\n        message.node = [];\n        for (var i = 0; i < object.node.length; ++i) {\n          if (typeof object.node[i] !== 'object') throw TypeError('.onnx.GraphProto.node: object expected');\n          message.node[i] = $root.onnx.NodeProto.fromObject(object.node[i]);\n        }\n      }\n      if (object.name != null) message.name = String(object.name);\n      if (object.initializer) {\n        if (!Array.isArray(object.initializer)) throw TypeError('.onnx.GraphProto.initializer: array expected');\n        message.initializer = [];\n        for (var i = 0; i < object.initializer.length; ++i) {\n          if (typeof object.initializer[i] !== 'object')\n            throw TypeError('.onnx.GraphProto.initializer: object expected');\n          message.initializer[i] = $root.onnx.TensorProto.fromObject(object.initializer[i]);\n        }\n      }\n      if (object.sparseInitializer) {\n        if (!Array.isArray(object.sparseInitializer))\n          throw TypeError('.onnx.GraphProto.sparseInitializer: array expected');\n        message.sparseInitializer = [];\n        for (var i = 0; i < object.sparseInitializer.length; ++i) {\n          if (typeof object.sparseInitializer[i] !== 'object')\n            throw TypeError('.onnx.GraphProto.sparseInitializer: object expected');\n          message.sparseInitializer[i] = $root.onnx.SparseTensorProto.fromObject(object.sparseInitializer[i]);\n        }\n      }\n      if (object.docString != null) message.docString = String(object.docString);\n      if (object.input) {\n        if (!Array.isArray(object.input)) throw TypeError('.onnx.GraphProto.input: array expected');\n        message.input = [];\n        for (var i = 0; i < object.input.length; ++i) {\n          if (typeof object.input[i] !== 'object') throw TypeError('.onnx.GraphProto.input: object expected');\n          message.input[i] = $root.onnx.ValueInfoProto.fromObject(object.input[i]);\n        }\n      }\n      if (object.output) {\n        if (!Array.isArray(object.output)) throw TypeError('.onnx.GraphProto.output: array expected');\n        message.output = [];\n        for (var i = 0; i < object.output.length; ++i) {\n          if (typeof object.output[i] !== 'object') throw TypeError('.onnx.GraphProto.output: object expected');\n          message.output[i] = $root.onnx.ValueInfoProto.fromObject(object.output[i]);\n        }\n      }\n      if (object.valueInfo) {\n        if (!Array.isArray(object.valueInfo)) throw TypeError('.onnx.GraphProto.valueInfo: array expected');\n        message.valueInfo = [];\n        for (var i = 0; i < object.valueInfo.length; ++i) {\n          if (typeof object.valueInfo[i] !== 'object') throw TypeError('.onnx.GraphProto.valueInfo: object expected');\n          message.valueInfo[i] = $root.onnx.ValueInfoProto.fromObject(object.valueInfo[i]);\n        }\n      }\n      if (object.quantizationAnnotation) {\n        if (!Array.isArray(object.quantizationAnnotation))\n          throw TypeError('.onnx.GraphProto.quantizationAnnotation: array expected');\n        message.quantizationAnnotation = [];\n        for (var i = 0; i < object.quantizationAnnotation.length; ++i) {\n          if (typeof object.quantizationAnnotation[i] !== 'object')\n            throw TypeError('.onnx.GraphProto.quantizationAnnotation: object expected');\n          message.quantizationAnnotation[i] = $root.onnx.TensorAnnotation.fromObject(object.quantizationAnnotation[i]);\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Creates a plain object from a GraphProto message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.GraphProto\n     * @static\n     * @param {onnx.GraphProto} message GraphProto\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    GraphProto.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.arrays || options.defaults) {\n        object.node = [];\n        object.initializer = [];\n        object.input = [];\n        object.output = [];\n        object.valueInfo = [];\n        object.quantizationAnnotation = [];\n        object.sparseInitializer = [];\n      }\n      if (options.defaults) {\n        object.name = '';\n        object.docString = '';\n      }\n      if (message.node && message.node.length) {\n        object.node = [];\n        for (var j = 0; j < message.node.length; ++j)\n          object.node[j] = $root.onnx.NodeProto.toObject(message.node[j], options);\n      }\n      if (message.name != null && message.hasOwnProperty('name')) object.name = message.name;\n      if (message.initializer && message.initializer.length) {\n        object.initializer = [];\n        for (var j = 0; j < message.initializer.length; ++j)\n          object.initializer[j] = $root.onnx.TensorProto.toObject(message.initializer[j], options);\n      }\n      if (message.docString != null && message.hasOwnProperty('docString')) object.docString = message.docString;\n      if (message.input && message.input.length) {\n        object.input = [];\n        for (var j = 0; j < message.input.length; ++j)\n          object.input[j] = $root.onnx.ValueInfoProto.toObject(message.input[j], options);\n      }\n      if (message.output && message.output.length) {\n        object.output = [];\n        for (var j = 0; j < message.output.length; ++j)\n          object.output[j] = $root.onnx.ValueInfoProto.toObject(message.output[j], options);\n      }\n      if (message.valueInfo && message.valueInfo.length) {\n        object.valueInfo = [];\n        for (var j = 0; j < message.valueInfo.length; ++j)\n          object.valueInfo[j] = $root.onnx.ValueInfoProto.toObject(message.valueInfo[j], options);\n      }\n      if (message.quantizationAnnotation && message.quantizationAnnotation.length) {\n        object.quantizationAnnotation = [];\n        for (var j = 0; j < message.quantizationAnnotation.length; ++j)\n          object.quantizationAnnotation[j] = $root.onnx.TensorAnnotation.toObject(\n            message.quantizationAnnotation[j],\n            options,\n          );\n      }\n      if (message.sparseInitializer && message.sparseInitializer.length) {\n        object.sparseInitializer = [];\n        for (var j = 0; j < message.sparseInitializer.length; ++j)\n          object.sparseInitializer[j] = $root.onnx.SparseTensorProto.toObject(message.sparseInitializer[j], options);\n      }\n      return object;\n    };\n\n    /**\n     * Converts this GraphProto to JSON.\n     * @function toJSON\n     * @memberof onnx.GraphProto\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    GraphProto.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for GraphProto\n     * @function getTypeUrl\n     * @memberof onnx.GraphProto\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    GraphProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.GraphProto';\n    };\n\n    return GraphProto;\n  })();\n\n  onnx.TensorProto = (function () {\n    /**\n     * Properties of a TensorProto.\n     * @memberof onnx\n     * @interface ITensorProto\n     * @property {Array.<number|Long>|null} [dims] TensorProto dims\n     * @property {number|null} [dataType] TensorProto dataType\n     * @property {onnx.TensorProto.ISegment|null} [segment] TensorProto segment\n     * @property {Array.<number>|null} [floatData] TensorProto floatData\n     * @property {Array.<number>|null} [int32Data] TensorProto int32Data\n     * @property {Array.<Uint8Array>|null} [stringData] TensorProto stringData\n     * @property {Array.<number|Long>|null} [int64Data] TensorProto int64Data\n     * @property {string|null} [name] TensorProto name\n     * @property {string|null} [docString] TensorProto docString\n     * @property {Uint8Array|null} [rawData] TensorProto rawData\n     * @property {Array.<onnx.IStringStringEntryProto>|null} [externalData] TensorProto externalData\n     * @property {onnx.TensorProto.DataLocation|null} [dataLocation] TensorProto dataLocation\n     * @property {Array.<number>|null} [doubleData] TensorProto doubleData\n     * @property {Array.<number|Long>|null} [uint64Data] TensorProto uint64Data\n     */\n\n    /**\n     * Constructs a new TensorProto.\n     * @memberof onnx\n     * @classdesc Represents a TensorProto.\n     * @implements ITensorProto\n     * @constructor\n     * @param {onnx.ITensorProto=} [properties] Properties to set\n     */\n    function TensorProto(properties) {\n      this.dims = [];\n      this.floatData = [];\n      this.int32Data = [];\n      this.stringData = [];\n      this.int64Data = [];\n      this.externalData = [];\n      this.doubleData = [];\n      this.uint64Data = [];\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * TensorProto dims.\n     * @member {Array.<number|Long>} dims\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.dims = $util.emptyArray;\n\n    /**\n     * TensorProto dataType.\n     * @member {number} dataType\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.dataType = 0;\n\n    /**\n     * TensorProto segment.\n     * @member {onnx.TensorProto.ISegment|null|undefined} segment\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.segment = null;\n\n    /**\n     * TensorProto floatData.\n     * @member {Array.<number>} floatData\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.floatData = $util.emptyArray;\n\n    /**\n     * TensorProto int32Data.\n     * @member {Array.<number>} int32Data\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.int32Data = $util.emptyArray;\n\n    /**\n     * TensorProto stringData.\n     * @member {Array.<Uint8Array>} stringData\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.stringData = $util.emptyArray;\n\n    /**\n     * TensorProto int64Data.\n     * @member {Array.<number|Long>} int64Data\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.int64Data = $util.emptyArray;\n\n    /**\n     * TensorProto name.\n     * @member {string} name\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.name = '';\n\n    /**\n     * TensorProto docString.\n     * @member {string} docString\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.docString = '';\n\n    /**\n     * TensorProto rawData.\n     * @member {Uint8Array} rawData\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.rawData = $util.newBuffer([]);\n\n    /**\n     * TensorProto externalData.\n     * @member {Array.<onnx.IStringStringEntryProto>} externalData\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.externalData = $util.emptyArray;\n\n    /**\n     * TensorProto dataLocation.\n     * @member {onnx.TensorProto.DataLocation} dataLocation\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.dataLocation = 0;\n\n    /**\n     * TensorProto doubleData.\n     * @member {Array.<number>} doubleData\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.doubleData = $util.emptyArray;\n\n    /**\n     * TensorProto uint64Data.\n     * @member {Array.<number|Long>} uint64Data\n     * @memberof onnx.TensorProto\n     * @instance\n     */\n    TensorProto.prototype.uint64Data = $util.emptyArray;\n\n    /**\n     * Creates a new TensorProto instance using the specified properties.\n     * @function create\n     * @memberof onnx.TensorProto\n     * @static\n     * @param {onnx.ITensorProto=} [properties] Properties to set\n     * @returns {onnx.TensorProto} TensorProto instance\n     */\n    TensorProto.create = function create(properties) {\n      return new TensorProto(properties);\n    };\n\n    /**\n     * Encodes the specified TensorProto message. Does not implicitly {@link onnx.TensorProto.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.TensorProto\n     * @static\n     * @param {onnx.ITensorProto} message TensorProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    TensorProto.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.dims != null && message.dims.length) {\n        writer.uint32(/* id 1, wireType 2 =*/ 10).fork();\n        for (var i = 0; i < message.dims.length; ++i) writer.int64(message.dims[i]);\n        writer.ldelim();\n      }\n      if (message.dataType != null && Object.hasOwnProperty.call(message, 'dataType'))\n        writer.uint32(/* id 2, wireType 0 =*/ 16).int32(message.dataType);\n      if (message.segment != null && Object.hasOwnProperty.call(message, 'segment'))\n        $root.onnx.TensorProto.Segment.encode(\n          message.segment,\n          writer.uint32(/* id 3, wireType 2 =*/ 26).fork(),\n        ).ldelim();\n      if (message.floatData != null && message.floatData.length) {\n        writer.uint32(/* id 4, wireType 2 =*/ 34).fork();\n        for (var i = 0; i < message.floatData.length; ++i) writer.float(message.floatData[i]);\n        writer.ldelim();\n      }\n      if (message.int32Data != null && message.int32Data.length) {\n        writer.uint32(/* id 5, wireType 2 =*/ 42).fork();\n        for (var i = 0; i < message.int32Data.length; ++i) writer.int32(message.int32Data[i]);\n        writer.ldelim();\n      }\n      if (message.stringData != null && message.stringData.length)\n        for (var i = 0; i < message.stringData.length; ++i)\n          writer.uint32(/* id 6, wireType 2 =*/ 50).bytes(message.stringData[i]);\n      if (message.int64Data != null && message.int64Data.length) {\n        writer.uint32(/* id 7, wireType 2 =*/ 58).fork();\n        for (var i = 0; i < message.int64Data.length; ++i) writer.int64(message.int64Data[i]);\n        writer.ldelim();\n      }\n      if (message.name != null && Object.hasOwnProperty.call(message, 'name'))\n        writer.uint32(/* id 8, wireType 2 =*/ 66).string(message.name);\n      if (message.rawData != null && Object.hasOwnProperty.call(message, 'rawData'))\n        writer.uint32(/* id 9, wireType 2 =*/ 74).bytes(message.rawData);\n      if (message.doubleData != null && message.doubleData.length) {\n        writer.uint32(/* id 10, wireType 2 =*/ 82).fork();\n        for (var i = 0; i < message.doubleData.length; ++i) writer.double(message.doubleData[i]);\n        writer.ldelim();\n      }\n      if (message.uint64Data != null && message.uint64Data.length) {\n        writer.uint32(/* id 11, wireType 2 =*/ 90).fork();\n        for (var i = 0; i < message.uint64Data.length; ++i) writer.uint64(message.uint64Data[i]);\n        writer.ldelim();\n      }\n      if (message.docString != null && Object.hasOwnProperty.call(message, 'docString'))\n        writer.uint32(/* id 12, wireType 2 =*/ 98).string(message.docString);\n      if (message.externalData != null && message.externalData.length)\n        for (var i = 0; i < message.externalData.length; ++i)\n          $root.onnx.StringStringEntryProto.encode(\n            message.externalData[i],\n            writer.uint32(/* id 13, wireType 2 =*/ 106).fork(),\n          ).ldelim();\n      if (message.dataLocation != null && Object.hasOwnProperty.call(message, 'dataLocation'))\n        writer.uint32(/* id 14, wireType 0 =*/ 112).int32(message.dataLocation);\n      return writer;\n    };\n\n    /**\n     * Encodes the specified TensorProto message, length delimited. Does not implicitly {@link onnx.TensorProto.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.TensorProto\n     * @static\n     * @param {onnx.ITensorProto} message TensorProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    TensorProto.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a TensorProto message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.TensorProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.TensorProto} TensorProto\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    TensorProto.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.TensorProto();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            if (!(message.dims && message.dims.length)) message.dims = [];\n            if ((tag & 7) === 2) {\n              var end2 = reader.uint32() + reader.pos;\n              while (reader.pos < end2) message.dims.push(reader.int64());\n            } else message.dims.push(reader.int64());\n            break;\n          }\n          case 2: {\n            message.dataType = reader.int32();\n            break;\n          }\n          case 3: {\n            message.segment = $root.onnx.TensorProto.Segment.decode(reader, reader.uint32());\n            break;\n          }\n          case 4: {\n            if (!(message.floatData && message.floatData.length)) message.floatData = [];\n            if ((tag & 7) === 2) {\n              var end2 = reader.uint32() + reader.pos;\n              while (reader.pos < end2) message.floatData.push(reader.float());\n            } else message.floatData.push(reader.float());\n            break;\n          }\n          case 5: {\n            if (!(message.int32Data && message.int32Data.length)) message.int32Data = [];\n            if ((tag & 7) === 2) {\n              var end2 = reader.uint32() + reader.pos;\n              while (reader.pos < end2) message.int32Data.push(reader.int32());\n            } else message.int32Data.push(reader.int32());\n            break;\n          }\n          case 6: {\n            if (!(message.stringData && message.stringData.length)) message.stringData = [];\n            message.stringData.push(reader.bytes());\n            break;\n          }\n          case 7: {\n            if (!(message.int64Data && message.int64Data.length)) message.int64Data = [];\n            if ((tag & 7) === 2) {\n              var end2 = reader.uint32() + reader.pos;\n              while (reader.pos < end2) message.int64Data.push(reader.int64());\n            } else message.int64Data.push(reader.int64());\n            break;\n          }\n          case 8: {\n            message.name = reader.string();\n            break;\n          }\n          case 12: {\n            message.docString = reader.string();\n            break;\n          }\n          case 9: {\n            message.rawData = reader.bytes();\n            break;\n          }\n          case 13: {\n            if (!(message.externalData && message.externalData.length)) message.externalData = [];\n            message.externalData.push($root.onnx.StringStringEntryProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 14: {\n            message.dataLocation = reader.int32();\n            break;\n          }\n          case 10: {\n            if (!(message.doubleData && message.doubleData.length)) message.doubleData = [];\n            if ((tag & 7) === 2) {\n              var end2 = reader.uint32() + reader.pos;\n              while (reader.pos < end2) message.doubleData.push(reader.double());\n            } else message.doubleData.push(reader.double());\n            break;\n          }\n          case 11: {\n            if (!(message.uint64Data && message.uint64Data.length)) message.uint64Data = [];\n            if ((tag & 7) === 2) {\n              var end2 = reader.uint32() + reader.pos;\n              while (reader.pos < end2) message.uint64Data.push(reader.uint64());\n            } else message.uint64Data.push(reader.uint64());\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes a TensorProto message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.TensorProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.TensorProto} TensorProto\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    TensorProto.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a TensorProto message.\n     * @function verify\n     * @memberof onnx.TensorProto\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    TensorProto.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      if (message.dims != null && message.hasOwnProperty('dims')) {\n        if (!Array.isArray(message.dims)) return 'dims: array expected';\n        for (var i = 0; i < message.dims.length; ++i)\n          if (\n            !$util.isInteger(message.dims[i]) &&\n            !(message.dims[i] && $util.isInteger(message.dims[i].low) && $util.isInteger(message.dims[i].high))\n          )\n            return 'dims: integer|Long[] expected';\n      }\n      if (message.dataType != null && message.hasOwnProperty('dataType'))\n        if (!$util.isInteger(message.dataType)) return 'dataType: integer expected';\n      if (message.segment != null && message.hasOwnProperty('segment')) {\n        var error = $root.onnx.TensorProto.Segment.verify(message.segment);\n        if (error) return 'segment.' + error;\n      }\n      if (message.floatData != null && message.hasOwnProperty('floatData')) {\n        if (!Array.isArray(message.floatData)) return 'floatData: array expected';\n        for (var i = 0; i < message.floatData.length; ++i)\n          if (typeof message.floatData[i] !== 'number') return 'floatData: number[] expected';\n      }\n      if (message.int32Data != null && message.hasOwnProperty('int32Data')) {\n        if (!Array.isArray(message.int32Data)) return 'int32Data: array expected';\n        for (var i = 0; i < message.int32Data.length; ++i)\n          if (!$util.isInteger(message.int32Data[i])) return 'int32Data: integer[] expected';\n      }\n      if (message.stringData != null && message.hasOwnProperty('stringData')) {\n        if (!Array.isArray(message.stringData)) return 'stringData: array expected';\n        for (var i = 0; i < message.stringData.length; ++i)\n          if (\n            !(\n              (message.stringData[i] && typeof message.stringData[i].length === 'number') ||\n              $util.isString(message.stringData[i])\n            )\n          )\n            return 'stringData: buffer[] expected';\n      }\n      if (message.int64Data != null && message.hasOwnProperty('int64Data')) {\n        if (!Array.isArray(message.int64Data)) return 'int64Data: array expected';\n        for (var i = 0; i < message.int64Data.length; ++i)\n          if (\n            !$util.isInteger(message.int64Data[i]) &&\n            !(\n              message.int64Data[i] &&\n              $util.isInteger(message.int64Data[i].low) &&\n              $util.isInteger(message.int64Data[i].high)\n            )\n          )\n            return 'int64Data: integer|Long[] expected';\n      }\n      if (message.name != null && message.hasOwnProperty('name'))\n        if (!$util.isString(message.name)) return 'name: string expected';\n      if (message.docString != null && message.hasOwnProperty('docString'))\n        if (!$util.isString(message.docString)) return 'docString: string expected';\n      if (message.rawData != null && message.hasOwnProperty('rawData'))\n        if (!((message.rawData && typeof message.rawData.length === 'number') || $util.isString(message.rawData)))\n          return 'rawData: buffer expected';\n      if (message.externalData != null && message.hasOwnProperty('externalData')) {\n        if (!Array.isArray(message.externalData)) return 'externalData: array expected';\n        for (var i = 0; i < message.externalData.length; ++i) {\n          var error = $root.onnx.StringStringEntryProto.verify(message.externalData[i]);\n          if (error) return 'externalData.' + error;\n        }\n      }\n      if (message.dataLocation != null && message.hasOwnProperty('dataLocation'))\n        switch (message.dataLocation) {\n          default:\n            return 'dataLocation: enum value expected';\n          case 0:\n          case 1:\n            break;\n        }\n      if (message.doubleData != null && message.hasOwnProperty('doubleData')) {\n        if (!Array.isArray(message.doubleData)) return 'doubleData: array expected';\n        for (var i = 0; i < message.doubleData.length; ++i)\n          if (typeof message.doubleData[i] !== 'number') return 'doubleData: number[] expected';\n      }\n      if (message.uint64Data != null && message.hasOwnProperty('uint64Data')) {\n        if (!Array.isArray(message.uint64Data)) return 'uint64Data: array expected';\n        for (var i = 0; i < message.uint64Data.length; ++i)\n          if (\n            !$util.isInteger(message.uint64Data[i]) &&\n            !(\n              message.uint64Data[i] &&\n              $util.isInteger(message.uint64Data[i].low) &&\n              $util.isInteger(message.uint64Data[i].high)\n            )\n          )\n            return 'uint64Data: integer|Long[] expected';\n      }\n      return null;\n    };\n\n    /**\n     * Creates a TensorProto message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.TensorProto\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.TensorProto} TensorProto\n     */\n    TensorProto.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.TensorProto) return object;\n      var message = new $root.onnx.TensorProto();\n      if (object.dims) {\n        if (!Array.isArray(object.dims)) throw TypeError('.onnx.TensorProto.dims: array expected');\n        message.dims = [];\n        for (var i = 0; i < object.dims.length; ++i)\n          if ($util.Long) (message.dims[i] = $util.Long.fromValue(object.dims[i])).unsigned = false;\n          else if (typeof object.dims[i] === 'string') message.dims[i] = parseInt(object.dims[i], 10);\n          else if (typeof object.dims[i] === 'number') message.dims[i] = object.dims[i];\n          else if (typeof object.dims[i] === 'object')\n            message.dims[i] = new $util.LongBits(object.dims[i].low >>> 0, object.dims[i].high >>> 0).toNumber();\n      }\n      if (object.dataType != null) message.dataType = object.dataType | 0;\n      if (object.segment != null) {\n        if (typeof object.segment !== 'object') throw TypeError('.onnx.TensorProto.segment: object expected');\n        message.segment = $root.onnx.TensorProto.Segment.fromObject(object.segment);\n      }\n      if (object.floatData) {\n        if (!Array.isArray(object.floatData)) throw TypeError('.onnx.TensorProto.floatData: array expected');\n        message.floatData = [];\n        for (var i = 0; i < object.floatData.length; ++i) message.floatData[i] = Number(object.floatData[i]);\n      }\n      if (object.int32Data) {\n        if (!Array.isArray(object.int32Data)) throw TypeError('.onnx.TensorProto.int32Data: array expected');\n        message.int32Data = [];\n        for (var i = 0; i < object.int32Data.length; ++i) message.int32Data[i] = object.int32Data[i] | 0;\n      }\n      if (object.stringData) {\n        if (!Array.isArray(object.stringData)) throw TypeError('.onnx.TensorProto.stringData: array expected');\n        message.stringData = [];\n        for (var i = 0; i < object.stringData.length; ++i)\n          if (typeof object.stringData[i] === 'string')\n            $util.base64.decode(\n              object.stringData[i],\n              (message.stringData[i] = $util.newBuffer($util.base64.length(object.stringData[i]))),\n              0,\n            );\n          else if (object.stringData[i].length >= 0) message.stringData[i] = object.stringData[i];\n      }\n      if (object.int64Data) {\n        if (!Array.isArray(object.int64Data)) throw TypeError('.onnx.TensorProto.int64Data: array expected');\n        message.int64Data = [];\n        for (var i = 0; i < object.int64Data.length; ++i)\n          if ($util.Long) (message.int64Data[i] = $util.Long.fromValue(object.int64Data[i])).unsigned = false;\n          else if (typeof object.int64Data[i] === 'string') message.int64Data[i] = parseInt(object.int64Data[i], 10);\n          else if (typeof object.int64Data[i] === 'number') message.int64Data[i] = object.int64Data[i];\n          else if (typeof object.int64Data[i] === 'object')\n            message.int64Data[i] = new $util.LongBits(\n              object.int64Data[i].low >>> 0,\n              object.int64Data[i].high >>> 0,\n            ).toNumber();\n      }\n      if (object.name != null) message.name = String(object.name);\n      if (object.docString != null) message.docString = String(object.docString);\n      if (object.rawData != null)\n        if (typeof object.rawData === 'string')\n          $util.base64.decode(\n            object.rawData,\n            (message.rawData = $util.newBuffer($util.base64.length(object.rawData))),\n            0,\n          );\n        else if (object.rawData.length >= 0) message.rawData = object.rawData;\n      if (object.externalData) {\n        if (!Array.isArray(object.externalData)) throw TypeError('.onnx.TensorProto.externalData: array expected');\n        message.externalData = [];\n        for (var i = 0; i < object.externalData.length; ++i) {\n          if (typeof object.externalData[i] !== 'object')\n            throw TypeError('.onnx.TensorProto.externalData: object expected');\n          message.externalData[i] = $root.onnx.StringStringEntryProto.fromObject(object.externalData[i]);\n        }\n      }\n      switch (object.dataLocation) {\n        default:\n          if (typeof object.dataLocation === 'number') {\n            message.dataLocation = object.dataLocation;\n            break;\n          }\n          break;\n        case 'DEFAULT':\n        case 0:\n          message.dataLocation = 0;\n          break;\n        case 'EXTERNAL':\n        case 1:\n          message.dataLocation = 1;\n          break;\n      }\n      if (object.doubleData) {\n        if (!Array.isArray(object.doubleData)) throw TypeError('.onnx.TensorProto.doubleData: array expected');\n        message.doubleData = [];\n        for (var i = 0; i < object.doubleData.length; ++i) message.doubleData[i] = Number(object.doubleData[i]);\n      }\n      if (object.uint64Data) {\n        if (!Array.isArray(object.uint64Data)) throw TypeError('.onnx.TensorProto.uint64Data: array expected');\n        message.uint64Data = [];\n        for (var i = 0; i < object.uint64Data.length; ++i)\n          if ($util.Long) (message.uint64Data[i] = $util.Long.fromValue(object.uint64Data[i])).unsigned = true;\n          else if (typeof object.uint64Data[i] === 'string') message.uint64Data[i] = parseInt(object.uint64Data[i], 10);\n          else if (typeof object.uint64Data[i] === 'number') message.uint64Data[i] = object.uint64Data[i];\n          else if (typeof object.uint64Data[i] === 'object')\n            message.uint64Data[i] = new $util.LongBits(\n              object.uint64Data[i].low >>> 0,\n              object.uint64Data[i].high >>> 0,\n            ).toNumber(true);\n      }\n      return message;\n    };\n\n    /**\n     * Creates a plain object from a TensorProto message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.TensorProto\n     * @static\n     * @param {onnx.TensorProto} message TensorProto\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    TensorProto.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.arrays || options.defaults) {\n        object.dims = [];\n        object.floatData = [];\n        object.int32Data = [];\n        object.stringData = [];\n        object.int64Data = [];\n        object.doubleData = [];\n        object.uint64Data = [];\n        object.externalData = [];\n      }\n      if (options.defaults) {\n        object.dataType = 0;\n        object.segment = null;\n        object.name = '';\n        if (options.bytes === String) object.rawData = '';\n        else {\n          object.rawData = [];\n          if (options.bytes !== Array) object.rawData = $util.newBuffer(object.rawData);\n        }\n        object.docString = '';\n        object.dataLocation = options.enums === String ? 'DEFAULT' : 0;\n      }\n      if (message.dims && message.dims.length) {\n        object.dims = [];\n        for (var j = 0; j < message.dims.length; ++j)\n          if (typeof message.dims[j] === 'number')\n            object.dims[j] = options.longs === String ? String(message.dims[j]) : message.dims[j];\n          else\n            object.dims[j] =\n              options.longs === String\n                ? $util.Long.prototype.toString.call(message.dims[j])\n                : options.longs === Number\n                  ? new $util.LongBits(message.dims[j].low >>> 0, message.dims[j].high >>> 0).toNumber()\n                  : message.dims[j];\n      }\n      if (message.dataType != null && message.hasOwnProperty('dataType')) object.dataType = message.dataType;\n      if (message.segment != null && message.hasOwnProperty('segment'))\n        object.segment = $root.onnx.TensorProto.Segment.toObject(message.segment, options);\n      if (message.floatData && message.floatData.length) {\n        object.floatData = [];\n        for (var j = 0; j < message.floatData.length; ++j)\n          object.floatData[j] =\n            options.json && !isFinite(message.floatData[j]) ? String(message.floatData[j]) : message.floatData[j];\n      }\n      if (message.int32Data && message.int32Data.length) {\n        object.int32Data = [];\n        for (var j = 0; j < message.int32Data.length; ++j) object.int32Data[j] = message.int32Data[j];\n      }\n      if (message.stringData && message.stringData.length) {\n        object.stringData = [];\n        for (var j = 0; j < message.stringData.length; ++j)\n          object.stringData[j] =\n            options.bytes === String\n              ? $util.base64.encode(message.stringData[j], 0, message.stringData[j].length)\n              : options.bytes === Array\n                ? Array.prototype.slice.call(message.stringData[j])\n                : message.stringData[j];\n      }\n      if (message.int64Data && message.int64Data.length) {\n        object.int64Data = [];\n        for (var j = 0; j < message.int64Data.length; ++j)\n          if (typeof message.int64Data[j] === 'number')\n            object.int64Data[j] = options.longs === String ? String(message.int64Data[j]) : message.int64Data[j];\n          else\n            object.int64Data[j] =\n              options.longs === String\n                ? $util.Long.prototype.toString.call(message.int64Data[j])\n                : options.longs === Number\n                  ? new $util.LongBits(message.int64Data[j].low >>> 0, message.int64Data[j].high >>> 0).toNumber()\n                  : message.int64Data[j];\n      }\n      if (message.name != null && message.hasOwnProperty('name')) object.name = message.name;\n      if (message.rawData != null && message.hasOwnProperty('rawData'))\n        object.rawData =\n          options.bytes === String\n            ? $util.base64.encode(message.rawData, 0, message.rawData.length)\n            : options.bytes === Array\n              ? Array.prototype.slice.call(message.rawData)\n              : message.rawData;\n      if (message.doubleData && message.doubleData.length) {\n        object.doubleData = [];\n        for (var j = 0; j < message.doubleData.length; ++j)\n          object.doubleData[j] =\n            options.json && !isFinite(message.doubleData[j]) ? String(message.doubleData[j]) : message.doubleData[j];\n      }\n      if (message.uint64Data && message.uint64Data.length) {\n        object.uint64Data = [];\n        for (var j = 0; j < message.uint64Data.length; ++j)\n          if (typeof message.uint64Data[j] === 'number')\n            object.uint64Data[j] = options.longs === String ? String(message.uint64Data[j]) : message.uint64Data[j];\n          else\n            object.uint64Data[j] =\n              options.longs === String\n                ? $util.Long.prototype.toString.call(message.uint64Data[j])\n                : options.longs === Number\n                  ? new $util.LongBits(message.uint64Data[j].low >>> 0, message.uint64Data[j].high >>> 0).toNumber(true)\n                  : message.uint64Data[j];\n      }\n      if (message.docString != null && message.hasOwnProperty('docString')) object.docString = message.docString;\n      if (message.externalData && message.externalData.length) {\n        object.externalData = [];\n        for (var j = 0; j < message.externalData.length; ++j)\n          object.externalData[j] = $root.onnx.StringStringEntryProto.toObject(message.externalData[j], options);\n      }\n      if (message.dataLocation != null && message.hasOwnProperty('dataLocation'))\n        object.dataLocation =\n          options.enums === String\n            ? $root.onnx.TensorProto.DataLocation[message.dataLocation] === undefined\n              ? message.dataLocation\n              : $root.onnx.TensorProto.DataLocation[message.dataLocation]\n            : message.dataLocation;\n      return object;\n    };\n\n    /**\n     * Converts this TensorProto to JSON.\n     * @function toJSON\n     * @memberof onnx.TensorProto\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    TensorProto.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for TensorProto\n     * @function getTypeUrl\n     * @memberof onnx.TensorProto\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    TensorProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.TensorProto';\n    };\n\n    /**\n     * DataType enum.\n     * @name onnx.TensorProto.DataType\n     * @enum {number}\n     * @property {number} UNDEFINED=0 UNDEFINED value\n     * @property {number} FLOAT=1 FLOAT value\n     * @property {number} UINT8=2 UINT8 value\n     * @property {number} INT8=3 INT8 value\n     * @property {number} UINT16=4 UINT16 value\n     * @property {number} INT16=5 INT16 value\n     * @property {number} INT32=6 INT32 value\n     * @property {number} INT64=7 INT64 value\n     * @property {number} STRING=8 STRING value\n     * @property {number} BOOL=9 BOOL value\n     * @property {number} FLOAT16=10 FLOAT16 value\n     * @property {number} DOUBLE=11 DOUBLE value\n     * @property {number} UINT32=12 UINT32 value\n     * @property {number} UINT64=13 UINT64 value\n     * @property {number} COMPLEX64=14 COMPLEX64 value\n     * @property {number} COMPLEX128=15 COMPLEX128 value\n     * @property {number} BFLOAT16=16 BFLOAT16 value\n     * @property {number} FLOAT8E4M3FN=17 FLOAT8E4M3FN value\n     * @property {number} FLOAT8E4M3FNUZ=18 FLOAT8E4M3FNUZ value\n     * @property {number} FLOAT8E5M2=19 FLOAT8E5M2 value\n     * @property {number} FLOAT8E5M2FNUZ=20 FLOAT8E5M2FNUZ value\n     */\n    TensorProto.DataType = (function () {\n      var valuesById = {},\n        values = Object.create(valuesById);\n      values[(valuesById[0] = 'UNDEFINED')] = 0;\n      values[(valuesById[1] = 'FLOAT')] = 1;\n      values[(valuesById[2] = 'UINT8')] = 2;\n      values[(valuesById[3] = 'INT8')] = 3;\n      values[(valuesById[4] = 'UINT16')] = 4;\n      values[(valuesById[5] = 'INT16')] = 5;\n      values[(valuesById[6] = 'INT32')] = 6;\n      values[(valuesById[7] = 'INT64')] = 7;\n      values[(valuesById[8] = 'STRING')] = 8;\n      values[(valuesById[9] = 'BOOL')] = 9;\n      values[(valuesById[10] = 'FLOAT16')] = 10;\n      values[(valuesById[11] = 'DOUBLE')] = 11;\n      values[(valuesById[12] = 'UINT32')] = 12;\n      values[(valuesById[13] = 'UINT64')] = 13;\n      values[(valuesById[14] = 'COMPLEX64')] = 14;\n      values[(valuesById[15] = 'COMPLEX128')] = 15;\n      values[(valuesById[16] = 'BFLOAT16')] = 16;\n      values[(valuesById[17] = 'FLOAT8E4M3FN')] = 17;\n      values[(valuesById[18] = 'FLOAT8E4M3FNUZ')] = 18;\n      values[(valuesById[19] = 'FLOAT8E5M2')] = 19;\n      values[(valuesById[20] = 'FLOAT8E5M2FNUZ')] = 20;\n      return values;\n    })();\n\n    TensorProto.Segment = (function () {\n      /**\n       * Properties of a Segment.\n       * @memberof onnx.TensorProto\n       * @interface ISegment\n       * @property {number|Long|null} [begin] Segment begin\n       * @property {number|Long|null} [end] Segment end\n       */\n\n      /**\n       * Constructs a new Segment.\n       * @memberof onnx.TensorProto\n       * @classdesc Represents a Segment.\n       * @implements ISegment\n       * @constructor\n       * @param {onnx.TensorProto.ISegment=} [properties] Properties to set\n       */\n      function Segment(properties) {\n        if (properties)\n          for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n            if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n      }\n\n      /**\n       * Segment begin.\n       * @member {number|Long} begin\n       * @memberof onnx.TensorProto.Segment\n       * @instance\n       */\n      Segment.prototype.begin = $util.Long ? $util.Long.fromBits(0, 0, false) : 0;\n\n      /**\n       * Segment end.\n       * @member {number|Long} end\n       * @memberof onnx.TensorProto.Segment\n       * @instance\n       */\n      Segment.prototype.end = $util.Long ? $util.Long.fromBits(0, 0, false) : 0;\n\n      /**\n       * Creates a new Segment instance using the specified properties.\n       * @function create\n       * @memberof onnx.TensorProto.Segment\n       * @static\n       * @param {onnx.TensorProto.ISegment=} [properties] Properties to set\n       * @returns {onnx.TensorProto.Segment} Segment instance\n       */\n      Segment.create = function create(properties) {\n        return new Segment(properties);\n      };\n\n      /**\n       * Encodes the specified Segment message. Does not implicitly {@link onnx.TensorProto.Segment.verify|verify} messages.\n       * @function encode\n       * @memberof onnx.TensorProto.Segment\n       * @static\n       * @param {onnx.TensorProto.ISegment} message Segment message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      Segment.encode = function encode(message, writer) {\n        if (!writer) writer = $Writer.create();\n        if (message.begin != null && Object.hasOwnProperty.call(message, 'begin'))\n          writer.uint32(/* id 1, wireType 0 =*/ 8).int64(message.begin);\n        if (message.end != null && Object.hasOwnProperty.call(message, 'end'))\n          writer.uint32(/* id 2, wireType 0 =*/ 16).int64(message.end);\n        return writer;\n      };\n\n      /**\n       * Encodes the specified Segment message, length delimited. Does not implicitly {@link onnx.TensorProto.Segment.verify|verify} messages.\n       * @function encodeDelimited\n       * @memberof onnx.TensorProto.Segment\n       * @static\n       * @param {onnx.TensorProto.ISegment} message Segment message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      Segment.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n      };\n\n      /**\n       * Decodes a Segment message from the specified reader or buffer.\n       * @function decode\n       * @memberof onnx.TensorProto.Segment\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @param {number} [length] Message length if known beforehand\n       * @returns {onnx.TensorProto.Segment} Segment\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      Segment.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length,\n          message = new $root.onnx.TensorProto.Segment();\n        while (reader.pos < end) {\n          var tag = reader.uint32();\n          switch (tag >>> 3) {\n            case 1: {\n              message.begin = reader.int64();\n              break;\n            }\n            case 2: {\n              message.end = reader.int64();\n              break;\n            }\n            default:\n              reader.skipType(tag & 7);\n              break;\n          }\n        }\n        return message;\n      };\n\n      /**\n       * Decodes a Segment message from the specified reader or buffer, length delimited.\n       * @function decodeDelimited\n       * @memberof onnx.TensorProto.Segment\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @returns {onnx.TensorProto.Segment} Segment\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      Segment.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n      };\n\n      /**\n       * Verifies a Segment message.\n       * @function verify\n       * @memberof onnx.TensorProto.Segment\n       * @static\n       * @param {Object.<string,*>} message Plain object to verify\n       * @returns {string|null} `null` if valid, otherwise the reason why it is not\n       */\n      Segment.verify = function verify(message) {\n        if (typeof message !== 'object' || message === null) return 'object expected';\n        if (message.begin != null && message.hasOwnProperty('begin'))\n          if (\n            !$util.isInteger(message.begin) &&\n            !(message.begin && $util.isInteger(message.begin.low) && $util.isInteger(message.begin.high))\n          )\n            return 'begin: integer|Long expected';\n        if (message.end != null && message.hasOwnProperty('end'))\n          if (\n            !$util.isInteger(message.end) &&\n            !(message.end && $util.isInteger(message.end.low) && $util.isInteger(message.end.high))\n          )\n            return 'end: integer|Long expected';\n        return null;\n      };\n\n      /**\n       * Creates a Segment message from a plain object. Also converts values to their respective internal types.\n       * @function fromObject\n       * @memberof onnx.TensorProto.Segment\n       * @static\n       * @param {Object.<string,*>} object Plain object\n       * @returns {onnx.TensorProto.Segment} Segment\n       */\n      Segment.fromObject = function fromObject(object) {\n        if (object instanceof $root.onnx.TensorProto.Segment) return object;\n        var message = new $root.onnx.TensorProto.Segment();\n        if (object.begin != null)\n          if ($util.Long) (message.begin = $util.Long.fromValue(object.begin)).unsigned = false;\n          else if (typeof object.begin === 'string') message.begin = parseInt(object.begin, 10);\n          else if (typeof object.begin === 'number') message.begin = object.begin;\n          else if (typeof object.begin === 'object')\n            message.begin = new $util.LongBits(object.begin.low >>> 0, object.begin.high >>> 0).toNumber();\n        if (object.end != null)\n          if ($util.Long) (message.end = $util.Long.fromValue(object.end)).unsigned = false;\n          else if (typeof object.end === 'string') message.end = parseInt(object.end, 10);\n          else if (typeof object.end === 'number') message.end = object.end;\n          else if (typeof object.end === 'object')\n            message.end = new $util.LongBits(object.end.low >>> 0, object.end.high >>> 0).toNumber();\n        return message;\n      };\n\n      /**\n       * Creates a plain object from a Segment message. Also converts values to other types if specified.\n       * @function toObject\n       * @memberof onnx.TensorProto.Segment\n       * @static\n       * @param {onnx.TensorProto.Segment} message Segment\n       * @param {$protobuf.IConversionOptions} [options] Conversion options\n       * @returns {Object.<string,*>} Plain object\n       */\n      Segment.toObject = function toObject(message, options) {\n        if (!options) options = {};\n        var object = {};\n        if (options.defaults) {\n          if ($util.Long) {\n            var long = new $util.Long(0, 0, false);\n            object.begin =\n              options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n          } else object.begin = options.longs === String ? '0' : 0;\n          if ($util.Long) {\n            var long = new $util.Long(0, 0, false);\n            object.end = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n          } else object.end = options.longs === String ? '0' : 0;\n        }\n        if (message.begin != null && message.hasOwnProperty('begin'))\n          if (typeof message.begin === 'number')\n            object.begin = options.longs === String ? String(message.begin) : message.begin;\n          else\n            object.begin =\n              options.longs === String\n                ? $util.Long.prototype.toString.call(message.begin)\n                : options.longs === Number\n                  ? new $util.LongBits(message.begin.low >>> 0, message.begin.high >>> 0).toNumber()\n                  : message.begin;\n        if (message.end != null && message.hasOwnProperty('end'))\n          if (typeof message.end === 'number')\n            object.end = options.longs === String ? String(message.end) : message.end;\n          else\n            object.end =\n              options.longs === String\n                ? $util.Long.prototype.toString.call(message.end)\n                : options.longs === Number\n                  ? new $util.LongBits(message.end.low >>> 0, message.end.high >>> 0).toNumber()\n                  : message.end;\n        return object;\n      };\n\n      /**\n       * Converts this Segment to JSON.\n       * @function toJSON\n       * @memberof onnx.TensorProto.Segment\n       * @instance\n       * @returns {Object.<string,*>} JSON object\n       */\n      Segment.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n      };\n\n      /**\n       * Gets the default type url for Segment\n       * @function getTypeUrl\n       * @memberof onnx.TensorProto.Segment\n       * @static\n       * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n       * @returns {string} The default type url\n       */\n      Segment.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n          typeUrlPrefix = 'type.googleapis.com';\n        }\n        return typeUrlPrefix + '/onnx.TensorProto.Segment';\n      };\n\n      return Segment;\n    })();\n\n    /**\n     * DataLocation enum.\n     * @name onnx.TensorProto.DataLocation\n     * @enum {number}\n     * @property {number} DEFAULT=0 DEFAULT value\n     * @property {number} EXTERNAL=1 EXTERNAL value\n     */\n    TensorProto.DataLocation = (function () {\n      var valuesById = {},\n        values = Object.create(valuesById);\n      values[(valuesById[0] = 'DEFAULT')] = 0;\n      values[(valuesById[1] = 'EXTERNAL')] = 1;\n      return values;\n    })();\n\n    return TensorProto;\n  })();\n\n  onnx.SparseTensorProto = (function () {\n    /**\n     * Properties of a SparseTensorProto.\n     * @memberof onnx\n     * @interface ISparseTensorProto\n     * @property {onnx.ITensorProto|null} [values] SparseTensorProto values\n     * @property {onnx.ITensorProto|null} [indices] SparseTensorProto indices\n     * @property {Array.<number|Long>|null} [dims] SparseTensorProto dims\n     */\n\n    /**\n     * Constructs a new SparseTensorProto.\n     * @memberof onnx\n     * @classdesc Represents a SparseTensorProto.\n     * @implements ISparseTensorProto\n     * @constructor\n     * @param {onnx.ISparseTensorProto=} [properties] Properties to set\n     */\n    function SparseTensorProto(properties) {\n      this.dims = [];\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * SparseTensorProto values.\n     * @member {onnx.ITensorProto|null|undefined} values\n     * @memberof onnx.SparseTensorProto\n     * @instance\n     */\n    SparseTensorProto.prototype.values = null;\n\n    /**\n     * SparseTensorProto indices.\n     * @member {onnx.ITensorProto|null|undefined} indices\n     * @memberof onnx.SparseTensorProto\n     * @instance\n     */\n    SparseTensorProto.prototype.indices = null;\n\n    /**\n     * SparseTensorProto dims.\n     * @member {Array.<number|Long>} dims\n     * @memberof onnx.SparseTensorProto\n     * @instance\n     */\n    SparseTensorProto.prototype.dims = $util.emptyArray;\n\n    /**\n     * Creates a new SparseTensorProto instance using the specified properties.\n     * @function create\n     * @memberof onnx.SparseTensorProto\n     * @static\n     * @param {onnx.ISparseTensorProto=} [properties] Properties to set\n     * @returns {onnx.SparseTensorProto} SparseTensorProto instance\n     */\n    SparseTensorProto.create = function create(properties) {\n      return new SparseTensorProto(properties);\n    };\n\n    /**\n     * Encodes the specified SparseTensorProto message. Does not implicitly {@link onnx.SparseTensorProto.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.SparseTensorProto\n     * @static\n     * @param {onnx.ISparseTensorProto} message SparseTensorProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SparseTensorProto.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.values != null && Object.hasOwnProperty.call(message, 'values'))\n        $root.onnx.TensorProto.encode(message.values, writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();\n      if (message.indices != null && Object.hasOwnProperty.call(message, 'indices'))\n        $root.onnx.TensorProto.encode(message.indices, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();\n      if (message.dims != null && message.dims.length) {\n        writer.uint32(/* id 3, wireType 2 =*/ 26).fork();\n        for (var i = 0; i < message.dims.length; ++i) writer.int64(message.dims[i]);\n        writer.ldelim();\n      }\n      return writer;\n    };\n\n    /**\n     * Encodes the specified SparseTensorProto message, length delimited. Does not implicitly {@link onnx.SparseTensorProto.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.SparseTensorProto\n     * @static\n     * @param {onnx.ISparseTensorProto} message SparseTensorProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    SparseTensorProto.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a SparseTensorProto message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.SparseTensorProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.SparseTensorProto} SparseTensorProto\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    SparseTensorProto.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.SparseTensorProto();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            message.values = $root.onnx.TensorProto.decode(reader, reader.uint32());\n            break;\n          }\n          case 2: {\n            message.indices = $root.onnx.TensorProto.decode(reader, reader.uint32());\n            break;\n          }\n          case 3: {\n            if (!(message.dims && message.dims.length)) message.dims = [];\n            if ((tag & 7) === 2) {\n              var end2 = reader.uint32() + reader.pos;\n              while (reader.pos < end2) message.dims.push(reader.int64());\n            } else message.dims.push(reader.int64());\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes a SparseTensorProto message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.SparseTensorProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.SparseTensorProto} SparseTensorProto\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    SparseTensorProto.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a SparseTensorProto message.\n     * @function verify\n     * @memberof onnx.SparseTensorProto\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    SparseTensorProto.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      if (message.values != null && message.hasOwnProperty('values')) {\n        var error = $root.onnx.TensorProto.verify(message.values);\n        if (error) return 'values.' + error;\n      }\n      if (message.indices != null && message.hasOwnProperty('indices')) {\n        var error = $root.onnx.TensorProto.verify(message.indices);\n        if (error) return 'indices.' + error;\n      }\n      if (message.dims != null && message.hasOwnProperty('dims')) {\n        if (!Array.isArray(message.dims)) return 'dims: array expected';\n        for (var i = 0; i < message.dims.length; ++i)\n          if (\n            !$util.isInteger(message.dims[i]) &&\n            !(message.dims[i] && $util.isInteger(message.dims[i].low) && $util.isInteger(message.dims[i].high))\n          )\n            return 'dims: integer|Long[] expected';\n      }\n      return null;\n    };\n\n    /**\n     * Creates a SparseTensorProto message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.SparseTensorProto\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.SparseTensorProto} SparseTensorProto\n     */\n    SparseTensorProto.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.SparseTensorProto) return object;\n      var message = new $root.onnx.SparseTensorProto();\n      if (object.values != null) {\n        if (typeof object.values !== 'object') throw TypeError('.onnx.SparseTensorProto.values: object expected');\n        message.values = $root.onnx.TensorProto.fromObject(object.values);\n      }\n      if (object.indices != null) {\n        if (typeof object.indices !== 'object') throw TypeError('.onnx.SparseTensorProto.indices: object expected');\n        message.indices = $root.onnx.TensorProto.fromObject(object.indices);\n      }\n      if (object.dims) {\n        if (!Array.isArray(object.dims)) throw TypeError('.onnx.SparseTensorProto.dims: array expected');\n        message.dims = [];\n        for (var i = 0; i < object.dims.length; ++i)\n          if ($util.Long) (message.dims[i] = $util.Long.fromValue(object.dims[i])).unsigned = false;\n          else if (typeof object.dims[i] === 'string') message.dims[i] = parseInt(object.dims[i], 10);\n          else if (typeof object.dims[i] === 'number') message.dims[i] = object.dims[i];\n          else if (typeof object.dims[i] === 'object')\n            message.dims[i] = new $util.LongBits(object.dims[i].low >>> 0, object.dims[i].high >>> 0).toNumber();\n      }\n      return message;\n    };\n\n    /**\n     * Creates a plain object from a SparseTensorProto message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.SparseTensorProto\n     * @static\n     * @param {onnx.SparseTensorProto} message SparseTensorProto\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    SparseTensorProto.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.arrays || options.defaults) object.dims = [];\n      if (options.defaults) {\n        object.values = null;\n        object.indices = null;\n      }\n      if (message.values != null && message.hasOwnProperty('values'))\n        object.values = $root.onnx.TensorProto.toObject(message.values, options);\n      if (message.indices != null && message.hasOwnProperty('indices'))\n        object.indices = $root.onnx.TensorProto.toObject(message.indices, options);\n      if (message.dims && message.dims.length) {\n        object.dims = [];\n        for (var j = 0; j < message.dims.length; ++j)\n          if (typeof message.dims[j] === 'number')\n            object.dims[j] = options.longs === String ? String(message.dims[j]) : message.dims[j];\n          else\n            object.dims[j] =\n              options.longs === String\n                ? $util.Long.prototype.toString.call(message.dims[j])\n                : options.longs === Number\n                  ? new $util.LongBits(message.dims[j].low >>> 0, message.dims[j].high >>> 0).toNumber()\n                  : message.dims[j];\n      }\n      return object;\n    };\n\n    /**\n     * Converts this SparseTensorProto to JSON.\n     * @function toJSON\n     * @memberof onnx.SparseTensorProto\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    SparseTensorProto.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for SparseTensorProto\n     * @function getTypeUrl\n     * @memberof onnx.SparseTensorProto\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    SparseTensorProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.SparseTensorProto';\n    };\n\n    return SparseTensorProto;\n  })();\n\n  onnx.TensorShapeProto = (function () {\n    /**\n     * Properties of a TensorShapeProto.\n     * @memberof onnx\n     * @interface ITensorShapeProto\n     * @property {Array.<onnx.TensorShapeProto.IDimension>|null} [dim] TensorShapeProto dim\n     */\n\n    /**\n     * Constructs a new TensorShapeProto.\n     * @memberof onnx\n     * @classdesc Represents a TensorShapeProto.\n     * @implements ITensorShapeProto\n     * @constructor\n     * @param {onnx.ITensorShapeProto=} [properties] Properties to set\n     */\n    function TensorShapeProto(properties) {\n      this.dim = [];\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * TensorShapeProto dim.\n     * @member {Array.<onnx.TensorShapeProto.IDimension>} dim\n     * @memberof onnx.TensorShapeProto\n     * @instance\n     */\n    TensorShapeProto.prototype.dim = $util.emptyArray;\n\n    /**\n     * Creates a new TensorShapeProto instance using the specified properties.\n     * @function create\n     * @memberof onnx.TensorShapeProto\n     * @static\n     * @param {onnx.ITensorShapeProto=} [properties] Properties to set\n     * @returns {onnx.TensorShapeProto} TensorShapeProto instance\n     */\n    TensorShapeProto.create = function create(properties) {\n      return new TensorShapeProto(properties);\n    };\n\n    /**\n     * Encodes the specified TensorShapeProto message. Does not implicitly {@link onnx.TensorShapeProto.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.TensorShapeProto\n     * @static\n     * @param {onnx.ITensorShapeProto} message TensorShapeProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    TensorShapeProto.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.dim != null && message.dim.length)\n        for (var i = 0; i < message.dim.length; ++i)\n          $root.onnx.TensorShapeProto.Dimension.encode(\n            message.dim[i],\n            writer.uint32(/* id 1, wireType 2 =*/ 10).fork(),\n          ).ldelim();\n      return writer;\n    };\n\n    /**\n     * Encodes the specified TensorShapeProto message, length delimited. Does not implicitly {@link onnx.TensorShapeProto.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.TensorShapeProto\n     * @static\n     * @param {onnx.ITensorShapeProto} message TensorShapeProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    TensorShapeProto.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a TensorShapeProto message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.TensorShapeProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.TensorShapeProto} TensorShapeProto\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    TensorShapeProto.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.TensorShapeProto();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            if (!(message.dim && message.dim.length)) message.dim = [];\n            message.dim.push($root.onnx.TensorShapeProto.Dimension.decode(reader, reader.uint32()));\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes a TensorShapeProto message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.TensorShapeProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.TensorShapeProto} TensorShapeProto\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    TensorShapeProto.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a TensorShapeProto message.\n     * @function verify\n     * @memberof onnx.TensorShapeProto\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    TensorShapeProto.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      if (message.dim != null && message.hasOwnProperty('dim')) {\n        if (!Array.isArray(message.dim)) return 'dim: array expected';\n        for (var i = 0; i < message.dim.length; ++i) {\n          var error = $root.onnx.TensorShapeProto.Dimension.verify(message.dim[i]);\n          if (error) return 'dim.' + error;\n        }\n      }\n      return null;\n    };\n\n    /**\n     * Creates a TensorShapeProto message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.TensorShapeProto\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.TensorShapeProto} TensorShapeProto\n     */\n    TensorShapeProto.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.TensorShapeProto) return object;\n      var message = new $root.onnx.TensorShapeProto();\n      if (object.dim) {\n        if (!Array.isArray(object.dim)) throw TypeError('.onnx.TensorShapeProto.dim: array expected');\n        message.dim = [];\n        for (var i = 0; i < object.dim.length; ++i) {\n          if (typeof object.dim[i] !== 'object') throw TypeError('.onnx.TensorShapeProto.dim: object expected');\n          message.dim[i] = $root.onnx.TensorShapeProto.Dimension.fromObject(object.dim[i]);\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Creates a plain object from a TensorShapeProto message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.TensorShapeProto\n     * @static\n     * @param {onnx.TensorShapeProto} message TensorShapeProto\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    TensorShapeProto.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.arrays || options.defaults) object.dim = [];\n      if (message.dim && message.dim.length) {\n        object.dim = [];\n        for (var j = 0; j < message.dim.length; ++j)\n          object.dim[j] = $root.onnx.TensorShapeProto.Dimension.toObject(message.dim[j], options);\n      }\n      return object;\n    };\n\n    /**\n     * Converts this TensorShapeProto to JSON.\n     * @function toJSON\n     * @memberof onnx.TensorShapeProto\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    TensorShapeProto.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for TensorShapeProto\n     * @function getTypeUrl\n     * @memberof onnx.TensorShapeProto\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    TensorShapeProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.TensorShapeProto';\n    };\n\n    TensorShapeProto.Dimension = (function () {\n      /**\n       * Properties of a Dimension.\n       * @memberof onnx.TensorShapeProto\n       * @interface IDimension\n       * @property {number|Long|null} [dimValue] Dimension dimValue\n       * @property {string|null} [dimParam] Dimension dimParam\n       * @property {string|null} [denotation] Dimension denotation\n       */\n\n      /**\n       * Constructs a new Dimension.\n       * @memberof onnx.TensorShapeProto\n       * @classdesc Represents a Dimension.\n       * @implements IDimension\n       * @constructor\n       * @param {onnx.TensorShapeProto.IDimension=} [properties] Properties to set\n       */\n      function Dimension(properties) {\n        if (properties)\n          for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n            if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n      }\n\n      /**\n       * Dimension dimValue.\n       * @member {number|Long|null|undefined} dimValue\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @instance\n       */\n      Dimension.prototype.dimValue = null;\n\n      /**\n       * Dimension dimParam.\n       * @member {string|null|undefined} dimParam\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @instance\n       */\n      Dimension.prototype.dimParam = null;\n\n      /**\n       * Dimension denotation.\n       * @member {string} denotation\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @instance\n       */\n      Dimension.prototype.denotation = '';\n\n      // OneOf field names bound to virtual getters and setters\n      var $oneOfFields;\n\n      /**\n       * Dimension value.\n       * @member {\"dimValue\"|\"dimParam\"|undefined} value\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @instance\n       */\n      Object.defineProperty(Dimension.prototype, 'value', {\n        get: $util.oneOfGetter(($oneOfFields = ['dimValue', 'dimParam'])),\n        set: $util.oneOfSetter($oneOfFields),\n      });\n\n      /**\n       * Creates a new Dimension instance using the specified properties.\n       * @function create\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @static\n       * @param {onnx.TensorShapeProto.IDimension=} [properties] Properties to set\n       * @returns {onnx.TensorShapeProto.Dimension} Dimension instance\n       */\n      Dimension.create = function create(properties) {\n        return new Dimension(properties);\n      };\n\n      /**\n       * Encodes the specified Dimension message. Does not implicitly {@link onnx.TensorShapeProto.Dimension.verify|verify} messages.\n       * @function encode\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @static\n       * @param {onnx.TensorShapeProto.IDimension} message Dimension message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      Dimension.encode = function encode(message, writer) {\n        if (!writer) writer = $Writer.create();\n        if (message.dimValue != null && Object.hasOwnProperty.call(message, 'dimValue'))\n          writer.uint32(/* id 1, wireType 0 =*/ 8).int64(message.dimValue);\n        if (message.dimParam != null && Object.hasOwnProperty.call(message, 'dimParam'))\n          writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.dimParam);\n        if (message.denotation != null && Object.hasOwnProperty.call(message, 'denotation'))\n          writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.denotation);\n        return writer;\n      };\n\n      /**\n       * Encodes the specified Dimension message, length delimited. Does not implicitly {@link onnx.TensorShapeProto.Dimension.verify|verify} messages.\n       * @function encodeDelimited\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @static\n       * @param {onnx.TensorShapeProto.IDimension} message Dimension message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      Dimension.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n      };\n\n      /**\n       * Decodes a Dimension message from the specified reader or buffer.\n       * @function decode\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @param {number} [length] Message length if known beforehand\n       * @returns {onnx.TensorShapeProto.Dimension} Dimension\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      Dimension.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length,\n          message = new $root.onnx.TensorShapeProto.Dimension();\n        while (reader.pos < end) {\n          var tag = reader.uint32();\n          switch (tag >>> 3) {\n            case 1: {\n              message.dimValue = reader.int64();\n              break;\n            }\n            case 2: {\n              message.dimParam = reader.string();\n              break;\n            }\n            case 3: {\n              message.denotation = reader.string();\n              break;\n            }\n            default:\n              reader.skipType(tag & 7);\n              break;\n          }\n        }\n        return message;\n      };\n\n      /**\n       * Decodes a Dimension message from the specified reader or buffer, length delimited.\n       * @function decodeDelimited\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @returns {onnx.TensorShapeProto.Dimension} Dimension\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      Dimension.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n      };\n\n      /**\n       * Verifies a Dimension message.\n       * @function verify\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @static\n       * @param {Object.<string,*>} message Plain object to verify\n       * @returns {string|null} `null` if valid, otherwise the reason why it is not\n       */\n      Dimension.verify = function verify(message) {\n        if (typeof message !== 'object' || message === null) return 'object expected';\n        var properties = {};\n        if (message.dimValue != null && message.hasOwnProperty('dimValue')) {\n          properties.value = 1;\n          if (\n            !$util.isInteger(message.dimValue) &&\n            !(message.dimValue && $util.isInteger(message.dimValue.low) && $util.isInteger(message.dimValue.high))\n          )\n            return 'dimValue: integer|Long expected';\n        }\n        if (message.dimParam != null && message.hasOwnProperty('dimParam')) {\n          if (properties.value === 1) return 'value: multiple values';\n          properties.value = 1;\n          if (!$util.isString(message.dimParam)) return 'dimParam: string expected';\n        }\n        if (message.denotation != null && message.hasOwnProperty('denotation'))\n          if (!$util.isString(message.denotation)) return 'denotation: string expected';\n        return null;\n      };\n\n      /**\n       * Creates a Dimension message from a plain object. Also converts values to their respective internal types.\n       * @function fromObject\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @static\n       * @param {Object.<string,*>} object Plain object\n       * @returns {onnx.TensorShapeProto.Dimension} Dimension\n       */\n      Dimension.fromObject = function fromObject(object) {\n        if (object instanceof $root.onnx.TensorShapeProto.Dimension) return object;\n        var message = new $root.onnx.TensorShapeProto.Dimension();\n        if (object.dimValue != null)\n          if ($util.Long) (message.dimValue = $util.Long.fromValue(object.dimValue)).unsigned = false;\n          else if (typeof object.dimValue === 'string') message.dimValue = parseInt(object.dimValue, 10);\n          else if (typeof object.dimValue === 'number') message.dimValue = object.dimValue;\n          else if (typeof object.dimValue === 'object')\n            message.dimValue = new $util.LongBits(object.dimValue.low >>> 0, object.dimValue.high >>> 0).toNumber();\n        if (object.dimParam != null) message.dimParam = String(object.dimParam);\n        if (object.denotation != null) message.denotation = String(object.denotation);\n        return message;\n      };\n\n      /**\n       * Creates a plain object from a Dimension message. Also converts values to other types if specified.\n       * @function toObject\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @static\n       * @param {onnx.TensorShapeProto.Dimension} message Dimension\n       * @param {$protobuf.IConversionOptions} [options] Conversion options\n       * @returns {Object.<string,*>} Plain object\n       */\n      Dimension.toObject = function toObject(message, options) {\n        if (!options) options = {};\n        var object = {};\n        if (options.defaults) object.denotation = '';\n        if (message.dimValue != null && message.hasOwnProperty('dimValue')) {\n          if (typeof message.dimValue === 'number')\n            object.dimValue = options.longs === String ? String(message.dimValue) : message.dimValue;\n          else\n            object.dimValue =\n              options.longs === String\n                ? $util.Long.prototype.toString.call(message.dimValue)\n                : options.longs === Number\n                  ? new $util.LongBits(message.dimValue.low >>> 0, message.dimValue.high >>> 0).toNumber()\n                  : message.dimValue;\n          if (options.oneofs) object.value = 'dimValue';\n        }\n        if (message.dimParam != null && message.hasOwnProperty('dimParam')) {\n          object.dimParam = message.dimParam;\n          if (options.oneofs) object.value = 'dimParam';\n        }\n        if (message.denotation != null && message.hasOwnProperty('denotation')) object.denotation = message.denotation;\n        return object;\n      };\n\n      /**\n       * Converts this Dimension to JSON.\n       * @function toJSON\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @instance\n       * @returns {Object.<string,*>} JSON object\n       */\n      Dimension.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n      };\n\n      /**\n       * Gets the default type url for Dimension\n       * @function getTypeUrl\n       * @memberof onnx.TensorShapeProto.Dimension\n       * @static\n       * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n       * @returns {string} The default type url\n       */\n      Dimension.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n          typeUrlPrefix = 'type.googleapis.com';\n        }\n        return typeUrlPrefix + '/onnx.TensorShapeProto.Dimension';\n      };\n\n      return Dimension;\n    })();\n\n    return TensorShapeProto;\n  })();\n\n  onnx.TypeProto = (function () {\n    /**\n     * Properties of a TypeProto.\n     * @memberof onnx\n     * @interface ITypeProto\n     * @property {onnx.TypeProto.ITensor|null} [tensorType] TypeProto tensorType\n     * @property {onnx.TypeProto.ISequence|null} [sequenceType] TypeProto sequenceType\n     * @property {onnx.TypeProto.IMap|null} [mapType] TypeProto mapType\n     * @property {onnx.TypeProto.IOptional|null} [optionalType] TypeProto optionalType\n     * @property {onnx.TypeProto.ISparseTensor|null} [sparseTensorType] TypeProto sparseTensorType\n     * @property {string|null} [denotation] TypeProto denotation\n     */\n\n    /**\n     * Constructs a new TypeProto.\n     * @memberof onnx\n     * @classdesc Represents a TypeProto.\n     * @implements ITypeProto\n     * @constructor\n     * @param {onnx.ITypeProto=} [properties] Properties to set\n     */\n    function TypeProto(properties) {\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * TypeProto tensorType.\n     * @member {onnx.TypeProto.ITensor|null|undefined} tensorType\n     * @memberof onnx.TypeProto\n     * @instance\n     */\n    TypeProto.prototype.tensorType = null;\n\n    /**\n     * TypeProto sequenceType.\n     * @member {onnx.TypeProto.ISequence|null|undefined} sequenceType\n     * @memberof onnx.TypeProto\n     * @instance\n     */\n    TypeProto.prototype.sequenceType = null;\n\n    /**\n     * TypeProto mapType.\n     * @member {onnx.TypeProto.IMap|null|undefined} mapType\n     * @memberof onnx.TypeProto\n     * @instance\n     */\n    TypeProto.prototype.mapType = null;\n\n    /**\n     * TypeProto optionalType.\n     * @member {onnx.TypeProto.IOptional|null|undefined} optionalType\n     * @memberof onnx.TypeProto\n     * @instance\n     */\n    TypeProto.prototype.optionalType = null;\n\n    /**\n     * TypeProto sparseTensorType.\n     * @member {onnx.TypeProto.ISparseTensor|null|undefined} sparseTensorType\n     * @memberof onnx.TypeProto\n     * @instance\n     */\n    TypeProto.prototype.sparseTensorType = null;\n\n    /**\n     * TypeProto denotation.\n     * @member {string} denotation\n     * @memberof onnx.TypeProto\n     * @instance\n     */\n    TypeProto.prototype.denotation = '';\n\n    // OneOf field names bound to virtual getters and setters\n    var $oneOfFields;\n\n    /**\n     * TypeProto value.\n     * @member {\"tensorType\"|\"sequenceType\"|\"mapType\"|\"optionalType\"|\"sparseTensorType\"|undefined} value\n     * @memberof onnx.TypeProto\n     * @instance\n     */\n    Object.defineProperty(TypeProto.prototype, 'value', {\n      get: $util.oneOfGetter(\n        ($oneOfFields = ['tensorType', 'sequenceType', 'mapType', 'optionalType', 'sparseTensorType']),\n      ),\n      set: $util.oneOfSetter($oneOfFields),\n    });\n\n    /**\n     * Creates a new TypeProto instance using the specified properties.\n     * @function create\n     * @memberof onnx.TypeProto\n     * @static\n     * @param {onnx.ITypeProto=} [properties] Properties to set\n     * @returns {onnx.TypeProto} TypeProto instance\n     */\n    TypeProto.create = function create(properties) {\n      return new TypeProto(properties);\n    };\n\n    /**\n     * Encodes the specified TypeProto message. Does not implicitly {@link onnx.TypeProto.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.TypeProto\n     * @static\n     * @param {onnx.ITypeProto} message TypeProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    TypeProto.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.tensorType != null && Object.hasOwnProperty.call(message, 'tensorType'))\n        $root.onnx.TypeProto.Tensor.encode(\n          message.tensorType,\n          writer.uint32(/* id 1, wireType 2 =*/ 10).fork(),\n        ).ldelim();\n      if (message.sequenceType != null && Object.hasOwnProperty.call(message, 'sequenceType'))\n        $root.onnx.TypeProto.Sequence.encode(\n          message.sequenceType,\n          writer.uint32(/* id 4, wireType 2 =*/ 34).fork(),\n        ).ldelim();\n      if (message.mapType != null && Object.hasOwnProperty.call(message, 'mapType'))\n        $root.onnx.TypeProto.Map.encode(message.mapType, writer.uint32(/* id 5, wireType 2 =*/ 42).fork()).ldelim();\n      if (message.denotation != null && Object.hasOwnProperty.call(message, 'denotation'))\n        writer.uint32(/* id 6, wireType 2 =*/ 50).string(message.denotation);\n      if (message.sparseTensorType != null && Object.hasOwnProperty.call(message, 'sparseTensorType'))\n        $root.onnx.TypeProto.SparseTensor.encode(\n          message.sparseTensorType,\n          writer.uint32(/* id 8, wireType 2 =*/ 66).fork(),\n        ).ldelim();\n      if (message.optionalType != null && Object.hasOwnProperty.call(message, 'optionalType'))\n        $root.onnx.TypeProto.Optional.encode(\n          message.optionalType,\n          writer.uint32(/* id 9, wireType 2 =*/ 74).fork(),\n        ).ldelim();\n      return writer;\n    };\n\n    /**\n     * Encodes the specified TypeProto message, length delimited. Does not implicitly {@link onnx.TypeProto.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.TypeProto\n     * @static\n     * @param {onnx.ITypeProto} message TypeProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    TypeProto.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a TypeProto message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.TypeProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.TypeProto} TypeProto\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    TypeProto.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.TypeProto();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            message.tensorType = $root.onnx.TypeProto.Tensor.decode(reader, reader.uint32());\n            break;\n          }\n          case 4: {\n            message.sequenceType = $root.onnx.TypeProto.Sequence.decode(reader, reader.uint32());\n            break;\n          }\n          case 5: {\n            message.mapType = $root.onnx.TypeProto.Map.decode(reader, reader.uint32());\n            break;\n          }\n          case 9: {\n            message.optionalType = $root.onnx.TypeProto.Optional.decode(reader, reader.uint32());\n            break;\n          }\n          case 8: {\n            message.sparseTensorType = $root.onnx.TypeProto.SparseTensor.decode(reader, reader.uint32());\n            break;\n          }\n          case 6: {\n            message.denotation = reader.string();\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes a TypeProto message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.TypeProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.TypeProto} TypeProto\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    TypeProto.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a TypeProto message.\n     * @function verify\n     * @memberof onnx.TypeProto\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    TypeProto.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      var properties = {};\n      if (message.tensorType != null && message.hasOwnProperty('tensorType')) {\n        properties.value = 1;\n        {\n          var error = $root.onnx.TypeProto.Tensor.verify(message.tensorType);\n          if (error) return 'tensorType.' + error;\n        }\n      }\n      if (message.sequenceType != null && message.hasOwnProperty('sequenceType')) {\n        if (properties.value === 1) return 'value: multiple values';\n        properties.value = 1;\n        {\n          var error = $root.onnx.TypeProto.Sequence.verify(message.sequenceType);\n          if (error) return 'sequenceType.' + error;\n        }\n      }\n      if (message.mapType != null && message.hasOwnProperty('mapType')) {\n        if (properties.value === 1) return 'value: multiple values';\n        properties.value = 1;\n        {\n          var error = $root.onnx.TypeProto.Map.verify(message.mapType);\n          if (error) return 'mapType.' + error;\n        }\n      }\n      if (message.optionalType != null && message.hasOwnProperty('optionalType')) {\n        if (properties.value === 1) return 'value: multiple values';\n        properties.value = 1;\n        {\n          var error = $root.onnx.TypeProto.Optional.verify(message.optionalType);\n          if (error) return 'optionalType.' + error;\n        }\n      }\n      if (message.sparseTensorType != null && message.hasOwnProperty('sparseTensorType')) {\n        if (properties.value === 1) return 'value: multiple values';\n        properties.value = 1;\n        {\n          var error = $root.onnx.TypeProto.SparseTensor.verify(message.sparseTensorType);\n          if (error) return 'sparseTensorType.' + error;\n        }\n      }\n      if (message.denotation != null && message.hasOwnProperty('denotation'))\n        if (!$util.isString(message.denotation)) return 'denotation: string expected';\n      return null;\n    };\n\n    /**\n     * Creates a TypeProto message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.TypeProto\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.TypeProto} TypeProto\n     */\n    TypeProto.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.TypeProto) return object;\n      var message = new $root.onnx.TypeProto();\n      if (object.tensorType != null) {\n        if (typeof object.tensorType !== 'object') throw TypeError('.onnx.TypeProto.tensorType: object expected');\n        message.tensorType = $root.onnx.TypeProto.Tensor.fromObject(object.tensorType);\n      }\n      if (object.sequenceType != null) {\n        if (typeof object.sequenceType !== 'object') throw TypeError('.onnx.TypeProto.sequenceType: object expected');\n        message.sequenceType = $root.onnx.TypeProto.Sequence.fromObject(object.sequenceType);\n      }\n      if (object.mapType != null) {\n        if (typeof object.mapType !== 'object') throw TypeError('.onnx.TypeProto.mapType: object expected');\n        message.mapType = $root.onnx.TypeProto.Map.fromObject(object.mapType);\n      }\n      if (object.optionalType != null) {\n        if (typeof object.optionalType !== 'object') throw TypeError('.onnx.TypeProto.optionalType: object expected');\n        message.optionalType = $root.onnx.TypeProto.Optional.fromObject(object.optionalType);\n      }\n      if (object.sparseTensorType != null) {\n        if (typeof object.sparseTensorType !== 'object')\n          throw TypeError('.onnx.TypeProto.sparseTensorType: object expected');\n        message.sparseTensorType = $root.onnx.TypeProto.SparseTensor.fromObject(object.sparseTensorType);\n      }\n      if (object.denotation != null) message.denotation = String(object.denotation);\n      return message;\n    };\n\n    /**\n     * Creates a plain object from a TypeProto message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.TypeProto\n     * @static\n     * @param {onnx.TypeProto} message TypeProto\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    TypeProto.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.defaults) object.denotation = '';\n      if (message.tensorType != null && message.hasOwnProperty('tensorType')) {\n        object.tensorType = $root.onnx.TypeProto.Tensor.toObject(message.tensorType, options);\n        if (options.oneofs) object.value = 'tensorType';\n      }\n      if (message.sequenceType != null && message.hasOwnProperty('sequenceType')) {\n        object.sequenceType = $root.onnx.TypeProto.Sequence.toObject(message.sequenceType, options);\n        if (options.oneofs) object.value = 'sequenceType';\n      }\n      if (message.mapType != null && message.hasOwnProperty('mapType')) {\n        object.mapType = $root.onnx.TypeProto.Map.toObject(message.mapType, options);\n        if (options.oneofs) object.value = 'mapType';\n      }\n      if (message.denotation != null && message.hasOwnProperty('denotation')) object.denotation = message.denotation;\n      if (message.sparseTensorType != null && message.hasOwnProperty('sparseTensorType')) {\n        object.sparseTensorType = $root.onnx.TypeProto.SparseTensor.toObject(message.sparseTensorType, options);\n        if (options.oneofs) object.value = 'sparseTensorType';\n      }\n      if (message.optionalType != null && message.hasOwnProperty('optionalType')) {\n        object.optionalType = $root.onnx.TypeProto.Optional.toObject(message.optionalType, options);\n        if (options.oneofs) object.value = 'optionalType';\n      }\n      return object;\n    };\n\n    /**\n     * Converts this TypeProto to JSON.\n     * @function toJSON\n     * @memberof onnx.TypeProto\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    TypeProto.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for TypeProto\n     * @function getTypeUrl\n     * @memberof onnx.TypeProto\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    TypeProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.TypeProto';\n    };\n\n    TypeProto.Tensor = (function () {\n      /**\n       * Properties of a Tensor.\n       * @memberof onnx.TypeProto\n       * @interface ITensor\n       * @property {number|null} [elemType] Tensor elemType\n       * @property {onnx.ITensorShapeProto|null} [shape] Tensor shape\n       */\n\n      /**\n       * Constructs a new Tensor.\n       * @memberof onnx.TypeProto\n       * @classdesc Represents a Tensor.\n       * @implements ITensor\n       * @constructor\n       * @param {onnx.TypeProto.ITensor=} [properties] Properties to set\n       */\n      function Tensor(properties) {\n        if (properties)\n          for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n            if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n      }\n\n      /**\n       * Tensor elemType.\n       * @member {number} elemType\n       * @memberof onnx.TypeProto.Tensor\n       * @instance\n       */\n      Tensor.prototype.elemType = 0;\n\n      /**\n       * Tensor shape.\n       * @member {onnx.ITensorShapeProto|null|undefined} shape\n       * @memberof onnx.TypeProto.Tensor\n       * @instance\n       */\n      Tensor.prototype.shape = null;\n\n      /**\n       * Creates a new Tensor instance using the specified properties.\n       * @function create\n       * @memberof onnx.TypeProto.Tensor\n       * @static\n       * @param {onnx.TypeProto.ITensor=} [properties] Properties to set\n       * @returns {onnx.TypeProto.Tensor} Tensor instance\n       */\n      Tensor.create = function create(properties) {\n        return new Tensor(properties);\n      };\n\n      /**\n       * Encodes the specified Tensor message. Does not implicitly {@link onnx.TypeProto.Tensor.verify|verify} messages.\n       * @function encode\n       * @memberof onnx.TypeProto.Tensor\n       * @static\n       * @param {onnx.TypeProto.ITensor} message Tensor message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      Tensor.encode = function encode(message, writer) {\n        if (!writer) writer = $Writer.create();\n        if (message.elemType != null && Object.hasOwnProperty.call(message, 'elemType'))\n          writer.uint32(/* id 1, wireType 0 =*/ 8).int32(message.elemType);\n        if (message.shape != null && Object.hasOwnProperty.call(message, 'shape'))\n          $root.onnx.TensorShapeProto.encode(message.shape, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();\n        return writer;\n      };\n\n      /**\n       * Encodes the specified Tensor message, length delimited. Does not implicitly {@link onnx.TypeProto.Tensor.verify|verify} messages.\n       * @function encodeDelimited\n       * @memberof onnx.TypeProto.Tensor\n       * @static\n       * @param {onnx.TypeProto.ITensor} message Tensor message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      Tensor.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n      };\n\n      /**\n       * Decodes a Tensor message from the specified reader or buffer.\n       * @function decode\n       * @memberof onnx.TypeProto.Tensor\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @param {number} [length] Message length if known beforehand\n       * @returns {onnx.TypeProto.Tensor} Tensor\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      Tensor.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length,\n          message = new $root.onnx.TypeProto.Tensor();\n        while (reader.pos < end) {\n          var tag = reader.uint32();\n          switch (tag >>> 3) {\n            case 1: {\n              message.elemType = reader.int32();\n              break;\n            }\n            case 2: {\n              message.shape = $root.onnx.TensorShapeProto.decode(reader, reader.uint32());\n              break;\n            }\n            default:\n              reader.skipType(tag & 7);\n              break;\n          }\n        }\n        return message;\n      };\n\n      /**\n       * Decodes a Tensor message from the specified reader or buffer, length delimited.\n       * @function decodeDelimited\n       * @memberof onnx.TypeProto.Tensor\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @returns {onnx.TypeProto.Tensor} Tensor\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      Tensor.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n      };\n\n      /**\n       * Verifies a Tensor message.\n       * @function verify\n       * @memberof onnx.TypeProto.Tensor\n       * @static\n       * @param {Object.<string,*>} message Plain object to verify\n       * @returns {string|null} `null` if valid, otherwise the reason why it is not\n       */\n      Tensor.verify = function verify(message) {\n        if (typeof message !== 'object' || message === null) return 'object expected';\n        if (message.elemType != null && message.hasOwnProperty('elemType'))\n          if (!$util.isInteger(message.elemType)) return 'elemType: integer expected';\n        if (message.shape != null && message.hasOwnProperty('shape')) {\n          var error = $root.onnx.TensorShapeProto.verify(message.shape);\n          if (error) return 'shape.' + error;\n        }\n        return null;\n      };\n\n      /**\n       * Creates a Tensor message from a plain object. Also converts values to their respective internal types.\n       * @function fromObject\n       * @memberof onnx.TypeProto.Tensor\n       * @static\n       * @param {Object.<string,*>} object Plain object\n       * @returns {onnx.TypeProto.Tensor} Tensor\n       */\n      Tensor.fromObject = function fromObject(object) {\n        if (object instanceof $root.onnx.TypeProto.Tensor) return object;\n        var message = new $root.onnx.TypeProto.Tensor();\n        if (object.elemType != null) message.elemType = object.elemType | 0;\n        if (object.shape != null) {\n          if (typeof object.shape !== 'object') throw TypeError('.onnx.TypeProto.Tensor.shape: object expected');\n          message.shape = $root.onnx.TensorShapeProto.fromObject(object.shape);\n        }\n        return message;\n      };\n\n      /**\n       * Creates a plain object from a Tensor message. Also converts values to other types if specified.\n       * @function toObject\n       * @memberof onnx.TypeProto.Tensor\n       * @static\n       * @param {onnx.TypeProto.Tensor} message Tensor\n       * @param {$protobuf.IConversionOptions} [options] Conversion options\n       * @returns {Object.<string,*>} Plain object\n       */\n      Tensor.toObject = function toObject(message, options) {\n        if (!options) options = {};\n        var object = {};\n        if (options.defaults) {\n          object.elemType = 0;\n          object.shape = null;\n        }\n        if (message.elemType != null && message.hasOwnProperty('elemType')) object.elemType = message.elemType;\n        if (message.shape != null && message.hasOwnProperty('shape'))\n          object.shape = $root.onnx.TensorShapeProto.toObject(message.shape, options);\n        return object;\n      };\n\n      /**\n       * Converts this Tensor to JSON.\n       * @function toJSON\n       * @memberof onnx.TypeProto.Tensor\n       * @instance\n       * @returns {Object.<string,*>} JSON object\n       */\n      Tensor.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n      };\n\n      /**\n       * Gets the default type url for Tensor\n       * @function getTypeUrl\n       * @memberof onnx.TypeProto.Tensor\n       * @static\n       * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n       * @returns {string} The default type url\n       */\n      Tensor.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n          typeUrlPrefix = 'type.googleapis.com';\n        }\n        return typeUrlPrefix + '/onnx.TypeProto.Tensor';\n      };\n\n      return Tensor;\n    })();\n\n    TypeProto.Sequence = (function () {\n      /**\n       * Properties of a Sequence.\n       * @memberof onnx.TypeProto\n       * @interface ISequence\n       * @property {onnx.ITypeProto|null} [elemType] Sequence elemType\n       */\n\n      /**\n       * Constructs a new Sequence.\n       * @memberof onnx.TypeProto\n       * @classdesc Represents a Sequence.\n       * @implements ISequence\n       * @constructor\n       * @param {onnx.TypeProto.ISequence=} [properties] Properties to set\n       */\n      function Sequence(properties) {\n        if (properties)\n          for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n            if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n      }\n\n      /**\n       * Sequence elemType.\n       * @member {onnx.ITypeProto|null|undefined} elemType\n       * @memberof onnx.TypeProto.Sequence\n       * @instance\n       */\n      Sequence.prototype.elemType = null;\n\n      /**\n       * Creates a new Sequence instance using the specified properties.\n       * @function create\n       * @memberof onnx.TypeProto.Sequence\n       * @static\n       * @param {onnx.TypeProto.ISequence=} [properties] Properties to set\n       * @returns {onnx.TypeProto.Sequence} Sequence instance\n       */\n      Sequence.create = function create(properties) {\n        return new Sequence(properties);\n      };\n\n      /**\n       * Encodes the specified Sequence message. Does not implicitly {@link onnx.TypeProto.Sequence.verify|verify} messages.\n       * @function encode\n       * @memberof onnx.TypeProto.Sequence\n       * @static\n       * @param {onnx.TypeProto.ISequence} message Sequence message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      Sequence.encode = function encode(message, writer) {\n        if (!writer) writer = $Writer.create();\n        if (message.elemType != null && Object.hasOwnProperty.call(message, 'elemType'))\n          $root.onnx.TypeProto.encode(message.elemType, writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();\n        return writer;\n      };\n\n      /**\n       * Encodes the specified Sequence message, length delimited. Does not implicitly {@link onnx.TypeProto.Sequence.verify|verify} messages.\n       * @function encodeDelimited\n       * @memberof onnx.TypeProto.Sequence\n       * @static\n       * @param {onnx.TypeProto.ISequence} message Sequence message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      Sequence.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n      };\n\n      /**\n       * Decodes a Sequence message from the specified reader or buffer.\n       * @function decode\n       * @memberof onnx.TypeProto.Sequence\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @param {number} [length] Message length if known beforehand\n       * @returns {onnx.TypeProto.Sequence} Sequence\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      Sequence.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length,\n          message = new $root.onnx.TypeProto.Sequence();\n        while (reader.pos < end) {\n          var tag = reader.uint32();\n          switch (tag >>> 3) {\n            case 1: {\n              message.elemType = $root.onnx.TypeProto.decode(reader, reader.uint32());\n              break;\n            }\n            default:\n              reader.skipType(tag & 7);\n              break;\n          }\n        }\n        return message;\n      };\n\n      /**\n       * Decodes a Sequence message from the specified reader or buffer, length delimited.\n       * @function decodeDelimited\n       * @memberof onnx.TypeProto.Sequence\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @returns {onnx.TypeProto.Sequence} Sequence\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      Sequence.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n      };\n\n      /**\n       * Verifies a Sequence message.\n       * @function verify\n       * @memberof onnx.TypeProto.Sequence\n       * @static\n       * @param {Object.<string,*>} message Plain object to verify\n       * @returns {string|null} `null` if valid, otherwise the reason why it is not\n       */\n      Sequence.verify = function verify(message) {\n        if (typeof message !== 'object' || message === null) return 'object expected';\n        if (message.elemType != null && message.hasOwnProperty('elemType')) {\n          var error = $root.onnx.TypeProto.verify(message.elemType);\n          if (error) return 'elemType.' + error;\n        }\n        return null;\n      };\n\n      /**\n       * Creates a Sequence message from a plain object. Also converts values to their respective internal types.\n       * @function fromObject\n       * @memberof onnx.TypeProto.Sequence\n       * @static\n       * @param {Object.<string,*>} object Plain object\n       * @returns {onnx.TypeProto.Sequence} Sequence\n       */\n      Sequence.fromObject = function fromObject(object) {\n        if (object instanceof $root.onnx.TypeProto.Sequence) return object;\n        var message = new $root.onnx.TypeProto.Sequence();\n        if (object.elemType != null) {\n          if (typeof object.elemType !== 'object')\n            throw TypeError('.onnx.TypeProto.Sequence.elemType: object expected');\n          message.elemType = $root.onnx.TypeProto.fromObject(object.elemType);\n        }\n        return message;\n      };\n\n      /**\n       * Creates a plain object from a Sequence message. Also converts values to other types if specified.\n       * @function toObject\n       * @memberof onnx.TypeProto.Sequence\n       * @static\n       * @param {onnx.TypeProto.Sequence} message Sequence\n       * @param {$protobuf.IConversionOptions} [options] Conversion options\n       * @returns {Object.<string,*>} Plain object\n       */\n      Sequence.toObject = function toObject(message, options) {\n        if (!options) options = {};\n        var object = {};\n        if (options.defaults) object.elemType = null;\n        if (message.elemType != null && message.hasOwnProperty('elemType'))\n          object.elemType = $root.onnx.TypeProto.toObject(message.elemType, options);\n        return object;\n      };\n\n      /**\n       * Converts this Sequence to JSON.\n       * @function toJSON\n       * @memberof onnx.TypeProto.Sequence\n       * @instance\n       * @returns {Object.<string,*>} JSON object\n       */\n      Sequence.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n      };\n\n      /**\n       * Gets the default type url for Sequence\n       * @function getTypeUrl\n       * @memberof onnx.TypeProto.Sequence\n       * @static\n       * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n       * @returns {string} The default type url\n       */\n      Sequence.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n          typeUrlPrefix = 'type.googleapis.com';\n        }\n        return typeUrlPrefix + '/onnx.TypeProto.Sequence';\n      };\n\n      return Sequence;\n    })();\n\n    TypeProto.Map = (function () {\n      /**\n       * Properties of a Map.\n       * @memberof onnx.TypeProto\n       * @interface IMap\n       * @property {number|null} [keyType] Map keyType\n       * @property {onnx.ITypeProto|null} [valueType] Map valueType\n       */\n\n      /**\n       * Constructs a new Map.\n       * @memberof onnx.TypeProto\n       * @classdesc Represents a Map.\n       * @implements IMap\n       * @constructor\n       * @param {onnx.TypeProto.IMap=} [properties] Properties to set\n       */\n      function Map(properties) {\n        if (properties)\n          for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n            if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n      }\n\n      /**\n       * Map keyType.\n       * @member {number} keyType\n       * @memberof onnx.TypeProto.Map\n       * @instance\n       */\n      Map.prototype.keyType = 0;\n\n      /**\n       * Map valueType.\n       * @member {onnx.ITypeProto|null|undefined} valueType\n       * @memberof onnx.TypeProto.Map\n       * @instance\n       */\n      Map.prototype.valueType = null;\n\n      /**\n       * Creates a new Map instance using the specified properties.\n       * @function create\n       * @memberof onnx.TypeProto.Map\n       * @static\n       * @param {onnx.TypeProto.IMap=} [properties] Properties to set\n       * @returns {onnx.TypeProto.Map} Map instance\n       */\n      Map.create = function create(properties) {\n        return new Map(properties);\n      };\n\n      /**\n       * Encodes the specified Map message. Does not implicitly {@link onnx.TypeProto.Map.verify|verify} messages.\n       * @function encode\n       * @memberof onnx.TypeProto.Map\n       * @static\n       * @param {onnx.TypeProto.IMap} message Map message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      Map.encode = function encode(message, writer) {\n        if (!writer) writer = $Writer.create();\n        if (message.keyType != null && Object.hasOwnProperty.call(message, 'keyType'))\n          writer.uint32(/* id 1, wireType 0 =*/ 8).int32(message.keyType);\n        if (message.valueType != null && Object.hasOwnProperty.call(message, 'valueType'))\n          $root.onnx.TypeProto.encode(message.valueType, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();\n        return writer;\n      };\n\n      /**\n       * Encodes the specified Map message, length delimited. Does not implicitly {@link onnx.TypeProto.Map.verify|verify} messages.\n       * @function encodeDelimited\n       * @memberof onnx.TypeProto.Map\n       * @static\n       * @param {onnx.TypeProto.IMap} message Map message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      Map.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n      };\n\n      /**\n       * Decodes a Map message from the specified reader or buffer.\n       * @function decode\n       * @memberof onnx.TypeProto.Map\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @param {number} [length] Message length if known beforehand\n       * @returns {onnx.TypeProto.Map} Map\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      Map.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length,\n          message = new $root.onnx.TypeProto.Map();\n        while (reader.pos < end) {\n          var tag = reader.uint32();\n          switch (tag >>> 3) {\n            case 1: {\n              message.keyType = reader.int32();\n              break;\n            }\n            case 2: {\n              message.valueType = $root.onnx.TypeProto.decode(reader, reader.uint32());\n              break;\n            }\n            default:\n              reader.skipType(tag & 7);\n              break;\n          }\n        }\n        return message;\n      };\n\n      /**\n       * Decodes a Map message from the specified reader or buffer, length delimited.\n       * @function decodeDelimited\n       * @memberof onnx.TypeProto.Map\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @returns {onnx.TypeProto.Map} Map\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      Map.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n      };\n\n      /**\n       * Verifies a Map message.\n       * @function verify\n       * @memberof onnx.TypeProto.Map\n       * @static\n       * @param {Object.<string,*>} message Plain object to verify\n       * @returns {string|null} `null` if valid, otherwise the reason why it is not\n       */\n      Map.verify = function verify(message) {\n        if (typeof message !== 'object' || message === null) return 'object expected';\n        if (message.keyType != null && message.hasOwnProperty('keyType'))\n          if (!$util.isInteger(message.keyType)) return 'keyType: integer expected';\n        if (message.valueType != null && message.hasOwnProperty('valueType')) {\n          var error = $root.onnx.TypeProto.verify(message.valueType);\n          if (error) return 'valueType.' + error;\n        }\n        return null;\n      };\n\n      /**\n       * Creates a Map message from a plain object. Also converts values to their respective internal types.\n       * @function fromObject\n       * @memberof onnx.TypeProto.Map\n       * @static\n       * @param {Object.<string,*>} object Plain object\n       * @returns {onnx.TypeProto.Map} Map\n       */\n      Map.fromObject = function fromObject(object) {\n        if (object instanceof $root.onnx.TypeProto.Map) return object;\n        var message = new $root.onnx.TypeProto.Map();\n        if (object.keyType != null) message.keyType = object.keyType | 0;\n        if (object.valueType != null) {\n          if (typeof object.valueType !== 'object') throw TypeError('.onnx.TypeProto.Map.valueType: object expected');\n          message.valueType = $root.onnx.TypeProto.fromObject(object.valueType);\n        }\n        return message;\n      };\n\n      /**\n       * Creates a plain object from a Map message. Also converts values to other types if specified.\n       * @function toObject\n       * @memberof onnx.TypeProto.Map\n       * @static\n       * @param {onnx.TypeProto.Map} message Map\n       * @param {$protobuf.IConversionOptions} [options] Conversion options\n       * @returns {Object.<string,*>} Plain object\n       */\n      Map.toObject = function toObject(message, options) {\n        if (!options) options = {};\n        var object = {};\n        if (options.defaults) {\n          object.keyType = 0;\n          object.valueType = null;\n        }\n        if (message.keyType != null && message.hasOwnProperty('keyType')) object.keyType = message.keyType;\n        if (message.valueType != null && message.hasOwnProperty('valueType'))\n          object.valueType = $root.onnx.TypeProto.toObject(message.valueType, options);\n        return object;\n      };\n\n      /**\n       * Converts this Map to JSON.\n       * @function toJSON\n       * @memberof onnx.TypeProto.Map\n       * @instance\n       * @returns {Object.<string,*>} JSON object\n       */\n      Map.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n      };\n\n      /**\n       * Gets the default type url for Map\n       * @function getTypeUrl\n       * @memberof onnx.TypeProto.Map\n       * @static\n       * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n       * @returns {string} The default type url\n       */\n      Map.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n          typeUrlPrefix = 'type.googleapis.com';\n        }\n        return typeUrlPrefix + '/onnx.TypeProto.Map';\n      };\n\n      return Map;\n    })();\n\n    TypeProto.Optional = (function () {\n      /**\n       * Properties of an Optional.\n       * @memberof onnx.TypeProto\n       * @interface IOptional\n       * @property {onnx.ITypeProto|null} [elemType] Optional elemType\n       */\n\n      /**\n       * Constructs a new Optional.\n       * @memberof onnx.TypeProto\n       * @classdesc Represents an Optional.\n       * @implements IOptional\n       * @constructor\n       * @param {onnx.TypeProto.IOptional=} [properties] Properties to set\n       */\n      function Optional(properties) {\n        if (properties)\n          for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n            if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n      }\n\n      /**\n       * Optional elemType.\n       * @member {onnx.ITypeProto|null|undefined} elemType\n       * @memberof onnx.TypeProto.Optional\n       * @instance\n       */\n      Optional.prototype.elemType = null;\n\n      /**\n       * Creates a new Optional instance using the specified properties.\n       * @function create\n       * @memberof onnx.TypeProto.Optional\n       * @static\n       * @param {onnx.TypeProto.IOptional=} [properties] Properties to set\n       * @returns {onnx.TypeProto.Optional} Optional instance\n       */\n      Optional.create = function create(properties) {\n        return new Optional(properties);\n      };\n\n      /**\n       * Encodes the specified Optional message. Does not implicitly {@link onnx.TypeProto.Optional.verify|verify} messages.\n       * @function encode\n       * @memberof onnx.TypeProto.Optional\n       * @static\n       * @param {onnx.TypeProto.IOptional} message Optional message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      Optional.encode = function encode(message, writer) {\n        if (!writer) writer = $Writer.create();\n        if (message.elemType != null && Object.hasOwnProperty.call(message, 'elemType'))\n          $root.onnx.TypeProto.encode(message.elemType, writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();\n        return writer;\n      };\n\n      /**\n       * Encodes the specified Optional message, length delimited. Does not implicitly {@link onnx.TypeProto.Optional.verify|verify} messages.\n       * @function encodeDelimited\n       * @memberof onnx.TypeProto.Optional\n       * @static\n       * @param {onnx.TypeProto.IOptional} message Optional message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      Optional.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n      };\n\n      /**\n       * Decodes an Optional message from the specified reader or buffer.\n       * @function decode\n       * @memberof onnx.TypeProto.Optional\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @param {number} [length] Message length if known beforehand\n       * @returns {onnx.TypeProto.Optional} Optional\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      Optional.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length,\n          message = new $root.onnx.TypeProto.Optional();\n        while (reader.pos < end) {\n          var tag = reader.uint32();\n          switch (tag >>> 3) {\n            case 1: {\n              message.elemType = $root.onnx.TypeProto.decode(reader, reader.uint32());\n              break;\n            }\n            default:\n              reader.skipType(tag & 7);\n              break;\n          }\n        }\n        return message;\n      };\n\n      /**\n       * Decodes an Optional message from the specified reader or buffer, length delimited.\n       * @function decodeDelimited\n       * @memberof onnx.TypeProto.Optional\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @returns {onnx.TypeProto.Optional} Optional\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      Optional.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n      };\n\n      /**\n       * Verifies an Optional message.\n       * @function verify\n       * @memberof onnx.TypeProto.Optional\n       * @static\n       * @param {Object.<string,*>} message Plain object to verify\n       * @returns {string|null} `null` if valid, otherwise the reason why it is not\n       */\n      Optional.verify = function verify(message) {\n        if (typeof message !== 'object' || message === null) return 'object expected';\n        if (message.elemType != null && message.hasOwnProperty('elemType')) {\n          var error = $root.onnx.TypeProto.verify(message.elemType);\n          if (error) return 'elemType.' + error;\n        }\n        return null;\n      };\n\n      /**\n       * Creates an Optional message from a plain object. Also converts values to their respective internal types.\n       * @function fromObject\n       * @memberof onnx.TypeProto.Optional\n       * @static\n       * @param {Object.<string,*>} object Plain object\n       * @returns {onnx.TypeProto.Optional} Optional\n       */\n      Optional.fromObject = function fromObject(object) {\n        if (object instanceof $root.onnx.TypeProto.Optional) return object;\n        var message = new $root.onnx.TypeProto.Optional();\n        if (object.elemType != null) {\n          if (typeof object.elemType !== 'object')\n            throw TypeError('.onnx.TypeProto.Optional.elemType: object expected');\n          message.elemType = $root.onnx.TypeProto.fromObject(object.elemType);\n        }\n        return message;\n      };\n\n      /**\n       * Creates a plain object from an Optional message. Also converts values to other types if specified.\n       * @function toObject\n       * @memberof onnx.TypeProto.Optional\n       * @static\n       * @param {onnx.TypeProto.Optional} message Optional\n       * @param {$protobuf.IConversionOptions} [options] Conversion options\n       * @returns {Object.<string,*>} Plain object\n       */\n      Optional.toObject = function toObject(message, options) {\n        if (!options) options = {};\n        var object = {};\n        if (options.defaults) object.elemType = null;\n        if (message.elemType != null && message.hasOwnProperty('elemType'))\n          object.elemType = $root.onnx.TypeProto.toObject(message.elemType, options);\n        return object;\n      };\n\n      /**\n       * Converts this Optional to JSON.\n       * @function toJSON\n       * @memberof onnx.TypeProto.Optional\n       * @instance\n       * @returns {Object.<string,*>} JSON object\n       */\n      Optional.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n      };\n\n      /**\n       * Gets the default type url for Optional\n       * @function getTypeUrl\n       * @memberof onnx.TypeProto.Optional\n       * @static\n       * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n       * @returns {string} The default type url\n       */\n      Optional.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n          typeUrlPrefix = 'type.googleapis.com';\n        }\n        return typeUrlPrefix + '/onnx.TypeProto.Optional';\n      };\n\n      return Optional;\n    })();\n\n    TypeProto.SparseTensor = (function () {\n      /**\n       * Properties of a SparseTensor.\n       * @memberof onnx.TypeProto\n       * @interface ISparseTensor\n       * @property {number|null} [elemType] SparseTensor elemType\n       * @property {onnx.ITensorShapeProto|null} [shape] SparseTensor shape\n       */\n\n      /**\n       * Constructs a new SparseTensor.\n       * @memberof onnx.TypeProto\n       * @classdesc Represents a SparseTensor.\n       * @implements ISparseTensor\n       * @constructor\n       * @param {onnx.TypeProto.ISparseTensor=} [properties] Properties to set\n       */\n      function SparseTensor(properties) {\n        if (properties)\n          for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n            if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n      }\n\n      /**\n       * SparseTensor elemType.\n       * @member {number} elemType\n       * @memberof onnx.TypeProto.SparseTensor\n       * @instance\n       */\n      SparseTensor.prototype.elemType = 0;\n\n      /**\n       * SparseTensor shape.\n       * @member {onnx.ITensorShapeProto|null|undefined} shape\n       * @memberof onnx.TypeProto.SparseTensor\n       * @instance\n       */\n      SparseTensor.prototype.shape = null;\n\n      /**\n       * Creates a new SparseTensor instance using the specified properties.\n       * @function create\n       * @memberof onnx.TypeProto.SparseTensor\n       * @static\n       * @param {onnx.TypeProto.ISparseTensor=} [properties] Properties to set\n       * @returns {onnx.TypeProto.SparseTensor} SparseTensor instance\n       */\n      SparseTensor.create = function create(properties) {\n        return new SparseTensor(properties);\n      };\n\n      /**\n       * Encodes the specified SparseTensor message. Does not implicitly {@link onnx.TypeProto.SparseTensor.verify|verify} messages.\n       * @function encode\n       * @memberof onnx.TypeProto.SparseTensor\n       * @static\n       * @param {onnx.TypeProto.ISparseTensor} message SparseTensor message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      SparseTensor.encode = function encode(message, writer) {\n        if (!writer) writer = $Writer.create();\n        if (message.elemType != null && Object.hasOwnProperty.call(message, 'elemType'))\n          writer.uint32(/* id 1, wireType 0 =*/ 8).int32(message.elemType);\n        if (message.shape != null && Object.hasOwnProperty.call(message, 'shape'))\n          $root.onnx.TensorShapeProto.encode(message.shape, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();\n        return writer;\n      };\n\n      /**\n       * Encodes the specified SparseTensor message, length delimited. Does not implicitly {@link onnx.TypeProto.SparseTensor.verify|verify} messages.\n       * @function encodeDelimited\n       * @memberof onnx.TypeProto.SparseTensor\n       * @static\n       * @param {onnx.TypeProto.ISparseTensor} message SparseTensor message or plain object to encode\n       * @param {$protobuf.Writer} [writer] Writer to encode to\n       * @returns {$protobuf.Writer} Writer\n       */\n      SparseTensor.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n      };\n\n      /**\n       * Decodes a SparseTensor message from the specified reader or buffer.\n       * @function decode\n       * @memberof onnx.TypeProto.SparseTensor\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @param {number} [length] Message length if known beforehand\n       * @returns {onnx.TypeProto.SparseTensor} SparseTensor\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      SparseTensor.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length,\n          message = new $root.onnx.TypeProto.SparseTensor();\n        while (reader.pos < end) {\n          var tag = reader.uint32();\n          switch (tag >>> 3) {\n            case 1: {\n              message.elemType = reader.int32();\n              break;\n            }\n            case 2: {\n              message.shape = $root.onnx.TensorShapeProto.decode(reader, reader.uint32());\n              break;\n            }\n            default:\n              reader.skipType(tag & 7);\n              break;\n          }\n        }\n        return message;\n      };\n\n      /**\n       * Decodes a SparseTensor message from the specified reader or buffer, length delimited.\n       * @function decodeDelimited\n       * @memberof onnx.TypeProto.SparseTensor\n       * @static\n       * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n       * @returns {onnx.TypeProto.SparseTensor} SparseTensor\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      SparseTensor.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n      };\n\n      /**\n       * Verifies a SparseTensor message.\n       * @function verify\n       * @memberof onnx.TypeProto.SparseTensor\n       * @static\n       * @param {Object.<string,*>} message Plain object to verify\n       * @returns {string|null} `null` if valid, otherwise the reason why it is not\n       */\n      SparseTensor.verify = function verify(message) {\n        if (typeof message !== 'object' || message === null) return 'object expected';\n        if (message.elemType != null && message.hasOwnProperty('elemType'))\n          if (!$util.isInteger(message.elemType)) return 'elemType: integer expected';\n        if (message.shape != null && message.hasOwnProperty('shape')) {\n          var error = $root.onnx.TensorShapeProto.verify(message.shape);\n          if (error) return 'shape.' + error;\n        }\n        return null;\n      };\n\n      /**\n       * Creates a SparseTensor message from a plain object. Also converts values to their respective internal types.\n       * @function fromObject\n       * @memberof onnx.TypeProto.SparseTensor\n       * @static\n       * @param {Object.<string,*>} object Plain object\n       * @returns {onnx.TypeProto.SparseTensor} SparseTensor\n       */\n      SparseTensor.fromObject = function fromObject(object) {\n        if (object instanceof $root.onnx.TypeProto.SparseTensor) return object;\n        var message = new $root.onnx.TypeProto.SparseTensor();\n        if (object.elemType != null) message.elemType = object.elemType | 0;\n        if (object.shape != null) {\n          if (typeof object.shape !== 'object') throw TypeError('.onnx.TypeProto.SparseTensor.shape: object expected');\n          message.shape = $root.onnx.TensorShapeProto.fromObject(object.shape);\n        }\n        return message;\n      };\n\n      /**\n       * Creates a plain object from a SparseTensor message. Also converts values to other types if specified.\n       * @function toObject\n       * @memberof onnx.TypeProto.SparseTensor\n       * @static\n       * @param {onnx.TypeProto.SparseTensor} message SparseTensor\n       * @param {$protobuf.IConversionOptions} [options] Conversion options\n       * @returns {Object.<string,*>} Plain object\n       */\n      SparseTensor.toObject = function toObject(message, options) {\n        if (!options) options = {};\n        var object = {};\n        if (options.defaults) {\n          object.elemType = 0;\n          object.shape = null;\n        }\n        if (message.elemType != null && message.hasOwnProperty('elemType')) object.elemType = message.elemType;\n        if (message.shape != null && message.hasOwnProperty('shape'))\n          object.shape = $root.onnx.TensorShapeProto.toObject(message.shape, options);\n        return object;\n      };\n\n      /**\n       * Converts this SparseTensor to JSON.\n       * @function toJSON\n       * @memberof onnx.TypeProto.SparseTensor\n       * @instance\n       * @returns {Object.<string,*>} JSON object\n       */\n      SparseTensor.prototype.toJSON = function toJSON() {\n        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n      };\n\n      /**\n       * Gets the default type url for SparseTensor\n       * @function getTypeUrl\n       * @memberof onnx.TypeProto.SparseTensor\n       * @static\n       * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n       * @returns {string} The default type url\n       */\n      SparseTensor.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n        if (typeUrlPrefix === undefined) {\n          typeUrlPrefix = 'type.googleapis.com';\n        }\n        return typeUrlPrefix + '/onnx.TypeProto.SparseTensor';\n      };\n\n      return SparseTensor;\n    })();\n\n    return TypeProto;\n  })();\n\n  onnx.OperatorSetIdProto = (function () {\n    /**\n     * Properties of an OperatorSetIdProto.\n     * @memberof onnx\n     * @interface IOperatorSetIdProto\n     * @property {string|null} [domain] OperatorSetIdProto domain\n     * @property {number|Long|null} [version] OperatorSetIdProto version\n     */\n\n    /**\n     * Constructs a new OperatorSetIdProto.\n     * @memberof onnx\n     * @classdesc Represents an OperatorSetIdProto.\n     * @implements IOperatorSetIdProto\n     * @constructor\n     * @param {onnx.IOperatorSetIdProto=} [properties] Properties to set\n     */\n    function OperatorSetIdProto(properties) {\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * OperatorSetIdProto domain.\n     * @member {string} domain\n     * @memberof onnx.OperatorSetIdProto\n     * @instance\n     */\n    OperatorSetIdProto.prototype.domain = '';\n\n    /**\n     * OperatorSetIdProto version.\n     * @member {number|Long} version\n     * @memberof onnx.OperatorSetIdProto\n     * @instance\n     */\n    OperatorSetIdProto.prototype.version = $util.Long ? $util.Long.fromBits(0, 0, false) : 0;\n\n    /**\n     * Creates a new OperatorSetIdProto instance using the specified properties.\n     * @function create\n     * @memberof onnx.OperatorSetIdProto\n     * @static\n     * @param {onnx.IOperatorSetIdProto=} [properties] Properties to set\n     * @returns {onnx.OperatorSetIdProto} OperatorSetIdProto instance\n     */\n    OperatorSetIdProto.create = function create(properties) {\n      return new OperatorSetIdProto(properties);\n    };\n\n    /**\n     * Encodes the specified OperatorSetIdProto message. Does not implicitly {@link onnx.OperatorSetIdProto.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.OperatorSetIdProto\n     * @static\n     * @param {onnx.IOperatorSetIdProto} message OperatorSetIdProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    OperatorSetIdProto.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.domain != null && Object.hasOwnProperty.call(message, 'domain'))\n        writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.domain);\n      if (message.version != null && Object.hasOwnProperty.call(message, 'version'))\n        writer.uint32(/* id 2, wireType 0 =*/ 16).int64(message.version);\n      return writer;\n    };\n\n    /**\n     * Encodes the specified OperatorSetIdProto message, length delimited. Does not implicitly {@link onnx.OperatorSetIdProto.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.OperatorSetIdProto\n     * @static\n     * @param {onnx.IOperatorSetIdProto} message OperatorSetIdProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    OperatorSetIdProto.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes an OperatorSetIdProto message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.OperatorSetIdProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.OperatorSetIdProto} OperatorSetIdProto\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    OperatorSetIdProto.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.OperatorSetIdProto();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            message.domain = reader.string();\n            break;\n          }\n          case 2: {\n            message.version = reader.int64();\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes an OperatorSetIdProto message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.OperatorSetIdProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.OperatorSetIdProto} OperatorSetIdProto\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    OperatorSetIdProto.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies an OperatorSetIdProto message.\n     * @function verify\n     * @memberof onnx.OperatorSetIdProto\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    OperatorSetIdProto.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      if (message.domain != null && message.hasOwnProperty('domain'))\n        if (!$util.isString(message.domain)) return 'domain: string expected';\n      if (message.version != null && message.hasOwnProperty('version'))\n        if (\n          !$util.isInteger(message.version) &&\n          !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high))\n        )\n          return 'version: integer|Long expected';\n      return null;\n    };\n\n    /**\n     * Creates an OperatorSetIdProto message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.OperatorSetIdProto\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.OperatorSetIdProto} OperatorSetIdProto\n     */\n    OperatorSetIdProto.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.OperatorSetIdProto) return object;\n      var message = new $root.onnx.OperatorSetIdProto();\n      if (object.domain != null) message.domain = String(object.domain);\n      if (object.version != null)\n        if ($util.Long) (message.version = $util.Long.fromValue(object.version)).unsigned = false;\n        else if (typeof object.version === 'string') message.version = parseInt(object.version, 10);\n        else if (typeof object.version === 'number') message.version = object.version;\n        else if (typeof object.version === 'object')\n          message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber();\n      return message;\n    };\n\n    /**\n     * Creates a plain object from an OperatorSetIdProto message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.OperatorSetIdProto\n     * @static\n     * @param {onnx.OperatorSetIdProto} message OperatorSetIdProto\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    OperatorSetIdProto.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.defaults) {\n        object.domain = '';\n        if ($util.Long) {\n          var long = new $util.Long(0, 0, false);\n          object.version =\n            options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n        } else object.version = options.longs === String ? '0' : 0;\n      }\n      if (message.domain != null && message.hasOwnProperty('domain')) object.domain = message.domain;\n      if (message.version != null && message.hasOwnProperty('version'))\n        if (typeof message.version === 'number')\n          object.version = options.longs === String ? String(message.version) : message.version;\n        else\n          object.version =\n            options.longs === String\n              ? $util.Long.prototype.toString.call(message.version)\n              : options.longs === Number\n                ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber()\n                : message.version;\n      return object;\n    };\n\n    /**\n     * Converts this OperatorSetIdProto to JSON.\n     * @function toJSON\n     * @memberof onnx.OperatorSetIdProto\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    OperatorSetIdProto.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for OperatorSetIdProto\n     * @function getTypeUrl\n     * @memberof onnx.OperatorSetIdProto\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    OperatorSetIdProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.OperatorSetIdProto';\n    };\n\n    return OperatorSetIdProto;\n  })();\n\n  /**\n   * OperatorStatus enum.\n   * @name onnx.OperatorStatus\n   * @enum {number}\n   * @property {number} EXPERIMENTAL=0 EXPERIMENTAL value\n   * @property {number} STABLE=1 STABLE value\n   */\n  onnx.OperatorStatus = (function () {\n    var valuesById = {},\n      values = Object.create(valuesById);\n    values[(valuesById[0] = 'EXPERIMENTAL')] = 0;\n    values[(valuesById[1] = 'STABLE')] = 1;\n    return values;\n  })();\n\n  onnx.FunctionProto = (function () {\n    /**\n     * Properties of a FunctionProto.\n     * @memberof onnx\n     * @interface IFunctionProto\n     * @property {string|null} [name] FunctionProto name\n     * @property {Array.<string>|null} [input] FunctionProto input\n     * @property {Array.<string>|null} [output] FunctionProto output\n     * @property {Array.<string>|null} [attribute] FunctionProto attribute\n     * @property {Array.<onnx.IAttributeProto>|null} [attributeProto] FunctionProto attributeProto\n     * @property {Array.<onnx.INodeProto>|null} [node] FunctionProto node\n     * @property {string|null} [docString] FunctionProto docString\n     * @property {Array.<onnx.IOperatorSetIdProto>|null} [opsetImport] FunctionProto opsetImport\n     * @property {string|null} [domain] FunctionProto domain\n     */\n\n    /**\n     * Constructs a new FunctionProto.\n     * @memberof onnx\n     * @classdesc Represents a FunctionProto.\n     * @implements IFunctionProto\n     * @constructor\n     * @param {onnx.IFunctionProto=} [properties] Properties to set\n     */\n    function FunctionProto(properties) {\n      this.input = [];\n      this.output = [];\n      this.attribute = [];\n      this.attributeProto = [];\n      this.node = [];\n      this.opsetImport = [];\n      if (properties)\n        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n          if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * FunctionProto name.\n     * @member {string} name\n     * @memberof onnx.FunctionProto\n     * @instance\n     */\n    FunctionProto.prototype.name = '';\n\n    /**\n     * FunctionProto input.\n     * @member {Array.<string>} input\n     * @memberof onnx.FunctionProto\n     * @instance\n     */\n    FunctionProto.prototype.input = $util.emptyArray;\n\n    /**\n     * FunctionProto output.\n     * @member {Array.<string>} output\n     * @memberof onnx.FunctionProto\n     * @instance\n     */\n    FunctionProto.prototype.output = $util.emptyArray;\n\n    /**\n     * FunctionProto attribute.\n     * @member {Array.<string>} attribute\n     * @memberof onnx.FunctionProto\n     * @instance\n     */\n    FunctionProto.prototype.attribute = $util.emptyArray;\n\n    /**\n     * FunctionProto attributeProto.\n     * @member {Array.<onnx.IAttributeProto>} attributeProto\n     * @memberof onnx.FunctionProto\n     * @instance\n     */\n    FunctionProto.prototype.attributeProto = $util.emptyArray;\n\n    /**\n     * FunctionProto node.\n     * @member {Array.<onnx.INodeProto>} node\n     * @memberof onnx.FunctionProto\n     * @instance\n     */\n    FunctionProto.prototype.node = $util.emptyArray;\n\n    /**\n     * FunctionProto docString.\n     * @member {string} docString\n     * @memberof onnx.FunctionProto\n     * @instance\n     */\n    FunctionProto.prototype.docString = '';\n\n    /**\n     * FunctionProto opsetImport.\n     * @member {Array.<onnx.IOperatorSetIdProto>} opsetImport\n     * @memberof onnx.FunctionProto\n     * @instance\n     */\n    FunctionProto.prototype.opsetImport = $util.emptyArray;\n\n    /**\n     * FunctionProto domain.\n     * @member {string} domain\n     * @memberof onnx.FunctionProto\n     * @instance\n     */\n    FunctionProto.prototype.domain = '';\n\n    /**\n     * Creates a new FunctionProto instance using the specified properties.\n     * @function create\n     * @memberof onnx.FunctionProto\n     * @static\n     * @param {onnx.IFunctionProto=} [properties] Properties to set\n     * @returns {onnx.FunctionProto} FunctionProto instance\n     */\n    FunctionProto.create = function create(properties) {\n      return new FunctionProto(properties);\n    };\n\n    /**\n     * Encodes the specified FunctionProto message. Does not implicitly {@link onnx.FunctionProto.verify|verify} messages.\n     * @function encode\n     * @memberof onnx.FunctionProto\n     * @static\n     * @param {onnx.IFunctionProto} message FunctionProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    FunctionProto.encode = function encode(message, writer) {\n      if (!writer) writer = $Writer.create();\n      if (message.name != null && Object.hasOwnProperty.call(message, 'name'))\n        writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.name);\n      if (message.input != null && message.input.length)\n        for (var i = 0; i < message.input.length; ++i)\n          writer.uint32(/* id 4, wireType 2 =*/ 34).string(message.input[i]);\n      if (message.output != null && message.output.length)\n        for (var i = 0; i < message.output.length; ++i)\n          writer.uint32(/* id 5, wireType 2 =*/ 42).string(message.output[i]);\n      if (message.attribute != null && message.attribute.length)\n        for (var i = 0; i < message.attribute.length; ++i)\n          writer.uint32(/* id 6, wireType 2 =*/ 50).string(message.attribute[i]);\n      if (message.node != null && message.node.length)\n        for (var i = 0; i < message.node.length; ++i)\n          $root.onnx.NodeProto.encode(message.node[i], writer.uint32(/* id 7, wireType 2 =*/ 58).fork()).ldelim();\n      if (message.docString != null && Object.hasOwnProperty.call(message, 'docString'))\n        writer.uint32(/* id 8, wireType 2 =*/ 66).string(message.docString);\n      if (message.opsetImport != null && message.opsetImport.length)\n        for (var i = 0; i < message.opsetImport.length; ++i)\n          $root.onnx.OperatorSetIdProto.encode(\n            message.opsetImport[i],\n            writer.uint32(/* id 9, wireType 2 =*/ 74).fork(),\n          ).ldelim();\n      if (message.domain != null && Object.hasOwnProperty.call(message, 'domain'))\n        writer.uint32(/* id 10, wireType 2 =*/ 82).string(message.domain);\n      if (message.attributeProto != null && message.attributeProto.length)\n        for (var i = 0; i < message.attributeProto.length; ++i)\n          $root.onnx.AttributeProto.encode(\n            message.attributeProto[i],\n            writer.uint32(/* id 11, wireType 2 =*/ 90).fork(),\n          ).ldelim();\n      return writer;\n    };\n\n    /**\n     * Encodes the specified FunctionProto message, length delimited. Does not implicitly {@link onnx.FunctionProto.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof onnx.FunctionProto\n     * @static\n     * @param {onnx.IFunctionProto} message FunctionProto message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    FunctionProto.encodeDelimited = function encodeDelimited(message, writer) {\n      return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a FunctionProto message from the specified reader or buffer.\n     * @function decode\n     * @memberof onnx.FunctionProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {onnx.FunctionProto} FunctionProto\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    FunctionProto.decode = function decode(reader, length) {\n      if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n      var end = length === undefined ? reader.len : reader.pos + length,\n        message = new $root.onnx.FunctionProto();\n      while (reader.pos < end) {\n        var tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1: {\n            message.name = reader.string();\n            break;\n          }\n          case 4: {\n            if (!(message.input && message.input.length)) message.input = [];\n            message.input.push(reader.string());\n            break;\n          }\n          case 5: {\n            if (!(message.output && message.output.length)) message.output = [];\n            message.output.push(reader.string());\n            break;\n          }\n          case 6: {\n            if (!(message.attribute && message.attribute.length)) message.attribute = [];\n            message.attribute.push(reader.string());\n            break;\n          }\n          case 11: {\n            if (!(message.attributeProto && message.attributeProto.length)) message.attributeProto = [];\n            message.attributeProto.push($root.onnx.AttributeProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 7: {\n            if (!(message.node && message.node.length)) message.node = [];\n            message.node.push($root.onnx.NodeProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 8: {\n            message.docString = reader.string();\n            break;\n          }\n          case 9: {\n            if (!(message.opsetImport && message.opsetImport.length)) message.opsetImport = [];\n            message.opsetImport.push($root.onnx.OperatorSetIdProto.decode(reader, reader.uint32()));\n            break;\n          }\n          case 10: {\n            message.domain = reader.string();\n            break;\n          }\n          default:\n            reader.skipType(tag & 7);\n            break;\n        }\n      }\n      return message;\n    };\n\n    /**\n     * Decodes a FunctionProto message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof onnx.FunctionProto\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {onnx.FunctionProto} FunctionProto\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    FunctionProto.decodeDelimited = function decodeDelimited(reader) {\n      if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n      return this.decode(reader, reader.uint32());\n    };\n\n    /**\n     * Verifies a FunctionProto message.\n     * @function verify\n     * @memberof onnx.FunctionProto\n     * @static\n     * @param {Object.<string,*>} message Plain object to verify\n     * @returns {string|null} `null` if valid, otherwise the reason why it is not\n     */\n    FunctionProto.verify = function verify(message) {\n      if (typeof message !== 'object' || message === null) return 'object expected';\n      if (message.name != null && message.hasOwnProperty('name'))\n        if (!$util.isString(message.name)) return 'name: string expected';\n      if (message.input != null && message.hasOwnProperty('input')) {\n        if (!Array.isArray(message.input)) return 'input: array expected';\n        for (var i = 0; i < message.input.length; ++i)\n          if (!$util.isString(message.input[i])) return 'input: string[] expected';\n      }\n      if (message.output != null && message.hasOwnProperty('output')) {\n        if (!Array.isArray(message.output)) return 'output: array expected';\n        for (var i = 0; i < message.output.length; ++i)\n          if (!$util.isString(message.output[i])) return 'output: string[] expected';\n      }\n      if (message.attribute != null && message.hasOwnProperty('attribute')) {\n        if (!Array.isArray(message.attribute)) return 'attribute: array expected';\n        for (var i = 0; i < message.attribute.length; ++i)\n          if (!$util.isString(message.attribute[i])) return 'attribute: string[] expected';\n      }\n      if (message.attributeProto != null && message.hasOwnProperty('attributeProto')) {\n        if (!Array.isArray(message.attributeProto)) return 'attributeProto: array expected';\n        for (var i = 0; i < message.attributeProto.length; ++i) {\n          var error = $root.onnx.AttributeProto.verify(message.attributeProto[i]);\n          if (error) return 'attributeProto.' + error;\n        }\n      }\n      if (message.node != null && message.hasOwnProperty('node')) {\n        if (!Array.isArray(message.node)) return 'node: array expected';\n        for (var i = 0; i < message.node.length; ++i) {\n          var error = $root.onnx.NodeProto.verify(message.node[i]);\n          if (error) return 'node.' + error;\n        }\n      }\n      if (message.docString != null && message.hasOwnProperty('docString'))\n        if (!$util.isString(message.docString)) return 'docString: string expected';\n      if (message.opsetImport != null && message.hasOwnProperty('opsetImport')) {\n        if (!Array.isArray(message.opsetImport)) return 'opsetImport: array expected';\n        for (var i = 0; i < message.opsetImport.length; ++i) {\n          var error = $root.onnx.OperatorSetIdProto.verify(message.opsetImport[i]);\n          if (error) return 'opsetImport.' + error;\n        }\n      }\n      if (message.domain != null && message.hasOwnProperty('domain'))\n        if (!$util.isString(message.domain)) return 'domain: string expected';\n      return null;\n    };\n\n    /**\n     * Creates a FunctionProto message from a plain object. Also converts values to their respective internal types.\n     * @function fromObject\n     * @memberof onnx.FunctionProto\n     * @static\n     * @param {Object.<string,*>} object Plain object\n     * @returns {onnx.FunctionProto} FunctionProto\n     */\n    FunctionProto.fromObject = function fromObject(object) {\n      if (object instanceof $root.onnx.FunctionProto) return object;\n      var message = new $root.onnx.FunctionProto();\n      if (object.name != null) message.name = String(object.name);\n      if (object.input) {\n        if (!Array.isArray(object.input)) throw TypeError('.onnx.FunctionProto.input: array expected');\n        message.input = [];\n        for (var i = 0; i < object.input.length; ++i) message.input[i] = String(object.input[i]);\n      }\n      if (object.output) {\n        if (!Array.isArray(object.output)) throw TypeError('.onnx.FunctionProto.output: array expected');\n        message.output = [];\n        for (var i = 0; i < object.output.length; ++i) message.output[i] = String(object.output[i]);\n      }\n      if (object.attribute) {\n        if (!Array.isArray(object.attribute)) throw TypeError('.onnx.FunctionProto.attribute: array expected');\n        message.attribute = [];\n        for (var i = 0; i < object.attribute.length; ++i) message.attribute[i] = String(object.attribute[i]);\n      }\n      if (object.attributeProto) {\n        if (!Array.isArray(object.attributeProto))\n          throw TypeError('.onnx.FunctionProto.attributeProto: array expected');\n        message.attributeProto = [];\n        for (var i = 0; i < object.attributeProto.length; ++i) {\n          if (typeof object.attributeProto[i] !== 'object')\n            throw TypeError('.onnx.FunctionProto.attributeProto: object expected');\n          message.attributeProto[i] = $root.onnx.AttributeProto.fromObject(object.attributeProto[i]);\n        }\n      }\n      if (object.node) {\n        if (!Array.isArray(object.node)) throw TypeError('.onnx.FunctionProto.node: array expected');\n        message.node = [];\n        for (var i = 0; i < object.node.length; ++i) {\n          if (typeof object.node[i] !== 'object') throw TypeError('.onnx.FunctionProto.node: object expected');\n          message.node[i] = $root.onnx.NodeProto.fromObject(object.node[i]);\n        }\n      }\n      if (object.docString != null) message.docString = String(object.docString);\n      if (object.opsetImport) {\n        if (!Array.isArray(object.opsetImport)) throw TypeError('.onnx.FunctionProto.opsetImport: array expected');\n        message.opsetImport = [];\n        for (var i = 0; i < object.opsetImport.length; ++i) {\n          if (typeof object.opsetImport[i] !== 'object')\n            throw TypeError('.onnx.FunctionProto.opsetImport: object expected');\n          message.opsetImport[i] = $root.onnx.OperatorSetIdProto.fromObject(object.opsetImport[i]);\n        }\n      }\n      if (object.domain != null) message.domain = String(object.domain);\n      return message;\n    };\n\n    /**\n     * Creates a plain object from a FunctionProto message. Also converts values to other types if specified.\n     * @function toObject\n     * @memberof onnx.FunctionProto\n     * @static\n     * @param {onnx.FunctionProto} message FunctionProto\n     * @param {$protobuf.IConversionOptions} [options] Conversion options\n     * @returns {Object.<string,*>} Plain object\n     */\n    FunctionProto.toObject = function toObject(message, options) {\n      if (!options) options = {};\n      var object = {};\n      if (options.arrays || options.defaults) {\n        object.input = [];\n        object.output = [];\n        object.attribute = [];\n        object.node = [];\n        object.opsetImport = [];\n        object.attributeProto = [];\n      }\n      if (options.defaults) {\n        object.name = '';\n        object.docString = '';\n        object.domain = '';\n      }\n      if (message.name != null && message.hasOwnProperty('name')) object.name = message.name;\n      if (message.input && message.input.length) {\n        object.input = [];\n        for (var j = 0; j < message.input.length; ++j) object.input[j] = message.input[j];\n      }\n      if (message.output && message.output.length) {\n        object.output = [];\n        for (var j = 0; j < message.output.length; ++j) object.output[j] = message.output[j];\n      }\n      if (message.attribute && message.attribute.length) {\n        object.attribute = [];\n        for (var j = 0; j < message.attribute.length; ++j) object.attribute[j] = message.attribute[j];\n      }\n      if (message.node && message.node.length) {\n        object.node = [];\n        for (var j = 0; j < message.node.length; ++j)\n          object.node[j] = $root.onnx.NodeProto.toObject(message.node[j], options);\n      }\n      if (message.docString != null && message.hasOwnProperty('docString')) object.docString = message.docString;\n      if (message.opsetImport && message.opsetImport.length) {\n        object.opsetImport = [];\n        for (var j = 0; j < message.opsetImport.length; ++j)\n          object.opsetImport[j] = $root.onnx.OperatorSetIdProto.toObject(message.opsetImport[j], options);\n      }\n      if (message.domain != null && message.hasOwnProperty('domain')) object.domain = message.domain;\n      if (message.attributeProto && message.attributeProto.length) {\n        object.attributeProto = [];\n        for (var j = 0; j < message.attributeProto.length; ++j)\n          object.attributeProto[j] = $root.onnx.AttributeProto.toObject(message.attributeProto[j], options);\n      }\n      return object;\n    };\n\n    /**\n     * Converts this FunctionProto to JSON.\n     * @function toJSON\n     * @memberof onnx.FunctionProto\n     * @instance\n     * @returns {Object.<string,*>} JSON object\n     */\n    FunctionProto.prototype.toJSON = function toJSON() {\n      return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n    };\n\n    /**\n     * Gets the default type url for FunctionProto\n     * @function getTypeUrl\n     * @memberof onnx.FunctionProto\n     * @static\n     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n     * @returns {string} The default type url\n     */\n    FunctionProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n      if (typeUrlPrefix === undefined) {\n        typeUrlPrefix = 'type.googleapis.com';\n      }\n      return typeUrlPrefix + '/onnx.FunctionProto';\n    };\n\n    return FunctionProto;\n  })();\n\n  return onnx;\n})();\n\n// module.exports = $root;\nexport const onnx = $root.onnx;\n"],"names":["$Reader","$protobuf","$Writer","$util","$root","onnx","valuesById","values","AttributeProto","properties","keys","i","message","writer","reader","length","end","tag","end2","error","object","options","long","j","typeUrlPrefix","ValueInfoProto","NodeProto","TrainingInfoProto","ModelProto","StringStringEntryProto","TensorAnnotation","GraphProto","TensorProto","Segment","SparseTensorProto","TensorShapeProto","Dimension","$oneOfFields","TypeProto","Tensor","Sequence","Map","Optional","SparseTensor","OperatorSetIdProto","FunctionProto"],"mappings":"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"}