UNPKG

tf2

Version:

Exposes a simple API for interacting with the Team Fortress 2 game coordinator

34,519 lines • 1.75 MB
/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
(function(global, factory) { /* global define, require, module */

    /* AMD */ if (typeof define === 'function' && define.amd)
        define(["protobufjs/minimal"], factory);

    /* CommonJS */ else if (typeof require === 'function' && typeof module === 'object' && module && module.exports)
        module.exports = factory(require("protobufjs/minimal"));

})(this, function($protobuf) {
    "use strict";

    // Common aliases
    var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
    
    // Exported root namespace
    var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
    
    /**
     * PartnerAccountType enum.
     * @exports PartnerAccountType
     * @enum {string}
     * @property {number} PARTNER_NONE=0 PARTNER_NONE value
     * @property {number} PARTNER_PERFECT_WORLD=1 PARTNER_PERFECT_WORLD value
     * @property {number} PARTNER_NEXON=2 PARTNER_NEXON value
     */
    $root.PartnerAccountType = (function() {
        var valuesById = {}, values = Object.create(valuesById);
        values[valuesById[0] = "PARTNER_NONE"] = 0;
        values[valuesById[1] = "PARTNER_PERFECT_WORLD"] = 1;
        values[valuesById[2] = "PARTNER_NEXON"] = 2;
        return values;
    })();
    
    /**
     * GCConnectionStatus enum.
     * @exports GCConnectionStatus
     * @enum {string}
     * @property {number} GCConnectionStatus_HAVE_SESSION=0 GCConnectionStatus_HAVE_SESSION value
     * @property {number} GCConnectionStatus_GC_GOING_DOWN=1 GCConnectionStatus_GC_GOING_DOWN value
     * @property {number} GCConnectionStatus_NO_SESSION=2 GCConnectionStatus_NO_SESSION value
     * @property {number} GCConnectionStatus_NO_SESSION_IN_LOGON_QUEUE=3 GCConnectionStatus_NO_SESSION_IN_LOGON_QUEUE value
     * @property {number} GCConnectionStatus_NO_STEAM=4 GCConnectionStatus_NO_STEAM value
     * @property {number} GCConnectionStatus_SUSPENDED=5 GCConnectionStatus_SUSPENDED value
     */
    $root.GCConnectionStatus = (function() {
        var valuesById = {}, values = Object.create(valuesById);
        values[valuesById[0] = "GCConnectionStatus_HAVE_SESSION"] = 0;
        values[valuesById[1] = "GCConnectionStatus_GC_GOING_DOWN"] = 1;
        values[valuesById[2] = "GCConnectionStatus_NO_SESSION"] = 2;
        values[valuesById[3] = "GCConnectionStatus_NO_SESSION_IN_LOGON_QUEUE"] = 3;
        values[valuesById[4] = "GCConnectionStatus_NO_STEAM"] = 4;
        values[valuesById[5] = "GCConnectionStatus_SUSPENDED"] = 5;
        return values;
    })();
    
    $root.CMsgSOIDOwner = (function() {
    
        /**
         * Properties of a CMsgSOIDOwner.
         * @exports ICMsgSOIDOwner
         * @interface ICMsgSOIDOwner
         * @property {number|null} [type] CMsgSOIDOwner type
         * @property {number|Long|null} [id] CMsgSOIDOwner id
         */
    
        /**
         * Constructs a new CMsgSOIDOwner.
         * @exports CMsgSOIDOwner
         * @classdesc Represents a CMsgSOIDOwner.
         * @implements ICMsgSOIDOwner
         * @constructor
         * @param {ICMsgSOIDOwner=} [properties] Properties to set
         */
        function CMsgSOIDOwner(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgSOIDOwner type.
         * @member {number} type
         * @memberof CMsgSOIDOwner
         * @instance
         */
        CMsgSOIDOwner.prototype.type = 0;
    
        /**
         * CMsgSOIDOwner id.
         * @member {number|Long} id
         * @memberof CMsgSOIDOwner
         * @instance
         */
        CMsgSOIDOwner.prototype.id = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * Creates a new CMsgSOIDOwner instance using the specified properties.
         * @function create
         * @memberof CMsgSOIDOwner
         * @static
         * @param {ICMsgSOIDOwner=} [properties] Properties to set
         * @returns {CMsgSOIDOwner} CMsgSOIDOwner instance
         */
        CMsgSOIDOwner.create = function create(properties) {
            return new CMsgSOIDOwner(properties);
        };
    
        /**
         * Encodes the specified CMsgSOIDOwner message. Does not implicitly {@link CMsgSOIDOwner.verify|verify} messages.
         * @function encode
         * @memberof CMsgSOIDOwner
         * @static
         * @param {ICMsgSOIDOwner} message CMsgSOIDOwner message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOIDOwner.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.type != null && message.hasOwnProperty("type"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.type);
            if (message.id != null && message.hasOwnProperty("id"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.id);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgSOIDOwner message, length delimited. Does not implicitly {@link CMsgSOIDOwner.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgSOIDOwner
         * @static
         * @param {ICMsgSOIDOwner} message CMsgSOIDOwner message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOIDOwner.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgSOIDOwner message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgSOIDOwner
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgSOIDOwner} CMsgSOIDOwner
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOIDOwner.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgSOIDOwner();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.type = reader.uint32();
                    break;
                case 2:
                    message.id = reader.uint64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgSOIDOwner message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgSOIDOwner
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgSOIDOwner} CMsgSOIDOwner
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOIDOwner.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgSOIDOwner message.
         * @function verify
         * @memberof CMsgSOIDOwner
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgSOIDOwner.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.type != null && message.hasOwnProperty("type"))
                if (!$util.isInteger(message.type))
                    return "type: integer expected";
            if (message.id != null && message.hasOwnProperty("id"))
                if (!$util.isInteger(message.id) && !(message.id && $util.isInteger(message.id.low) && $util.isInteger(message.id.high)))
                    return "id: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CMsgSOIDOwner message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgSOIDOwner
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgSOIDOwner} CMsgSOIDOwner
         */
        CMsgSOIDOwner.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgSOIDOwner)
                return object;
            var message = new $root.CMsgSOIDOwner();
            if (object.type != null)
                message.type = object.type >>> 0;
            if (object.id != null)
                if ($util.Long)
                    (message.id = $util.Long.fromValue(object.id)).unsigned = true;
                else if (typeof object.id === "string")
                    message.id = parseInt(object.id, 10);
                else if (typeof object.id === "number")
                    message.id = object.id;
                else if (typeof object.id === "object")
                    message.id = new $util.LongBits(object.id.low >>> 0, object.id.high >>> 0).toNumber(true);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgSOIDOwner message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgSOIDOwner
         * @static
         * @param {CMsgSOIDOwner} message CMsgSOIDOwner
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgSOIDOwner.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.type = 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.id = options.longs === String ? "0" : 0;
            }
            if (message.type != null && message.hasOwnProperty("type"))
                object.type = message.type;
            if (message.id != null && message.hasOwnProperty("id"))
                if (typeof message.id === "number")
                    object.id = options.longs === String ? String(message.id) : message.id;
                else
                    object.id = options.longs === String ? $util.Long.prototype.toString.call(message.id) : options.longs === Number ? new $util.LongBits(message.id.low >>> 0, message.id.high >>> 0).toNumber(true) : message.id;
            return object;
        };
    
        /**
         * Converts this CMsgSOIDOwner to JSON.
         * @function toJSON
         * @memberof CMsgSOIDOwner
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgSOIDOwner.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgSOIDOwner;
    })();
    
    $root.CMsgSOSingleObject = (function() {
    
        /**
         * Properties of a CMsgSOSingleObject.
         * @exports ICMsgSOSingleObject
         * @interface ICMsgSOSingleObject
         * @property {number|Long|null} [owner] CMsgSOSingleObject owner
         * @property {number|null} [type_id] CMsgSOSingleObject type_id
         * @property {Uint8Array|null} [object_data] CMsgSOSingleObject object_data
         * @property {number|Long|null} [version] CMsgSOSingleObject version
         * @property {ICMsgSOIDOwner|null} [owner_soid] CMsgSOSingleObject owner_soid
         * @property {number|null} [service_id] CMsgSOSingleObject service_id
         */
    
        /**
         * Constructs a new CMsgSOSingleObject.
         * @exports CMsgSOSingleObject
         * @classdesc Represents a CMsgSOSingleObject.
         * @implements ICMsgSOSingleObject
         * @constructor
         * @param {ICMsgSOSingleObject=} [properties] Properties to set
         */
        function CMsgSOSingleObject(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgSOSingleObject owner.
         * @member {number|Long} owner
         * @memberof CMsgSOSingleObject
         * @instance
         */
        CMsgSOSingleObject.prototype.owner = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgSOSingleObject type_id.
         * @member {number} type_id
         * @memberof CMsgSOSingleObject
         * @instance
         */
        CMsgSOSingleObject.prototype.type_id = 0;
    
        /**
         * CMsgSOSingleObject object_data.
         * @member {Uint8Array} object_data
         * @memberof CMsgSOSingleObject
         * @instance
         */
        CMsgSOSingleObject.prototype.object_data = $util.newBuffer([]);
    
        /**
         * CMsgSOSingleObject version.
         * @member {number|Long} version
         * @memberof CMsgSOSingleObject
         * @instance
         */
        CMsgSOSingleObject.prototype.version = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgSOSingleObject owner_soid.
         * @member {ICMsgSOIDOwner|null|undefined} owner_soid
         * @memberof CMsgSOSingleObject
         * @instance
         */
        CMsgSOSingleObject.prototype.owner_soid = null;
    
        /**
         * CMsgSOSingleObject service_id.
         * @member {number} service_id
         * @memberof CMsgSOSingleObject
         * @instance
         */
        CMsgSOSingleObject.prototype.service_id = 0;
    
        /**
         * Creates a new CMsgSOSingleObject instance using the specified properties.
         * @function create
         * @memberof CMsgSOSingleObject
         * @static
         * @param {ICMsgSOSingleObject=} [properties] Properties to set
         * @returns {CMsgSOSingleObject} CMsgSOSingleObject instance
         */
        CMsgSOSingleObject.create = function create(properties) {
            return new CMsgSOSingleObject(properties);
        };
    
        /**
         * Encodes the specified CMsgSOSingleObject message. Does not implicitly {@link CMsgSOSingleObject.verify|verify} messages.
         * @function encode
         * @memberof CMsgSOSingleObject
         * @static
         * @param {ICMsgSOSingleObject} message CMsgSOSingleObject message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOSingleObject.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.owner != null && message.hasOwnProperty("owner"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.owner);
            if (message.type_id != null && message.hasOwnProperty("type_id"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.type_id);
            if (message.object_data != null && message.hasOwnProperty("object_data"))
                writer.uint32(/* id 3, wireType 2 =*/26).bytes(message.object_data);
            if (message.version != null && message.hasOwnProperty("version"))
                writer.uint32(/* id 4, wireType 1 =*/33).fixed64(message.version);
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid"))
                $root.CMsgSOIDOwner.encode(message.owner_soid, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                writer.uint32(/* id 6, wireType 0 =*/48).uint32(message.service_id);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgSOSingleObject message, length delimited. Does not implicitly {@link CMsgSOSingleObject.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgSOSingleObject
         * @static
         * @param {ICMsgSOSingleObject} message CMsgSOSingleObject message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOSingleObject.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgSOSingleObject message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgSOSingleObject
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgSOSingleObject} CMsgSOSingleObject
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOSingleObject.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgSOSingleObject();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.owner = reader.fixed64();
                    break;
                case 2:
                    message.type_id = reader.int32();
                    break;
                case 3:
                    message.object_data = reader.bytes();
                    break;
                case 4:
                    message.version = reader.fixed64();
                    break;
                case 5:
                    message.owner_soid = $root.CMsgSOIDOwner.decode(reader, reader.uint32());
                    break;
                case 6:
                    message.service_id = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgSOSingleObject message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgSOSingleObject
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgSOSingleObject} CMsgSOSingleObject
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOSingleObject.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgSOSingleObject message.
         * @function verify
         * @memberof CMsgSOSingleObject
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgSOSingleObject.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.owner != null && message.hasOwnProperty("owner"))
                if (!$util.isInteger(message.owner) && !(message.owner && $util.isInteger(message.owner.low) && $util.isInteger(message.owner.high)))
                    return "owner: integer|Long expected";
            if (message.type_id != null && message.hasOwnProperty("type_id"))
                if (!$util.isInteger(message.type_id))
                    return "type_id: integer expected";
            if (message.object_data != null && message.hasOwnProperty("object_data"))
                if (!(message.object_data && typeof message.object_data.length === "number" || $util.isString(message.object_data)))
                    return "object_data: buffer expected";
            if (message.version != null && message.hasOwnProperty("version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid")) {
                var error = $root.CMsgSOIDOwner.verify(message.owner_soid);
                if (error)
                    return "owner_soid." + error;
            }
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                if (!$util.isInteger(message.service_id))
                    return "service_id: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgSOSingleObject message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgSOSingleObject
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgSOSingleObject} CMsgSOSingleObject
         */
        CMsgSOSingleObject.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgSOSingleObject)
                return object;
            var message = new $root.CMsgSOSingleObject();
            if (object.owner != null)
                if ($util.Long)
                    (message.owner = $util.Long.fromValue(object.owner)).unsigned = false;
                else if (typeof object.owner === "string")
                    message.owner = parseInt(object.owner, 10);
                else if (typeof object.owner === "number")
                    message.owner = object.owner;
                else if (typeof object.owner === "object")
                    message.owner = new $util.LongBits(object.owner.low >>> 0, object.owner.high >>> 0).toNumber();
            if (object.type_id != null)
                message.type_id = object.type_id | 0;
            if (object.object_data != null)
                if (typeof object.object_data === "string")
                    $util.base64.decode(object.object_data, message.object_data = $util.newBuffer($util.base64.length(object.object_data)), 0);
                else if (object.object_data.length)
                    message.object_data = object.object_data;
            if (object.version != null)
                if ($util.Long)
                    (message.version = $util.Long.fromValue(object.version)).unsigned = false;
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber();
            if (object.owner_soid != null) {
                if (typeof object.owner_soid !== "object")
                    throw TypeError(".CMsgSOSingleObject.owner_soid: object expected");
                message.owner_soid = $root.CMsgSOIDOwner.fromObject(object.owner_soid);
            }
            if (object.service_id != null)
                message.service_id = object.service_id >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgSOSingleObject message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgSOSingleObject
         * @static
         * @param {CMsgSOSingleObject} message CMsgSOSingleObject
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgSOSingleObject.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.owner = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.owner = options.longs === String ? "0" : 0;
                object.type_id = 0;
                if (options.bytes === String)
                    object.object_data = "";
                else {
                    object.object_data = [];
                    if (options.bytes !== Array)
                        object.object_data = $util.newBuffer(object.object_data);
                }
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.version = options.longs === String ? "0" : 0;
                object.owner_soid = null;
                object.service_id = 0;
            }
            if (message.owner != null && message.hasOwnProperty("owner"))
                if (typeof message.owner === "number")
                    object.owner = options.longs === String ? String(message.owner) : message.owner;
                else
                    object.owner = options.longs === String ? $util.Long.prototype.toString.call(message.owner) : options.longs === Number ? new $util.LongBits(message.owner.low >>> 0, message.owner.high >>> 0).toNumber() : message.owner;
            if (message.type_id != null && message.hasOwnProperty("type_id"))
                object.type_id = message.type_id;
            if (message.object_data != null && message.hasOwnProperty("object_data"))
                object.object_data = options.bytes === String ? $util.base64.encode(message.object_data, 0, message.object_data.length) : options.bytes === Array ? Array.prototype.slice.call(message.object_data) : message.object_data;
            if (message.version != null && message.hasOwnProperty("version"))
                if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber() : message.version;
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid"))
                object.owner_soid = $root.CMsgSOIDOwner.toObject(message.owner_soid, options);
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                object.service_id = message.service_id;
            return object;
        };
    
        /**
         * Converts this CMsgSOSingleObject to JSON.
         * @function toJSON
         * @memberof CMsgSOSingleObject
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgSOSingleObject.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgSOSingleObject;
    })();
    
    $root.CMsgSOMultipleObjects = (function() {
    
        /**
         * Properties of a CMsgSOMultipleObjects.
         * @exports ICMsgSOMultipleObjects
         * @interface ICMsgSOMultipleObjects
         * @property {number|Long|null} [owner] CMsgSOMultipleObjects owner
         * @property {Array.<CMsgSOMultipleObjects.ISingleObject>|null} [objects] CMsgSOMultipleObjects objects
         * @property {number|Long|null} [version] CMsgSOMultipleObjects version
         * @property {ICMsgSOIDOwner|null} [owner_soid] CMsgSOMultipleObjects owner_soid
         * @property {number|null} [service_id] CMsgSOMultipleObjects service_id
         */
    
        /**
         * Constructs a new CMsgSOMultipleObjects.
         * @exports CMsgSOMultipleObjects
         * @classdesc Represents a CMsgSOMultipleObjects.
         * @implements ICMsgSOMultipleObjects
         * @constructor
         * @param {ICMsgSOMultipleObjects=} [properties] Properties to set
         */
        function CMsgSOMultipleObjects(properties) {
            this.objects = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgSOMultipleObjects owner.
         * @member {number|Long} owner
         * @memberof CMsgSOMultipleObjects
         * @instance
         */
        CMsgSOMultipleObjects.prototype.owner = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgSOMultipleObjects objects.
         * @member {Array.<CMsgSOMultipleObjects.ISingleObject>} objects
         * @memberof CMsgSOMultipleObjects
         * @instance
         */
        CMsgSOMultipleObjects.prototype.objects = $util.emptyArray;
    
        /**
         * CMsgSOMultipleObjects version.
         * @member {number|Long} version
         * @memberof CMsgSOMultipleObjects
         * @instance
         */
        CMsgSOMultipleObjects.prototype.version = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgSOMultipleObjects owner_soid.
         * @member {ICMsgSOIDOwner|null|undefined} owner_soid
         * @memberof CMsgSOMultipleObjects
         * @instance
         */
        CMsgSOMultipleObjects.prototype.owner_soid = null;
    
        /**
         * CMsgSOMultipleObjects service_id.
         * @member {number} service_id
         * @memberof CMsgSOMultipleObjects
         * @instance
         */
        CMsgSOMultipleObjects.prototype.service_id = 0;
    
        /**
         * Creates a new CMsgSOMultipleObjects instance using the specified properties.
         * @function create
         * @memberof CMsgSOMultipleObjects
         * @static
         * @param {ICMsgSOMultipleObjects=} [properties] Properties to set
         * @returns {CMsgSOMultipleObjects} CMsgSOMultipleObjects instance
         */
        CMsgSOMultipleObjects.create = function create(properties) {
            return new CMsgSOMultipleObjects(properties);
        };
    
        /**
         * Encodes the specified CMsgSOMultipleObjects message. Does not implicitly {@link CMsgSOMultipleObjects.verify|verify} messages.
         * @function encode
         * @memberof CMsgSOMultipleObjects
         * @static
         * @param {ICMsgSOMultipleObjects} message CMsgSOMultipleObjects message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOMultipleObjects.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.owner != null && message.hasOwnProperty("owner"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.owner);
            if (message.objects != null && message.objects.length)
                for (var i = 0; i < message.objects.length; ++i)
                    $root.CMsgSOMultipleObjects.SingleObject.encode(message.objects[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            if (message.version != null && message.hasOwnProperty("version"))
                writer.uint32(/* id 3, wireType 1 =*/25).fixed64(message.version);
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid"))
                $root.CMsgSOIDOwner.encode(message.owner_soid, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                writer.uint32(/* id 7, wireType 0 =*/56).uint32(message.service_id);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgSOMultipleObjects message, length delimited. Does not implicitly {@link CMsgSOMultipleObjects.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgSOMultipleObjects
         * @static
         * @param {ICMsgSOMultipleObjects} message CMsgSOMultipleObjects message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOMultipleObjects.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgSOMultipleObjects message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgSOMultipleObjects
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgSOMultipleObjects} CMsgSOMultipleObjects
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOMultipleObjects.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgSOMultipleObjects();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.owner = reader.fixed64();
                    break;
                case 2:
                    if (!(message.objects && message.objects.length))
                        message.objects = [];
                    message.objects.push($root.CMsgSOMultipleObjects.SingleObject.decode(reader, reader.uint32()));
                    break;
                case 3:
                    message.version = reader.fixed64();
                    break;
                case 6:
                    message.owner_soid = $root.CMsgSOIDOwner.decode(reader, reader.uint32());
                    break;
                case 7:
                    message.service_id = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgSOMultipleObjects message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgSOMultipleObjects
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgSOMultipleObjects} CMsgSOMultipleObjects
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOMultipleObjects.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgSOMultipleObjects message.
         * @function verify
         * @memberof CMsgSOMultipleObjects
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgSOMultipleObjects.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.owner != null && message.hasOwnProperty("owner"))
                if (!$util.isInteger(message.owner) && !(message.owner && $util.isInteger(message.owner.low) && $util.isInteger(message.owner.high)))
                    return "owner: integer|Long expected";
            if (message.objects != null && message.hasOwnProperty("objects")) {
                if (!Array.isArray(message.objects))
                    return "objects: array expected";
                for (var i = 0; i < message.objects.length; ++i) {
                    var error = $root.CMsgSOMultipleObjects.SingleObject.verify(message.objects[i]);
                    if (error)
                        return "objects." + error;
                }
            }
            if (message.version != null && message.hasOwnProperty("version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid")) {
                var error = $root.CMsgSOIDOwner.verify(message.owner_soid);
                if (error)
                    return "owner_soid." + error;
            }
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                if (!$util.isInteger(message.service_id))
                    return "service_id: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgSOMultipleObjects message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgSOMultipleObjects
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgSOMultipleObjects} CMsgSOMultipleObjects
         */
        CMsgSOMultipleObjects.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgSOMultipleObjects)
                return object;
            var message = new $root.CMsgSOMultipleObjects();
            if (object.owner != null)
                if ($util.Long)
                    (message.owner = $util.Long.fromValue(object.owner)).unsigned = false;
                else if (typeof object.owner === "string")
                    message.owner = parseInt(object.owner, 10);
                else if (typeof object.owner === "number")
                    message.owner = object.owner;
                else if (typeof object.owner === "object")
                    message.owner = new $util.LongBits(object.owner.low >>> 0, object.owner.high >>> 0).toNumber();
            if (object.objects) {
                if (!Array.isArray(object.objects))
                    throw TypeError(".CMsgSOMultipleObjects.objects: array expected");
                message.objects = [];
                for (var i = 0; i < object.objects.length; ++i) {
                    if (typeof object.objects[i] !== "object")
                        throw TypeError(".CMsgSOMultipleObjects.objects: object expected");
                    message.objects[i] = $root.CMsgSOMultipleObjects.SingleObject.fromObject(object.objects[i]);
                }
            }
            if (object.version != null)
                if ($util.Long)
                    (message.version = $util.Long.fromValue(object.version)).unsigned = false;
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber();
            if (object.owner_soid != null) {
                if (typeof object.owner_soid !== "object")
                    throw TypeError(".CMsgSOMultipleObjects.owner_soid: object expected");
                message.owner_soid = $root.CMsgSOIDOwner.fromObject(object.owner_soid);
            }
            if (object.service_id != null)
                message.service_id = object.service_id >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgSOMultipleObjects message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgSOMultipleObjects
         * @static
         * @param {CMsgSOMultipleObjects} message CMsgSOMultipleObjects
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgSOMultipleObjects.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.objects = [];
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.owner = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.owner = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.version = options.longs === String ? "0" : 0;
                object.owner_soid = null;
                object.service_id = 0;
            }
            if (message.owner != null && message.hasOwnProperty("owner"))
                if (typeof message.owner === "number")
                    object.owner = options.longs === String ? String(message.owner) : message.owner;
                else
                    object.owner = options.longs === String ? $util.Long.prototype.toString.call(message.owner) : options.longs === Number ? new $util.LongBits(message.owner.low >>> 0, message.owner.high >>> 0).toNumber() : message.owner;
            if (message.objects && message.objects.length) {
                object.objects = [];
                for (var j = 0; j < message.objects.length; ++j)
                    object.objects[j] = $root.CMsgSOMultipleObjects.SingleObject.toObject(message.objects[j], options);
            }
            if (message.version != null && message.hasOwnProperty("version"))
                if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber() : message.version;
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid"))
                object.owner_soid = $root.CMsgSOIDOwner.toObject(message.owner_soid, options);
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                object.service_id = message.service_id;
            return object;
        };
    
        /**
         * Converts this CMsgSOMultipleObjects to JSON.
         * @function toJSON
         * @memberof CMsgSOMultipleObjects
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgSOMultipleObjects.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgSOMultipleObjects.SingleObject = (function() {
    
            /**
             * Properties of a SingleObject.
             * @memberof CMsgSOMultipleObjects
             * @interface ISingleObject
             * @property {number|null} [type_id] SingleObject type_id
             * @property {Uint8Array|null} [object_data] SingleObject object_data
             */
    
            /**
             * Constructs a new SingleObject.
             * @memberof CMsgSOMultipleObjects
             * @classdesc Represents a SingleObject.
             * @implements ISingleObject
             * @constructor
             * @param {CMsgSOMultipleObjects.ISingleObject=} [properties] Properties to set
             */
            function SingleObject(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * SingleObject type_id.
             * @member {number} type_id
             * @memberof CMsgSOMultipleObjects.SingleObject
             * @instance
             */
            SingleObject.prototype.type_id = 0;
    
            /**
             * SingleObject object_data.
             * @member {Uint8Array} object_data
             * @memberof CMsgSOMultipleObjects.SingleObject
             * @instance
             */
            SingleObject.prototype.object_data = $util.newBuffer([]);
    
            /**
             * Creates a new SingleObject instance using the specified properties.
             * @function create
             * @memberof CMsgSOMultipleObjects.SingleObject
             * @static
             * @param {CMsgSOMultipleObjects.ISingleObject=} [properties] Properties to set
             * @returns {CMsgSOMultipleObjects.SingleObject} SingleObject instance
             */
            SingleObject.create = function create(properties) {
                return new SingleObject(properties);
            };
    
            /**
             * Encodes the specified SingleObject message. Does not implicitly {@link CMsgSOMultipleObjects.SingleObject.verify|verify} messages.
             * @function encode
             * @memberof CMsgSOMultipleObjects.SingleObject
             * @static
             * @param {CMsgSOMultipleObjects.ISingleObject} message SingleObject message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            SingleObject.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.type_id != null && message.hasOwnProperty("type_id"))
                    writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type_id);
                if (message.object_data != null && message.hasOwnProperty("object_data"))
                    writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.object_data);
                return writer;
            };
    
            /**
             * Encodes the specified SingleObject message, length delimited. Does not implicitly {@link CMsgSOMultipleObjects.SingleObject.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgSOMultipleObjects.SingleObject
             * @static
             * @param {CMsgSOMultipleObjects.ISingleObject} message SingleObject message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            SingleObject.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a SingleObject message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgSOMultipleObjects.SingleObject
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgSOMultipleObjects.SingleObject} SingleObject
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            SingleObject.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgSOMultipleObjects.SingleObject();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.type_id = reader.int32();
                        break;
                    case 2:
                        message.object_data = reader.bytes();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a SingleObject message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgSOMultipleObjects.SingleObject
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgSOMultipleObjects.SingleObject} SingleObject
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            SingleObject.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a SingleObject message.
             * @function verify
             * @memberof CMsgSOMultipleObjects.SingleObject
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            SingleObject.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.type_id != null && message.hasOwnProperty("type_id"))
                    if (!$util.isInteger(message.type_id))
                        return "type_id: integer expected";
                if (message.object_data != null && message.hasOwnProperty("object_data"))
                    if (!(message.object_data && typeof message.object_data.length === "number" || $util.isString(message.object_data)))
                        return "object_data: buffer expected";
                return null;
            };
    
            /**
             * Creates a SingleObject message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgSOMultipleObjects.SingleObject
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgSOMultipleObjects.SingleObject} SingleObject
             */
            SingleObject.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgSOMultipleObjects.SingleObject)
                    return object;
                var message = new $root.CMsgSOMultipleObjects.SingleObject();
                if (object.type_id != null)
                    message.type_id = object.type_id | 0;
                if (object.object_data != null)
                    if (typeof object.object_data === "string")
                        $util.base64.decode(object.object_data, message.object_data = $util.newBuffer($util.base64.length(object.object_data)), 0);
                    else if (object.object_data.length)
                        message.object_data = object.object_data;
                return message;
            };
    
            /**
             * Creates a plain object from a SingleObject message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgSOMultipleObjects.SingleObject
             * @static
             * @param {CMsgSOMultipleObjects.SingleObject} message SingleObject
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            SingleObject.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.type_id = 0;
                    if (options.bytes === String)
                        object.object_data = "";
                    else {
                        object.object_data = [];
                        if (options.bytes !== Array)
                            object.object_data = $util.newBuffer(object.object_data);
                    }
                }
                if (message.type_id != null && message.hasOwnProperty("type_id"))
                    object.type_id = message.type_id;
                if (message.object_data != null && message.hasOwnProperty("object_data"))
                    object.object_data = options.bytes === String ? $util.base64.encode(message.object_data, 0, message.object_data.length) : options.bytes === Array ? Array.prototype.slice.call(message.object_data) : message.object_data;
                return object;
            };
    
            /**
             * Converts this SingleObject to JSON.
             * @function toJSON
             * @memberof CMsgSOMultipleObjects.SingleObject
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            SingleObject.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return SingleObject;
        })();
    
        return CMsgSOMultipleObjects;
    })();
    
    $root.CMsgSOCacheSubscribed = (function() {
    
        /**
         * Properties of a CMsgSOCacheSubscribed.
         * @exports ICMsgSOCacheSubscribed
         * @interface ICMsgSOCacheSubscribed
         * @property {number|Long|null} [owner] CMsgSOCacheSubscribed owner
         * @property {Array.<CMsgSOCacheSubscribed.ISubscribedType>|null} [objects] CMsgSOCacheSubscribed objects
         * @property {number|Long|null} [version] CMsgSOCacheSubscribed version
         * @property {ICMsgSOIDOwner|null} [owner_soid] CMsgSOCacheSubscribed owner_soid
         * @property {number|null} [service_id] CMsgSOCacheSubscribed service_id
         * @property {Array.<number>|null} [service_list] CMsgSOCacheSubscribed service_list
         * @property {number|Long|null} [sync_version] CMsgSOCacheSubscribed sync_version
         */
    
        /**
         * Constructs a new CMsgSOCacheSubscribed.
         * @exports CMsgSOCacheSubscribed
         * @classdesc Represents a CMsgSOCacheSubscribed.
         * @implements ICMsgSOCacheSubscribed
         * @constructor
         * @param {ICMsgSOCacheSubscribed=} [properties] Properties to set
         */
        function CMsgSOCacheSubscribed(properties) {
            this.objects = [];
            this.service_list = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgSOCacheSubscribed owner.
         * @member {number|Long} owner
         * @memberof CMsgSOCacheSubscribed
         * @instance
         */
        CMsgSOCacheSubscribed.prototype.owner = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgSOCacheSubscribed objects.
         * @member {Array.<CMsgSOCacheSubscribed.ISubscribedType>} objects
         * @memberof CMsgSOCacheSubscribed
         * @instance
         */
        CMsgSOCacheSubscribed.prototype.objects = $util.emptyArray;
    
        /**
         * CMsgSOCacheSubscribed version.
         * @member {number|Long} version
         * @memberof CMsgSOCacheSubscribed
         * @instance
         */
        CMsgSOCacheSubscribed.prototype.version = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgSOCacheSubscribed owner_soid.
         * @member {ICMsgSOIDOwner|null|undefined} owner_soid
         * @memberof CMsgSOCacheSubscribed
         * @instance
         */
        CMsgSOCacheSubscribed.prototype.owner_soid = null;
    
        /**
         * CMsgSOCacheSubscribed service_id.
         * @member {number} service_id
         * @memberof CMsgSOCacheSubscribed
         * @instance
         */
        CMsgSOCacheSubscribed.prototype.service_id = 0;
    
        /**
         * CMsgSOCacheSubscribed service_list.
         * @member {Array.<number>} service_list
         * @memberof CMsgSOCacheSubscribed
         * @instance
         */
        CMsgSOCacheSubscribed.prototype.service_list = $util.emptyArray;
    
        /**
         * CMsgSOCacheSubscribed sync_version.
         * @member {number|Long} sync_version
         * @memberof CMsgSOCacheSubscribed
         * @instance
         */
        CMsgSOCacheSubscribed.prototype.sync_version = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * Creates a new CMsgSOCacheSubscribed instance using the specified properties.
         * @function create
         * @memberof CMsgSOCacheSubscribed
         * @static
         * @param {ICMsgSOCacheSubscribed=} [properties] Properties to set
         * @returns {CMsgSOCacheSubscribed} CMsgSOCacheSubscribed instance
         */
        CMsgSOCacheSubscribed.create = function create(properties) {
            return new CMsgSOCacheSubscribed(properties);
        };
    
        /**
         * Encodes the specified CMsgSOCacheSubscribed message. Does not implicitly {@link CMsgSOCacheSubscribed.verify|verify} messages.
         * @function encode
         * @memberof CMsgSOCacheSubscribed
         * @static
         * @param {ICMsgSOCacheSubscribed} message CMsgSOCacheSubscribed message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheSubscribed.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.owner != null && message.hasOwnProperty("owner"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.owner);
            if (message.objects != null && message.objects.length)
                for (var i = 0; i < message.objects.length; ++i)
                    $root.CMsgSOCacheSubscribed.SubscribedType.encode(message.objects[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            if (message.version != null && message.hasOwnProperty("version"))
                writer.uint32(/* id 3, wireType 1 =*/25).fixed64(message.version);
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid"))
                $root.CMsgSOIDOwner.encode(message.owner_soid, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                writer.uint32(/* id 5, wireType 0 =*/40).uint32(message.service_id);
            if (message.service_list != null && message.service_list.length)
                for (var i = 0; i < message.service_list.length; ++i)
                    writer.uint32(/* id 6, wireType 0 =*/48).uint32(message.service_list[i]);
            if (message.sync_version != null && message.hasOwnProperty("sync_version"))
                writer.uint32(/* id 7, wireType 1 =*/57).fixed64(message.sync_version);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgSOCacheSubscribed message, length delimited. Does not implicitly {@link CMsgSOCacheSubscribed.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgSOCacheSubscribed
         * @static
         * @param {ICMsgSOCacheSubscribed} message CMsgSOCacheSubscribed message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheSubscribed.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgSOCacheSubscribed message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgSOCacheSubscribed
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgSOCacheSubscribed} CMsgSOCacheSubscribed
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheSubscribed.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgSOCacheSubscribed();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.owner = reader.fixed64();
                    break;
                case 2:
                    if (!(message.objects && message.objects.length))
                        message.objects = [];
                    message.objects.push($root.CMsgSOCacheSubscribed.SubscribedType.decode(reader, reader.uint32()));
                    break;
                case 3:
                    message.version = reader.fixed64();
                    break;
                case 4:
                    message.owner_soid = $root.CMsgSOIDOwner.decode(reader, reader.uint32());
                    break;
                case 5:
                    message.service_id = reader.uint32();
                    break;
                case 6:
                    if (!(message.service_list && message.service_list.length))
                        message.service_list = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.service_list.push(reader.uint32());
                    } else
                        message.service_list.push(reader.uint32());
                    break;
                case 7:
                    message.sync_version = reader.fixed64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgSOCacheSubscribed message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgSOCacheSubscribed
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgSOCacheSubscribed} CMsgSOCacheSubscribed
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheSubscribed.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgSOCacheSubscribed message.
         * @function verify
         * @memberof CMsgSOCacheSubscribed
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgSOCacheSubscribed.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.owner != null && message.hasOwnProperty("owner"))
                if (!$util.isInteger(message.owner) && !(message.owner && $util.isInteger(message.owner.low) && $util.isInteger(message.owner.high)))
                    return "owner: integer|Long expected";
            if (message.objects != null && message.hasOwnProperty("objects")) {
                if (!Array.isArray(message.objects))
                    return "objects: array expected";
                for (var i = 0; i < message.objects.length; ++i) {
                    var error = $root.CMsgSOCacheSubscribed.SubscribedType.verify(message.objects[i]);
                    if (error)
                        return "objects." + error;
                }
            }
            if (message.version != null && message.hasOwnProperty("version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid")) {
                var error = $root.CMsgSOIDOwner.verify(message.owner_soid);
                if (error)
                    return "owner_soid." + error;
            }
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                if (!$util.isInteger(message.service_id))
                    return "service_id: integer expected";
            if (message.service_list != null && message.hasOwnProperty("service_list")) {
                if (!Array.isArray(message.service_list))
                    return "service_list: array expected";
                for (var i = 0; i < message.service_list.length; ++i)
                    if (!$util.isInteger(message.service_list[i]))
                        return "service_list: integer[] expected";
            }
            if (message.sync_version != null && message.hasOwnProperty("sync_version"))
                if (!$util.isInteger(message.sync_version) && !(message.sync_version && $util.isInteger(message.sync_version.low) && $util.isInteger(message.sync_version.high)))
                    return "sync_version: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CMsgSOCacheSubscribed message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgSOCacheSubscribed
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgSOCacheSubscribed} CMsgSOCacheSubscribed
         */
        CMsgSOCacheSubscribed.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgSOCacheSubscribed)
                return object;
            var message = new $root.CMsgSOCacheSubscribed();
            if (object.owner != null)
                if ($util.Long)
                    (message.owner = $util.Long.fromValue(object.owner)).unsigned = false;
                else if (typeof object.owner === "string")
                    message.owner = parseInt(object.owner, 10);
                else if (typeof object.owner === "number")
                    message.owner = object.owner;
                else if (typeof object.owner === "object")
                    message.owner = new $util.LongBits(object.owner.low >>> 0, object.owner.high >>> 0).toNumber();
            if (object.objects) {
                if (!Array.isArray(object.objects))
                    throw TypeError(".CMsgSOCacheSubscribed.objects: array expected");
                message.objects = [];
                for (var i = 0; i < object.objects.length; ++i) {
                    if (typeof object.objects[i] !== "object")
                        throw TypeError(".CMsgSOCacheSubscribed.objects: object expected");
                    message.objects[i] = $root.CMsgSOCacheSubscribed.SubscribedType.fromObject(object.objects[i]);
                }
            }
            if (object.version != null)
                if ($util.Long)
                    (message.version = $util.Long.fromValue(object.version)).unsigned = false;
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber();
            if (object.owner_soid != null) {
                if (typeof object.owner_soid !== "object")
                    throw TypeError(".CMsgSOCacheSubscribed.owner_soid: object expected");
                message.owner_soid = $root.CMsgSOIDOwner.fromObject(object.owner_soid);
            }
            if (object.service_id != null)
                message.service_id = object.service_id >>> 0;
            if (object.service_list) {
                if (!Array.isArray(object.service_list))
                    throw TypeError(".CMsgSOCacheSubscribed.service_list: array expected");
                message.service_list = [];
                for (var i = 0; i < object.service_list.length; ++i)
                    message.service_list[i] = object.service_list[i] >>> 0;
            }
            if (object.sync_version != null)
                if ($util.Long)
                    (message.sync_version = $util.Long.fromValue(object.sync_version)).unsigned = false;
                else if (typeof object.sync_version === "string")
                    message.sync_version = parseInt(object.sync_version, 10);
                else if (typeof object.sync_version === "number")
                    message.sync_version = object.sync_version;
                else if (typeof object.sync_version === "object")
                    message.sync_version = new $util.LongBits(object.sync_version.low >>> 0, object.sync_version.high >>> 0).toNumber();
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgSOCacheSubscribed message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgSOCacheSubscribed
         * @static
         * @param {CMsgSOCacheSubscribed} message CMsgSOCacheSubscribed
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgSOCacheSubscribed.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults) {
                object.objects = [];
                object.service_list = [];
            }
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.owner = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.owner = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.version = options.longs === String ? "0" : 0;
                object.owner_soid = null;
                object.service_id = 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.sync_version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.sync_version = options.longs === String ? "0" : 0;
            }
            if (message.owner != null && message.hasOwnProperty("owner"))
                if (typeof message.owner === "number")
                    object.owner = options.longs === String ? String(message.owner) : message.owner;
                else
                    object.owner = options.longs === String ? $util.Long.prototype.toString.call(message.owner) : options.longs === Number ? new $util.LongBits(message.owner.low >>> 0, message.owner.high >>> 0).toNumber() : message.owner;
            if (message.objects && message.objects.length) {
                object.objects = [];
                for (var j = 0; j < message.objects.length; ++j)
                    object.objects[j] = $root.CMsgSOCacheSubscribed.SubscribedType.toObject(message.objects[j], options);
            }
            if (message.version != null && message.hasOwnProperty("version"))
                if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber() : message.version;
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid"))
                object.owner_soid = $root.CMsgSOIDOwner.toObject(message.owner_soid, options);
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                object.service_id = message.service_id;
            if (message.service_list && message.service_list.length) {
                object.service_list = [];
                for (var j = 0; j < message.service_list.length; ++j)
                    object.service_list[j] = message.service_list[j];
            }
            if (message.sync_version != null && message.hasOwnProperty("sync_version"))
                if (typeof message.sync_version === "number")
                    object.sync_version = options.longs === String ? String(message.sync_version) : message.sync_version;
                else
                    object.sync_version = options.longs === String ? $util.Long.prototype.toString.call(message.sync_version) : options.longs === Number ? new $util.LongBits(message.sync_version.low >>> 0, message.sync_version.high >>> 0).toNumber() : message.sync_version;
            return object;
        };
    
        /**
         * Converts this CMsgSOCacheSubscribed to JSON.
         * @function toJSON
         * @memberof CMsgSOCacheSubscribed
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgSOCacheSubscribed.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgSOCacheSubscribed.SubscribedType = (function() {
    
            /**
             * Properties of a SubscribedType.
             * @memberof CMsgSOCacheSubscribed
             * @interface ISubscribedType
             * @property {number|null} [type_id] SubscribedType type_id
             * @property {Array.<Uint8Array>|null} [object_data] SubscribedType object_data
             */
    
            /**
             * Constructs a new SubscribedType.
             * @memberof CMsgSOCacheSubscribed
             * @classdesc Represents a SubscribedType.
             * @implements ISubscribedType
             * @constructor
             * @param {CMsgSOCacheSubscribed.ISubscribedType=} [properties] Properties to set
             */
            function SubscribedType(properties) {
                this.object_data = [];
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * SubscribedType type_id.
             * @member {number} type_id
             * @memberof CMsgSOCacheSubscribed.SubscribedType
             * @instance
             */
            SubscribedType.prototype.type_id = 0;
    
            /**
             * SubscribedType object_data.
             * @member {Array.<Uint8Array>} object_data
             * @memberof CMsgSOCacheSubscribed.SubscribedType
             * @instance
             */
            SubscribedType.prototype.object_data = $util.emptyArray;
    
            /**
             * Creates a new SubscribedType instance using the specified properties.
             * @function create
             * @memberof CMsgSOCacheSubscribed.SubscribedType
             * @static
             * @param {CMsgSOCacheSubscribed.ISubscribedType=} [properties] Properties to set
             * @returns {CMsgSOCacheSubscribed.SubscribedType} SubscribedType instance
             */
            SubscribedType.create = function create(properties) {
                return new SubscribedType(properties);
            };
    
            /**
             * Encodes the specified SubscribedType message. Does not implicitly {@link CMsgSOCacheSubscribed.SubscribedType.verify|verify} messages.
             * @function encode
             * @memberof CMsgSOCacheSubscribed.SubscribedType
             * @static
             * @param {CMsgSOCacheSubscribed.ISubscribedType} message SubscribedType message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            SubscribedType.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.type_id != null && message.hasOwnProperty("type_id"))
                    writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type_id);
                if (message.object_data != null && message.object_data.length)
                    for (var i = 0; i < message.object_data.length; ++i)
                        writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.object_data[i]);
                return writer;
            };
    
            /**
             * Encodes the specified SubscribedType message, length delimited. Does not implicitly {@link CMsgSOCacheSubscribed.SubscribedType.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgSOCacheSubscribed.SubscribedType
             * @static
             * @param {CMsgSOCacheSubscribed.ISubscribedType} message SubscribedType message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            SubscribedType.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a SubscribedType message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgSOCacheSubscribed.SubscribedType
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgSOCacheSubscribed.SubscribedType} SubscribedType
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            SubscribedType.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgSOCacheSubscribed.SubscribedType();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.type_id = reader.int32();
                        break;
                    case 2:
                        if (!(message.object_data && message.object_data.length))
                            message.object_data = [];
                        message.object_data.push(reader.bytes());
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a SubscribedType message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgSOCacheSubscribed.SubscribedType
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgSOCacheSubscribed.SubscribedType} SubscribedType
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            SubscribedType.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a SubscribedType message.
             * @function verify
             * @memberof CMsgSOCacheSubscribed.SubscribedType
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            SubscribedType.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.type_id != null && message.hasOwnProperty("type_id"))
                    if (!$util.isInteger(message.type_id))
                        return "type_id: integer expected";
                if (message.object_data != null && message.hasOwnProperty("object_data")) {
                    if (!Array.isArray(message.object_data))
                        return "object_data: array expected";
                    for (var i = 0; i < message.object_data.length; ++i)
                        if (!(message.object_data[i] && typeof message.object_data[i].length === "number" || $util.isString(message.object_data[i])))
                            return "object_data: buffer[] expected";
                }
                return null;
            };
    
            /**
             * Creates a SubscribedType message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgSOCacheSubscribed.SubscribedType
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgSOCacheSubscribed.SubscribedType} SubscribedType
             */
            SubscribedType.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgSOCacheSubscribed.SubscribedType)
                    return object;
                var message = new $root.CMsgSOCacheSubscribed.SubscribedType();
                if (object.type_id != null)
                    message.type_id = object.type_id | 0;
                if (object.object_data) {
                    if (!Array.isArray(object.object_data))
                        throw TypeError(".CMsgSOCacheSubscribed.SubscribedType.object_data: array expected");
                    message.object_data = [];
                    for (var i = 0; i < object.object_data.length; ++i)
                        if (typeof object.object_data[i] === "string")
                            $util.base64.decode(object.object_data[i], message.object_data[i] = $util.newBuffer($util.base64.length(object.object_data[i])), 0);
                        else if (object.object_data[i].length)
                            message.object_data[i] = object.object_data[i];
                }
                return message;
            };
    
            /**
             * Creates a plain object from a SubscribedType message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgSOCacheSubscribed.SubscribedType
             * @static
             * @param {CMsgSOCacheSubscribed.SubscribedType} message SubscribedType
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            SubscribedType.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.arrays || options.defaults)
                    object.object_data = [];
                if (options.defaults)
                    object.type_id = 0;
                if (message.type_id != null && message.hasOwnProperty("type_id"))
                    object.type_id = message.type_id;
                if (message.object_data && message.object_data.length) {
                    object.object_data = [];
                    for (var j = 0; j < message.object_data.length; ++j)
                        object.object_data[j] = options.bytes === String ? $util.base64.encode(message.object_data[j], 0, message.object_data[j].length) : options.bytes === Array ? Array.prototype.slice.call(message.object_data[j]) : message.object_data[j];
                }
                return object;
            };
    
            /**
             * Converts this SubscribedType to JSON.
             * @function toJSON
             * @memberof CMsgSOCacheSubscribed.SubscribedType
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            SubscribedType.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return SubscribedType;
        })();
    
        return CMsgSOCacheSubscribed;
    })();
    
    $root.CMsgSOCacheSubscribedUpToDate = (function() {
    
        /**
         * Properties of a CMsgSOCacheSubscribedUpToDate.
         * @exports ICMsgSOCacheSubscribedUpToDate
         * @interface ICMsgSOCacheSubscribedUpToDate
         * @property {number|Long|null} [version] CMsgSOCacheSubscribedUpToDate version
         * @property {ICMsgSOIDOwner|null} [owner_soid] CMsgSOCacheSubscribedUpToDate owner_soid
         * @property {number|null} [service_id] CMsgSOCacheSubscribedUpToDate service_id
         * @property {Array.<number>|null} [service_list] CMsgSOCacheSubscribedUpToDate service_list
         * @property {number|Long|null} [sync_version] CMsgSOCacheSubscribedUpToDate sync_version
         */
    
        /**
         * Constructs a new CMsgSOCacheSubscribedUpToDate.
         * @exports CMsgSOCacheSubscribedUpToDate
         * @classdesc Represents a CMsgSOCacheSubscribedUpToDate.
         * @implements ICMsgSOCacheSubscribedUpToDate
         * @constructor
         * @param {ICMsgSOCacheSubscribedUpToDate=} [properties] Properties to set
         */
        function CMsgSOCacheSubscribedUpToDate(properties) {
            this.service_list = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgSOCacheSubscribedUpToDate version.
         * @member {number|Long} version
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @instance
         */
        CMsgSOCacheSubscribedUpToDate.prototype.version = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgSOCacheSubscribedUpToDate owner_soid.
         * @member {ICMsgSOIDOwner|null|undefined} owner_soid
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @instance
         */
        CMsgSOCacheSubscribedUpToDate.prototype.owner_soid = null;
    
        /**
         * CMsgSOCacheSubscribedUpToDate service_id.
         * @member {number} service_id
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @instance
         */
        CMsgSOCacheSubscribedUpToDate.prototype.service_id = 0;
    
        /**
         * CMsgSOCacheSubscribedUpToDate service_list.
         * @member {Array.<number>} service_list
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @instance
         */
        CMsgSOCacheSubscribedUpToDate.prototype.service_list = $util.emptyArray;
    
        /**
         * CMsgSOCacheSubscribedUpToDate sync_version.
         * @member {number|Long} sync_version
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @instance
         */
        CMsgSOCacheSubscribedUpToDate.prototype.sync_version = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * Creates a new CMsgSOCacheSubscribedUpToDate instance using the specified properties.
         * @function create
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @static
         * @param {ICMsgSOCacheSubscribedUpToDate=} [properties] Properties to set
         * @returns {CMsgSOCacheSubscribedUpToDate} CMsgSOCacheSubscribedUpToDate instance
         */
        CMsgSOCacheSubscribedUpToDate.create = function create(properties) {
            return new CMsgSOCacheSubscribedUpToDate(properties);
        };
    
        /**
         * Encodes the specified CMsgSOCacheSubscribedUpToDate message. Does not implicitly {@link CMsgSOCacheSubscribedUpToDate.verify|verify} messages.
         * @function encode
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @static
         * @param {ICMsgSOCacheSubscribedUpToDate} message CMsgSOCacheSubscribedUpToDate message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheSubscribedUpToDate.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.version != null && message.hasOwnProperty("version"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.version);
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid"))
                $root.CMsgSOIDOwner.encode(message.owner_soid, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.service_id);
            if (message.service_list != null && message.service_list.length)
                for (var i = 0; i < message.service_list.length; ++i)
                    writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.service_list[i]);
            if (message.sync_version != null && message.hasOwnProperty("sync_version"))
                writer.uint32(/* id 5, wireType 1 =*/41).fixed64(message.sync_version);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgSOCacheSubscribedUpToDate message, length delimited. Does not implicitly {@link CMsgSOCacheSubscribedUpToDate.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @static
         * @param {ICMsgSOCacheSubscribedUpToDate} message CMsgSOCacheSubscribedUpToDate message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheSubscribedUpToDate.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgSOCacheSubscribedUpToDate message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgSOCacheSubscribedUpToDate} CMsgSOCacheSubscribedUpToDate
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheSubscribedUpToDate.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgSOCacheSubscribedUpToDate();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.version = reader.fixed64();
                    break;
                case 2:
                    message.owner_soid = $root.CMsgSOIDOwner.decode(reader, reader.uint32());
                    break;
                case 3:
                    message.service_id = reader.uint32();
                    break;
                case 4:
                    if (!(message.service_list && message.service_list.length))
                        message.service_list = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.service_list.push(reader.uint32());
                    } else
                        message.service_list.push(reader.uint32());
                    break;
                case 5:
                    message.sync_version = reader.fixed64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgSOCacheSubscribedUpToDate message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgSOCacheSubscribedUpToDate} CMsgSOCacheSubscribedUpToDate
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheSubscribedUpToDate.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgSOCacheSubscribedUpToDate message.
         * @function verify
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgSOCacheSubscribedUpToDate.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.version != null && message.hasOwnProperty("version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid")) {
                var error = $root.CMsgSOIDOwner.verify(message.owner_soid);
                if (error)
                    return "owner_soid." + error;
            }
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                if (!$util.isInteger(message.service_id))
                    return "service_id: integer expected";
            if (message.service_list != null && message.hasOwnProperty("service_list")) {
                if (!Array.isArray(message.service_list))
                    return "service_list: array expected";
                for (var i = 0; i < message.service_list.length; ++i)
                    if (!$util.isInteger(message.service_list[i]))
                        return "service_list: integer[] expected";
            }
            if (message.sync_version != null && message.hasOwnProperty("sync_version"))
                if (!$util.isInteger(message.sync_version) && !(message.sync_version && $util.isInteger(message.sync_version.low) && $util.isInteger(message.sync_version.high)))
                    return "sync_version: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CMsgSOCacheSubscribedUpToDate message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgSOCacheSubscribedUpToDate} CMsgSOCacheSubscribedUpToDate
         */
        CMsgSOCacheSubscribedUpToDate.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgSOCacheSubscribedUpToDate)
                return object;
            var message = new $root.CMsgSOCacheSubscribedUpToDate();
            if (object.version != null)
                if ($util.Long)
                    (message.version = $util.Long.fromValue(object.version)).unsigned = false;
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber();
            if (object.owner_soid != null) {
                if (typeof object.owner_soid !== "object")
                    throw TypeError(".CMsgSOCacheSubscribedUpToDate.owner_soid: object expected");
                message.owner_soid = $root.CMsgSOIDOwner.fromObject(object.owner_soid);
            }
            if (object.service_id != null)
                message.service_id = object.service_id >>> 0;
            if (object.service_list) {
                if (!Array.isArray(object.service_list))
                    throw TypeError(".CMsgSOCacheSubscribedUpToDate.service_list: array expected");
                message.service_list = [];
                for (var i = 0; i < object.service_list.length; ++i)
                    message.service_list[i] = object.service_list[i] >>> 0;
            }
            if (object.sync_version != null)
                if ($util.Long)
                    (message.sync_version = $util.Long.fromValue(object.sync_version)).unsigned = false;
                else if (typeof object.sync_version === "string")
                    message.sync_version = parseInt(object.sync_version, 10);
                else if (typeof object.sync_version === "number")
                    message.sync_version = object.sync_version;
                else if (typeof object.sync_version === "object")
                    message.sync_version = new $util.LongBits(object.sync_version.low >>> 0, object.sync_version.high >>> 0).toNumber();
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgSOCacheSubscribedUpToDate message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @static
         * @param {CMsgSOCacheSubscribedUpToDate} message CMsgSOCacheSubscribedUpToDate
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgSOCacheSubscribedUpToDate.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.service_list = [];
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.version = options.longs === String ? "0" : 0;
                object.owner_soid = null;
                object.service_id = 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.sync_version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.sync_version = options.longs === String ? "0" : 0;
            }
            if (message.version != null && message.hasOwnProperty("version"))
                if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber() : message.version;
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid"))
                object.owner_soid = $root.CMsgSOIDOwner.toObject(message.owner_soid, options);
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                object.service_id = message.service_id;
            if (message.service_list && message.service_list.length) {
                object.service_list = [];
                for (var j = 0; j < message.service_list.length; ++j)
                    object.service_list[j] = message.service_list[j];
            }
            if (message.sync_version != null && message.hasOwnProperty("sync_version"))
                if (typeof message.sync_version === "number")
                    object.sync_version = options.longs === String ? String(message.sync_version) : message.sync_version;
                else
                    object.sync_version = options.longs === String ? $util.Long.prototype.toString.call(message.sync_version) : options.longs === Number ? new $util.LongBits(message.sync_version.low >>> 0, message.sync_version.high >>> 0).toNumber() : message.sync_version;
            return object;
        };
    
        /**
         * Converts this CMsgSOCacheSubscribedUpToDate to JSON.
         * @function toJSON
         * @memberof CMsgSOCacheSubscribedUpToDate
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgSOCacheSubscribedUpToDate.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgSOCacheSubscribedUpToDate;
    })();
    
    $root.CMsgSOCacheUnsubscribed = (function() {
    
        /**
         * Properties of a CMsgSOCacheUnsubscribed.
         * @exports ICMsgSOCacheUnsubscribed
         * @interface ICMsgSOCacheUnsubscribed
         * @property {number|Long|null} [owner] CMsgSOCacheUnsubscribed owner
         */
    
        /**
         * Constructs a new CMsgSOCacheUnsubscribed.
         * @exports CMsgSOCacheUnsubscribed
         * @classdesc Represents a CMsgSOCacheUnsubscribed.
         * @implements ICMsgSOCacheUnsubscribed
         * @constructor
         * @param {ICMsgSOCacheUnsubscribed=} [properties] Properties to set
         */
        function CMsgSOCacheUnsubscribed(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgSOCacheUnsubscribed owner.
         * @member {number|Long} owner
         * @memberof CMsgSOCacheUnsubscribed
         * @instance
         */
        CMsgSOCacheUnsubscribed.prototype.owner = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * Creates a new CMsgSOCacheUnsubscribed instance using the specified properties.
         * @function create
         * @memberof CMsgSOCacheUnsubscribed
         * @static
         * @param {ICMsgSOCacheUnsubscribed=} [properties] Properties to set
         * @returns {CMsgSOCacheUnsubscribed} CMsgSOCacheUnsubscribed instance
         */
        CMsgSOCacheUnsubscribed.create = function create(properties) {
            return new CMsgSOCacheUnsubscribed(properties);
        };
    
        /**
         * Encodes the specified CMsgSOCacheUnsubscribed message. Does not implicitly {@link CMsgSOCacheUnsubscribed.verify|verify} messages.
         * @function encode
         * @memberof CMsgSOCacheUnsubscribed
         * @static
         * @param {ICMsgSOCacheUnsubscribed} message CMsgSOCacheUnsubscribed message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheUnsubscribed.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.owner != null && message.hasOwnProperty("owner"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.owner);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgSOCacheUnsubscribed message, length delimited. Does not implicitly {@link CMsgSOCacheUnsubscribed.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgSOCacheUnsubscribed
         * @static
         * @param {ICMsgSOCacheUnsubscribed} message CMsgSOCacheUnsubscribed message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheUnsubscribed.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgSOCacheUnsubscribed message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgSOCacheUnsubscribed
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgSOCacheUnsubscribed} CMsgSOCacheUnsubscribed
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheUnsubscribed.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgSOCacheUnsubscribed();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.owner = reader.fixed64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgSOCacheUnsubscribed message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgSOCacheUnsubscribed
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgSOCacheUnsubscribed} CMsgSOCacheUnsubscribed
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheUnsubscribed.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgSOCacheUnsubscribed message.
         * @function verify
         * @memberof CMsgSOCacheUnsubscribed
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgSOCacheUnsubscribed.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.owner != null && message.hasOwnProperty("owner"))
                if (!$util.isInteger(message.owner) && !(message.owner && $util.isInteger(message.owner.low) && $util.isInteger(message.owner.high)))
                    return "owner: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CMsgSOCacheUnsubscribed message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgSOCacheUnsubscribed
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgSOCacheUnsubscribed} CMsgSOCacheUnsubscribed
         */
        CMsgSOCacheUnsubscribed.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgSOCacheUnsubscribed)
                return object;
            var message = new $root.CMsgSOCacheUnsubscribed();
            if (object.owner != null)
                if ($util.Long)
                    (message.owner = $util.Long.fromValue(object.owner)).unsigned = false;
                else if (typeof object.owner === "string")
                    message.owner = parseInt(object.owner, 10);
                else if (typeof object.owner === "number")
                    message.owner = object.owner;
                else if (typeof object.owner === "object")
                    message.owner = new $util.LongBits(object.owner.low >>> 0, object.owner.high >>> 0).toNumber();
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgSOCacheUnsubscribed message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgSOCacheUnsubscribed
         * @static
         * @param {CMsgSOCacheUnsubscribed} message CMsgSOCacheUnsubscribed
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgSOCacheUnsubscribed.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.owner = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.owner = options.longs === String ? "0" : 0;
            if (message.owner != null && message.hasOwnProperty("owner"))
                if (typeof message.owner === "number")
                    object.owner = options.longs === String ? String(message.owner) : message.owner;
                else
                    object.owner = options.longs === String ? $util.Long.prototype.toString.call(message.owner) : options.longs === Number ? new $util.LongBits(message.owner.low >>> 0, message.owner.high >>> 0).toNumber() : message.owner;
            return object;
        };
    
        /**
         * Converts this CMsgSOCacheUnsubscribed to JSON.
         * @function toJSON
         * @memberof CMsgSOCacheUnsubscribed
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgSOCacheUnsubscribed.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgSOCacheUnsubscribed;
    })();
    
    $root.CMsgSOCacheSubscriptionCheck = (function() {
    
        /**
         * Properties of a CMsgSOCacheSubscriptionCheck.
         * @exports ICMsgSOCacheSubscriptionCheck
         * @interface ICMsgSOCacheSubscriptionCheck
         * @property {number|Long|null} [owner] CMsgSOCacheSubscriptionCheck owner
         * @property {number|Long|null} [version] CMsgSOCacheSubscriptionCheck version
         * @property {ICMsgSOIDOwner|null} [owner_soid] CMsgSOCacheSubscriptionCheck owner_soid
         * @property {number|null} [service_id] CMsgSOCacheSubscriptionCheck service_id
         * @property {Array.<number>|null} [service_list] CMsgSOCacheSubscriptionCheck service_list
         * @property {number|Long|null} [sync_version] CMsgSOCacheSubscriptionCheck sync_version
         */
    
        /**
         * Constructs a new CMsgSOCacheSubscriptionCheck.
         * @exports CMsgSOCacheSubscriptionCheck
         * @classdesc Represents a CMsgSOCacheSubscriptionCheck.
         * @implements ICMsgSOCacheSubscriptionCheck
         * @constructor
         * @param {ICMsgSOCacheSubscriptionCheck=} [properties] Properties to set
         */
        function CMsgSOCacheSubscriptionCheck(properties) {
            this.service_list = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgSOCacheSubscriptionCheck owner.
         * @member {number|Long} owner
         * @memberof CMsgSOCacheSubscriptionCheck
         * @instance
         */
        CMsgSOCacheSubscriptionCheck.prototype.owner = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgSOCacheSubscriptionCheck version.
         * @member {number|Long} version
         * @memberof CMsgSOCacheSubscriptionCheck
         * @instance
         */
        CMsgSOCacheSubscriptionCheck.prototype.version = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgSOCacheSubscriptionCheck owner_soid.
         * @member {ICMsgSOIDOwner|null|undefined} owner_soid
         * @memberof CMsgSOCacheSubscriptionCheck
         * @instance
         */
        CMsgSOCacheSubscriptionCheck.prototype.owner_soid = null;
    
        /**
         * CMsgSOCacheSubscriptionCheck service_id.
         * @member {number} service_id
         * @memberof CMsgSOCacheSubscriptionCheck
         * @instance
         */
        CMsgSOCacheSubscriptionCheck.prototype.service_id = 0;
    
        /**
         * CMsgSOCacheSubscriptionCheck service_list.
         * @member {Array.<number>} service_list
         * @memberof CMsgSOCacheSubscriptionCheck
         * @instance
         */
        CMsgSOCacheSubscriptionCheck.prototype.service_list = $util.emptyArray;
    
        /**
         * CMsgSOCacheSubscriptionCheck sync_version.
         * @member {number|Long} sync_version
         * @memberof CMsgSOCacheSubscriptionCheck
         * @instance
         */
        CMsgSOCacheSubscriptionCheck.prototype.sync_version = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * Creates a new CMsgSOCacheSubscriptionCheck instance using the specified properties.
         * @function create
         * @memberof CMsgSOCacheSubscriptionCheck
         * @static
         * @param {ICMsgSOCacheSubscriptionCheck=} [properties] Properties to set
         * @returns {CMsgSOCacheSubscriptionCheck} CMsgSOCacheSubscriptionCheck instance
         */
        CMsgSOCacheSubscriptionCheck.create = function create(properties) {
            return new CMsgSOCacheSubscriptionCheck(properties);
        };
    
        /**
         * Encodes the specified CMsgSOCacheSubscriptionCheck message. Does not implicitly {@link CMsgSOCacheSubscriptionCheck.verify|verify} messages.
         * @function encode
         * @memberof CMsgSOCacheSubscriptionCheck
         * @static
         * @param {ICMsgSOCacheSubscriptionCheck} message CMsgSOCacheSubscriptionCheck message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheSubscriptionCheck.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.owner != null && message.hasOwnProperty("owner"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.owner);
            if (message.version != null && message.hasOwnProperty("version"))
                writer.uint32(/* id 2, wireType 1 =*/17).fixed64(message.version);
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid"))
                $root.CMsgSOIDOwner.encode(message.owner_soid, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.service_id);
            if (message.service_list != null && message.service_list.length)
                for (var i = 0; i < message.service_list.length; ++i)
                    writer.uint32(/* id 5, wireType 0 =*/40).uint32(message.service_list[i]);
            if (message.sync_version != null && message.hasOwnProperty("sync_version"))
                writer.uint32(/* id 6, wireType 1 =*/49).fixed64(message.sync_version);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgSOCacheSubscriptionCheck message, length delimited. Does not implicitly {@link CMsgSOCacheSubscriptionCheck.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgSOCacheSubscriptionCheck
         * @static
         * @param {ICMsgSOCacheSubscriptionCheck} message CMsgSOCacheSubscriptionCheck message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheSubscriptionCheck.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgSOCacheSubscriptionCheck message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgSOCacheSubscriptionCheck
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgSOCacheSubscriptionCheck} CMsgSOCacheSubscriptionCheck
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheSubscriptionCheck.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgSOCacheSubscriptionCheck();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.owner = reader.fixed64();
                    break;
                case 2:
                    message.version = reader.fixed64();
                    break;
                case 3:
                    message.owner_soid = $root.CMsgSOIDOwner.decode(reader, reader.uint32());
                    break;
                case 4:
                    message.service_id = reader.uint32();
                    break;
                case 5:
                    if (!(message.service_list && message.service_list.length))
                        message.service_list = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.service_list.push(reader.uint32());
                    } else
                        message.service_list.push(reader.uint32());
                    break;
                case 6:
                    message.sync_version = reader.fixed64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgSOCacheSubscriptionCheck message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgSOCacheSubscriptionCheck
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgSOCacheSubscriptionCheck} CMsgSOCacheSubscriptionCheck
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheSubscriptionCheck.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgSOCacheSubscriptionCheck message.
         * @function verify
         * @memberof CMsgSOCacheSubscriptionCheck
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgSOCacheSubscriptionCheck.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.owner != null && message.hasOwnProperty("owner"))
                if (!$util.isInteger(message.owner) && !(message.owner && $util.isInteger(message.owner.low) && $util.isInteger(message.owner.high)))
                    return "owner: integer|Long expected";
            if (message.version != null && message.hasOwnProperty("version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid")) {
                var error = $root.CMsgSOIDOwner.verify(message.owner_soid);
                if (error)
                    return "owner_soid." + error;
            }
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                if (!$util.isInteger(message.service_id))
                    return "service_id: integer expected";
            if (message.service_list != null && message.hasOwnProperty("service_list")) {
                if (!Array.isArray(message.service_list))
                    return "service_list: array expected";
                for (var i = 0; i < message.service_list.length; ++i)
                    if (!$util.isInteger(message.service_list[i]))
                        return "service_list: integer[] expected";
            }
            if (message.sync_version != null && message.hasOwnProperty("sync_version"))
                if (!$util.isInteger(message.sync_version) && !(message.sync_version && $util.isInteger(message.sync_version.low) && $util.isInteger(message.sync_version.high)))
                    return "sync_version: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CMsgSOCacheSubscriptionCheck message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgSOCacheSubscriptionCheck
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgSOCacheSubscriptionCheck} CMsgSOCacheSubscriptionCheck
         */
        CMsgSOCacheSubscriptionCheck.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgSOCacheSubscriptionCheck)
                return object;
            var message = new $root.CMsgSOCacheSubscriptionCheck();
            if (object.owner != null)
                if ($util.Long)
                    (message.owner = $util.Long.fromValue(object.owner)).unsigned = false;
                else if (typeof object.owner === "string")
                    message.owner = parseInt(object.owner, 10);
                else if (typeof object.owner === "number")
                    message.owner = object.owner;
                else if (typeof object.owner === "object")
                    message.owner = new $util.LongBits(object.owner.low >>> 0, object.owner.high >>> 0).toNumber();
            if (object.version != null)
                if ($util.Long)
                    (message.version = $util.Long.fromValue(object.version)).unsigned = false;
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber();
            if (object.owner_soid != null) {
                if (typeof object.owner_soid !== "object")
                    throw TypeError(".CMsgSOCacheSubscriptionCheck.owner_soid: object expected");
                message.owner_soid = $root.CMsgSOIDOwner.fromObject(object.owner_soid);
            }
            if (object.service_id != null)
                message.service_id = object.service_id >>> 0;
            if (object.service_list) {
                if (!Array.isArray(object.service_list))
                    throw TypeError(".CMsgSOCacheSubscriptionCheck.service_list: array expected");
                message.service_list = [];
                for (var i = 0; i < object.service_list.length; ++i)
                    message.service_list[i] = object.service_list[i] >>> 0;
            }
            if (object.sync_version != null)
                if ($util.Long)
                    (message.sync_version = $util.Long.fromValue(object.sync_version)).unsigned = false;
                else if (typeof object.sync_version === "string")
                    message.sync_version = parseInt(object.sync_version, 10);
                else if (typeof object.sync_version === "number")
                    message.sync_version = object.sync_version;
                else if (typeof object.sync_version === "object")
                    message.sync_version = new $util.LongBits(object.sync_version.low >>> 0, object.sync_version.high >>> 0).toNumber();
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgSOCacheSubscriptionCheck message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgSOCacheSubscriptionCheck
         * @static
         * @param {CMsgSOCacheSubscriptionCheck} message CMsgSOCacheSubscriptionCheck
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgSOCacheSubscriptionCheck.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.service_list = [];
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.owner = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.owner = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.version = options.longs === String ? "0" : 0;
                object.owner_soid = null;
                object.service_id = 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.sync_version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.sync_version = options.longs === String ? "0" : 0;
            }
            if (message.owner != null && message.hasOwnProperty("owner"))
                if (typeof message.owner === "number")
                    object.owner = options.longs === String ? String(message.owner) : message.owner;
                else
                    object.owner = options.longs === String ? $util.Long.prototype.toString.call(message.owner) : options.longs === Number ? new $util.LongBits(message.owner.low >>> 0, message.owner.high >>> 0).toNumber() : message.owner;
            if (message.version != null && message.hasOwnProperty("version"))
                if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber() : message.version;
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid"))
                object.owner_soid = $root.CMsgSOIDOwner.toObject(message.owner_soid, options);
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                object.service_id = message.service_id;
            if (message.service_list && message.service_list.length) {
                object.service_list = [];
                for (var j = 0; j < message.service_list.length; ++j)
                    object.service_list[j] = message.service_list[j];
            }
            if (message.sync_version != null && message.hasOwnProperty("sync_version"))
                if (typeof message.sync_version === "number")
                    object.sync_version = options.longs === String ? String(message.sync_version) : message.sync_version;
                else
                    object.sync_version = options.longs === String ? $util.Long.prototype.toString.call(message.sync_version) : options.longs === Number ? new $util.LongBits(message.sync_version.low >>> 0, message.sync_version.high >>> 0).toNumber() : message.sync_version;
            return object;
        };
    
        /**
         * Converts this CMsgSOCacheSubscriptionCheck to JSON.
         * @function toJSON
         * @memberof CMsgSOCacheSubscriptionCheck
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgSOCacheSubscriptionCheck.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgSOCacheSubscriptionCheck;
    })();
    
    $root.CMsgSOCacheSubscriptionRefresh = (function() {
    
        /**
         * Properties of a CMsgSOCacheSubscriptionRefresh.
         * @exports ICMsgSOCacheSubscriptionRefresh
         * @interface ICMsgSOCacheSubscriptionRefresh
         * @property {number|Long|null} [owner] CMsgSOCacheSubscriptionRefresh owner
         * @property {ICMsgSOIDOwner|null} [owner_soid] CMsgSOCacheSubscriptionRefresh owner_soid
         */
    
        /**
         * Constructs a new CMsgSOCacheSubscriptionRefresh.
         * @exports CMsgSOCacheSubscriptionRefresh
         * @classdesc Represents a CMsgSOCacheSubscriptionRefresh.
         * @implements ICMsgSOCacheSubscriptionRefresh
         * @constructor
         * @param {ICMsgSOCacheSubscriptionRefresh=} [properties] Properties to set
         */
        function CMsgSOCacheSubscriptionRefresh(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgSOCacheSubscriptionRefresh owner.
         * @member {number|Long} owner
         * @memberof CMsgSOCacheSubscriptionRefresh
         * @instance
         */
        CMsgSOCacheSubscriptionRefresh.prototype.owner = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgSOCacheSubscriptionRefresh owner_soid.
         * @member {ICMsgSOIDOwner|null|undefined} owner_soid
         * @memberof CMsgSOCacheSubscriptionRefresh
         * @instance
         */
        CMsgSOCacheSubscriptionRefresh.prototype.owner_soid = null;
    
        /**
         * Creates a new CMsgSOCacheSubscriptionRefresh instance using the specified properties.
         * @function create
         * @memberof CMsgSOCacheSubscriptionRefresh
         * @static
         * @param {ICMsgSOCacheSubscriptionRefresh=} [properties] Properties to set
         * @returns {CMsgSOCacheSubscriptionRefresh} CMsgSOCacheSubscriptionRefresh instance
         */
        CMsgSOCacheSubscriptionRefresh.create = function create(properties) {
            return new CMsgSOCacheSubscriptionRefresh(properties);
        };
    
        /**
         * Encodes the specified CMsgSOCacheSubscriptionRefresh message. Does not implicitly {@link CMsgSOCacheSubscriptionRefresh.verify|verify} messages.
         * @function encode
         * @memberof CMsgSOCacheSubscriptionRefresh
         * @static
         * @param {ICMsgSOCacheSubscriptionRefresh} message CMsgSOCacheSubscriptionRefresh message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheSubscriptionRefresh.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.owner != null && message.hasOwnProperty("owner"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.owner);
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid"))
                $root.CMsgSOIDOwner.encode(message.owner_soid, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CMsgSOCacheSubscriptionRefresh message, length delimited. Does not implicitly {@link CMsgSOCacheSubscriptionRefresh.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgSOCacheSubscriptionRefresh
         * @static
         * @param {ICMsgSOCacheSubscriptionRefresh} message CMsgSOCacheSubscriptionRefresh message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheSubscriptionRefresh.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgSOCacheSubscriptionRefresh message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgSOCacheSubscriptionRefresh
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgSOCacheSubscriptionRefresh} CMsgSOCacheSubscriptionRefresh
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheSubscriptionRefresh.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgSOCacheSubscriptionRefresh();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.owner = reader.fixed64();
                    break;
                case 2:
                    message.owner_soid = $root.CMsgSOIDOwner.decode(reader, reader.uint32());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgSOCacheSubscriptionRefresh message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgSOCacheSubscriptionRefresh
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgSOCacheSubscriptionRefresh} CMsgSOCacheSubscriptionRefresh
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheSubscriptionRefresh.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgSOCacheSubscriptionRefresh message.
         * @function verify
         * @memberof CMsgSOCacheSubscriptionRefresh
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgSOCacheSubscriptionRefresh.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.owner != null && message.hasOwnProperty("owner"))
                if (!$util.isInteger(message.owner) && !(message.owner && $util.isInteger(message.owner.low) && $util.isInteger(message.owner.high)))
                    return "owner: integer|Long expected";
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid")) {
                var error = $root.CMsgSOIDOwner.verify(message.owner_soid);
                if (error)
                    return "owner_soid." + error;
            }
            return null;
        };
    
        /**
         * Creates a CMsgSOCacheSubscriptionRefresh message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgSOCacheSubscriptionRefresh
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgSOCacheSubscriptionRefresh} CMsgSOCacheSubscriptionRefresh
         */
        CMsgSOCacheSubscriptionRefresh.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgSOCacheSubscriptionRefresh)
                return object;
            var message = new $root.CMsgSOCacheSubscriptionRefresh();
            if (object.owner != null)
                if ($util.Long)
                    (message.owner = $util.Long.fromValue(object.owner)).unsigned = false;
                else if (typeof object.owner === "string")
                    message.owner = parseInt(object.owner, 10);
                else if (typeof object.owner === "number")
                    message.owner = object.owner;
                else if (typeof object.owner === "object")
                    message.owner = new $util.LongBits(object.owner.low >>> 0, object.owner.high >>> 0).toNumber();
            if (object.owner_soid != null) {
                if (typeof object.owner_soid !== "object")
                    throw TypeError(".CMsgSOCacheSubscriptionRefresh.owner_soid: object expected");
                message.owner_soid = $root.CMsgSOIDOwner.fromObject(object.owner_soid);
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgSOCacheSubscriptionRefresh message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgSOCacheSubscriptionRefresh
         * @static
         * @param {CMsgSOCacheSubscriptionRefresh} message CMsgSOCacheSubscriptionRefresh
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgSOCacheSubscriptionRefresh.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.owner = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.owner = options.longs === String ? "0" : 0;
                object.owner_soid = null;
            }
            if (message.owner != null && message.hasOwnProperty("owner"))
                if (typeof message.owner === "number")
                    object.owner = options.longs === String ? String(message.owner) : message.owner;
                else
                    object.owner = options.longs === String ? $util.Long.prototype.toString.call(message.owner) : options.longs === Number ? new $util.LongBits(message.owner.low >>> 0, message.owner.high >>> 0).toNumber() : message.owner;
            if (message.owner_soid != null && message.hasOwnProperty("owner_soid"))
                object.owner_soid = $root.CMsgSOIDOwner.toObject(message.owner_soid, options);
            return object;
        };
    
        /**
         * Converts this CMsgSOCacheSubscriptionRefresh to JSON.
         * @function toJSON
         * @memberof CMsgSOCacheSubscriptionRefresh
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgSOCacheSubscriptionRefresh.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgSOCacheSubscriptionRefresh;
    })();
    
    $root.CMsgSOCacheVersion = (function() {
    
        /**
         * Properties of a CMsgSOCacheVersion.
         * @exports ICMsgSOCacheVersion
         * @interface ICMsgSOCacheVersion
         * @property {number|Long|null} [version] CMsgSOCacheVersion version
         */
    
        /**
         * Constructs a new CMsgSOCacheVersion.
         * @exports CMsgSOCacheVersion
         * @classdesc Represents a CMsgSOCacheVersion.
         * @implements ICMsgSOCacheVersion
         * @constructor
         * @param {ICMsgSOCacheVersion=} [properties] Properties to set
         */
        function CMsgSOCacheVersion(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgSOCacheVersion version.
         * @member {number|Long} version
         * @memberof CMsgSOCacheVersion
         * @instance
         */
        CMsgSOCacheVersion.prototype.version = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * Creates a new CMsgSOCacheVersion instance using the specified properties.
         * @function create
         * @memberof CMsgSOCacheVersion
         * @static
         * @param {ICMsgSOCacheVersion=} [properties] Properties to set
         * @returns {CMsgSOCacheVersion} CMsgSOCacheVersion instance
         */
        CMsgSOCacheVersion.create = function create(properties) {
            return new CMsgSOCacheVersion(properties);
        };
    
        /**
         * Encodes the specified CMsgSOCacheVersion message. Does not implicitly {@link CMsgSOCacheVersion.verify|verify} messages.
         * @function encode
         * @memberof CMsgSOCacheVersion
         * @static
         * @param {ICMsgSOCacheVersion} message CMsgSOCacheVersion message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheVersion.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.version != null && message.hasOwnProperty("version"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.version);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgSOCacheVersion message, length delimited. Does not implicitly {@link CMsgSOCacheVersion.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgSOCacheVersion
         * @static
         * @param {ICMsgSOCacheVersion} message CMsgSOCacheVersion message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheVersion.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgSOCacheVersion message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgSOCacheVersion
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgSOCacheVersion} CMsgSOCacheVersion
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheVersion.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgSOCacheVersion();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.version = reader.fixed64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgSOCacheVersion message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgSOCacheVersion
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgSOCacheVersion} CMsgSOCacheVersion
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheVersion.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgSOCacheVersion message.
         * @function verify
         * @memberof CMsgSOCacheVersion
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgSOCacheVersion.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.version != null && message.hasOwnProperty("version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CMsgSOCacheVersion message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgSOCacheVersion
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgSOCacheVersion} CMsgSOCacheVersion
         */
        CMsgSOCacheVersion.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgSOCacheVersion)
                return object;
            var message = new $root.CMsgSOCacheVersion();
            if (object.version != null)
                if ($util.Long)
                    (message.version = $util.Long.fromValue(object.version)).unsigned = false;
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber();
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgSOCacheVersion message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgSOCacheVersion
         * @static
         * @param {CMsgSOCacheVersion} message CMsgSOCacheVersion
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgSOCacheVersion.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.version = options.longs === String ? "0" : 0;
            if (message.version != null && message.hasOwnProperty("version"))
                if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber() : message.version;
            return object;
        };
    
        /**
         * Converts this CMsgSOCacheVersion to JSON.
         * @function toJSON
         * @memberof CMsgSOCacheVersion
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgSOCacheVersion.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgSOCacheVersion;
    })();
    
    $root.CMsgGCMultiplexMessage = (function() {
    
        /**
         * Properties of a CMsgGCMultiplexMessage.
         * @exports ICMsgGCMultiplexMessage
         * @interface ICMsgGCMultiplexMessage
         * @property {number|null} [msgtype] CMsgGCMultiplexMessage msgtype
         * @property {Uint8Array|null} [payload] CMsgGCMultiplexMessage payload
         * @property {Array.<number|Long>|null} [steamids] CMsgGCMultiplexMessage steamids
         */
    
        /**
         * Constructs a new CMsgGCMultiplexMessage.
         * @exports CMsgGCMultiplexMessage
         * @classdesc Represents a CMsgGCMultiplexMessage.
         * @implements ICMsgGCMultiplexMessage
         * @constructor
         * @param {ICMsgGCMultiplexMessage=} [properties] Properties to set
         */
        function CMsgGCMultiplexMessage(properties) {
            this.steamids = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCMultiplexMessage msgtype.
         * @member {number} msgtype
         * @memberof CMsgGCMultiplexMessage
         * @instance
         */
        CMsgGCMultiplexMessage.prototype.msgtype = 0;
    
        /**
         * CMsgGCMultiplexMessage payload.
         * @member {Uint8Array} payload
         * @memberof CMsgGCMultiplexMessage
         * @instance
         */
        CMsgGCMultiplexMessage.prototype.payload = $util.newBuffer([]);
    
        /**
         * CMsgGCMultiplexMessage steamids.
         * @member {Array.<number|Long>} steamids
         * @memberof CMsgGCMultiplexMessage
         * @instance
         */
        CMsgGCMultiplexMessage.prototype.steamids = $util.emptyArray;
    
        /**
         * Creates a new CMsgGCMultiplexMessage instance using the specified properties.
         * @function create
         * @memberof CMsgGCMultiplexMessage
         * @static
         * @param {ICMsgGCMultiplexMessage=} [properties] Properties to set
         * @returns {CMsgGCMultiplexMessage} CMsgGCMultiplexMessage instance
         */
        CMsgGCMultiplexMessage.create = function create(properties) {
            return new CMsgGCMultiplexMessage(properties);
        };
    
        /**
         * Encodes the specified CMsgGCMultiplexMessage message. Does not implicitly {@link CMsgGCMultiplexMessage.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCMultiplexMessage
         * @static
         * @param {ICMsgGCMultiplexMessage} message CMsgGCMultiplexMessage message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMultiplexMessage.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.msgtype != null && message.hasOwnProperty("msgtype"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.msgtype);
            if (message.payload != null && message.hasOwnProperty("payload"))
                writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.payload);
            if (message.steamids != null && message.steamids.length)
                for (var i = 0; i < message.steamids.length; ++i)
                    writer.uint32(/* id 3, wireType 1 =*/25).fixed64(message.steamids[i]);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCMultiplexMessage message, length delimited. Does not implicitly {@link CMsgGCMultiplexMessage.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCMultiplexMessage
         * @static
         * @param {ICMsgGCMultiplexMessage} message CMsgGCMultiplexMessage message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMultiplexMessage.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCMultiplexMessage message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCMultiplexMessage
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCMultiplexMessage} CMsgGCMultiplexMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMultiplexMessage.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCMultiplexMessage();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.msgtype = reader.uint32();
                    break;
                case 2:
                    message.payload = reader.bytes();
                    break;
                case 3:
                    if (!(message.steamids && message.steamids.length))
                        message.steamids = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.steamids.push(reader.fixed64());
                    } else
                        message.steamids.push(reader.fixed64());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCMultiplexMessage message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCMultiplexMessage
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCMultiplexMessage} CMsgGCMultiplexMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMultiplexMessage.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCMultiplexMessage message.
         * @function verify
         * @memberof CMsgGCMultiplexMessage
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCMultiplexMessage.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.msgtype != null && message.hasOwnProperty("msgtype"))
                if (!$util.isInteger(message.msgtype))
                    return "msgtype: integer expected";
            if (message.payload != null && message.hasOwnProperty("payload"))
                if (!(message.payload && typeof message.payload.length === "number" || $util.isString(message.payload)))
                    return "payload: buffer expected";
            if (message.steamids != null && message.hasOwnProperty("steamids")) {
                if (!Array.isArray(message.steamids))
                    return "steamids: array expected";
                for (var i = 0; i < message.steamids.length; ++i)
                    if (!$util.isInteger(message.steamids[i]) && !(message.steamids[i] && $util.isInteger(message.steamids[i].low) && $util.isInteger(message.steamids[i].high)))
                        return "steamids: integer|Long[] expected";
            }
            return null;
        };
    
        /**
         * Creates a CMsgGCMultiplexMessage message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCMultiplexMessage
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCMultiplexMessage} CMsgGCMultiplexMessage
         */
        CMsgGCMultiplexMessage.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCMultiplexMessage)
                return object;
            var message = new $root.CMsgGCMultiplexMessage();
            if (object.msgtype != null)
                message.msgtype = object.msgtype >>> 0;
            if (object.payload != null)
                if (typeof object.payload === "string")
                    $util.base64.decode(object.payload, message.payload = $util.newBuffer($util.base64.length(object.payload)), 0);
                else if (object.payload.length)
                    message.payload = object.payload;
            if (object.steamids) {
                if (!Array.isArray(object.steamids))
                    throw TypeError(".CMsgGCMultiplexMessage.steamids: array expected");
                message.steamids = [];
                for (var i = 0; i < object.steamids.length; ++i)
                    if ($util.Long)
                        (message.steamids[i] = $util.Long.fromValue(object.steamids[i])).unsigned = false;
                    else if (typeof object.steamids[i] === "string")
                        message.steamids[i] = parseInt(object.steamids[i], 10);
                    else if (typeof object.steamids[i] === "number")
                        message.steamids[i] = object.steamids[i];
                    else if (typeof object.steamids[i] === "object")
                        message.steamids[i] = new $util.LongBits(object.steamids[i].low >>> 0, object.steamids[i].high >>> 0).toNumber();
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCMultiplexMessage message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCMultiplexMessage
         * @static
         * @param {CMsgGCMultiplexMessage} message CMsgGCMultiplexMessage
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCMultiplexMessage.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.steamids = [];
            if (options.defaults) {
                object.msgtype = 0;
                if (options.bytes === String)
                    object.payload = "";
                else {
                    object.payload = [];
                    if (options.bytes !== Array)
                        object.payload = $util.newBuffer(object.payload);
                }
            }
            if (message.msgtype != null && message.hasOwnProperty("msgtype"))
                object.msgtype = message.msgtype;
            if (message.payload != null && message.hasOwnProperty("payload"))
                object.payload = options.bytes === String ? $util.base64.encode(message.payload, 0, message.payload.length) : options.bytes === Array ? Array.prototype.slice.call(message.payload) : message.payload;
            if (message.steamids && message.steamids.length) {
                object.steamids = [];
                for (var j = 0; j < message.steamids.length; ++j)
                    if (typeof message.steamids[j] === "number")
                        object.steamids[j] = options.longs === String ? String(message.steamids[j]) : message.steamids[j];
                    else
                        object.steamids[j] = options.longs === String ? $util.Long.prototype.toString.call(message.steamids[j]) : options.longs === Number ? new $util.LongBits(message.steamids[j].low >>> 0, message.steamids[j].high >>> 0).toNumber() : message.steamids[j];
            }
            return object;
        };
    
        /**
         * Converts this CMsgGCMultiplexMessage to JSON.
         * @function toJSON
         * @memberof CMsgGCMultiplexMessage
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCMultiplexMessage.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCMultiplexMessage;
    })();
    
    $root.CGCToGCMsgMasterAck = (function() {
    
        /**
         * Properties of a CGCToGCMsgMasterAck.
         * @exports ICGCToGCMsgMasterAck
         * @interface ICGCToGCMsgMasterAck
         * @property {number|null} [dir_index] CGCToGCMsgMasterAck dir_index
         * @property {string|null} [machine_name] CGCToGCMsgMasterAck machine_name
         * @property {string|null} [process_name] CGCToGCMsgMasterAck process_name
         * @property {Array.<number>|null} [type_instances] CGCToGCMsgMasterAck type_instances
         */
    
        /**
         * Constructs a new CGCToGCMsgMasterAck.
         * @exports CGCToGCMsgMasterAck
         * @classdesc Represents a CGCToGCMsgMasterAck.
         * @implements ICGCToGCMsgMasterAck
         * @constructor
         * @param {ICGCToGCMsgMasterAck=} [properties] Properties to set
         */
        function CGCToGCMsgMasterAck(properties) {
            this.type_instances = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCToGCMsgMasterAck dir_index.
         * @member {number} dir_index
         * @memberof CGCToGCMsgMasterAck
         * @instance
         */
        CGCToGCMsgMasterAck.prototype.dir_index = 0;
    
        /**
         * CGCToGCMsgMasterAck machine_name.
         * @member {string} machine_name
         * @memberof CGCToGCMsgMasterAck
         * @instance
         */
        CGCToGCMsgMasterAck.prototype.machine_name = "";
    
        /**
         * CGCToGCMsgMasterAck process_name.
         * @member {string} process_name
         * @memberof CGCToGCMsgMasterAck
         * @instance
         */
        CGCToGCMsgMasterAck.prototype.process_name = "";
    
        /**
         * CGCToGCMsgMasterAck type_instances.
         * @member {Array.<number>} type_instances
         * @memberof CGCToGCMsgMasterAck
         * @instance
         */
        CGCToGCMsgMasterAck.prototype.type_instances = $util.emptyArray;
    
        /**
         * Creates a new CGCToGCMsgMasterAck instance using the specified properties.
         * @function create
         * @memberof CGCToGCMsgMasterAck
         * @static
         * @param {ICGCToGCMsgMasterAck=} [properties] Properties to set
         * @returns {CGCToGCMsgMasterAck} CGCToGCMsgMasterAck instance
         */
        CGCToGCMsgMasterAck.create = function create(properties) {
            return new CGCToGCMsgMasterAck(properties);
        };
    
        /**
         * Encodes the specified CGCToGCMsgMasterAck message. Does not implicitly {@link CGCToGCMsgMasterAck.verify|verify} messages.
         * @function encode
         * @memberof CGCToGCMsgMasterAck
         * @static
         * @param {ICGCToGCMsgMasterAck} message CGCToGCMsgMasterAck message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCToGCMsgMasterAck.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.dir_index != null && message.hasOwnProperty("dir_index"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.dir_index);
            if (message.machine_name != null && message.hasOwnProperty("machine_name"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.machine_name);
            if (message.process_name != null && message.hasOwnProperty("process_name"))
                writer.uint32(/* id 4, wireType 2 =*/34).string(message.process_name);
            if (message.type_instances != null && message.type_instances.length)
                for (var i = 0; i < message.type_instances.length; ++i)
                    writer.uint32(/* id 5, wireType 0 =*/40).uint32(message.type_instances[i]);
            return writer;
        };
    
        /**
         * Encodes the specified CGCToGCMsgMasterAck message, length delimited. Does not implicitly {@link CGCToGCMsgMasterAck.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCToGCMsgMasterAck
         * @static
         * @param {ICGCToGCMsgMasterAck} message CGCToGCMsgMasterAck message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCToGCMsgMasterAck.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCToGCMsgMasterAck message from the specified reader or buffer.
         * @function decode
         * @memberof CGCToGCMsgMasterAck
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCToGCMsgMasterAck} CGCToGCMsgMasterAck
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCToGCMsgMasterAck.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCToGCMsgMasterAck();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.dir_index = reader.uint32();
                    break;
                case 3:
                    message.machine_name = reader.string();
                    break;
                case 4:
                    message.process_name = reader.string();
                    break;
                case 5:
                    if (!(message.type_instances && message.type_instances.length))
                        message.type_instances = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.type_instances.push(reader.uint32());
                    } else
                        message.type_instances.push(reader.uint32());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCToGCMsgMasterAck message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCToGCMsgMasterAck
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCToGCMsgMasterAck} CGCToGCMsgMasterAck
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCToGCMsgMasterAck.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCToGCMsgMasterAck message.
         * @function verify
         * @memberof CGCToGCMsgMasterAck
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCToGCMsgMasterAck.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.dir_index != null && message.hasOwnProperty("dir_index"))
                if (!$util.isInteger(message.dir_index))
                    return "dir_index: integer expected";
            if (message.machine_name != null && message.hasOwnProperty("machine_name"))
                if (!$util.isString(message.machine_name))
                    return "machine_name: string expected";
            if (message.process_name != null && message.hasOwnProperty("process_name"))
                if (!$util.isString(message.process_name))
                    return "process_name: string expected";
            if (message.type_instances != null && message.hasOwnProperty("type_instances")) {
                if (!Array.isArray(message.type_instances))
                    return "type_instances: array expected";
                for (var i = 0; i < message.type_instances.length; ++i)
                    if (!$util.isInteger(message.type_instances[i]))
                        return "type_instances: integer[] expected";
            }
            return null;
        };
    
        /**
         * Creates a CGCToGCMsgMasterAck message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCToGCMsgMasterAck
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCToGCMsgMasterAck} CGCToGCMsgMasterAck
         */
        CGCToGCMsgMasterAck.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCToGCMsgMasterAck)
                return object;
            var message = new $root.CGCToGCMsgMasterAck();
            if (object.dir_index != null)
                message.dir_index = object.dir_index >>> 0;
            if (object.machine_name != null)
                message.machine_name = String(object.machine_name);
            if (object.process_name != null)
                message.process_name = String(object.process_name);
            if (object.type_instances) {
                if (!Array.isArray(object.type_instances))
                    throw TypeError(".CGCToGCMsgMasterAck.type_instances: array expected");
                message.type_instances = [];
                for (var i = 0; i < object.type_instances.length; ++i)
                    message.type_instances[i] = object.type_instances[i] >>> 0;
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CGCToGCMsgMasterAck message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCToGCMsgMasterAck
         * @static
         * @param {CGCToGCMsgMasterAck} message CGCToGCMsgMasterAck
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCToGCMsgMasterAck.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.type_instances = [];
            if (options.defaults) {
                object.dir_index = 0;
                object.machine_name = "";
                object.process_name = "";
            }
            if (message.dir_index != null && message.hasOwnProperty("dir_index"))
                object.dir_index = message.dir_index;
            if (message.machine_name != null && message.hasOwnProperty("machine_name"))
                object.machine_name = message.machine_name;
            if (message.process_name != null && message.hasOwnProperty("process_name"))
                object.process_name = message.process_name;
            if (message.type_instances && message.type_instances.length) {
                object.type_instances = [];
                for (var j = 0; j < message.type_instances.length; ++j)
                    object.type_instances[j] = message.type_instances[j];
            }
            return object;
        };
    
        /**
         * Converts this CGCToGCMsgMasterAck to JSON.
         * @function toJSON
         * @memberof CGCToGCMsgMasterAck
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCToGCMsgMasterAck.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCToGCMsgMasterAck;
    })();
    
    $root.CGCToGCMsgMasterAck_Response = (function() {
    
        /**
         * Properties of a CGCToGCMsgMasterAck_Response.
         * @exports ICGCToGCMsgMasterAck_Response
         * @interface ICGCToGCMsgMasterAck_Response
         * @property {number|null} [eresult] CGCToGCMsgMasterAck_Response eresult
         */
    
        /**
         * Constructs a new CGCToGCMsgMasterAck_Response.
         * @exports CGCToGCMsgMasterAck_Response
         * @classdesc Represents a CGCToGCMsgMasterAck_Response.
         * @implements ICGCToGCMsgMasterAck_Response
         * @constructor
         * @param {ICGCToGCMsgMasterAck_Response=} [properties] Properties to set
         */
        function CGCToGCMsgMasterAck_Response(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCToGCMsgMasterAck_Response eresult.
         * @member {number} eresult
         * @memberof CGCToGCMsgMasterAck_Response
         * @instance
         */
        CGCToGCMsgMasterAck_Response.prototype.eresult = 2;
    
        /**
         * Creates a new CGCToGCMsgMasterAck_Response instance using the specified properties.
         * @function create
         * @memberof CGCToGCMsgMasterAck_Response
         * @static
         * @param {ICGCToGCMsgMasterAck_Response=} [properties] Properties to set
         * @returns {CGCToGCMsgMasterAck_Response} CGCToGCMsgMasterAck_Response instance
         */
        CGCToGCMsgMasterAck_Response.create = function create(properties) {
            return new CGCToGCMsgMasterAck_Response(properties);
        };
    
        /**
         * Encodes the specified CGCToGCMsgMasterAck_Response message. Does not implicitly {@link CGCToGCMsgMasterAck_Response.verify|verify} messages.
         * @function encode
         * @memberof CGCToGCMsgMasterAck_Response
         * @static
         * @param {ICGCToGCMsgMasterAck_Response} message CGCToGCMsgMasterAck_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCToGCMsgMasterAck_Response.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.eresult);
            return writer;
        };
    
        /**
         * Encodes the specified CGCToGCMsgMasterAck_Response message, length delimited. Does not implicitly {@link CGCToGCMsgMasterAck_Response.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCToGCMsgMasterAck_Response
         * @static
         * @param {ICGCToGCMsgMasterAck_Response} message CGCToGCMsgMasterAck_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCToGCMsgMasterAck_Response.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCToGCMsgMasterAck_Response message from the specified reader or buffer.
         * @function decode
         * @memberof CGCToGCMsgMasterAck_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCToGCMsgMasterAck_Response} CGCToGCMsgMasterAck_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCToGCMsgMasterAck_Response.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCToGCMsgMasterAck_Response();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.eresult = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCToGCMsgMasterAck_Response message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCToGCMsgMasterAck_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCToGCMsgMasterAck_Response} CGCToGCMsgMasterAck_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCToGCMsgMasterAck_Response.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCToGCMsgMasterAck_Response message.
         * @function verify
         * @memberof CGCToGCMsgMasterAck_Response
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCToGCMsgMasterAck_Response.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                if (!$util.isInteger(message.eresult))
                    return "eresult: integer expected";
            return null;
        };
    
        /**
         * Creates a CGCToGCMsgMasterAck_Response message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCToGCMsgMasterAck_Response
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCToGCMsgMasterAck_Response} CGCToGCMsgMasterAck_Response
         */
        CGCToGCMsgMasterAck_Response.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCToGCMsgMasterAck_Response)
                return object;
            var message = new $root.CGCToGCMsgMasterAck_Response();
            if (object.eresult != null)
                message.eresult = object.eresult | 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CGCToGCMsgMasterAck_Response message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCToGCMsgMasterAck_Response
         * @static
         * @param {CGCToGCMsgMasterAck_Response} message CGCToGCMsgMasterAck_Response
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCToGCMsgMasterAck_Response.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.eresult = 2;
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                object.eresult = message.eresult;
            return object;
        };
    
        /**
         * Converts this CGCToGCMsgMasterAck_Response to JSON.
         * @function toJSON
         * @memberof CGCToGCMsgMasterAck_Response
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCToGCMsgMasterAck_Response.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCToGCMsgMasterAck_Response;
    })();
    
    $root.CGCToGCMsgMasterStartupComplete = (function() {
    
        /**
         * Properties of a CGCToGCMsgMasterStartupComplete.
         * @exports ICGCToGCMsgMasterStartupComplete
         * @interface ICGCToGCMsgMasterStartupComplete
         * @property {Array.<CGCToGCMsgMasterStartupComplete.IGCInfo>|null} [gc_info] CGCToGCMsgMasterStartupComplete gc_info
         */
    
        /**
         * Constructs a new CGCToGCMsgMasterStartupComplete.
         * @exports CGCToGCMsgMasterStartupComplete
         * @classdesc Represents a CGCToGCMsgMasterStartupComplete.
         * @implements ICGCToGCMsgMasterStartupComplete
         * @constructor
         * @param {ICGCToGCMsgMasterStartupComplete=} [properties] Properties to set
         */
        function CGCToGCMsgMasterStartupComplete(properties) {
            this.gc_info = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCToGCMsgMasterStartupComplete gc_info.
         * @member {Array.<CGCToGCMsgMasterStartupComplete.IGCInfo>} gc_info
         * @memberof CGCToGCMsgMasterStartupComplete
         * @instance
         */
        CGCToGCMsgMasterStartupComplete.prototype.gc_info = $util.emptyArray;
    
        /**
         * Creates a new CGCToGCMsgMasterStartupComplete instance using the specified properties.
         * @function create
         * @memberof CGCToGCMsgMasterStartupComplete
         * @static
         * @param {ICGCToGCMsgMasterStartupComplete=} [properties] Properties to set
         * @returns {CGCToGCMsgMasterStartupComplete} CGCToGCMsgMasterStartupComplete instance
         */
        CGCToGCMsgMasterStartupComplete.create = function create(properties) {
            return new CGCToGCMsgMasterStartupComplete(properties);
        };
    
        /**
         * Encodes the specified CGCToGCMsgMasterStartupComplete message. Does not implicitly {@link CGCToGCMsgMasterStartupComplete.verify|verify} messages.
         * @function encode
         * @memberof CGCToGCMsgMasterStartupComplete
         * @static
         * @param {ICGCToGCMsgMasterStartupComplete} message CGCToGCMsgMasterStartupComplete message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCToGCMsgMasterStartupComplete.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.gc_info != null && message.gc_info.length)
                for (var i = 0; i < message.gc_info.length; ++i)
                    $root.CGCToGCMsgMasterStartupComplete.GCInfo.encode(message.gc_info[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CGCToGCMsgMasterStartupComplete message, length delimited. Does not implicitly {@link CGCToGCMsgMasterStartupComplete.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCToGCMsgMasterStartupComplete
         * @static
         * @param {ICGCToGCMsgMasterStartupComplete} message CGCToGCMsgMasterStartupComplete message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCToGCMsgMasterStartupComplete.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCToGCMsgMasterStartupComplete message from the specified reader or buffer.
         * @function decode
         * @memberof CGCToGCMsgMasterStartupComplete
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCToGCMsgMasterStartupComplete} CGCToGCMsgMasterStartupComplete
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCToGCMsgMasterStartupComplete.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCToGCMsgMasterStartupComplete();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.gc_info && message.gc_info.length))
                        message.gc_info = [];
                    message.gc_info.push($root.CGCToGCMsgMasterStartupComplete.GCInfo.decode(reader, reader.uint32()));
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCToGCMsgMasterStartupComplete message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCToGCMsgMasterStartupComplete
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCToGCMsgMasterStartupComplete} CGCToGCMsgMasterStartupComplete
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCToGCMsgMasterStartupComplete.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCToGCMsgMasterStartupComplete message.
         * @function verify
         * @memberof CGCToGCMsgMasterStartupComplete
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCToGCMsgMasterStartupComplete.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.gc_info != null && message.hasOwnProperty("gc_info")) {
                if (!Array.isArray(message.gc_info))
                    return "gc_info: array expected";
                for (var i = 0; i < message.gc_info.length; ++i) {
                    var error = $root.CGCToGCMsgMasterStartupComplete.GCInfo.verify(message.gc_info[i]);
                    if (error)
                        return "gc_info." + error;
                }
            }
            return null;
        };
    
        /**
         * Creates a CGCToGCMsgMasterStartupComplete message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCToGCMsgMasterStartupComplete
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCToGCMsgMasterStartupComplete} CGCToGCMsgMasterStartupComplete
         */
        CGCToGCMsgMasterStartupComplete.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCToGCMsgMasterStartupComplete)
                return object;
            var message = new $root.CGCToGCMsgMasterStartupComplete();
            if (object.gc_info) {
                if (!Array.isArray(object.gc_info))
                    throw TypeError(".CGCToGCMsgMasterStartupComplete.gc_info: array expected");
                message.gc_info = [];
                for (var i = 0; i < object.gc_info.length; ++i) {
                    if (typeof object.gc_info[i] !== "object")
                        throw TypeError(".CGCToGCMsgMasterStartupComplete.gc_info: object expected");
                    message.gc_info[i] = $root.CGCToGCMsgMasterStartupComplete.GCInfo.fromObject(object.gc_info[i]);
                }
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CGCToGCMsgMasterStartupComplete message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCToGCMsgMasterStartupComplete
         * @static
         * @param {CGCToGCMsgMasterStartupComplete} message CGCToGCMsgMasterStartupComplete
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCToGCMsgMasterStartupComplete.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.gc_info = [];
            if (message.gc_info && message.gc_info.length) {
                object.gc_info = [];
                for (var j = 0; j < message.gc_info.length; ++j)
                    object.gc_info[j] = $root.CGCToGCMsgMasterStartupComplete.GCInfo.toObject(message.gc_info[j], options);
            }
            return object;
        };
    
        /**
         * Converts this CGCToGCMsgMasterStartupComplete to JSON.
         * @function toJSON
         * @memberof CGCToGCMsgMasterStartupComplete
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCToGCMsgMasterStartupComplete.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CGCToGCMsgMasterStartupComplete.GCInfo = (function() {
    
            /**
             * Properties of a GCInfo.
             * @memberof CGCToGCMsgMasterStartupComplete
             * @interface IGCInfo
             * @property {number|null} [dir_index] GCInfo dir_index
             * @property {string|null} [machine_name] GCInfo machine_name
             */
    
            /**
             * Constructs a new GCInfo.
             * @memberof CGCToGCMsgMasterStartupComplete
             * @classdesc Represents a GCInfo.
             * @implements IGCInfo
             * @constructor
             * @param {CGCToGCMsgMasterStartupComplete.IGCInfo=} [properties] Properties to set
             */
            function GCInfo(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * GCInfo dir_index.
             * @member {number} dir_index
             * @memberof CGCToGCMsgMasterStartupComplete.GCInfo
             * @instance
             */
            GCInfo.prototype.dir_index = 0;
    
            /**
             * GCInfo machine_name.
             * @member {string} machine_name
             * @memberof CGCToGCMsgMasterStartupComplete.GCInfo
             * @instance
             */
            GCInfo.prototype.machine_name = "";
    
            /**
             * Creates a new GCInfo instance using the specified properties.
             * @function create
             * @memberof CGCToGCMsgMasterStartupComplete.GCInfo
             * @static
             * @param {CGCToGCMsgMasterStartupComplete.IGCInfo=} [properties] Properties to set
             * @returns {CGCToGCMsgMasterStartupComplete.GCInfo} GCInfo instance
             */
            GCInfo.create = function create(properties) {
                return new GCInfo(properties);
            };
    
            /**
             * Encodes the specified GCInfo message. Does not implicitly {@link CGCToGCMsgMasterStartupComplete.GCInfo.verify|verify} messages.
             * @function encode
             * @memberof CGCToGCMsgMasterStartupComplete.GCInfo
             * @static
             * @param {CGCToGCMsgMasterStartupComplete.IGCInfo} message GCInfo message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            GCInfo.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.dir_index != null && message.hasOwnProperty("dir_index"))
                    writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.dir_index);
                if (message.machine_name != null && message.hasOwnProperty("machine_name"))
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.machine_name);
                return writer;
            };
    
            /**
             * Encodes the specified GCInfo message, length delimited. Does not implicitly {@link CGCToGCMsgMasterStartupComplete.GCInfo.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CGCToGCMsgMasterStartupComplete.GCInfo
             * @static
             * @param {CGCToGCMsgMasterStartupComplete.IGCInfo} message GCInfo message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            GCInfo.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a GCInfo message from the specified reader or buffer.
             * @function decode
             * @memberof CGCToGCMsgMasterStartupComplete.GCInfo
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CGCToGCMsgMasterStartupComplete.GCInfo} GCInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            GCInfo.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCToGCMsgMasterStartupComplete.GCInfo();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.dir_index = reader.uint32();
                        break;
                    case 2:
                        message.machine_name = reader.string();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a GCInfo message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CGCToGCMsgMasterStartupComplete.GCInfo
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CGCToGCMsgMasterStartupComplete.GCInfo} GCInfo
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            GCInfo.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a GCInfo message.
             * @function verify
             * @memberof CGCToGCMsgMasterStartupComplete.GCInfo
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            GCInfo.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.dir_index != null && message.hasOwnProperty("dir_index"))
                    if (!$util.isInteger(message.dir_index))
                        return "dir_index: integer expected";
                if (message.machine_name != null && message.hasOwnProperty("machine_name"))
                    if (!$util.isString(message.machine_name))
                        return "machine_name: string expected";
                return null;
            };
    
            /**
             * Creates a GCInfo message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CGCToGCMsgMasterStartupComplete.GCInfo
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CGCToGCMsgMasterStartupComplete.GCInfo} GCInfo
             */
            GCInfo.fromObject = function fromObject(object) {
                if (object instanceof $root.CGCToGCMsgMasterStartupComplete.GCInfo)
                    return object;
                var message = new $root.CGCToGCMsgMasterStartupComplete.GCInfo();
                if (object.dir_index != null)
                    message.dir_index = object.dir_index >>> 0;
                if (object.machine_name != null)
                    message.machine_name = String(object.machine_name);
                return message;
            };
    
            /**
             * Creates a plain object from a GCInfo message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CGCToGCMsgMasterStartupComplete.GCInfo
             * @static
             * @param {CGCToGCMsgMasterStartupComplete.GCInfo} message GCInfo
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            GCInfo.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.dir_index = 0;
                    object.machine_name = "";
                }
                if (message.dir_index != null && message.hasOwnProperty("dir_index"))
                    object.dir_index = message.dir_index;
                if (message.machine_name != null && message.hasOwnProperty("machine_name"))
                    object.machine_name = message.machine_name;
                return object;
            };
    
            /**
             * Converts this GCInfo to JSON.
             * @function toJSON
             * @memberof CGCToGCMsgMasterStartupComplete.GCInfo
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            GCInfo.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return GCInfo;
        })();
    
        return CGCToGCMsgMasterStartupComplete;
    })();
    
    $root.CGCToGCMsgRouted = (function() {
    
        /**
         * Properties of a CGCToGCMsgRouted.
         * @exports ICGCToGCMsgRouted
         * @interface ICGCToGCMsgRouted
         * @property {number|null} [msg_type] CGCToGCMsgRouted msg_type
         * @property {number|Long|null} [sender_id] CGCToGCMsgRouted sender_id
         * @property {Uint8Array|null} [net_message] CGCToGCMsgRouted net_message
         */
    
        /**
         * Constructs a new CGCToGCMsgRouted.
         * @exports CGCToGCMsgRouted
         * @classdesc Represents a CGCToGCMsgRouted.
         * @implements ICGCToGCMsgRouted
         * @constructor
         * @param {ICGCToGCMsgRouted=} [properties] Properties to set
         */
        function CGCToGCMsgRouted(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCToGCMsgRouted msg_type.
         * @member {number} msg_type
         * @memberof CGCToGCMsgRouted
         * @instance
         */
        CGCToGCMsgRouted.prototype.msg_type = 0;
    
        /**
         * CGCToGCMsgRouted sender_id.
         * @member {number|Long} sender_id
         * @memberof CGCToGCMsgRouted
         * @instance
         */
        CGCToGCMsgRouted.prototype.sender_id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CGCToGCMsgRouted net_message.
         * @member {Uint8Array} net_message
         * @memberof CGCToGCMsgRouted
         * @instance
         */
        CGCToGCMsgRouted.prototype.net_message = $util.newBuffer([]);
    
        /**
         * Creates a new CGCToGCMsgRouted instance using the specified properties.
         * @function create
         * @memberof CGCToGCMsgRouted
         * @static
         * @param {ICGCToGCMsgRouted=} [properties] Properties to set
         * @returns {CGCToGCMsgRouted} CGCToGCMsgRouted instance
         */
        CGCToGCMsgRouted.create = function create(properties) {
            return new CGCToGCMsgRouted(properties);
        };
    
        /**
         * Encodes the specified CGCToGCMsgRouted message. Does not implicitly {@link CGCToGCMsgRouted.verify|verify} messages.
         * @function encode
         * @memberof CGCToGCMsgRouted
         * @static
         * @param {ICGCToGCMsgRouted} message CGCToGCMsgRouted message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCToGCMsgRouted.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.msg_type != null && message.hasOwnProperty("msg_type"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.msg_type);
            if (message.sender_id != null && message.hasOwnProperty("sender_id"))
                writer.uint32(/* id 2, wireType 1 =*/17).fixed64(message.sender_id);
            if (message.net_message != null && message.hasOwnProperty("net_message"))
                writer.uint32(/* id 3, wireType 2 =*/26).bytes(message.net_message);
            return writer;
        };
    
        /**
         * Encodes the specified CGCToGCMsgRouted message, length delimited. Does not implicitly {@link CGCToGCMsgRouted.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCToGCMsgRouted
         * @static
         * @param {ICGCToGCMsgRouted} message CGCToGCMsgRouted message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCToGCMsgRouted.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCToGCMsgRouted message from the specified reader or buffer.
         * @function decode
         * @memberof CGCToGCMsgRouted
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCToGCMsgRouted} CGCToGCMsgRouted
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCToGCMsgRouted.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCToGCMsgRouted();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.msg_type = reader.uint32();
                    break;
                case 2:
                    message.sender_id = reader.fixed64();
                    break;
                case 3:
                    message.net_message = reader.bytes();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCToGCMsgRouted message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCToGCMsgRouted
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCToGCMsgRouted} CGCToGCMsgRouted
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCToGCMsgRouted.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCToGCMsgRouted message.
         * @function verify
         * @memberof CGCToGCMsgRouted
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCToGCMsgRouted.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.msg_type != null && message.hasOwnProperty("msg_type"))
                if (!$util.isInteger(message.msg_type))
                    return "msg_type: integer expected";
            if (message.sender_id != null && message.hasOwnProperty("sender_id"))
                if (!$util.isInteger(message.sender_id) && !(message.sender_id && $util.isInteger(message.sender_id.low) && $util.isInteger(message.sender_id.high)))
                    return "sender_id: integer|Long expected";
            if (message.net_message != null && message.hasOwnProperty("net_message"))
                if (!(message.net_message && typeof message.net_message.length === "number" || $util.isString(message.net_message)))
                    return "net_message: buffer expected";
            return null;
        };
    
        /**
         * Creates a CGCToGCMsgRouted message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCToGCMsgRouted
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCToGCMsgRouted} CGCToGCMsgRouted
         */
        CGCToGCMsgRouted.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCToGCMsgRouted)
                return object;
            var message = new $root.CGCToGCMsgRouted();
            if (object.msg_type != null)
                message.msg_type = object.msg_type >>> 0;
            if (object.sender_id != null)
                if ($util.Long)
                    (message.sender_id = $util.Long.fromValue(object.sender_id)).unsigned = false;
                else if (typeof object.sender_id === "string")
                    message.sender_id = parseInt(object.sender_id, 10);
                else if (typeof object.sender_id === "number")
                    message.sender_id = object.sender_id;
                else if (typeof object.sender_id === "object")
                    message.sender_id = new $util.LongBits(object.sender_id.low >>> 0, object.sender_id.high >>> 0).toNumber();
            if (object.net_message != null)
                if (typeof object.net_message === "string")
                    $util.base64.decode(object.net_message, message.net_message = $util.newBuffer($util.base64.length(object.net_message)), 0);
                else if (object.net_message.length)
                    message.net_message = object.net_message;
            return message;
        };
    
        /**
         * Creates a plain object from a CGCToGCMsgRouted message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCToGCMsgRouted
         * @static
         * @param {CGCToGCMsgRouted} message CGCToGCMsgRouted
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCToGCMsgRouted.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.msg_type = 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.sender_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.sender_id = options.longs === String ? "0" : 0;
                if (options.bytes === String)
                    object.net_message = "";
                else {
                    object.net_message = [];
                    if (options.bytes !== Array)
                        object.net_message = $util.newBuffer(object.net_message);
                }
            }
            if (message.msg_type != null && message.hasOwnProperty("msg_type"))
                object.msg_type = message.msg_type;
            if (message.sender_id != null && message.hasOwnProperty("sender_id"))
                if (typeof message.sender_id === "number")
                    object.sender_id = options.longs === String ? String(message.sender_id) : message.sender_id;
                else
                    object.sender_id = options.longs === String ? $util.Long.prototype.toString.call(message.sender_id) : options.longs === Number ? new $util.LongBits(message.sender_id.low >>> 0, message.sender_id.high >>> 0).toNumber() : message.sender_id;
            if (message.net_message != null && message.hasOwnProperty("net_message"))
                object.net_message = options.bytes === String ? $util.base64.encode(message.net_message, 0, message.net_message.length) : options.bytes === Array ? Array.prototype.slice.call(message.net_message) : message.net_message;
            return object;
        };
    
        /**
         * Converts this CGCToGCMsgRouted to JSON.
         * @function toJSON
         * @memberof CGCToGCMsgRouted
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCToGCMsgRouted.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCToGCMsgRouted;
    })();
    
    $root.CGCToGCMsgRoutedReply = (function() {
    
        /**
         * Properties of a CGCToGCMsgRoutedReply.
         * @exports ICGCToGCMsgRoutedReply
         * @interface ICGCToGCMsgRoutedReply
         * @property {number|null} [msg_type] CGCToGCMsgRoutedReply msg_type
         * @property {Uint8Array|null} [net_message] CGCToGCMsgRoutedReply net_message
         */
    
        /**
         * Constructs a new CGCToGCMsgRoutedReply.
         * @exports CGCToGCMsgRoutedReply
         * @classdesc Represents a CGCToGCMsgRoutedReply.
         * @implements ICGCToGCMsgRoutedReply
         * @constructor
         * @param {ICGCToGCMsgRoutedReply=} [properties] Properties to set
         */
        function CGCToGCMsgRoutedReply(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCToGCMsgRoutedReply msg_type.
         * @member {number} msg_type
         * @memberof CGCToGCMsgRoutedReply
         * @instance
         */
        CGCToGCMsgRoutedReply.prototype.msg_type = 0;
    
        /**
         * CGCToGCMsgRoutedReply net_message.
         * @member {Uint8Array} net_message
         * @memberof CGCToGCMsgRoutedReply
         * @instance
         */
        CGCToGCMsgRoutedReply.prototype.net_message = $util.newBuffer([]);
    
        /**
         * Creates a new CGCToGCMsgRoutedReply instance using the specified properties.
         * @function create
         * @memberof CGCToGCMsgRoutedReply
         * @static
         * @param {ICGCToGCMsgRoutedReply=} [properties] Properties to set
         * @returns {CGCToGCMsgRoutedReply} CGCToGCMsgRoutedReply instance
         */
        CGCToGCMsgRoutedReply.create = function create(properties) {
            return new CGCToGCMsgRoutedReply(properties);
        };
    
        /**
         * Encodes the specified CGCToGCMsgRoutedReply message. Does not implicitly {@link CGCToGCMsgRoutedReply.verify|verify} messages.
         * @function encode
         * @memberof CGCToGCMsgRoutedReply
         * @static
         * @param {ICGCToGCMsgRoutedReply} message CGCToGCMsgRoutedReply message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCToGCMsgRoutedReply.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.msg_type != null && message.hasOwnProperty("msg_type"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.msg_type);
            if (message.net_message != null && message.hasOwnProperty("net_message"))
                writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.net_message);
            return writer;
        };
    
        /**
         * Encodes the specified CGCToGCMsgRoutedReply message, length delimited. Does not implicitly {@link CGCToGCMsgRoutedReply.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCToGCMsgRoutedReply
         * @static
         * @param {ICGCToGCMsgRoutedReply} message CGCToGCMsgRoutedReply message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCToGCMsgRoutedReply.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCToGCMsgRoutedReply message from the specified reader or buffer.
         * @function decode
         * @memberof CGCToGCMsgRoutedReply
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCToGCMsgRoutedReply} CGCToGCMsgRoutedReply
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCToGCMsgRoutedReply.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCToGCMsgRoutedReply();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.msg_type = reader.uint32();
                    break;
                case 2:
                    message.net_message = reader.bytes();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCToGCMsgRoutedReply message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCToGCMsgRoutedReply
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCToGCMsgRoutedReply} CGCToGCMsgRoutedReply
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCToGCMsgRoutedReply.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCToGCMsgRoutedReply message.
         * @function verify
         * @memberof CGCToGCMsgRoutedReply
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCToGCMsgRoutedReply.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.msg_type != null && message.hasOwnProperty("msg_type"))
                if (!$util.isInteger(message.msg_type))
                    return "msg_type: integer expected";
            if (message.net_message != null && message.hasOwnProperty("net_message"))
                if (!(message.net_message && typeof message.net_message.length === "number" || $util.isString(message.net_message)))
                    return "net_message: buffer expected";
            return null;
        };
    
        /**
         * Creates a CGCToGCMsgRoutedReply message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCToGCMsgRoutedReply
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCToGCMsgRoutedReply} CGCToGCMsgRoutedReply
         */
        CGCToGCMsgRoutedReply.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCToGCMsgRoutedReply)
                return object;
            var message = new $root.CGCToGCMsgRoutedReply();
            if (object.msg_type != null)
                message.msg_type = object.msg_type >>> 0;
            if (object.net_message != null)
                if (typeof object.net_message === "string")
                    $util.base64.decode(object.net_message, message.net_message = $util.newBuffer($util.base64.length(object.net_message)), 0);
                else if (object.net_message.length)
                    message.net_message = object.net_message;
            return message;
        };
    
        /**
         * Creates a plain object from a CGCToGCMsgRoutedReply message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCToGCMsgRoutedReply
         * @static
         * @param {CGCToGCMsgRoutedReply} message CGCToGCMsgRoutedReply
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCToGCMsgRoutedReply.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.msg_type = 0;
                if (options.bytes === String)
                    object.net_message = "";
                else {
                    object.net_message = [];
                    if (options.bytes !== Array)
                        object.net_message = $util.newBuffer(object.net_message);
                }
            }
            if (message.msg_type != null && message.hasOwnProperty("msg_type"))
                object.msg_type = message.msg_type;
            if (message.net_message != null && message.hasOwnProperty("net_message"))
                object.net_message = options.bytes === String ? $util.base64.encode(message.net_message, 0, message.net_message.length) : options.bytes === Array ? Array.prototype.slice.call(message.net_message) : message.net_message;
            return object;
        };
    
        /**
         * Converts this CGCToGCMsgRoutedReply to JSON.
         * @function toJSON
         * @memberof CGCToGCMsgRoutedReply
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCToGCMsgRoutedReply.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCToGCMsgRoutedReply;
    })();
    
    $root.CMsgGCUpdateSubGCSessionInfo = (function() {
    
        /**
         * Properties of a CMsgGCUpdateSubGCSessionInfo.
         * @exports ICMsgGCUpdateSubGCSessionInfo
         * @interface ICMsgGCUpdateSubGCSessionInfo
         * @property {Array.<CMsgGCUpdateSubGCSessionInfo.ICMsgUpdate>|null} [updates] CMsgGCUpdateSubGCSessionInfo updates
         */
    
        /**
         * Constructs a new CMsgGCUpdateSubGCSessionInfo.
         * @exports CMsgGCUpdateSubGCSessionInfo
         * @classdesc Represents a CMsgGCUpdateSubGCSessionInfo.
         * @implements ICMsgGCUpdateSubGCSessionInfo
         * @constructor
         * @param {ICMsgGCUpdateSubGCSessionInfo=} [properties] Properties to set
         */
        function CMsgGCUpdateSubGCSessionInfo(properties) {
            this.updates = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCUpdateSubGCSessionInfo updates.
         * @member {Array.<CMsgGCUpdateSubGCSessionInfo.ICMsgUpdate>} updates
         * @memberof CMsgGCUpdateSubGCSessionInfo
         * @instance
         */
        CMsgGCUpdateSubGCSessionInfo.prototype.updates = $util.emptyArray;
    
        /**
         * Creates a new CMsgGCUpdateSubGCSessionInfo instance using the specified properties.
         * @function create
         * @memberof CMsgGCUpdateSubGCSessionInfo
         * @static
         * @param {ICMsgGCUpdateSubGCSessionInfo=} [properties] Properties to set
         * @returns {CMsgGCUpdateSubGCSessionInfo} CMsgGCUpdateSubGCSessionInfo instance
         */
        CMsgGCUpdateSubGCSessionInfo.create = function create(properties) {
            return new CMsgGCUpdateSubGCSessionInfo(properties);
        };
    
        /**
         * Encodes the specified CMsgGCUpdateSubGCSessionInfo message. Does not implicitly {@link CMsgGCUpdateSubGCSessionInfo.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCUpdateSubGCSessionInfo
         * @static
         * @param {ICMsgGCUpdateSubGCSessionInfo} message CMsgGCUpdateSubGCSessionInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCUpdateSubGCSessionInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.updates != null && message.updates.length)
                for (var i = 0; i < message.updates.length; ++i)
                    $root.CMsgGCUpdateSubGCSessionInfo.CMsgUpdate.encode(message.updates[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCUpdateSubGCSessionInfo message, length delimited. Does not implicitly {@link CMsgGCUpdateSubGCSessionInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCUpdateSubGCSessionInfo
         * @static
         * @param {ICMsgGCUpdateSubGCSessionInfo} message CMsgGCUpdateSubGCSessionInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCUpdateSubGCSessionInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCUpdateSubGCSessionInfo message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCUpdateSubGCSessionInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCUpdateSubGCSessionInfo} CMsgGCUpdateSubGCSessionInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCUpdateSubGCSessionInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCUpdateSubGCSessionInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.updates && message.updates.length))
                        message.updates = [];
                    message.updates.push($root.CMsgGCUpdateSubGCSessionInfo.CMsgUpdate.decode(reader, reader.uint32()));
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCUpdateSubGCSessionInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCUpdateSubGCSessionInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCUpdateSubGCSessionInfo} CMsgGCUpdateSubGCSessionInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCUpdateSubGCSessionInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCUpdateSubGCSessionInfo message.
         * @function verify
         * @memberof CMsgGCUpdateSubGCSessionInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCUpdateSubGCSessionInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.updates != null && message.hasOwnProperty("updates")) {
                if (!Array.isArray(message.updates))
                    return "updates: array expected";
                for (var i = 0; i < message.updates.length; ++i) {
                    var error = $root.CMsgGCUpdateSubGCSessionInfo.CMsgUpdate.verify(message.updates[i]);
                    if (error)
                        return "updates." + error;
                }
            }
            return null;
        };
    
        /**
         * Creates a CMsgGCUpdateSubGCSessionInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCUpdateSubGCSessionInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCUpdateSubGCSessionInfo} CMsgGCUpdateSubGCSessionInfo
         */
        CMsgGCUpdateSubGCSessionInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCUpdateSubGCSessionInfo)
                return object;
            var message = new $root.CMsgGCUpdateSubGCSessionInfo();
            if (object.updates) {
                if (!Array.isArray(object.updates))
                    throw TypeError(".CMsgGCUpdateSubGCSessionInfo.updates: array expected");
                message.updates = [];
                for (var i = 0; i < object.updates.length; ++i) {
                    if (typeof object.updates[i] !== "object")
                        throw TypeError(".CMsgGCUpdateSubGCSessionInfo.updates: object expected");
                    message.updates[i] = $root.CMsgGCUpdateSubGCSessionInfo.CMsgUpdate.fromObject(object.updates[i]);
                }
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCUpdateSubGCSessionInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCUpdateSubGCSessionInfo
         * @static
         * @param {CMsgGCUpdateSubGCSessionInfo} message CMsgGCUpdateSubGCSessionInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCUpdateSubGCSessionInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.updates = [];
            if (message.updates && message.updates.length) {
                object.updates = [];
                for (var j = 0; j < message.updates.length; ++j)
                    object.updates[j] = $root.CMsgGCUpdateSubGCSessionInfo.CMsgUpdate.toObject(message.updates[j], options);
            }
            return object;
        };
    
        /**
         * Converts this CMsgGCUpdateSubGCSessionInfo to JSON.
         * @function toJSON
         * @memberof CMsgGCUpdateSubGCSessionInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCUpdateSubGCSessionInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgGCUpdateSubGCSessionInfo.CMsgUpdate = (function() {
    
            /**
             * Properties of a CMsgUpdate.
             * @memberof CMsgGCUpdateSubGCSessionInfo
             * @interface ICMsgUpdate
             * @property {number|Long|null} [steamid] CMsgUpdate steamid
             * @property {number|null} [ip] CMsgUpdate ip
             * @property {boolean|null} [trusted] CMsgUpdate trusted
             */
    
            /**
             * Constructs a new CMsgUpdate.
             * @memberof CMsgGCUpdateSubGCSessionInfo
             * @classdesc Represents a CMsgUpdate.
             * @implements ICMsgUpdate
             * @constructor
             * @param {CMsgGCUpdateSubGCSessionInfo.ICMsgUpdate=} [properties] Properties to set
             */
            function CMsgUpdate(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * CMsgUpdate steamid.
             * @member {number|Long} steamid
             * @memberof CMsgGCUpdateSubGCSessionInfo.CMsgUpdate
             * @instance
             */
            CMsgUpdate.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
            /**
             * CMsgUpdate ip.
             * @member {number} ip
             * @memberof CMsgGCUpdateSubGCSessionInfo.CMsgUpdate
             * @instance
             */
            CMsgUpdate.prototype.ip = 0;
    
            /**
             * CMsgUpdate trusted.
             * @member {boolean} trusted
             * @memberof CMsgGCUpdateSubGCSessionInfo.CMsgUpdate
             * @instance
             */
            CMsgUpdate.prototype.trusted = false;
    
            /**
             * Creates a new CMsgUpdate instance using the specified properties.
             * @function create
             * @memberof CMsgGCUpdateSubGCSessionInfo.CMsgUpdate
             * @static
             * @param {CMsgGCUpdateSubGCSessionInfo.ICMsgUpdate=} [properties] Properties to set
             * @returns {CMsgGCUpdateSubGCSessionInfo.CMsgUpdate} CMsgUpdate instance
             */
            CMsgUpdate.create = function create(properties) {
                return new CMsgUpdate(properties);
            };
    
            /**
             * Encodes the specified CMsgUpdate message. Does not implicitly {@link CMsgGCUpdateSubGCSessionInfo.CMsgUpdate.verify|verify} messages.
             * @function encode
             * @memberof CMsgGCUpdateSubGCSessionInfo.CMsgUpdate
             * @static
             * @param {CMsgGCUpdateSubGCSessionInfo.ICMsgUpdate} message CMsgUpdate message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            CMsgUpdate.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.steamid != null && message.hasOwnProperty("steamid"))
                    writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
                if (message.ip != null && message.hasOwnProperty("ip"))
                    writer.uint32(/* id 2, wireType 5 =*/21).fixed32(message.ip);
                if (message.trusted != null && message.hasOwnProperty("trusted"))
                    writer.uint32(/* id 3, wireType 0 =*/24).bool(message.trusted);
                return writer;
            };
    
            /**
             * Encodes the specified CMsgUpdate message, length delimited. Does not implicitly {@link CMsgGCUpdateSubGCSessionInfo.CMsgUpdate.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgGCUpdateSubGCSessionInfo.CMsgUpdate
             * @static
             * @param {CMsgGCUpdateSubGCSessionInfo.ICMsgUpdate} message CMsgUpdate message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            CMsgUpdate.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a CMsgUpdate message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgGCUpdateSubGCSessionInfo.CMsgUpdate
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgGCUpdateSubGCSessionInfo.CMsgUpdate} CMsgUpdate
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            CMsgUpdate.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCUpdateSubGCSessionInfo.CMsgUpdate();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.steamid = reader.fixed64();
                        break;
                    case 2:
                        message.ip = reader.fixed32();
                        break;
                    case 3:
                        message.trusted = reader.bool();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a CMsgUpdate message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgGCUpdateSubGCSessionInfo.CMsgUpdate
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgGCUpdateSubGCSessionInfo.CMsgUpdate} CMsgUpdate
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            CMsgUpdate.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a CMsgUpdate message.
             * @function verify
             * @memberof CMsgGCUpdateSubGCSessionInfo.CMsgUpdate
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            CMsgUpdate.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.steamid != null && message.hasOwnProperty("steamid"))
                    if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                        return "steamid: integer|Long expected";
                if (message.ip != null && message.hasOwnProperty("ip"))
                    if (!$util.isInteger(message.ip))
                        return "ip: integer expected";
                if (message.trusted != null && message.hasOwnProperty("trusted"))
                    if (typeof message.trusted !== "boolean")
                        return "trusted: boolean expected";
                return null;
            };
    
            /**
             * Creates a CMsgUpdate message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgGCUpdateSubGCSessionInfo.CMsgUpdate
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgGCUpdateSubGCSessionInfo.CMsgUpdate} CMsgUpdate
             */
            CMsgUpdate.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgGCUpdateSubGCSessionInfo.CMsgUpdate)
                    return object;
                var message = new $root.CMsgGCUpdateSubGCSessionInfo.CMsgUpdate();
                if (object.steamid != null)
                    if ($util.Long)
                        (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                    else if (typeof object.steamid === "string")
                        message.steamid = parseInt(object.steamid, 10);
                    else if (typeof object.steamid === "number")
                        message.steamid = object.steamid;
                    else if (typeof object.steamid === "object")
                        message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
                if (object.ip != null)
                    message.ip = object.ip >>> 0;
                if (object.trusted != null)
                    message.trusted = Boolean(object.trusted);
                return message;
            };
    
            /**
             * Creates a plain object from a CMsgUpdate message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgGCUpdateSubGCSessionInfo.CMsgUpdate
             * @static
             * @param {CMsgGCUpdateSubGCSessionInfo.CMsgUpdate} message CMsgUpdate
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            CMsgUpdate.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, false);
                        object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                    } else
                        object.steamid = options.longs === String ? "0" : 0;
                    object.ip = 0;
                    object.trusted = false;
                }
                if (message.steamid != null && message.hasOwnProperty("steamid"))
                    if (typeof message.steamid === "number")
                        object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                    else
                        object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
                if (message.ip != null && message.hasOwnProperty("ip"))
                    object.ip = message.ip;
                if (message.trusted != null && message.hasOwnProperty("trusted"))
                    object.trusted = message.trusted;
                return object;
            };
    
            /**
             * Converts this CMsgUpdate to JSON.
             * @function toJSON
             * @memberof CMsgGCUpdateSubGCSessionInfo.CMsgUpdate
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            CMsgUpdate.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return CMsgUpdate;
        })();
    
        return CMsgGCUpdateSubGCSessionInfo;
    })();
    
    $root.CMsgGCRequestSubGCSessionInfo = (function() {
    
        /**
         * Properties of a CMsgGCRequestSubGCSessionInfo.
         * @exports ICMsgGCRequestSubGCSessionInfo
         * @interface ICMsgGCRequestSubGCSessionInfo
         * @property {number|Long|null} [steamid] CMsgGCRequestSubGCSessionInfo steamid
         */
    
        /**
         * Constructs a new CMsgGCRequestSubGCSessionInfo.
         * @exports CMsgGCRequestSubGCSessionInfo
         * @classdesc Represents a CMsgGCRequestSubGCSessionInfo.
         * @implements ICMsgGCRequestSubGCSessionInfo
         * @constructor
         * @param {ICMsgGCRequestSubGCSessionInfo=} [properties] Properties to set
         */
        function CMsgGCRequestSubGCSessionInfo(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCRequestSubGCSessionInfo steamid.
         * @member {number|Long} steamid
         * @memberof CMsgGCRequestSubGCSessionInfo
         * @instance
         */
        CMsgGCRequestSubGCSessionInfo.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * Creates a new CMsgGCRequestSubGCSessionInfo instance using the specified properties.
         * @function create
         * @memberof CMsgGCRequestSubGCSessionInfo
         * @static
         * @param {ICMsgGCRequestSubGCSessionInfo=} [properties] Properties to set
         * @returns {CMsgGCRequestSubGCSessionInfo} CMsgGCRequestSubGCSessionInfo instance
         */
        CMsgGCRequestSubGCSessionInfo.create = function create(properties) {
            return new CMsgGCRequestSubGCSessionInfo(properties);
        };
    
        /**
         * Encodes the specified CMsgGCRequestSubGCSessionInfo message. Does not implicitly {@link CMsgGCRequestSubGCSessionInfo.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCRequestSubGCSessionInfo
         * @static
         * @param {ICMsgGCRequestSubGCSessionInfo} message CMsgGCRequestSubGCSessionInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCRequestSubGCSessionInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCRequestSubGCSessionInfo message, length delimited. Does not implicitly {@link CMsgGCRequestSubGCSessionInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCRequestSubGCSessionInfo
         * @static
         * @param {ICMsgGCRequestSubGCSessionInfo} message CMsgGCRequestSubGCSessionInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCRequestSubGCSessionInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCRequestSubGCSessionInfo message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCRequestSubGCSessionInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCRequestSubGCSessionInfo} CMsgGCRequestSubGCSessionInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCRequestSubGCSessionInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCRequestSubGCSessionInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCRequestSubGCSessionInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCRequestSubGCSessionInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCRequestSubGCSessionInfo} CMsgGCRequestSubGCSessionInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCRequestSubGCSessionInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCRequestSubGCSessionInfo message.
         * @function verify
         * @memberof CMsgGCRequestSubGCSessionInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCRequestSubGCSessionInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCRequestSubGCSessionInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCRequestSubGCSessionInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCRequestSubGCSessionInfo} CMsgGCRequestSubGCSessionInfo
         */
        CMsgGCRequestSubGCSessionInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCRequestSubGCSessionInfo)
                return object;
            var message = new $root.CMsgGCRequestSubGCSessionInfo();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCRequestSubGCSessionInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCRequestSubGCSessionInfo
         * @static
         * @param {CMsgGCRequestSubGCSessionInfo} message CMsgGCRequestSubGCSessionInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCRequestSubGCSessionInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            return object;
        };
    
        /**
         * Converts this CMsgGCRequestSubGCSessionInfo to JSON.
         * @function toJSON
         * @memberof CMsgGCRequestSubGCSessionInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCRequestSubGCSessionInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCRequestSubGCSessionInfo;
    })();
    
    $root.CMsgGCRequestSubGCSessionInfoResponse = (function() {
    
        /**
         * Properties of a CMsgGCRequestSubGCSessionInfoResponse.
         * @exports ICMsgGCRequestSubGCSessionInfoResponse
         * @interface ICMsgGCRequestSubGCSessionInfoResponse
         * @property {number|null} [ip] CMsgGCRequestSubGCSessionInfoResponse ip
         * @property {boolean|null} [trusted] CMsgGCRequestSubGCSessionInfoResponse trusted
         */
    
        /**
         * Constructs a new CMsgGCRequestSubGCSessionInfoResponse.
         * @exports CMsgGCRequestSubGCSessionInfoResponse
         * @classdesc Represents a CMsgGCRequestSubGCSessionInfoResponse.
         * @implements ICMsgGCRequestSubGCSessionInfoResponse
         * @constructor
         * @param {ICMsgGCRequestSubGCSessionInfoResponse=} [properties] Properties to set
         */
        function CMsgGCRequestSubGCSessionInfoResponse(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCRequestSubGCSessionInfoResponse ip.
         * @member {number} ip
         * @memberof CMsgGCRequestSubGCSessionInfoResponse
         * @instance
         */
        CMsgGCRequestSubGCSessionInfoResponse.prototype.ip = 0;
    
        /**
         * CMsgGCRequestSubGCSessionInfoResponse trusted.
         * @member {boolean} trusted
         * @memberof CMsgGCRequestSubGCSessionInfoResponse
         * @instance
         */
        CMsgGCRequestSubGCSessionInfoResponse.prototype.trusted = false;
    
        /**
         * Creates a new CMsgGCRequestSubGCSessionInfoResponse instance using the specified properties.
         * @function create
         * @memberof CMsgGCRequestSubGCSessionInfoResponse
         * @static
         * @param {ICMsgGCRequestSubGCSessionInfoResponse=} [properties] Properties to set
         * @returns {CMsgGCRequestSubGCSessionInfoResponse} CMsgGCRequestSubGCSessionInfoResponse instance
         */
        CMsgGCRequestSubGCSessionInfoResponse.create = function create(properties) {
            return new CMsgGCRequestSubGCSessionInfoResponse(properties);
        };
    
        /**
         * Encodes the specified CMsgGCRequestSubGCSessionInfoResponse message. Does not implicitly {@link CMsgGCRequestSubGCSessionInfoResponse.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCRequestSubGCSessionInfoResponse
         * @static
         * @param {ICMsgGCRequestSubGCSessionInfoResponse} message CMsgGCRequestSubGCSessionInfoResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCRequestSubGCSessionInfoResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.ip != null && message.hasOwnProperty("ip"))
                writer.uint32(/* id 1, wireType 5 =*/13).fixed32(message.ip);
            if (message.trusted != null && message.hasOwnProperty("trusted"))
                writer.uint32(/* id 2, wireType 0 =*/16).bool(message.trusted);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCRequestSubGCSessionInfoResponse message, length delimited. Does not implicitly {@link CMsgGCRequestSubGCSessionInfoResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCRequestSubGCSessionInfoResponse
         * @static
         * @param {ICMsgGCRequestSubGCSessionInfoResponse} message CMsgGCRequestSubGCSessionInfoResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCRequestSubGCSessionInfoResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCRequestSubGCSessionInfoResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCRequestSubGCSessionInfoResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCRequestSubGCSessionInfoResponse} CMsgGCRequestSubGCSessionInfoResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCRequestSubGCSessionInfoResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCRequestSubGCSessionInfoResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.ip = reader.fixed32();
                    break;
                case 2:
                    message.trusted = reader.bool();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCRequestSubGCSessionInfoResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCRequestSubGCSessionInfoResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCRequestSubGCSessionInfoResponse} CMsgGCRequestSubGCSessionInfoResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCRequestSubGCSessionInfoResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCRequestSubGCSessionInfoResponse message.
         * @function verify
         * @memberof CMsgGCRequestSubGCSessionInfoResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCRequestSubGCSessionInfoResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.ip != null && message.hasOwnProperty("ip"))
                if (!$util.isInteger(message.ip))
                    return "ip: integer expected";
            if (message.trusted != null && message.hasOwnProperty("trusted"))
                if (typeof message.trusted !== "boolean")
                    return "trusted: boolean expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCRequestSubGCSessionInfoResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCRequestSubGCSessionInfoResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCRequestSubGCSessionInfoResponse} CMsgGCRequestSubGCSessionInfoResponse
         */
        CMsgGCRequestSubGCSessionInfoResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCRequestSubGCSessionInfoResponse)
                return object;
            var message = new $root.CMsgGCRequestSubGCSessionInfoResponse();
            if (object.ip != null)
                message.ip = object.ip >>> 0;
            if (object.trusted != null)
                message.trusted = Boolean(object.trusted);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCRequestSubGCSessionInfoResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCRequestSubGCSessionInfoResponse
         * @static
         * @param {CMsgGCRequestSubGCSessionInfoResponse} message CMsgGCRequestSubGCSessionInfoResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCRequestSubGCSessionInfoResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.ip = 0;
                object.trusted = false;
            }
            if (message.ip != null && message.hasOwnProperty("ip"))
                object.ip = message.ip;
            if (message.trusted != null && message.hasOwnProperty("trusted"))
                object.trusted = message.trusted;
            return object;
        };
    
        /**
         * Converts this CMsgGCRequestSubGCSessionInfoResponse to JSON.
         * @function toJSON
         * @memberof CMsgGCRequestSubGCSessionInfoResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCRequestSubGCSessionInfoResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCRequestSubGCSessionInfoResponse;
    })();
    
    $root.CMsgGCToGCIncrementRecruitmentLevel = (function() {
    
        /**
         * Properties of a CMsgGCToGCIncrementRecruitmentLevel.
         * @exports ICMsgGCToGCIncrementRecruitmentLevel
         * @interface ICMsgGCToGCIncrementRecruitmentLevel
         * @property {number|Long|null} [steamid] CMsgGCToGCIncrementRecruitmentLevel steamid
         */
    
        /**
         * Constructs a new CMsgGCToGCIncrementRecruitmentLevel.
         * @exports CMsgGCToGCIncrementRecruitmentLevel
         * @classdesc Represents a CMsgGCToGCIncrementRecruitmentLevel.
         * @implements ICMsgGCToGCIncrementRecruitmentLevel
         * @constructor
         * @param {ICMsgGCToGCIncrementRecruitmentLevel=} [properties] Properties to set
         */
        function CMsgGCToGCIncrementRecruitmentLevel(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCToGCIncrementRecruitmentLevel steamid.
         * @member {number|Long} steamid
         * @memberof CMsgGCToGCIncrementRecruitmentLevel
         * @instance
         */
        CMsgGCToGCIncrementRecruitmentLevel.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * Creates a new CMsgGCToGCIncrementRecruitmentLevel instance using the specified properties.
         * @function create
         * @memberof CMsgGCToGCIncrementRecruitmentLevel
         * @static
         * @param {ICMsgGCToGCIncrementRecruitmentLevel=} [properties] Properties to set
         * @returns {CMsgGCToGCIncrementRecruitmentLevel} CMsgGCToGCIncrementRecruitmentLevel instance
         */
        CMsgGCToGCIncrementRecruitmentLevel.create = function create(properties) {
            return new CMsgGCToGCIncrementRecruitmentLevel(properties);
        };
    
        /**
         * Encodes the specified CMsgGCToGCIncrementRecruitmentLevel message. Does not implicitly {@link CMsgGCToGCIncrementRecruitmentLevel.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCToGCIncrementRecruitmentLevel
         * @static
         * @param {ICMsgGCToGCIncrementRecruitmentLevel} message CMsgGCToGCIncrementRecruitmentLevel message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCToGCIncrementRecruitmentLevel.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCToGCIncrementRecruitmentLevel message, length delimited. Does not implicitly {@link CMsgGCToGCIncrementRecruitmentLevel.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCToGCIncrementRecruitmentLevel
         * @static
         * @param {ICMsgGCToGCIncrementRecruitmentLevel} message CMsgGCToGCIncrementRecruitmentLevel message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCToGCIncrementRecruitmentLevel.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCToGCIncrementRecruitmentLevel message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCToGCIncrementRecruitmentLevel
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCToGCIncrementRecruitmentLevel} CMsgGCToGCIncrementRecruitmentLevel
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCToGCIncrementRecruitmentLevel.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCToGCIncrementRecruitmentLevel();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCToGCIncrementRecruitmentLevel message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCToGCIncrementRecruitmentLevel
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCToGCIncrementRecruitmentLevel} CMsgGCToGCIncrementRecruitmentLevel
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCToGCIncrementRecruitmentLevel.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCToGCIncrementRecruitmentLevel message.
         * @function verify
         * @memberof CMsgGCToGCIncrementRecruitmentLevel
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCToGCIncrementRecruitmentLevel.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCToGCIncrementRecruitmentLevel message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCToGCIncrementRecruitmentLevel
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCToGCIncrementRecruitmentLevel} CMsgGCToGCIncrementRecruitmentLevel
         */
        CMsgGCToGCIncrementRecruitmentLevel.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCToGCIncrementRecruitmentLevel)
                return object;
            var message = new $root.CMsgGCToGCIncrementRecruitmentLevel();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCToGCIncrementRecruitmentLevel message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCToGCIncrementRecruitmentLevel
         * @static
         * @param {CMsgGCToGCIncrementRecruitmentLevel} message CMsgGCToGCIncrementRecruitmentLevel
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCToGCIncrementRecruitmentLevel.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            return object;
        };
    
        /**
         * Converts this CMsgGCToGCIncrementRecruitmentLevel to JSON.
         * @function toJSON
         * @memberof CMsgGCToGCIncrementRecruitmentLevel
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCToGCIncrementRecruitmentLevel.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCToGCIncrementRecruitmentLevel;
    })();
    
    $root.CMsgSOCacheHaveVersion = (function() {
    
        /**
         * Properties of a CMsgSOCacheHaveVersion.
         * @exports ICMsgSOCacheHaveVersion
         * @interface ICMsgSOCacheHaveVersion
         * @property {ICMsgSOIDOwner|null} [soid] CMsgSOCacheHaveVersion soid
         * @property {number|Long|null} [version] CMsgSOCacheHaveVersion version
         * @property {number|null} [service_id] CMsgSOCacheHaveVersion service_id
         */
    
        /**
         * Constructs a new CMsgSOCacheHaveVersion.
         * @exports CMsgSOCacheHaveVersion
         * @classdesc Represents a CMsgSOCacheHaveVersion.
         * @implements ICMsgSOCacheHaveVersion
         * @constructor
         * @param {ICMsgSOCacheHaveVersion=} [properties] Properties to set
         */
        function CMsgSOCacheHaveVersion(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgSOCacheHaveVersion soid.
         * @member {ICMsgSOIDOwner|null|undefined} soid
         * @memberof CMsgSOCacheHaveVersion
         * @instance
         */
        CMsgSOCacheHaveVersion.prototype.soid = null;
    
        /**
         * CMsgSOCacheHaveVersion version.
         * @member {number|Long} version
         * @memberof CMsgSOCacheHaveVersion
         * @instance
         */
        CMsgSOCacheHaveVersion.prototype.version = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgSOCacheHaveVersion service_id.
         * @member {number} service_id
         * @memberof CMsgSOCacheHaveVersion
         * @instance
         */
        CMsgSOCacheHaveVersion.prototype.service_id = 0;
    
        /**
         * Creates a new CMsgSOCacheHaveVersion instance using the specified properties.
         * @function create
         * @memberof CMsgSOCacheHaveVersion
         * @static
         * @param {ICMsgSOCacheHaveVersion=} [properties] Properties to set
         * @returns {CMsgSOCacheHaveVersion} CMsgSOCacheHaveVersion instance
         */
        CMsgSOCacheHaveVersion.create = function create(properties) {
            return new CMsgSOCacheHaveVersion(properties);
        };
    
        /**
         * Encodes the specified CMsgSOCacheHaveVersion message. Does not implicitly {@link CMsgSOCacheHaveVersion.verify|verify} messages.
         * @function encode
         * @memberof CMsgSOCacheHaveVersion
         * @static
         * @param {ICMsgSOCacheHaveVersion} message CMsgSOCacheHaveVersion message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheHaveVersion.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.soid != null && message.hasOwnProperty("soid"))
                $root.CMsgSOIDOwner.encode(message.soid, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            if (message.version != null && message.hasOwnProperty("version"))
                writer.uint32(/* id 2, wireType 1 =*/17).fixed64(message.version);
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.service_id);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgSOCacheHaveVersion message, length delimited. Does not implicitly {@link CMsgSOCacheHaveVersion.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgSOCacheHaveVersion
         * @static
         * @param {ICMsgSOCacheHaveVersion} message CMsgSOCacheHaveVersion message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgSOCacheHaveVersion.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgSOCacheHaveVersion message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgSOCacheHaveVersion
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgSOCacheHaveVersion} CMsgSOCacheHaveVersion
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheHaveVersion.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgSOCacheHaveVersion();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.soid = $root.CMsgSOIDOwner.decode(reader, reader.uint32());
                    break;
                case 2:
                    message.version = reader.fixed64();
                    break;
                case 3:
                    message.service_id = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgSOCacheHaveVersion message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgSOCacheHaveVersion
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgSOCacheHaveVersion} CMsgSOCacheHaveVersion
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgSOCacheHaveVersion.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgSOCacheHaveVersion message.
         * @function verify
         * @memberof CMsgSOCacheHaveVersion
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgSOCacheHaveVersion.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.soid != null && message.hasOwnProperty("soid")) {
                var error = $root.CMsgSOIDOwner.verify(message.soid);
                if (error)
                    return "soid." + error;
            }
            if (message.version != null && message.hasOwnProperty("version"))
                if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                    return "version: integer|Long expected";
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                if (!$util.isInteger(message.service_id))
                    return "service_id: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgSOCacheHaveVersion message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgSOCacheHaveVersion
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgSOCacheHaveVersion} CMsgSOCacheHaveVersion
         */
        CMsgSOCacheHaveVersion.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgSOCacheHaveVersion)
                return object;
            var message = new $root.CMsgSOCacheHaveVersion();
            if (object.soid != null) {
                if (typeof object.soid !== "object")
                    throw TypeError(".CMsgSOCacheHaveVersion.soid: object expected");
                message.soid = $root.CMsgSOIDOwner.fromObject(object.soid);
            }
            if (object.version != null)
                if ($util.Long)
                    (message.version = $util.Long.fromValue(object.version)).unsigned = false;
                else if (typeof object.version === "string")
                    message.version = parseInt(object.version, 10);
                else if (typeof object.version === "number")
                    message.version = object.version;
                else if (typeof object.version === "object")
                    message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber();
            if (object.service_id != null)
                message.service_id = object.service_id >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgSOCacheHaveVersion message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgSOCacheHaveVersion
         * @static
         * @param {CMsgSOCacheHaveVersion} message CMsgSOCacheHaveVersion
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgSOCacheHaveVersion.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.soid = null;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.version = options.longs === String ? "0" : 0;
                object.service_id = 0;
            }
            if (message.soid != null && message.hasOwnProperty("soid"))
                object.soid = $root.CMsgSOIDOwner.toObject(message.soid, options);
            if (message.version != null && message.hasOwnProperty("version"))
                if (typeof message.version === "number")
                    object.version = options.longs === String ? String(message.version) : message.version;
                else
                    object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber() : message.version;
            if (message.service_id != null && message.hasOwnProperty("service_id"))
                object.service_id = message.service_id;
            return object;
        };
    
        /**
         * Converts this CMsgSOCacheHaveVersion to JSON.
         * @function toJSON
         * @memberof CMsgSOCacheHaveVersion
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgSOCacheHaveVersion.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgSOCacheHaveVersion;
    })();
    
    $root.CMsgConnectionStatus = (function() {
    
        /**
         * Properties of a CMsgConnectionStatus.
         * @exports ICMsgConnectionStatus
         * @interface ICMsgConnectionStatus
         * @property {GCConnectionStatus|null} [status] CMsgConnectionStatus status
         * @property {number|null} [client_session_need] CMsgConnectionStatus client_session_need
         * @property {number|null} [queue_position] CMsgConnectionStatus queue_position
         * @property {number|null} [queue_size] CMsgConnectionStatus queue_size
         * @property {number|null} [wait_seconds] CMsgConnectionStatus wait_seconds
         * @property {number|null} [estimated_wait_seconds_remaining] CMsgConnectionStatus estimated_wait_seconds_remaining
         */
    
        /**
         * Constructs a new CMsgConnectionStatus.
         * @exports CMsgConnectionStatus
         * @classdesc Represents a CMsgConnectionStatus.
         * @implements ICMsgConnectionStatus
         * @constructor
         * @param {ICMsgConnectionStatus=} [properties] Properties to set
         */
        function CMsgConnectionStatus(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgConnectionStatus status.
         * @member {GCConnectionStatus} status
         * @memberof CMsgConnectionStatus
         * @instance
         */
        CMsgConnectionStatus.prototype.status = 0;
    
        /**
         * CMsgConnectionStatus client_session_need.
         * @member {number} client_session_need
         * @memberof CMsgConnectionStatus
         * @instance
         */
        CMsgConnectionStatus.prototype.client_session_need = 0;
    
        /**
         * CMsgConnectionStatus queue_position.
         * @member {number} queue_position
         * @memberof CMsgConnectionStatus
         * @instance
         */
        CMsgConnectionStatus.prototype.queue_position = 0;
    
        /**
         * CMsgConnectionStatus queue_size.
         * @member {number} queue_size
         * @memberof CMsgConnectionStatus
         * @instance
         */
        CMsgConnectionStatus.prototype.queue_size = 0;
    
        /**
         * CMsgConnectionStatus wait_seconds.
         * @member {number} wait_seconds
         * @memberof CMsgConnectionStatus
         * @instance
         */
        CMsgConnectionStatus.prototype.wait_seconds = 0;
    
        /**
         * CMsgConnectionStatus estimated_wait_seconds_remaining.
         * @member {number} estimated_wait_seconds_remaining
         * @memberof CMsgConnectionStatus
         * @instance
         */
        CMsgConnectionStatus.prototype.estimated_wait_seconds_remaining = 0;
    
        /**
         * Creates a new CMsgConnectionStatus instance using the specified properties.
         * @function create
         * @memberof CMsgConnectionStatus
         * @static
         * @param {ICMsgConnectionStatus=} [properties] Properties to set
         * @returns {CMsgConnectionStatus} CMsgConnectionStatus instance
         */
        CMsgConnectionStatus.create = function create(properties) {
            return new CMsgConnectionStatus(properties);
        };
    
        /**
         * Encodes the specified CMsgConnectionStatus message. Does not implicitly {@link CMsgConnectionStatus.verify|verify} messages.
         * @function encode
         * @memberof CMsgConnectionStatus
         * @static
         * @param {ICMsgConnectionStatus} message CMsgConnectionStatus message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgConnectionStatus.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.status != null && message.hasOwnProperty("status"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.status);
            if (message.client_session_need != null && message.hasOwnProperty("client_session_need"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.client_session_need);
            if (message.queue_position != null && message.hasOwnProperty("queue_position"))
                writer.uint32(/* id 3, wireType 0 =*/24).int32(message.queue_position);
            if (message.queue_size != null && message.hasOwnProperty("queue_size"))
                writer.uint32(/* id 4, wireType 0 =*/32).int32(message.queue_size);
            if (message.wait_seconds != null && message.hasOwnProperty("wait_seconds"))
                writer.uint32(/* id 5, wireType 0 =*/40).int32(message.wait_seconds);
            if (message.estimated_wait_seconds_remaining != null && message.hasOwnProperty("estimated_wait_seconds_remaining"))
                writer.uint32(/* id 6, wireType 0 =*/48).int32(message.estimated_wait_seconds_remaining);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgConnectionStatus message, length delimited. Does not implicitly {@link CMsgConnectionStatus.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgConnectionStatus
         * @static
         * @param {ICMsgConnectionStatus} message CMsgConnectionStatus message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgConnectionStatus.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgConnectionStatus message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgConnectionStatus
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgConnectionStatus} CMsgConnectionStatus
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgConnectionStatus.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgConnectionStatus();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.status = reader.int32();
                    break;
                case 2:
                    message.client_session_need = reader.uint32();
                    break;
                case 3:
                    message.queue_position = reader.int32();
                    break;
                case 4:
                    message.queue_size = reader.int32();
                    break;
                case 5:
                    message.wait_seconds = reader.int32();
                    break;
                case 6:
                    message.estimated_wait_seconds_remaining = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgConnectionStatus message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgConnectionStatus
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgConnectionStatus} CMsgConnectionStatus
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgConnectionStatus.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgConnectionStatus message.
         * @function verify
         * @memberof CMsgConnectionStatus
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgConnectionStatus.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.status != null && message.hasOwnProperty("status"))
                switch (message.status) {
                default:
                    return "status: enum value expected";
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                    break;
                }
            if (message.client_session_need != null && message.hasOwnProperty("client_session_need"))
                if (!$util.isInteger(message.client_session_need))
                    return "client_session_need: integer expected";
            if (message.queue_position != null && message.hasOwnProperty("queue_position"))
                if (!$util.isInteger(message.queue_position))
                    return "queue_position: integer expected";
            if (message.queue_size != null && message.hasOwnProperty("queue_size"))
                if (!$util.isInteger(message.queue_size))
                    return "queue_size: integer expected";
            if (message.wait_seconds != null && message.hasOwnProperty("wait_seconds"))
                if (!$util.isInteger(message.wait_seconds))
                    return "wait_seconds: integer expected";
            if (message.estimated_wait_seconds_remaining != null && message.hasOwnProperty("estimated_wait_seconds_remaining"))
                if (!$util.isInteger(message.estimated_wait_seconds_remaining))
                    return "estimated_wait_seconds_remaining: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgConnectionStatus message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgConnectionStatus
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgConnectionStatus} CMsgConnectionStatus
         */
        CMsgConnectionStatus.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgConnectionStatus)
                return object;
            var message = new $root.CMsgConnectionStatus();
            switch (object.status) {
            case "GCConnectionStatus_HAVE_SESSION":
            case 0:
                message.status = 0;
                break;
            case "GCConnectionStatus_GC_GOING_DOWN":
            case 1:
                message.status = 1;
                break;
            case "GCConnectionStatus_NO_SESSION":
            case 2:
                message.status = 2;
                break;
            case "GCConnectionStatus_NO_SESSION_IN_LOGON_QUEUE":
            case 3:
                message.status = 3;
                break;
            case "GCConnectionStatus_NO_STEAM":
            case 4:
                message.status = 4;
                break;
            case "GCConnectionStatus_SUSPENDED":
            case 5:
                message.status = 5;
                break;
            }
            if (object.client_session_need != null)
                message.client_session_need = object.client_session_need >>> 0;
            if (object.queue_position != null)
                message.queue_position = object.queue_position | 0;
            if (object.queue_size != null)
                message.queue_size = object.queue_size | 0;
            if (object.wait_seconds != null)
                message.wait_seconds = object.wait_seconds | 0;
            if (object.estimated_wait_seconds_remaining != null)
                message.estimated_wait_seconds_remaining = object.estimated_wait_seconds_remaining | 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgConnectionStatus message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgConnectionStatus
         * @static
         * @param {CMsgConnectionStatus} message CMsgConnectionStatus
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgConnectionStatus.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.status = options.enums === String ? "GCConnectionStatus_HAVE_SESSION" : 0;
                object.client_session_need = 0;
                object.queue_position = 0;
                object.queue_size = 0;
                object.wait_seconds = 0;
                object.estimated_wait_seconds_remaining = 0;
            }
            if (message.status != null && message.hasOwnProperty("status"))
                object.status = options.enums === String ? $root.GCConnectionStatus[message.status] : message.status;
            if (message.client_session_need != null && message.hasOwnProperty("client_session_need"))
                object.client_session_need = message.client_session_need;
            if (message.queue_position != null && message.hasOwnProperty("queue_position"))
                object.queue_position = message.queue_position;
            if (message.queue_size != null && message.hasOwnProperty("queue_size"))
                object.queue_size = message.queue_size;
            if (message.wait_seconds != null && message.hasOwnProperty("wait_seconds"))
                object.wait_seconds = message.wait_seconds;
            if (message.estimated_wait_seconds_remaining != null && message.hasOwnProperty("estimated_wait_seconds_remaining"))
                object.estimated_wait_seconds_remaining = message.estimated_wait_seconds_remaining;
            return object;
        };
    
        /**
         * Converts this CMsgConnectionStatus to JSON.
         * @function toJSON
         * @memberof CMsgConnectionStatus
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgConnectionStatus.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgConnectionStatus;
    })();
    
    $root.CMsgGCToGCSOCacheSubscribe = (function() {
    
        /**
         * Properties of a CMsgGCToGCSOCacheSubscribe.
         * @exports ICMsgGCToGCSOCacheSubscribe
         * @interface ICMsgGCToGCSOCacheSubscribe
         * @property {number|Long|null} [subscriber] CMsgGCToGCSOCacheSubscribe subscriber
         * @property {number|Long|null} [subscribe_to] CMsgGCToGCSOCacheSubscribe subscribe_to
         * @property {number|Long|null} [sync_version] CMsgGCToGCSOCacheSubscribe sync_version
         * @property {Array.<CMsgGCToGCSOCacheSubscribe.ICMsgHaveVersions>|null} [have_versions] CMsgGCToGCSOCacheSubscribe have_versions
         */
    
        /**
         * Constructs a new CMsgGCToGCSOCacheSubscribe.
         * @exports CMsgGCToGCSOCacheSubscribe
         * @classdesc Represents a CMsgGCToGCSOCacheSubscribe.
         * @implements ICMsgGCToGCSOCacheSubscribe
         * @constructor
         * @param {ICMsgGCToGCSOCacheSubscribe=} [properties] Properties to set
         */
        function CMsgGCToGCSOCacheSubscribe(properties) {
            this.have_versions = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCToGCSOCacheSubscribe subscriber.
         * @member {number|Long} subscriber
         * @memberof CMsgGCToGCSOCacheSubscribe
         * @instance
         */
        CMsgGCToGCSOCacheSubscribe.prototype.subscriber = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCToGCSOCacheSubscribe subscribe_to.
         * @member {number|Long} subscribe_to
         * @memberof CMsgGCToGCSOCacheSubscribe
         * @instance
         */
        CMsgGCToGCSOCacheSubscribe.prototype.subscribe_to = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCToGCSOCacheSubscribe sync_version.
         * @member {number|Long} sync_version
         * @memberof CMsgGCToGCSOCacheSubscribe
         * @instance
         */
        CMsgGCToGCSOCacheSubscribe.prototype.sync_version = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCToGCSOCacheSubscribe have_versions.
         * @member {Array.<CMsgGCToGCSOCacheSubscribe.ICMsgHaveVersions>} have_versions
         * @memberof CMsgGCToGCSOCacheSubscribe
         * @instance
         */
        CMsgGCToGCSOCacheSubscribe.prototype.have_versions = $util.emptyArray;
    
        /**
         * Creates a new CMsgGCToGCSOCacheSubscribe instance using the specified properties.
         * @function create
         * @memberof CMsgGCToGCSOCacheSubscribe
         * @static
         * @param {ICMsgGCToGCSOCacheSubscribe=} [properties] Properties to set
         * @returns {CMsgGCToGCSOCacheSubscribe} CMsgGCToGCSOCacheSubscribe instance
         */
        CMsgGCToGCSOCacheSubscribe.create = function create(properties) {
            return new CMsgGCToGCSOCacheSubscribe(properties);
        };
    
        /**
         * Encodes the specified CMsgGCToGCSOCacheSubscribe message. Does not implicitly {@link CMsgGCToGCSOCacheSubscribe.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCToGCSOCacheSubscribe
         * @static
         * @param {ICMsgGCToGCSOCacheSubscribe} message CMsgGCToGCSOCacheSubscribe message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCToGCSOCacheSubscribe.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.subscriber != null && message.hasOwnProperty("subscriber"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.subscriber);
            if (message.subscribe_to != null && message.hasOwnProperty("subscribe_to"))
                writer.uint32(/* id 2, wireType 1 =*/17).fixed64(message.subscribe_to);
            if (message.sync_version != null && message.hasOwnProperty("sync_version"))
                writer.uint32(/* id 3, wireType 1 =*/25).fixed64(message.sync_version);
            if (message.have_versions != null && message.have_versions.length)
                for (var i = 0; i < message.have_versions.length; ++i)
                    $root.CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions.encode(message.have_versions[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCToGCSOCacheSubscribe message, length delimited. Does not implicitly {@link CMsgGCToGCSOCacheSubscribe.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCToGCSOCacheSubscribe
         * @static
         * @param {ICMsgGCToGCSOCacheSubscribe} message CMsgGCToGCSOCacheSubscribe message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCToGCSOCacheSubscribe.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCToGCSOCacheSubscribe message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCToGCSOCacheSubscribe
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCToGCSOCacheSubscribe} CMsgGCToGCSOCacheSubscribe
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCToGCSOCacheSubscribe.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCToGCSOCacheSubscribe();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.subscriber = reader.fixed64();
                    break;
                case 2:
                    message.subscribe_to = reader.fixed64();
                    break;
                case 3:
                    message.sync_version = reader.fixed64();
                    break;
                case 4:
                    if (!(message.have_versions && message.have_versions.length))
                        message.have_versions = [];
                    message.have_versions.push($root.CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions.decode(reader, reader.uint32()));
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCToGCSOCacheSubscribe message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCToGCSOCacheSubscribe
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCToGCSOCacheSubscribe} CMsgGCToGCSOCacheSubscribe
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCToGCSOCacheSubscribe.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCToGCSOCacheSubscribe message.
         * @function verify
         * @memberof CMsgGCToGCSOCacheSubscribe
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCToGCSOCacheSubscribe.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.subscriber != null && message.hasOwnProperty("subscriber"))
                if (!$util.isInteger(message.subscriber) && !(message.subscriber && $util.isInteger(message.subscriber.low) && $util.isInteger(message.subscriber.high)))
                    return "subscriber: integer|Long expected";
            if (message.subscribe_to != null && message.hasOwnProperty("subscribe_to"))
                if (!$util.isInteger(message.subscribe_to) && !(message.subscribe_to && $util.isInteger(message.subscribe_to.low) && $util.isInteger(message.subscribe_to.high)))
                    return "subscribe_to: integer|Long expected";
            if (message.sync_version != null && message.hasOwnProperty("sync_version"))
                if (!$util.isInteger(message.sync_version) && !(message.sync_version && $util.isInteger(message.sync_version.low) && $util.isInteger(message.sync_version.high)))
                    return "sync_version: integer|Long expected";
            if (message.have_versions != null && message.hasOwnProperty("have_versions")) {
                if (!Array.isArray(message.have_versions))
                    return "have_versions: array expected";
                for (var i = 0; i < message.have_versions.length; ++i) {
                    var error = $root.CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions.verify(message.have_versions[i]);
                    if (error)
                        return "have_versions." + error;
                }
            }
            return null;
        };
    
        /**
         * Creates a CMsgGCToGCSOCacheSubscribe message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCToGCSOCacheSubscribe
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCToGCSOCacheSubscribe} CMsgGCToGCSOCacheSubscribe
         */
        CMsgGCToGCSOCacheSubscribe.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCToGCSOCacheSubscribe)
                return object;
            var message = new $root.CMsgGCToGCSOCacheSubscribe();
            if (object.subscriber != null)
                if ($util.Long)
                    (message.subscriber = $util.Long.fromValue(object.subscriber)).unsigned = false;
                else if (typeof object.subscriber === "string")
                    message.subscriber = parseInt(object.subscriber, 10);
                else if (typeof object.subscriber === "number")
                    message.subscriber = object.subscriber;
                else if (typeof object.subscriber === "object")
                    message.subscriber = new $util.LongBits(object.subscriber.low >>> 0, object.subscriber.high >>> 0).toNumber();
            if (object.subscribe_to != null)
                if ($util.Long)
                    (message.subscribe_to = $util.Long.fromValue(object.subscribe_to)).unsigned = false;
                else if (typeof object.subscribe_to === "string")
                    message.subscribe_to = parseInt(object.subscribe_to, 10);
                else if (typeof object.subscribe_to === "number")
                    message.subscribe_to = object.subscribe_to;
                else if (typeof object.subscribe_to === "object")
                    message.subscribe_to = new $util.LongBits(object.subscribe_to.low >>> 0, object.subscribe_to.high >>> 0).toNumber();
            if (object.sync_version != null)
                if ($util.Long)
                    (message.sync_version = $util.Long.fromValue(object.sync_version)).unsigned = false;
                else if (typeof object.sync_version === "string")
                    message.sync_version = parseInt(object.sync_version, 10);
                else if (typeof object.sync_version === "number")
                    message.sync_version = object.sync_version;
                else if (typeof object.sync_version === "object")
                    message.sync_version = new $util.LongBits(object.sync_version.low >>> 0, object.sync_version.high >>> 0).toNumber();
            if (object.have_versions) {
                if (!Array.isArray(object.have_versions))
                    throw TypeError(".CMsgGCToGCSOCacheSubscribe.have_versions: array expected");
                message.have_versions = [];
                for (var i = 0; i < object.have_versions.length; ++i) {
                    if (typeof object.have_versions[i] !== "object")
                        throw TypeError(".CMsgGCToGCSOCacheSubscribe.have_versions: object expected");
                    message.have_versions[i] = $root.CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions.fromObject(object.have_versions[i]);
                }
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCToGCSOCacheSubscribe message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCToGCSOCacheSubscribe
         * @static
         * @param {CMsgGCToGCSOCacheSubscribe} message CMsgGCToGCSOCacheSubscribe
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCToGCSOCacheSubscribe.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.have_versions = [];
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.subscriber = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.subscriber = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.subscribe_to = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.subscribe_to = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.sync_version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.sync_version = options.longs === String ? "0" : 0;
            }
            if (message.subscriber != null && message.hasOwnProperty("subscriber"))
                if (typeof message.subscriber === "number")
                    object.subscriber = options.longs === String ? String(message.subscriber) : message.subscriber;
                else
                    object.subscriber = options.longs === String ? $util.Long.prototype.toString.call(message.subscriber) : options.longs === Number ? new $util.LongBits(message.subscriber.low >>> 0, message.subscriber.high >>> 0).toNumber() : message.subscriber;
            if (message.subscribe_to != null && message.hasOwnProperty("subscribe_to"))
                if (typeof message.subscribe_to === "number")
                    object.subscribe_to = options.longs === String ? String(message.subscribe_to) : message.subscribe_to;
                else
                    object.subscribe_to = options.longs === String ? $util.Long.prototype.toString.call(message.subscribe_to) : options.longs === Number ? new $util.LongBits(message.subscribe_to.low >>> 0, message.subscribe_to.high >>> 0).toNumber() : message.subscribe_to;
            if (message.sync_version != null && message.hasOwnProperty("sync_version"))
                if (typeof message.sync_version === "number")
                    object.sync_version = options.longs === String ? String(message.sync_version) : message.sync_version;
                else
                    object.sync_version = options.longs === String ? $util.Long.prototype.toString.call(message.sync_version) : options.longs === Number ? new $util.LongBits(message.sync_version.low >>> 0, message.sync_version.high >>> 0).toNumber() : message.sync_version;
            if (message.have_versions && message.have_versions.length) {
                object.have_versions = [];
                for (var j = 0; j < message.have_versions.length; ++j)
                    object.have_versions[j] = $root.CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions.toObject(message.have_versions[j], options);
            }
            return object;
        };
    
        /**
         * Converts this CMsgGCToGCSOCacheSubscribe to JSON.
         * @function toJSON
         * @memberof CMsgGCToGCSOCacheSubscribe
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCToGCSOCacheSubscribe.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions = (function() {
    
            /**
             * Properties of a CMsgHaveVersions.
             * @memberof CMsgGCToGCSOCacheSubscribe
             * @interface ICMsgHaveVersions
             * @property {number|null} [service_id] CMsgHaveVersions service_id
             * @property {number|Long|null} [version] CMsgHaveVersions version
             */
    
            /**
             * Constructs a new CMsgHaveVersions.
             * @memberof CMsgGCToGCSOCacheSubscribe
             * @classdesc Represents a CMsgHaveVersions.
             * @implements ICMsgHaveVersions
             * @constructor
             * @param {CMsgGCToGCSOCacheSubscribe.ICMsgHaveVersions=} [properties] Properties to set
             */
            function CMsgHaveVersions(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * CMsgHaveVersions service_id.
             * @member {number} service_id
             * @memberof CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions
             * @instance
             */
            CMsgHaveVersions.prototype.service_id = 0;
    
            /**
             * CMsgHaveVersions version.
             * @member {number|Long} version
             * @memberof CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions
             * @instance
             */
            CMsgHaveVersions.prototype.version = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
            /**
             * Creates a new CMsgHaveVersions instance using the specified properties.
             * @function create
             * @memberof CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions
             * @static
             * @param {CMsgGCToGCSOCacheSubscribe.ICMsgHaveVersions=} [properties] Properties to set
             * @returns {CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions} CMsgHaveVersions instance
             */
            CMsgHaveVersions.create = function create(properties) {
                return new CMsgHaveVersions(properties);
            };
    
            /**
             * Encodes the specified CMsgHaveVersions message. Does not implicitly {@link CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions.verify|verify} messages.
             * @function encode
             * @memberof CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions
             * @static
             * @param {CMsgGCToGCSOCacheSubscribe.ICMsgHaveVersions} message CMsgHaveVersions message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            CMsgHaveVersions.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.service_id != null && message.hasOwnProperty("service_id"))
                    writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.service_id);
                if (message.version != null && message.hasOwnProperty("version"))
                    writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.version);
                return writer;
            };
    
            /**
             * Encodes the specified CMsgHaveVersions message, length delimited. Does not implicitly {@link CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions
             * @static
             * @param {CMsgGCToGCSOCacheSubscribe.ICMsgHaveVersions} message CMsgHaveVersions message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            CMsgHaveVersions.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a CMsgHaveVersions message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions} CMsgHaveVersions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            CMsgHaveVersions.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.service_id = reader.uint32();
                        break;
                    case 2:
                        message.version = reader.uint64();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a CMsgHaveVersions message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions} CMsgHaveVersions
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            CMsgHaveVersions.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a CMsgHaveVersions message.
             * @function verify
             * @memberof CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            CMsgHaveVersions.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.service_id != null && message.hasOwnProperty("service_id"))
                    if (!$util.isInteger(message.service_id))
                        return "service_id: integer expected";
                if (message.version != null && message.hasOwnProperty("version"))
                    if (!$util.isInteger(message.version) && !(message.version && $util.isInteger(message.version.low) && $util.isInteger(message.version.high)))
                        return "version: integer|Long expected";
                return null;
            };
    
            /**
             * Creates a CMsgHaveVersions message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions} CMsgHaveVersions
             */
            CMsgHaveVersions.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions)
                    return object;
                var message = new $root.CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions();
                if (object.service_id != null)
                    message.service_id = object.service_id >>> 0;
                if (object.version != null)
                    if ($util.Long)
                        (message.version = $util.Long.fromValue(object.version)).unsigned = true;
                    else if (typeof object.version === "string")
                        message.version = parseInt(object.version, 10);
                    else if (typeof object.version === "number")
                        message.version = object.version;
                    else if (typeof object.version === "object")
                        message.version = new $util.LongBits(object.version.low >>> 0, object.version.high >>> 0).toNumber(true);
                return message;
            };
    
            /**
             * Creates a plain object from a CMsgHaveVersions message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions
             * @static
             * @param {CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions} message CMsgHaveVersions
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            CMsgHaveVersions.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.service_id = 0;
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, true);
                        object.version = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                    } else
                        object.version = options.longs === String ? "0" : 0;
                }
                if (message.service_id != null && message.hasOwnProperty("service_id"))
                    object.service_id = message.service_id;
                if (message.version != null && message.hasOwnProperty("version"))
                    if (typeof message.version === "number")
                        object.version = options.longs === String ? String(message.version) : message.version;
                    else
                        object.version = options.longs === String ? $util.Long.prototype.toString.call(message.version) : options.longs === Number ? new $util.LongBits(message.version.low >>> 0, message.version.high >>> 0).toNumber(true) : message.version;
                return object;
            };
    
            /**
             * Converts this CMsgHaveVersions to JSON.
             * @function toJSON
             * @memberof CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            CMsgHaveVersions.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return CMsgHaveVersions;
        })();
    
        return CMsgGCToGCSOCacheSubscribe;
    })();
    
    $root.CMsgGCToGCSOCacheUnsubscribe = (function() {
    
        /**
         * Properties of a CMsgGCToGCSOCacheUnsubscribe.
         * @exports ICMsgGCToGCSOCacheUnsubscribe
         * @interface ICMsgGCToGCSOCacheUnsubscribe
         * @property {number|Long|null} [subscriber] CMsgGCToGCSOCacheUnsubscribe subscriber
         * @property {number|Long|null} [unsubscribe_from] CMsgGCToGCSOCacheUnsubscribe unsubscribe_from
         */
    
        /**
         * Constructs a new CMsgGCToGCSOCacheUnsubscribe.
         * @exports CMsgGCToGCSOCacheUnsubscribe
         * @classdesc Represents a CMsgGCToGCSOCacheUnsubscribe.
         * @implements ICMsgGCToGCSOCacheUnsubscribe
         * @constructor
         * @param {ICMsgGCToGCSOCacheUnsubscribe=} [properties] Properties to set
         */
        function CMsgGCToGCSOCacheUnsubscribe(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCToGCSOCacheUnsubscribe subscriber.
         * @member {number|Long} subscriber
         * @memberof CMsgGCToGCSOCacheUnsubscribe
         * @instance
         */
        CMsgGCToGCSOCacheUnsubscribe.prototype.subscriber = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCToGCSOCacheUnsubscribe unsubscribe_from.
         * @member {number|Long} unsubscribe_from
         * @memberof CMsgGCToGCSOCacheUnsubscribe
         * @instance
         */
        CMsgGCToGCSOCacheUnsubscribe.prototype.unsubscribe_from = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * Creates a new CMsgGCToGCSOCacheUnsubscribe instance using the specified properties.
         * @function create
         * @memberof CMsgGCToGCSOCacheUnsubscribe
         * @static
         * @param {ICMsgGCToGCSOCacheUnsubscribe=} [properties] Properties to set
         * @returns {CMsgGCToGCSOCacheUnsubscribe} CMsgGCToGCSOCacheUnsubscribe instance
         */
        CMsgGCToGCSOCacheUnsubscribe.create = function create(properties) {
            return new CMsgGCToGCSOCacheUnsubscribe(properties);
        };
    
        /**
         * Encodes the specified CMsgGCToGCSOCacheUnsubscribe message. Does not implicitly {@link CMsgGCToGCSOCacheUnsubscribe.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCToGCSOCacheUnsubscribe
         * @static
         * @param {ICMsgGCToGCSOCacheUnsubscribe} message CMsgGCToGCSOCacheUnsubscribe message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCToGCSOCacheUnsubscribe.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.subscriber != null && message.hasOwnProperty("subscriber"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.subscriber);
            if (message.unsubscribe_from != null && message.hasOwnProperty("unsubscribe_from"))
                writer.uint32(/* id 2, wireType 1 =*/17).fixed64(message.unsubscribe_from);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCToGCSOCacheUnsubscribe message, length delimited. Does not implicitly {@link CMsgGCToGCSOCacheUnsubscribe.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCToGCSOCacheUnsubscribe
         * @static
         * @param {ICMsgGCToGCSOCacheUnsubscribe} message CMsgGCToGCSOCacheUnsubscribe message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCToGCSOCacheUnsubscribe.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCToGCSOCacheUnsubscribe message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCToGCSOCacheUnsubscribe
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCToGCSOCacheUnsubscribe} CMsgGCToGCSOCacheUnsubscribe
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCToGCSOCacheUnsubscribe.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCToGCSOCacheUnsubscribe();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.subscriber = reader.fixed64();
                    break;
                case 2:
                    message.unsubscribe_from = reader.fixed64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCToGCSOCacheUnsubscribe message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCToGCSOCacheUnsubscribe
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCToGCSOCacheUnsubscribe} CMsgGCToGCSOCacheUnsubscribe
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCToGCSOCacheUnsubscribe.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCToGCSOCacheUnsubscribe message.
         * @function verify
         * @memberof CMsgGCToGCSOCacheUnsubscribe
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCToGCSOCacheUnsubscribe.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.subscriber != null && message.hasOwnProperty("subscriber"))
                if (!$util.isInteger(message.subscriber) && !(message.subscriber && $util.isInteger(message.subscriber.low) && $util.isInteger(message.subscriber.high)))
                    return "subscriber: integer|Long expected";
            if (message.unsubscribe_from != null && message.hasOwnProperty("unsubscribe_from"))
                if (!$util.isInteger(message.unsubscribe_from) && !(message.unsubscribe_from && $util.isInteger(message.unsubscribe_from.low) && $util.isInteger(message.unsubscribe_from.high)))
                    return "unsubscribe_from: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCToGCSOCacheUnsubscribe message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCToGCSOCacheUnsubscribe
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCToGCSOCacheUnsubscribe} CMsgGCToGCSOCacheUnsubscribe
         */
        CMsgGCToGCSOCacheUnsubscribe.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCToGCSOCacheUnsubscribe)
                return object;
            var message = new $root.CMsgGCToGCSOCacheUnsubscribe();
            if (object.subscriber != null)
                if ($util.Long)
                    (message.subscriber = $util.Long.fromValue(object.subscriber)).unsigned = false;
                else if (typeof object.subscriber === "string")
                    message.subscriber = parseInt(object.subscriber, 10);
                else if (typeof object.subscriber === "number")
                    message.subscriber = object.subscriber;
                else if (typeof object.subscriber === "object")
                    message.subscriber = new $util.LongBits(object.subscriber.low >>> 0, object.subscriber.high >>> 0).toNumber();
            if (object.unsubscribe_from != null)
                if ($util.Long)
                    (message.unsubscribe_from = $util.Long.fromValue(object.unsubscribe_from)).unsigned = false;
                else if (typeof object.unsubscribe_from === "string")
                    message.unsubscribe_from = parseInt(object.unsubscribe_from, 10);
                else if (typeof object.unsubscribe_from === "number")
                    message.unsubscribe_from = object.unsubscribe_from;
                else if (typeof object.unsubscribe_from === "object")
                    message.unsubscribe_from = new $util.LongBits(object.unsubscribe_from.low >>> 0, object.unsubscribe_from.high >>> 0).toNumber();
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCToGCSOCacheUnsubscribe message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCToGCSOCacheUnsubscribe
         * @static
         * @param {CMsgGCToGCSOCacheUnsubscribe} message CMsgGCToGCSOCacheUnsubscribe
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCToGCSOCacheUnsubscribe.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.subscriber = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.subscriber = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.unsubscribe_from = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.unsubscribe_from = options.longs === String ? "0" : 0;
            }
            if (message.subscriber != null && message.hasOwnProperty("subscriber"))
                if (typeof message.subscriber === "number")
                    object.subscriber = options.longs === String ? String(message.subscriber) : message.subscriber;
                else
                    object.subscriber = options.longs === String ? $util.Long.prototype.toString.call(message.subscriber) : options.longs === Number ? new $util.LongBits(message.subscriber.low >>> 0, message.subscriber.high >>> 0).toNumber() : message.subscriber;
            if (message.unsubscribe_from != null && message.hasOwnProperty("unsubscribe_from"))
                if (typeof message.unsubscribe_from === "number")
                    object.unsubscribe_from = options.longs === String ? String(message.unsubscribe_from) : message.unsubscribe_from;
                else
                    object.unsubscribe_from = options.longs === String ? $util.Long.prototype.toString.call(message.unsubscribe_from) : options.longs === Number ? new $util.LongBits(message.unsubscribe_from.low >>> 0, message.unsubscribe_from.high >>> 0).toNumber() : message.unsubscribe_from;
            return object;
        };
    
        /**
         * Converts this CMsgGCToGCSOCacheUnsubscribe to JSON.
         * @function toJSON
         * @memberof CMsgGCToGCSOCacheUnsubscribe
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCToGCSOCacheUnsubscribe.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCToGCSOCacheUnsubscribe;
    })();
    
    $root.CMsgGCClientPing = (function() {
    
        /**
         * Properties of a CMsgGCClientPing.
         * @exports ICMsgGCClientPing
         * @interface ICMsgGCClientPing
         */
    
        /**
         * Constructs a new CMsgGCClientPing.
         * @exports CMsgGCClientPing
         * @classdesc Represents a CMsgGCClientPing.
         * @implements ICMsgGCClientPing
         * @constructor
         * @param {ICMsgGCClientPing=} [properties] Properties to set
         */
        function CMsgGCClientPing(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * Creates a new CMsgGCClientPing instance using the specified properties.
         * @function create
         * @memberof CMsgGCClientPing
         * @static
         * @param {ICMsgGCClientPing=} [properties] Properties to set
         * @returns {CMsgGCClientPing} CMsgGCClientPing instance
         */
        CMsgGCClientPing.create = function create(properties) {
            return new CMsgGCClientPing(properties);
        };
    
        /**
         * Encodes the specified CMsgGCClientPing message. Does not implicitly {@link CMsgGCClientPing.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCClientPing
         * @static
         * @param {ICMsgGCClientPing} message CMsgGCClientPing message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCClientPing.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCClientPing message, length delimited. Does not implicitly {@link CMsgGCClientPing.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCClientPing
         * @static
         * @param {ICMsgGCClientPing} message CMsgGCClientPing message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCClientPing.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCClientPing message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCClientPing
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCClientPing} CMsgGCClientPing
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCClientPing.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCClientPing();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCClientPing message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCClientPing
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCClientPing} CMsgGCClientPing
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCClientPing.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCClientPing message.
         * @function verify
         * @memberof CMsgGCClientPing
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCClientPing.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCClientPing message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCClientPing
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCClientPing} CMsgGCClientPing
         */
        CMsgGCClientPing.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCClientPing)
                return object;
            return new $root.CMsgGCClientPing();
        };
    
        /**
         * Creates a plain object from a CMsgGCClientPing message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCClientPing
         * @static
         * @param {CMsgGCClientPing} message CMsgGCClientPing
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCClientPing.toObject = function toObject() {
            return {};
        };
    
        /**
         * Converts this CMsgGCClientPing to JSON.
         * @function toJSON
         * @memberof CMsgGCClientPing
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCClientPing.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCClientPing;
    })();
    
    /**
     * GCProtoBufMsgSrc enum.
     * @exports GCProtoBufMsgSrc
     * @enum {string}
     * @property {number} GCProtoBufMsgSrc_Unspecified=0 GCProtoBufMsgSrc_Unspecified value
     * @property {number} GCProtoBufMsgSrc_FromSystem=1 GCProtoBufMsgSrc_FromSystem value
     * @property {number} GCProtoBufMsgSrc_FromSteamID=2 GCProtoBufMsgSrc_FromSteamID value
     * @property {number} GCProtoBufMsgSrc_FromGC=3 GCProtoBufMsgSrc_FromGC value
     * @property {number} GCProtoBufMsgSrc_ReplySystem=4 GCProtoBufMsgSrc_ReplySystem value
     */
    $root.GCProtoBufMsgSrc = (function() {
        var valuesById = {}, values = Object.create(valuesById);
        values[valuesById[0] = "GCProtoBufMsgSrc_Unspecified"] = 0;
        values[valuesById[1] = "GCProtoBufMsgSrc_FromSystem"] = 1;
        values[valuesById[2] = "GCProtoBufMsgSrc_FromSteamID"] = 2;
        values[valuesById[3] = "GCProtoBufMsgSrc_FromGC"] = 3;
        values[valuesById[4] = "GCProtoBufMsgSrc_ReplySystem"] = 4;
        return values;
    })();
    
    $root.CMsgProtoBufHeader = (function() {
    
        /**
         * Properties of a CMsgProtoBufHeader.
         * @exports ICMsgProtoBufHeader
         * @interface ICMsgProtoBufHeader
         * @property {number|Long|null} [client_steam_id] CMsgProtoBufHeader client_steam_id
         * @property {number|null} [client_session_id] CMsgProtoBufHeader client_session_id
         * @property {number|null} [source_app_id] CMsgProtoBufHeader source_app_id
         * @property {number|Long|null} [job_id_source] CMsgProtoBufHeader job_id_source
         * @property {number|Long|null} [job_id_target] CMsgProtoBufHeader job_id_target
         * @property {string|null} [target_job_name] CMsgProtoBufHeader target_job_name
         * @property {number|null} [eresult] CMsgProtoBufHeader eresult
         * @property {string|null} [error_message] CMsgProtoBufHeader error_message
         * @property {GCProtoBufMsgSrc|null} [gc_msg_src] CMsgProtoBufHeader gc_msg_src
         * @property {number|null} [gc_dir_index_source] CMsgProtoBufHeader gc_dir_index_source
         */
    
        /**
         * Constructs a new CMsgProtoBufHeader.
         * @exports CMsgProtoBufHeader
         * @classdesc Represents a CMsgProtoBufHeader.
         * @implements ICMsgProtoBufHeader
         * @constructor
         * @param {ICMsgProtoBufHeader=} [properties] Properties to set
         */
        function CMsgProtoBufHeader(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgProtoBufHeader client_steam_id.
         * @member {number|Long} client_steam_id
         * @memberof CMsgProtoBufHeader
         * @instance
         */
        CMsgProtoBufHeader.prototype.client_steam_id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgProtoBufHeader client_session_id.
         * @member {number} client_session_id
         * @memberof CMsgProtoBufHeader
         * @instance
         */
        CMsgProtoBufHeader.prototype.client_session_id = 0;
    
        /**
         * CMsgProtoBufHeader source_app_id.
         * @member {number} source_app_id
         * @memberof CMsgProtoBufHeader
         * @instance
         */
        CMsgProtoBufHeader.prototype.source_app_id = 0;
    
        /**
         * CMsgProtoBufHeader job_id_source.
         * @member {number|Long} job_id_source
         * @memberof CMsgProtoBufHeader
         * @instance
         */
        CMsgProtoBufHeader.prototype.job_id_source = $util.Long ? $util.Long.fromBits(-1,2147483647,false) : 9223372036854776000;
    
        /**
         * CMsgProtoBufHeader job_id_target.
         * @member {number|Long} job_id_target
         * @memberof CMsgProtoBufHeader
         * @instance
         */
        CMsgProtoBufHeader.prototype.job_id_target = $util.Long ? $util.Long.fromBits(-1,2147483647,false) : 9223372036854776000;
    
        /**
         * CMsgProtoBufHeader target_job_name.
         * @member {string} target_job_name
         * @memberof CMsgProtoBufHeader
         * @instance
         */
        CMsgProtoBufHeader.prototype.target_job_name = "";
    
        /**
         * CMsgProtoBufHeader eresult.
         * @member {number} eresult
         * @memberof CMsgProtoBufHeader
         * @instance
         */
        CMsgProtoBufHeader.prototype.eresult = 2;
    
        /**
         * CMsgProtoBufHeader error_message.
         * @member {string} error_message
         * @memberof CMsgProtoBufHeader
         * @instance
         */
        CMsgProtoBufHeader.prototype.error_message = "";
    
        /**
         * CMsgProtoBufHeader gc_msg_src.
         * @member {GCProtoBufMsgSrc} gc_msg_src
         * @memberof CMsgProtoBufHeader
         * @instance
         */
        CMsgProtoBufHeader.prototype.gc_msg_src = 0;
    
        /**
         * CMsgProtoBufHeader gc_dir_index_source.
         * @member {number} gc_dir_index_source
         * @memberof CMsgProtoBufHeader
         * @instance
         */
        CMsgProtoBufHeader.prototype.gc_dir_index_source = 0;
    
        /**
         * Creates a new CMsgProtoBufHeader instance using the specified properties.
         * @function create
         * @memberof CMsgProtoBufHeader
         * @static
         * @param {ICMsgProtoBufHeader=} [properties] Properties to set
         * @returns {CMsgProtoBufHeader} CMsgProtoBufHeader instance
         */
        CMsgProtoBufHeader.create = function create(properties) {
            return new CMsgProtoBufHeader(properties);
        };
    
        /**
         * Encodes the specified CMsgProtoBufHeader message. Does not implicitly {@link CMsgProtoBufHeader.verify|verify} messages.
         * @function encode
         * @memberof CMsgProtoBufHeader
         * @static
         * @param {ICMsgProtoBufHeader} message CMsgProtoBufHeader message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgProtoBufHeader.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.client_steam_id != null && message.hasOwnProperty("client_steam_id"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.client_steam_id);
            if (message.client_session_id != null && message.hasOwnProperty("client_session_id"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.client_session_id);
            if (message.source_app_id != null && message.hasOwnProperty("source_app_id"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.source_app_id);
            if (message.job_id_source != null && message.hasOwnProperty("job_id_source"))
                writer.uint32(/* id 10, wireType 1 =*/81).fixed64(message.job_id_source);
            if (message.job_id_target != null && message.hasOwnProperty("job_id_target"))
                writer.uint32(/* id 11, wireType 1 =*/89).fixed64(message.job_id_target);
            if (message.target_job_name != null && message.hasOwnProperty("target_job_name"))
                writer.uint32(/* id 12, wireType 2 =*/98).string(message.target_job_name);
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                writer.uint32(/* id 13, wireType 0 =*/104).int32(message.eresult);
            if (message.error_message != null && message.hasOwnProperty("error_message"))
                writer.uint32(/* id 14, wireType 2 =*/114).string(message.error_message);
            if (message.gc_msg_src != null && message.hasOwnProperty("gc_msg_src"))
                writer.uint32(/* id 200, wireType 0 =*/1600).int32(message.gc_msg_src);
            if (message.gc_dir_index_source != null && message.hasOwnProperty("gc_dir_index_source"))
                writer.uint32(/* id 201, wireType 0 =*/1608).uint32(message.gc_dir_index_source);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgProtoBufHeader message, length delimited. Does not implicitly {@link CMsgProtoBufHeader.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgProtoBufHeader
         * @static
         * @param {ICMsgProtoBufHeader} message CMsgProtoBufHeader message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgProtoBufHeader.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgProtoBufHeader message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgProtoBufHeader
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgProtoBufHeader} CMsgProtoBufHeader
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgProtoBufHeader.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgProtoBufHeader();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.client_steam_id = reader.fixed64();
                    break;
                case 2:
                    message.client_session_id = reader.int32();
                    break;
                case 3:
                    message.source_app_id = reader.uint32();
                    break;
                case 10:
                    message.job_id_source = reader.fixed64();
                    break;
                case 11:
                    message.job_id_target = reader.fixed64();
                    break;
                case 12:
                    message.target_job_name = reader.string();
                    break;
                case 13:
                    message.eresult = reader.int32();
                    break;
                case 14:
                    message.error_message = reader.string();
                    break;
                case 200:
                    message.gc_msg_src = reader.int32();
                    break;
                case 201:
                    message.gc_dir_index_source = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgProtoBufHeader message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgProtoBufHeader
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgProtoBufHeader} CMsgProtoBufHeader
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgProtoBufHeader.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgProtoBufHeader message.
         * @function verify
         * @memberof CMsgProtoBufHeader
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgProtoBufHeader.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.client_steam_id != null && message.hasOwnProperty("client_steam_id"))
                if (!$util.isInteger(message.client_steam_id) && !(message.client_steam_id && $util.isInteger(message.client_steam_id.low) && $util.isInteger(message.client_steam_id.high)))
                    return "client_steam_id: integer|Long expected";
            if (message.client_session_id != null && message.hasOwnProperty("client_session_id"))
                if (!$util.isInteger(message.client_session_id))
                    return "client_session_id: integer expected";
            if (message.source_app_id != null && message.hasOwnProperty("source_app_id"))
                if (!$util.isInteger(message.source_app_id))
                    return "source_app_id: integer expected";
            if (message.job_id_source != null && message.hasOwnProperty("job_id_source"))
                if (!$util.isInteger(message.job_id_source) && !(message.job_id_source && $util.isInteger(message.job_id_source.low) && $util.isInteger(message.job_id_source.high)))
                    return "job_id_source: integer|Long expected";
            if (message.job_id_target != null && message.hasOwnProperty("job_id_target"))
                if (!$util.isInteger(message.job_id_target) && !(message.job_id_target && $util.isInteger(message.job_id_target.low) && $util.isInteger(message.job_id_target.high)))
                    return "job_id_target: integer|Long expected";
            if (message.target_job_name != null && message.hasOwnProperty("target_job_name"))
                if (!$util.isString(message.target_job_name))
                    return "target_job_name: string expected";
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                if (!$util.isInteger(message.eresult))
                    return "eresult: integer expected";
            if (message.error_message != null && message.hasOwnProperty("error_message"))
                if (!$util.isString(message.error_message))
                    return "error_message: string expected";
            if (message.gc_msg_src != null && message.hasOwnProperty("gc_msg_src"))
                switch (message.gc_msg_src) {
                default:
                    return "gc_msg_src: enum value expected";
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                    break;
                }
            if (message.gc_dir_index_source != null && message.hasOwnProperty("gc_dir_index_source"))
                if (!$util.isInteger(message.gc_dir_index_source))
                    return "gc_dir_index_source: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgProtoBufHeader message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgProtoBufHeader
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgProtoBufHeader} CMsgProtoBufHeader
         */
        CMsgProtoBufHeader.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgProtoBufHeader)
                return object;
            var message = new $root.CMsgProtoBufHeader();
            if (object.client_steam_id != null)
                if ($util.Long)
                    (message.client_steam_id = $util.Long.fromValue(object.client_steam_id)).unsigned = false;
                else if (typeof object.client_steam_id === "string")
                    message.client_steam_id = parseInt(object.client_steam_id, 10);
                else if (typeof object.client_steam_id === "number")
                    message.client_steam_id = object.client_steam_id;
                else if (typeof object.client_steam_id === "object")
                    message.client_steam_id = new $util.LongBits(object.client_steam_id.low >>> 0, object.client_steam_id.high >>> 0).toNumber();
            if (object.client_session_id != null)
                message.client_session_id = object.client_session_id | 0;
            if (object.source_app_id != null)
                message.source_app_id = object.source_app_id >>> 0;
            if (object.job_id_source != null)
                if ($util.Long)
                    (message.job_id_source = $util.Long.fromValue(object.job_id_source)).unsigned = false;
                else if (typeof object.job_id_source === "string")
                    message.job_id_source = parseInt(object.job_id_source, 10);
                else if (typeof object.job_id_source === "number")
                    message.job_id_source = object.job_id_source;
                else if (typeof object.job_id_source === "object")
                    message.job_id_source = new $util.LongBits(object.job_id_source.low >>> 0, object.job_id_source.high >>> 0).toNumber();
            if (object.job_id_target != null)
                if ($util.Long)
                    (message.job_id_target = $util.Long.fromValue(object.job_id_target)).unsigned = false;
                else if (typeof object.job_id_target === "string")
                    message.job_id_target = parseInt(object.job_id_target, 10);
                else if (typeof object.job_id_target === "number")
                    message.job_id_target = object.job_id_target;
                else if (typeof object.job_id_target === "object")
                    message.job_id_target = new $util.LongBits(object.job_id_target.low >>> 0, object.job_id_target.high >>> 0).toNumber();
            if (object.target_job_name != null)
                message.target_job_name = String(object.target_job_name);
            if (object.eresult != null)
                message.eresult = object.eresult | 0;
            if (object.error_message != null)
                message.error_message = String(object.error_message);
            switch (object.gc_msg_src) {
            case "GCProtoBufMsgSrc_Unspecified":
            case 0:
                message.gc_msg_src = 0;
                break;
            case "GCProtoBufMsgSrc_FromSystem":
            case 1:
                message.gc_msg_src = 1;
                break;
            case "GCProtoBufMsgSrc_FromSteamID":
            case 2:
                message.gc_msg_src = 2;
                break;
            case "GCProtoBufMsgSrc_FromGC":
            case 3:
                message.gc_msg_src = 3;
                break;
            case "GCProtoBufMsgSrc_ReplySystem":
            case 4:
                message.gc_msg_src = 4;
                break;
            }
            if (object.gc_dir_index_source != null)
                message.gc_dir_index_source = object.gc_dir_index_source >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgProtoBufHeader message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgProtoBufHeader
         * @static
         * @param {CMsgProtoBufHeader} message CMsgProtoBufHeader
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgProtoBufHeader.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.client_steam_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.client_steam_id = options.longs === String ? "0" : 0;
                object.client_session_id = 0;
                object.source_app_id = 0;
                if ($util.Long) {
                    var long = new $util.Long(-1, 2147483647, false);
                    object.job_id_source = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.job_id_source = options.longs === String ? "9223372036854775807" : 9223372036854776000;
                if ($util.Long) {
                    var long = new $util.Long(-1, 2147483647, false);
                    object.job_id_target = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.job_id_target = options.longs === String ? "9223372036854775807" : 9223372036854776000;
                object.target_job_name = "";
                object.eresult = 2;
                object.error_message = "";
                object.gc_msg_src = options.enums === String ? "GCProtoBufMsgSrc_Unspecified" : 0;
                object.gc_dir_index_source = 0;
            }
            if (message.client_steam_id != null && message.hasOwnProperty("client_steam_id"))
                if (typeof message.client_steam_id === "number")
                    object.client_steam_id = options.longs === String ? String(message.client_steam_id) : message.client_steam_id;
                else
                    object.client_steam_id = options.longs === String ? $util.Long.prototype.toString.call(message.client_steam_id) : options.longs === Number ? new $util.LongBits(message.client_steam_id.low >>> 0, message.client_steam_id.high >>> 0).toNumber() : message.client_steam_id;
            if (message.client_session_id != null && message.hasOwnProperty("client_session_id"))
                object.client_session_id = message.client_session_id;
            if (message.source_app_id != null && message.hasOwnProperty("source_app_id"))
                object.source_app_id = message.source_app_id;
            if (message.job_id_source != null && message.hasOwnProperty("job_id_source"))
                if (typeof message.job_id_source === "number")
                    object.job_id_source = options.longs === String ? String(message.job_id_source) : message.job_id_source;
                else
                    object.job_id_source = options.longs === String ? $util.Long.prototype.toString.call(message.job_id_source) : options.longs === Number ? new $util.LongBits(message.job_id_source.low >>> 0, message.job_id_source.high >>> 0).toNumber() : message.job_id_source;
            if (message.job_id_target != null && message.hasOwnProperty("job_id_target"))
                if (typeof message.job_id_target === "number")
                    object.job_id_target = options.longs === String ? String(message.job_id_target) : message.job_id_target;
                else
                    object.job_id_target = options.longs === String ? $util.Long.prototype.toString.call(message.job_id_target) : options.longs === Number ? new $util.LongBits(message.job_id_target.low >>> 0, message.job_id_target.high >>> 0).toNumber() : message.job_id_target;
            if (message.target_job_name != null && message.hasOwnProperty("target_job_name"))
                object.target_job_name = message.target_job_name;
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                object.eresult = message.eresult;
            if (message.error_message != null && message.hasOwnProperty("error_message"))
                object.error_message = message.error_message;
            if (message.gc_msg_src != null && message.hasOwnProperty("gc_msg_src"))
                object.gc_msg_src = options.enums === String ? $root.GCProtoBufMsgSrc[message.gc_msg_src] : message.gc_msg_src;
            if (message.gc_dir_index_source != null && message.hasOwnProperty("gc_dir_index_source"))
                object.gc_dir_index_source = message.gc_dir_index_source;
            return object;
        };
    
        /**
         * Converts this CMsgProtoBufHeader to JSON.
         * @function toJSON
         * @memberof CMsgProtoBufHeader
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgProtoBufHeader.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgProtoBufHeader;
    })();
    
    $root.CMsgWebAPIKey = (function() {
    
        /**
         * Properties of a CMsgWebAPIKey.
         * @exports ICMsgWebAPIKey
         * @interface ICMsgWebAPIKey
         * @property {number|null} [status] CMsgWebAPIKey status
         * @property {number|null} [account_id] CMsgWebAPIKey account_id
         * @property {number|null} [publisher_group_id] CMsgWebAPIKey publisher_group_id
         * @property {number|null} [key_id] CMsgWebAPIKey key_id
         * @property {string|null} [domain] CMsgWebAPIKey domain
         */
    
        /**
         * Constructs a new CMsgWebAPIKey.
         * @exports CMsgWebAPIKey
         * @classdesc Represents a CMsgWebAPIKey.
         * @implements ICMsgWebAPIKey
         * @constructor
         * @param {ICMsgWebAPIKey=} [properties] Properties to set
         */
        function CMsgWebAPIKey(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgWebAPIKey status.
         * @member {number} status
         * @memberof CMsgWebAPIKey
         * @instance
         */
        CMsgWebAPIKey.prototype.status = 255;
    
        /**
         * CMsgWebAPIKey account_id.
         * @member {number} account_id
         * @memberof CMsgWebAPIKey
         * @instance
         */
        CMsgWebAPIKey.prototype.account_id = 0;
    
        /**
         * CMsgWebAPIKey publisher_group_id.
         * @member {number} publisher_group_id
         * @memberof CMsgWebAPIKey
         * @instance
         */
        CMsgWebAPIKey.prototype.publisher_group_id = 0;
    
        /**
         * CMsgWebAPIKey key_id.
         * @member {number} key_id
         * @memberof CMsgWebAPIKey
         * @instance
         */
        CMsgWebAPIKey.prototype.key_id = 0;
    
        /**
         * CMsgWebAPIKey domain.
         * @member {string} domain
         * @memberof CMsgWebAPIKey
         * @instance
         */
        CMsgWebAPIKey.prototype.domain = "";
    
        /**
         * Creates a new CMsgWebAPIKey instance using the specified properties.
         * @function create
         * @memberof CMsgWebAPIKey
         * @static
         * @param {ICMsgWebAPIKey=} [properties] Properties to set
         * @returns {CMsgWebAPIKey} CMsgWebAPIKey instance
         */
        CMsgWebAPIKey.create = function create(properties) {
            return new CMsgWebAPIKey(properties);
        };
    
        /**
         * Encodes the specified CMsgWebAPIKey message. Does not implicitly {@link CMsgWebAPIKey.verify|verify} messages.
         * @function encode
         * @memberof CMsgWebAPIKey
         * @static
         * @param {ICMsgWebAPIKey} message CMsgWebAPIKey message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgWebAPIKey.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.status != null && message.hasOwnProperty("status"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.status);
            if (message.account_id != null && message.hasOwnProperty("account_id"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.account_id);
            if (message.publisher_group_id != null && message.hasOwnProperty("publisher_group_id"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.publisher_group_id);
            if (message.key_id != null && message.hasOwnProperty("key_id"))
                writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.key_id);
            if (message.domain != null && message.hasOwnProperty("domain"))
                writer.uint32(/* id 5, wireType 2 =*/42).string(message.domain);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgWebAPIKey message, length delimited. Does not implicitly {@link CMsgWebAPIKey.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgWebAPIKey
         * @static
         * @param {ICMsgWebAPIKey} message CMsgWebAPIKey message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgWebAPIKey.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgWebAPIKey message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgWebAPIKey
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgWebAPIKey} CMsgWebAPIKey
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgWebAPIKey.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgWebAPIKey();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.status = reader.uint32();
                    break;
                case 2:
                    message.account_id = reader.uint32();
                    break;
                case 3:
                    message.publisher_group_id = reader.uint32();
                    break;
                case 4:
                    message.key_id = reader.uint32();
                    break;
                case 5:
                    message.domain = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgWebAPIKey message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgWebAPIKey
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgWebAPIKey} CMsgWebAPIKey
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgWebAPIKey.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgWebAPIKey message.
         * @function verify
         * @memberof CMsgWebAPIKey
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgWebAPIKey.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.status != null && message.hasOwnProperty("status"))
                if (!$util.isInteger(message.status))
                    return "status: integer expected";
            if (message.account_id != null && message.hasOwnProperty("account_id"))
                if (!$util.isInteger(message.account_id))
                    return "account_id: integer expected";
            if (message.publisher_group_id != null && message.hasOwnProperty("publisher_group_id"))
                if (!$util.isInteger(message.publisher_group_id))
                    return "publisher_group_id: integer expected";
            if (message.key_id != null && message.hasOwnProperty("key_id"))
                if (!$util.isInteger(message.key_id))
                    return "key_id: integer expected";
            if (message.domain != null && message.hasOwnProperty("domain"))
                if (!$util.isString(message.domain))
                    return "domain: string expected";
            return null;
        };
    
        /**
         * Creates a CMsgWebAPIKey message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgWebAPIKey
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgWebAPIKey} CMsgWebAPIKey
         */
        CMsgWebAPIKey.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgWebAPIKey)
                return object;
            var message = new $root.CMsgWebAPIKey();
            if (object.status != null)
                message.status = object.status >>> 0;
            if (object.account_id != null)
                message.account_id = object.account_id >>> 0;
            if (object.publisher_group_id != null)
                message.publisher_group_id = object.publisher_group_id >>> 0;
            if (object.key_id != null)
                message.key_id = object.key_id >>> 0;
            if (object.domain != null)
                message.domain = String(object.domain);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgWebAPIKey message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgWebAPIKey
         * @static
         * @param {CMsgWebAPIKey} message CMsgWebAPIKey
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgWebAPIKey.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.status = 255;
                object.account_id = 0;
                object.publisher_group_id = 0;
                object.key_id = 0;
                object.domain = "";
            }
            if (message.status != null && message.hasOwnProperty("status"))
                object.status = message.status;
            if (message.account_id != null && message.hasOwnProperty("account_id"))
                object.account_id = message.account_id;
            if (message.publisher_group_id != null && message.hasOwnProperty("publisher_group_id"))
                object.publisher_group_id = message.publisher_group_id;
            if (message.key_id != null && message.hasOwnProperty("key_id"))
                object.key_id = message.key_id;
            if (message.domain != null && message.hasOwnProperty("domain"))
                object.domain = message.domain;
            return object;
        };
    
        /**
         * Converts this CMsgWebAPIKey to JSON.
         * @function toJSON
         * @memberof CMsgWebAPIKey
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgWebAPIKey.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgWebAPIKey;
    })();
    
    $root.CMsgHttpRequest = (function() {
    
        /**
         * Properties of a CMsgHttpRequest.
         * @exports ICMsgHttpRequest
         * @interface ICMsgHttpRequest
         * @property {number|null} [request_method] CMsgHttpRequest request_method
         * @property {string|null} [hostname] CMsgHttpRequest hostname
         * @property {string|null} [url] CMsgHttpRequest url
         * @property {Array.<CMsgHttpRequest.IRequestHeader>|null} [headers] CMsgHttpRequest headers
         * @property {Array.<CMsgHttpRequest.IQueryParam>|null} [get_params] CMsgHttpRequest get_params
         * @property {Array.<CMsgHttpRequest.IQueryParam>|null} [post_params] CMsgHttpRequest post_params
         * @property {Uint8Array|null} [body] CMsgHttpRequest body
         * @property {number|null} [absolute_timeout] CMsgHttpRequest absolute_timeout
         */
    
        /**
         * Constructs a new CMsgHttpRequest.
         * @exports CMsgHttpRequest
         * @classdesc Represents a CMsgHttpRequest.
         * @implements ICMsgHttpRequest
         * @constructor
         * @param {ICMsgHttpRequest=} [properties] Properties to set
         */
        function CMsgHttpRequest(properties) {
            this.headers = [];
            this.get_params = [];
            this.post_params = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgHttpRequest request_method.
         * @member {number} request_method
         * @memberof CMsgHttpRequest
         * @instance
         */
        CMsgHttpRequest.prototype.request_method = 0;
    
        /**
         * CMsgHttpRequest hostname.
         * @member {string} hostname
         * @memberof CMsgHttpRequest
         * @instance
         */
        CMsgHttpRequest.prototype.hostname = "";
    
        /**
         * CMsgHttpRequest url.
         * @member {string} url
         * @memberof CMsgHttpRequest
         * @instance
         */
        CMsgHttpRequest.prototype.url = "";
    
        /**
         * CMsgHttpRequest headers.
         * @member {Array.<CMsgHttpRequest.IRequestHeader>} headers
         * @memberof CMsgHttpRequest
         * @instance
         */
        CMsgHttpRequest.prototype.headers = $util.emptyArray;
    
        /**
         * CMsgHttpRequest get_params.
         * @member {Array.<CMsgHttpRequest.IQueryParam>} get_params
         * @memberof CMsgHttpRequest
         * @instance
         */
        CMsgHttpRequest.prototype.get_params = $util.emptyArray;
    
        /**
         * CMsgHttpRequest post_params.
         * @member {Array.<CMsgHttpRequest.IQueryParam>} post_params
         * @memberof CMsgHttpRequest
         * @instance
         */
        CMsgHttpRequest.prototype.post_params = $util.emptyArray;
    
        /**
         * CMsgHttpRequest body.
         * @member {Uint8Array} body
         * @memberof CMsgHttpRequest
         * @instance
         */
        CMsgHttpRequest.prototype.body = $util.newBuffer([]);
    
        /**
         * CMsgHttpRequest absolute_timeout.
         * @member {number} absolute_timeout
         * @memberof CMsgHttpRequest
         * @instance
         */
        CMsgHttpRequest.prototype.absolute_timeout = 0;
    
        /**
         * Creates a new CMsgHttpRequest instance using the specified properties.
         * @function create
         * @memberof CMsgHttpRequest
         * @static
         * @param {ICMsgHttpRequest=} [properties] Properties to set
         * @returns {CMsgHttpRequest} CMsgHttpRequest instance
         */
        CMsgHttpRequest.create = function create(properties) {
            return new CMsgHttpRequest(properties);
        };
    
        /**
         * Encodes the specified CMsgHttpRequest message. Does not implicitly {@link CMsgHttpRequest.verify|verify} messages.
         * @function encode
         * @memberof CMsgHttpRequest
         * @static
         * @param {ICMsgHttpRequest} message CMsgHttpRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgHttpRequest.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.request_method != null && message.hasOwnProperty("request_method"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.request_method);
            if (message.hostname != null && message.hasOwnProperty("hostname"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.hostname);
            if (message.url != null && message.hasOwnProperty("url"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.url);
            if (message.headers != null && message.headers.length)
                for (var i = 0; i < message.headers.length; ++i)
                    $root.CMsgHttpRequest.RequestHeader.encode(message.headers[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
            if (message.get_params != null && message.get_params.length)
                for (var i = 0; i < message.get_params.length; ++i)
                    $root.CMsgHttpRequest.QueryParam.encode(message.get_params[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
            if (message.post_params != null && message.post_params.length)
                for (var i = 0; i < message.post_params.length; ++i)
                    $root.CMsgHttpRequest.QueryParam.encode(message.post_params[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
            if (message.body != null && message.hasOwnProperty("body"))
                writer.uint32(/* id 7, wireType 2 =*/58).bytes(message.body);
            if (message.absolute_timeout != null && message.hasOwnProperty("absolute_timeout"))
                writer.uint32(/* id 8, wireType 0 =*/64).uint32(message.absolute_timeout);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgHttpRequest message, length delimited. Does not implicitly {@link CMsgHttpRequest.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgHttpRequest
         * @static
         * @param {ICMsgHttpRequest} message CMsgHttpRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgHttpRequest.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgHttpRequest message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgHttpRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgHttpRequest} CMsgHttpRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgHttpRequest.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgHttpRequest();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.request_method = reader.uint32();
                    break;
                case 2:
                    message.hostname = reader.string();
                    break;
                case 3:
                    message.url = reader.string();
                    break;
                case 4:
                    if (!(message.headers && message.headers.length))
                        message.headers = [];
                    message.headers.push($root.CMsgHttpRequest.RequestHeader.decode(reader, reader.uint32()));
                    break;
                case 5:
                    if (!(message.get_params && message.get_params.length))
                        message.get_params = [];
                    message.get_params.push($root.CMsgHttpRequest.QueryParam.decode(reader, reader.uint32()));
                    break;
                case 6:
                    if (!(message.post_params && message.post_params.length))
                        message.post_params = [];
                    message.post_params.push($root.CMsgHttpRequest.QueryParam.decode(reader, reader.uint32()));
                    break;
                case 7:
                    message.body = reader.bytes();
                    break;
                case 8:
                    message.absolute_timeout = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgHttpRequest message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgHttpRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgHttpRequest} CMsgHttpRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgHttpRequest.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgHttpRequest message.
         * @function verify
         * @memberof CMsgHttpRequest
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgHttpRequest.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.request_method != null && message.hasOwnProperty("request_method"))
                if (!$util.isInteger(message.request_method))
                    return "request_method: integer expected";
            if (message.hostname != null && message.hasOwnProperty("hostname"))
                if (!$util.isString(message.hostname))
                    return "hostname: string expected";
            if (message.url != null && message.hasOwnProperty("url"))
                if (!$util.isString(message.url))
                    return "url: string expected";
            if (message.headers != null && message.hasOwnProperty("headers")) {
                if (!Array.isArray(message.headers))
                    return "headers: array expected";
                for (var i = 0; i < message.headers.length; ++i) {
                    var error = $root.CMsgHttpRequest.RequestHeader.verify(message.headers[i]);
                    if (error)
                        return "headers." + error;
                }
            }
            if (message.get_params != null && message.hasOwnProperty("get_params")) {
                if (!Array.isArray(message.get_params))
                    return "get_params: array expected";
                for (var i = 0; i < message.get_params.length; ++i) {
                    var error = $root.CMsgHttpRequest.QueryParam.verify(message.get_params[i]);
                    if (error)
                        return "get_params." + error;
                }
            }
            if (message.post_params != null && message.hasOwnProperty("post_params")) {
                if (!Array.isArray(message.post_params))
                    return "post_params: array expected";
                for (var i = 0; i < message.post_params.length; ++i) {
                    var error = $root.CMsgHttpRequest.QueryParam.verify(message.post_params[i]);
                    if (error)
                        return "post_params." + error;
                }
            }
            if (message.body != null && message.hasOwnProperty("body"))
                if (!(message.body && typeof message.body.length === "number" || $util.isString(message.body)))
                    return "body: buffer expected";
            if (message.absolute_timeout != null && message.hasOwnProperty("absolute_timeout"))
                if (!$util.isInteger(message.absolute_timeout))
                    return "absolute_timeout: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgHttpRequest message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgHttpRequest
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgHttpRequest} CMsgHttpRequest
         */
        CMsgHttpRequest.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgHttpRequest)
                return object;
            var message = new $root.CMsgHttpRequest();
            if (object.request_method != null)
                message.request_method = object.request_method >>> 0;
            if (object.hostname != null)
                message.hostname = String(object.hostname);
            if (object.url != null)
                message.url = String(object.url);
            if (object.headers) {
                if (!Array.isArray(object.headers))
                    throw TypeError(".CMsgHttpRequest.headers: array expected");
                message.headers = [];
                for (var i = 0; i < object.headers.length; ++i) {
                    if (typeof object.headers[i] !== "object")
                        throw TypeError(".CMsgHttpRequest.headers: object expected");
                    message.headers[i] = $root.CMsgHttpRequest.RequestHeader.fromObject(object.headers[i]);
                }
            }
            if (object.get_params) {
                if (!Array.isArray(object.get_params))
                    throw TypeError(".CMsgHttpRequest.get_params: array expected");
                message.get_params = [];
                for (var i = 0; i < object.get_params.length; ++i) {
                    if (typeof object.get_params[i] !== "object")
                        throw TypeError(".CMsgHttpRequest.get_params: object expected");
                    message.get_params[i] = $root.CMsgHttpRequest.QueryParam.fromObject(object.get_params[i]);
                }
            }
            if (object.post_params) {
                if (!Array.isArray(object.post_params))
                    throw TypeError(".CMsgHttpRequest.post_params: array expected");
                message.post_params = [];
                for (var i = 0; i < object.post_params.length; ++i) {
                    if (typeof object.post_params[i] !== "object")
                        throw TypeError(".CMsgHttpRequest.post_params: object expected");
                    message.post_params[i] = $root.CMsgHttpRequest.QueryParam.fromObject(object.post_params[i]);
                }
            }
            if (object.body != null)
                if (typeof object.body === "string")
                    $util.base64.decode(object.body, message.body = $util.newBuffer($util.base64.length(object.body)), 0);
                else if (object.body.length)
                    message.body = object.body;
            if (object.absolute_timeout != null)
                message.absolute_timeout = object.absolute_timeout >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgHttpRequest message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgHttpRequest
         * @static
         * @param {CMsgHttpRequest} message CMsgHttpRequest
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgHttpRequest.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults) {
                object.headers = [];
                object.get_params = [];
                object.post_params = [];
            }
            if (options.defaults) {
                object.request_method = 0;
                object.hostname = "";
                object.url = "";
                if (options.bytes === String)
                    object.body = "";
                else {
                    object.body = [];
                    if (options.bytes !== Array)
                        object.body = $util.newBuffer(object.body);
                }
                object.absolute_timeout = 0;
            }
            if (message.request_method != null && message.hasOwnProperty("request_method"))
                object.request_method = message.request_method;
            if (message.hostname != null && message.hasOwnProperty("hostname"))
                object.hostname = message.hostname;
            if (message.url != null && message.hasOwnProperty("url"))
                object.url = message.url;
            if (message.headers && message.headers.length) {
                object.headers = [];
                for (var j = 0; j < message.headers.length; ++j)
                    object.headers[j] = $root.CMsgHttpRequest.RequestHeader.toObject(message.headers[j], options);
            }
            if (message.get_params && message.get_params.length) {
                object.get_params = [];
                for (var j = 0; j < message.get_params.length; ++j)
                    object.get_params[j] = $root.CMsgHttpRequest.QueryParam.toObject(message.get_params[j], options);
            }
            if (message.post_params && message.post_params.length) {
                object.post_params = [];
                for (var j = 0; j < message.post_params.length; ++j)
                    object.post_params[j] = $root.CMsgHttpRequest.QueryParam.toObject(message.post_params[j], options);
            }
            if (message.body != null && message.hasOwnProperty("body"))
                object.body = options.bytes === String ? $util.base64.encode(message.body, 0, message.body.length) : options.bytes === Array ? Array.prototype.slice.call(message.body) : message.body;
            if (message.absolute_timeout != null && message.hasOwnProperty("absolute_timeout"))
                object.absolute_timeout = message.absolute_timeout;
            return object;
        };
    
        /**
         * Converts this CMsgHttpRequest to JSON.
         * @function toJSON
         * @memberof CMsgHttpRequest
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgHttpRequest.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgHttpRequest.RequestHeader = (function() {
    
            /**
             * Properties of a RequestHeader.
             * @memberof CMsgHttpRequest
             * @interface IRequestHeader
             * @property {string|null} [name] RequestHeader name
             * @property {string|null} [value] RequestHeader value
             */
    
            /**
             * Constructs a new RequestHeader.
             * @memberof CMsgHttpRequest
             * @classdesc Represents a RequestHeader.
             * @implements IRequestHeader
             * @constructor
             * @param {CMsgHttpRequest.IRequestHeader=} [properties] Properties to set
             */
            function RequestHeader(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * RequestHeader name.
             * @member {string} name
             * @memberof CMsgHttpRequest.RequestHeader
             * @instance
             */
            RequestHeader.prototype.name = "";
    
            /**
             * RequestHeader value.
             * @member {string} value
             * @memberof CMsgHttpRequest.RequestHeader
             * @instance
             */
            RequestHeader.prototype.value = "";
    
            /**
             * Creates a new RequestHeader instance using the specified properties.
             * @function create
             * @memberof CMsgHttpRequest.RequestHeader
             * @static
             * @param {CMsgHttpRequest.IRequestHeader=} [properties] Properties to set
             * @returns {CMsgHttpRequest.RequestHeader} RequestHeader instance
             */
            RequestHeader.create = function create(properties) {
                return new RequestHeader(properties);
            };
    
            /**
             * Encodes the specified RequestHeader message. Does not implicitly {@link CMsgHttpRequest.RequestHeader.verify|verify} messages.
             * @function encode
             * @memberof CMsgHttpRequest.RequestHeader
             * @static
             * @param {CMsgHttpRequest.IRequestHeader} message RequestHeader message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            RequestHeader.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.name != null && message.hasOwnProperty("name"))
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
                if (message.value != null && message.hasOwnProperty("value"))
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.value);
                return writer;
            };
    
            /**
             * Encodes the specified RequestHeader message, length delimited. Does not implicitly {@link CMsgHttpRequest.RequestHeader.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgHttpRequest.RequestHeader
             * @static
             * @param {CMsgHttpRequest.IRequestHeader} message RequestHeader message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            RequestHeader.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a RequestHeader message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgHttpRequest.RequestHeader
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgHttpRequest.RequestHeader} RequestHeader
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            RequestHeader.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgHttpRequest.RequestHeader();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.name = reader.string();
                        break;
                    case 2:
                        message.value = reader.string();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a RequestHeader message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgHttpRequest.RequestHeader
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgHttpRequest.RequestHeader} RequestHeader
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            RequestHeader.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a RequestHeader message.
             * @function verify
             * @memberof CMsgHttpRequest.RequestHeader
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            RequestHeader.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.name != null && message.hasOwnProperty("name"))
                    if (!$util.isString(message.name))
                        return "name: string expected";
                if (message.value != null && message.hasOwnProperty("value"))
                    if (!$util.isString(message.value))
                        return "value: string expected";
                return null;
            };
    
            /**
             * Creates a RequestHeader message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgHttpRequest.RequestHeader
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgHttpRequest.RequestHeader} RequestHeader
             */
            RequestHeader.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgHttpRequest.RequestHeader)
                    return object;
                var message = new $root.CMsgHttpRequest.RequestHeader();
                if (object.name != null)
                    message.name = String(object.name);
                if (object.value != null)
                    message.value = String(object.value);
                return message;
            };
    
            /**
             * Creates a plain object from a RequestHeader message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgHttpRequest.RequestHeader
             * @static
             * @param {CMsgHttpRequest.RequestHeader} message RequestHeader
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            RequestHeader.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.name = "";
                    object.value = "";
                }
                if (message.name != null && message.hasOwnProperty("name"))
                    object.name = message.name;
                if (message.value != null && message.hasOwnProperty("value"))
                    object.value = message.value;
                return object;
            };
    
            /**
             * Converts this RequestHeader to JSON.
             * @function toJSON
             * @memberof CMsgHttpRequest.RequestHeader
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            RequestHeader.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return RequestHeader;
        })();
    
        CMsgHttpRequest.QueryParam = (function() {
    
            /**
             * Properties of a QueryParam.
             * @memberof CMsgHttpRequest
             * @interface IQueryParam
             * @property {string|null} [name] QueryParam name
             * @property {Uint8Array|null} [value] QueryParam value
             */
    
            /**
             * Constructs a new QueryParam.
             * @memberof CMsgHttpRequest
             * @classdesc Represents a QueryParam.
             * @implements IQueryParam
             * @constructor
             * @param {CMsgHttpRequest.IQueryParam=} [properties] Properties to set
             */
            function QueryParam(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * QueryParam name.
             * @member {string} name
             * @memberof CMsgHttpRequest.QueryParam
             * @instance
             */
            QueryParam.prototype.name = "";
    
            /**
             * QueryParam value.
             * @member {Uint8Array} value
             * @memberof CMsgHttpRequest.QueryParam
             * @instance
             */
            QueryParam.prototype.value = $util.newBuffer([]);
    
            /**
             * Creates a new QueryParam instance using the specified properties.
             * @function create
             * @memberof CMsgHttpRequest.QueryParam
             * @static
             * @param {CMsgHttpRequest.IQueryParam=} [properties] Properties to set
             * @returns {CMsgHttpRequest.QueryParam} QueryParam instance
             */
            QueryParam.create = function create(properties) {
                return new QueryParam(properties);
            };
    
            /**
             * Encodes the specified QueryParam message. Does not implicitly {@link CMsgHttpRequest.QueryParam.verify|verify} messages.
             * @function encode
             * @memberof CMsgHttpRequest.QueryParam
             * @static
             * @param {CMsgHttpRequest.IQueryParam} message QueryParam message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            QueryParam.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.name != null && message.hasOwnProperty("name"))
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
                if (message.value != null && message.hasOwnProperty("value"))
                    writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.value);
                return writer;
            };
    
            /**
             * Encodes the specified QueryParam message, length delimited. Does not implicitly {@link CMsgHttpRequest.QueryParam.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgHttpRequest.QueryParam
             * @static
             * @param {CMsgHttpRequest.IQueryParam} message QueryParam message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            QueryParam.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a QueryParam message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgHttpRequest.QueryParam
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgHttpRequest.QueryParam} QueryParam
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            QueryParam.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgHttpRequest.QueryParam();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.name = reader.string();
                        break;
                    case 2:
                        message.value = reader.bytes();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a QueryParam message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgHttpRequest.QueryParam
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgHttpRequest.QueryParam} QueryParam
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            QueryParam.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a QueryParam message.
             * @function verify
             * @memberof CMsgHttpRequest.QueryParam
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            QueryParam.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.name != null && message.hasOwnProperty("name"))
                    if (!$util.isString(message.name))
                        return "name: string expected";
                if (message.value != null && message.hasOwnProperty("value"))
                    if (!(message.value && typeof message.value.length === "number" || $util.isString(message.value)))
                        return "value: buffer expected";
                return null;
            };
    
            /**
             * Creates a QueryParam message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgHttpRequest.QueryParam
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgHttpRequest.QueryParam} QueryParam
             */
            QueryParam.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgHttpRequest.QueryParam)
                    return object;
                var message = new $root.CMsgHttpRequest.QueryParam();
                if (object.name != null)
                    message.name = String(object.name);
                if (object.value != null)
                    if (typeof object.value === "string")
                        $util.base64.decode(object.value, message.value = $util.newBuffer($util.base64.length(object.value)), 0);
                    else if (object.value.length)
                        message.value = object.value;
                return message;
            };
    
            /**
             * Creates a plain object from a QueryParam message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgHttpRequest.QueryParam
             * @static
             * @param {CMsgHttpRequest.QueryParam} message QueryParam
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            QueryParam.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.name = "";
                    if (options.bytes === String)
                        object.value = "";
                    else {
                        object.value = [];
                        if (options.bytes !== Array)
                            object.value = $util.newBuffer(object.value);
                    }
                }
                if (message.name != null && message.hasOwnProperty("name"))
                    object.name = message.name;
                if (message.value != null && message.hasOwnProperty("value"))
                    object.value = options.bytes === String ? $util.base64.encode(message.value, 0, message.value.length) : options.bytes === Array ? Array.prototype.slice.call(message.value) : message.value;
                return object;
            };
    
            /**
             * Converts this QueryParam to JSON.
             * @function toJSON
             * @memberof CMsgHttpRequest.QueryParam
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            QueryParam.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return QueryParam;
        })();
    
        return CMsgHttpRequest;
    })();
    
    $root.CMsgWebAPIRequest = (function() {
    
        /**
         * Properties of a CMsgWebAPIRequest.
         * @exports ICMsgWebAPIRequest
         * @interface ICMsgWebAPIRequest
         * @property {string|null} [UNUSED_job_name] CMsgWebAPIRequest UNUSED_job_name
         * @property {string|null} [interface_name] CMsgWebAPIRequest interface_name
         * @property {string|null} [method_name] CMsgWebAPIRequest method_name
         * @property {number|null} [version] CMsgWebAPIRequest version
         * @property {ICMsgWebAPIKey|null} [api_key] CMsgWebAPIRequest api_key
         * @property {ICMsgHttpRequest|null} [request] CMsgWebAPIRequest request
         * @property {number|null} [routing_app_id] CMsgWebAPIRequest routing_app_id
         */
    
        /**
         * Constructs a new CMsgWebAPIRequest.
         * @exports CMsgWebAPIRequest
         * @classdesc Represents a CMsgWebAPIRequest.
         * @implements ICMsgWebAPIRequest
         * @constructor
         * @param {ICMsgWebAPIRequest=} [properties] Properties to set
         */
        function CMsgWebAPIRequest(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgWebAPIRequest UNUSED_job_name.
         * @member {string} UNUSED_job_name
         * @memberof CMsgWebAPIRequest
         * @instance
         */
        CMsgWebAPIRequest.prototype.UNUSED_job_name = "";
    
        /**
         * CMsgWebAPIRequest interface_name.
         * @member {string} interface_name
         * @memberof CMsgWebAPIRequest
         * @instance
         */
        CMsgWebAPIRequest.prototype.interface_name = "";
    
        /**
         * CMsgWebAPIRequest method_name.
         * @member {string} method_name
         * @memberof CMsgWebAPIRequest
         * @instance
         */
        CMsgWebAPIRequest.prototype.method_name = "";
    
        /**
         * CMsgWebAPIRequest version.
         * @member {number} version
         * @memberof CMsgWebAPIRequest
         * @instance
         */
        CMsgWebAPIRequest.prototype.version = 0;
    
        /**
         * CMsgWebAPIRequest api_key.
         * @member {ICMsgWebAPIKey|null|undefined} api_key
         * @memberof CMsgWebAPIRequest
         * @instance
         */
        CMsgWebAPIRequest.prototype.api_key = null;
    
        /**
         * CMsgWebAPIRequest request.
         * @member {ICMsgHttpRequest|null|undefined} request
         * @memberof CMsgWebAPIRequest
         * @instance
         */
        CMsgWebAPIRequest.prototype.request = null;
    
        /**
         * CMsgWebAPIRequest routing_app_id.
         * @member {number} routing_app_id
         * @memberof CMsgWebAPIRequest
         * @instance
         */
        CMsgWebAPIRequest.prototype.routing_app_id = 0;
    
        /**
         * Creates a new CMsgWebAPIRequest instance using the specified properties.
         * @function create
         * @memberof CMsgWebAPIRequest
         * @static
         * @param {ICMsgWebAPIRequest=} [properties] Properties to set
         * @returns {CMsgWebAPIRequest} CMsgWebAPIRequest instance
         */
        CMsgWebAPIRequest.create = function create(properties) {
            return new CMsgWebAPIRequest(properties);
        };
    
        /**
         * Encodes the specified CMsgWebAPIRequest message. Does not implicitly {@link CMsgWebAPIRequest.verify|verify} messages.
         * @function encode
         * @memberof CMsgWebAPIRequest
         * @static
         * @param {ICMsgWebAPIRequest} message CMsgWebAPIRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgWebAPIRequest.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.UNUSED_job_name != null && message.hasOwnProperty("UNUSED_job_name"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.UNUSED_job_name);
            if (message.interface_name != null && message.hasOwnProperty("interface_name"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.interface_name);
            if (message.method_name != null && message.hasOwnProperty("method_name"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.method_name);
            if (message.version != null && message.hasOwnProperty("version"))
                writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.version);
            if (message.api_key != null && message.hasOwnProperty("api_key"))
                $root.CMsgWebAPIKey.encode(message.api_key, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
            if (message.request != null && message.hasOwnProperty("request"))
                $root.CMsgHttpRequest.encode(message.request, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
            if (message.routing_app_id != null && message.hasOwnProperty("routing_app_id"))
                writer.uint32(/* id 7, wireType 0 =*/56).uint32(message.routing_app_id);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgWebAPIRequest message, length delimited. Does not implicitly {@link CMsgWebAPIRequest.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgWebAPIRequest
         * @static
         * @param {ICMsgWebAPIRequest} message CMsgWebAPIRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgWebAPIRequest.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgWebAPIRequest message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgWebAPIRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgWebAPIRequest} CMsgWebAPIRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgWebAPIRequest.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgWebAPIRequest();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.UNUSED_job_name = reader.string();
                    break;
                case 2:
                    message.interface_name = reader.string();
                    break;
                case 3:
                    message.method_name = reader.string();
                    break;
                case 4:
                    message.version = reader.uint32();
                    break;
                case 5:
                    message.api_key = $root.CMsgWebAPIKey.decode(reader, reader.uint32());
                    break;
                case 6:
                    message.request = $root.CMsgHttpRequest.decode(reader, reader.uint32());
                    break;
                case 7:
                    message.routing_app_id = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgWebAPIRequest message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgWebAPIRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgWebAPIRequest} CMsgWebAPIRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgWebAPIRequest.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgWebAPIRequest message.
         * @function verify
         * @memberof CMsgWebAPIRequest
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgWebAPIRequest.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.UNUSED_job_name != null && message.hasOwnProperty("UNUSED_job_name"))
                if (!$util.isString(message.UNUSED_job_name))
                    return "UNUSED_job_name: string expected";
            if (message.interface_name != null && message.hasOwnProperty("interface_name"))
                if (!$util.isString(message.interface_name))
                    return "interface_name: string expected";
            if (message.method_name != null && message.hasOwnProperty("method_name"))
                if (!$util.isString(message.method_name))
                    return "method_name: string expected";
            if (message.version != null && message.hasOwnProperty("version"))
                if (!$util.isInteger(message.version))
                    return "version: integer expected";
            if (message.api_key != null && message.hasOwnProperty("api_key")) {
                var error = $root.CMsgWebAPIKey.verify(message.api_key);
                if (error)
                    return "api_key." + error;
            }
            if (message.request != null && message.hasOwnProperty("request")) {
                var error = $root.CMsgHttpRequest.verify(message.request);
                if (error)
                    return "request." + error;
            }
            if (message.routing_app_id != null && message.hasOwnProperty("routing_app_id"))
                if (!$util.isInteger(message.routing_app_id))
                    return "routing_app_id: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgWebAPIRequest message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgWebAPIRequest
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgWebAPIRequest} CMsgWebAPIRequest
         */
        CMsgWebAPIRequest.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgWebAPIRequest)
                return object;
            var message = new $root.CMsgWebAPIRequest();
            if (object.UNUSED_job_name != null)
                message.UNUSED_job_name = String(object.UNUSED_job_name);
            if (object.interface_name != null)
                message.interface_name = String(object.interface_name);
            if (object.method_name != null)
                message.method_name = String(object.method_name);
            if (object.version != null)
                message.version = object.version >>> 0;
            if (object.api_key != null) {
                if (typeof object.api_key !== "object")
                    throw TypeError(".CMsgWebAPIRequest.api_key: object expected");
                message.api_key = $root.CMsgWebAPIKey.fromObject(object.api_key);
            }
            if (object.request != null) {
                if (typeof object.request !== "object")
                    throw TypeError(".CMsgWebAPIRequest.request: object expected");
                message.request = $root.CMsgHttpRequest.fromObject(object.request);
            }
            if (object.routing_app_id != null)
                message.routing_app_id = object.routing_app_id >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgWebAPIRequest message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgWebAPIRequest
         * @static
         * @param {CMsgWebAPIRequest} message CMsgWebAPIRequest
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgWebAPIRequest.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.UNUSED_job_name = "";
                object.interface_name = "";
                object.method_name = "";
                object.version = 0;
                object.api_key = null;
                object.request = null;
                object.routing_app_id = 0;
            }
            if (message.UNUSED_job_name != null && message.hasOwnProperty("UNUSED_job_name"))
                object.UNUSED_job_name = message.UNUSED_job_name;
            if (message.interface_name != null && message.hasOwnProperty("interface_name"))
                object.interface_name = message.interface_name;
            if (message.method_name != null && message.hasOwnProperty("method_name"))
                object.method_name = message.method_name;
            if (message.version != null && message.hasOwnProperty("version"))
                object.version = message.version;
            if (message.api_key != null && message.hasOwnProperty("api_key"))
                object.api_key = $root.CMsgWebAPIKey.toObject(message.api_key, options);
            if (message.request != null && message.hasOwnProperty("request"))
                object.request = $root.CMsgHttpRequest.toObject(message.request, options);
            if (message.routing_app_id != null && message.hasOwnProperty("routing_app_id"))
                object.routing_app_id = message.routing_app_id;
            return object;
        };
    
        /**
         * Converts this CMsgWebAPIRequest to JSON.
         * @function toJSON
         * @memberof CMsgWebAPIRequest
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgWebAPIRequest.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgWebAPIRequest;
    })();
    
    $root.CMsgHttpResponse = (function() {
    
        /**
         * Properties of a CMsgHttpResponse.
         * @exports ICMsgHttpResponse
         * @interface ICMsgHttpResponse
         * @property {number|null} [status_code] CMsgHttpResponse status_code
         * @property {Array.<CMsgHttpResponse.IResponseHeader>|null} [headers] CMsgHttpResponse headers
         * @property {Uint8Array|null} [body] CMsgHttpResponse body
         */
    
        /**
         * Constructs a new CMsgHttpResponse.
         * @exports CMsgHttpResponse
         * @classdesc Represents a CMsgHttpResponse.
         * @implements ICMsgHttpResponse
         * @constructor
         * @param {ICMsgHttpResponse=} [properties] Properties to set
         */
        function CMsgHttpResponse(properties) {
            this.headers = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgHttpResponse status_code.
         * @member {number} status_code
         * @memberof CMsgHttpResponse
         * @instance
         */
        CMsgHttpResponse.prototype.status_code = 0;
    
        /**
         * CMsgHttpResponse headers.
         * @member {Array.<CMsgHttpResponse.IResponseHeader>} headers
         * @memberof CMsgHttpResponse
         * @instance
         */
        CMsgHttpResponse.prototype.headers = $util.emptyArray;
    
        /**
         * CMsgHttpResponse body.
         * @member {Uint8Array} body
         * @memberof CMsgHttpResponse
         * @instance
         */
        CMsgHttpResponse.prototype.body = $util.newBuffer([]);
    
        /**
         * Creates a new CMsgHttpResponse instance using the specified properties.
         * @function create
         * @memberof CMsgHttpResponse
         * @static
         * @param {ICMsgHttpResponse=} [properties] Properties to set
         * @returns {CMsgHttpResponse} CMsgHttpResponse instance
         */
        CMsgHttpResponse.create = function create(properties) {
            return new CMsgHttpResponse(properties);
        };
    
        /**
         * Encodes the specified CMsgHttpResponse message. Does not implicitly {@link CMsgHttpResponse.verify|verify} messages.
         * @function encode
         * @memberof CMsgHttpResponse
         * @static
         * @param {ICMsgHttpResponse} message CMsgHttpResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgHttpResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.status_code != null && message.hasOwnProperty("status_code"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.status_code);
            if (message.headers != null && message.headers.length)
                for (var i = 0; i < message.headers.length; ++i)
                    $root.CMsgHttpResponse.ResponseHeader.encode(message.headers[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            if (message.body != null && message.hasOwnProperty("body"))
                writer.uint32(/* id 3, wireType 2 =*/26).bytes(message.body);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgHttpResponse message, length delimited. Does not implicitly {@link CMsgHttpResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgHttpResponse
         * @static
         * @param {ICMsgHttpResponse} message CMsgHttpResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgHttpResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgHttpResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgHttpResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgHttpResponse} CMsgHttpResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgHttpResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgHttpResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.status_code = reader.uint32();
                    break;
                case 2:
                    if (!(message.headers && message.headers.length))
                        message.headers = [];
                    message.headers.push($root.CMsgHttpResponse.ResponseHeader.decode(reader, reader.uint32()));
                    break;
                case 3:
                    message.body = reader.bytes();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgHttpResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgHttpResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgHttpResponse} CMsgHttpResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgHttpResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgHttpResponse message.
         * @function verify
         * @memberof CMsgHttpResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgHttpResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.status_code != null && message.hasOwnProperty("status_code"))
                if (!$util.isInteger(message.status_code))
                    return "status_code: integer expected";
            if (message.headers != null && message.hasOwnProperty("headers")) {
                if (!Array.isArray(message.headers))
                    return "headers: array expected";
                for (var i = 0; i < message.headers.length; ++i) {
                    var error = $root.CMsgHttpResponse.ResponseHeader.verify(message.headers[i]);
                    if (error)
                        return "headers." + error;
                }
            }
            if (message.body != null && message.hasOwnProperty("body"))
                if (!(message.body && typeof message.body.length === "number" || $util.isString(message.body)))
                    return "body: buffer expected";
            return null;
        };
    
        /**
         * Creates a CMsgHttpResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgHttpResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgHttpResponse} CMsgHttpResponse
         */
        CMsgHttpResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgHttpResponse)
                return object;
            var message = new $root.CMsgHttpResponse();
            if (object.status_code != null)
                message.status_code = object.status_code >>> 0;
            if (object.headers) {
                if (!Array.isArray(object.headers))
                    throw TypeError(".CMsgHttpResponse.headers: array expected");
                message.headers = [];
                for (var i = 0; i < object.headers.length; ++i) {
                    if (typeof object.headers[i] !== "object")
                        throw TypeError(".CMsgHttpResponse.headers: object expected");
                    message.headers[i] = $root.CMsgHttpResponse.ResponseHeader.fromObject(object.headers[i]);
                }
            }
            if (object.body != null)
                if (typeof object.body === "string")
                    $util.base64.decode(object.body, message.body = $util.newBuffer($util.base64.length(object.body)), 0);
                else if (object.body.length)
                    message.body = object.body;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgHttpResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgHttpResponse
         * @static
         * @param {CMsgHttpResponse} message CMsgHttpResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgHttpResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.headers = [];
            if (options.defaults) {
                object.status_code = 0;
                if (options.bytes === String)
                    object.body = "";
                else {
                    object.body = [];
                    if (options.bytes !== Array)
                        object.body = $util.newBuffer(object.body);
                }
            }
            if (message.status_code != null && message.hasOwnProperty("status_code"))
                object.status_code = message.status_code;
            if (message.headers && message.headers.length) {
                object.headers = [];
                for (var j = 0; j < message.headers.length; ++j)
                    object.headers[j] = $root.CMsgHttpResponse.ResponseHeader.toObject(message.headers[j], options);
            }
            if (message.body != null && message.hasOwnProperty("body"))
                object.body = options.bytes === String ? $util.base64.encode(message.body, 0, message.body.length) : options.bytes === Array ? Array.prototype.slice.call(message.body) : message.body;
            return object;
        };
    
        /**
         * Converts this CMsgHttpResponse to JSON.
         * @function toJSON
         * @memberof CMsgHttpResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgHttpResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgHttpResponse.ResponseHeader = (function() {
    
            /**
             * Properties of a ResponseHeader.
             * @memberof CMsgHttpResponse
             * @interface IResponseHeader
             * @property {string|null} [name] ResponseHeader name
             * @property {string|null} [value] ResponseHeader value
             */
    
            /**
             * Constructs a new ResponseHeader.
             * @memberof CMsgHttpResponse
             * @classdesc Represents a ResponseHeader.
             * @implements IResponseHeader
             * @constructor
             * @param {CMsgHttpResponse.IResponseHeader=} [properties] Properties to set
             */
            function ResponseHeader(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * ResponseHeader name.
             * @member {string} name
             * @memberof CMsgHttpResponse.ResponseHeader
             * @instance
             */
            ResponseHeader.prototype.name = "";
    
            /**
             * ResponseHeader value.
             * @member {string} value
             * @memberof CMsgHttpResponse.ResponseHeader
             * @instance
             */
            ResponseHeader.prototype.value = "";
    
            /**
             * Creates a new ResponseHeader instance using the specified properties.
             * @function create
             * @memberof CMsgHttpResponse.ResponseHeader
             * @static
             * @param {CMsgHttpResponse.IResponseHeader=} [properties] Properties to set
             * @returns {CMsgHttpResponse.ResponseHeader} ResponseHeader instance
             */
            ResponseHeader.create = function create(properties) {
                return new ResponseHeader(properties);
            };
    
            /**
             * Encodes the specified ResponseHeader message. Does not implicitly {@link CMsgHttpResponse.ResponseHeader.verify|verify} messages.
             * @function encode
             * @memberof CMsgHttpResponse.ResponseHeader
             * @static
             * @param {CMsgHttpResponse.IResponseHeader} message ResponseHeader message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            ResponseHeader.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.name != null && message.hasOwnProperty("name"))
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
                if (message.value != null && message.hasOwnProperty("value"))
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.value);
                return writer;
            };
    
            /**
             * Encodes the specified ResponseHeader message, length delimited. Does not implicitly {@link CMsgHttpResponse.ResponseHeader.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgHttpResponse.ResponseHeader
             * @static
             * @param {CMsgHttpResponse.IResponseHeader} message ResponseHeader message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            ResponseHeader.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a ResponseHeader message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgHttpResponse.ResponseHeader
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgHttpResponse.ResponseHeader} ResponseHeader
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            ResponseHeader.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgHttpResponse.ResponseHeader();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.name = reader.string();
                        break;
                    case 2:
                        message.value = reader.string();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a ResponseHeader message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgHttpResponse.ResponseHeader
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgHttpResponse.ResponseHeader} ResponseHeader
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            ResponseHeader.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a ResponseHeader message.
             * @function verify
             * @memberof CMsgHttpResponse.ResponseHeader
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            ResponseHeader.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.name != null && message.hasOwnProperty("name"))
                    if (!$util.isString(message.name))
                        return "name: string expected";
                if (message.value != null && message.hasOwnProperty("value"))
                    if (!$util.isString(message.value))
                        return "value: string expected";
                return null;
            };
    
            /**
             * Creates a ResponseHeader message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgHttpResponse.ResponseHeader
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgHttpResponse.ResponseHeader} ResponseHeader
             */
            ResponseHeader.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgHttpResponse.ResponseHeader)
                    return object;
                var message = new $root.CMsgHttpResponse.ResponseHeader();
                if (object.name != null)
                    message.name = String(object.name);
                if (object.value != null)
                    message.value = String(object.value);
                return message;
            };
    
            /**
             * Creates a plain object from a ResponseHeader message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgHttpResponse.ResponseHeader
             * @static
             * @param {CMsgHttpResponse.ResponseHeader} message ResponseHeader
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            ResponseHeader.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.name = "";
                    object.value = "";
                }
                if (message.name != null && message.hasOwnProperty("name"))
                    object.name = message.name;
                if (message.value != null && message.hasOwnProperty("value"))
                    object.value = message.value;
                return object;
            };
    
            /**
             * Converts this ResponseHeader to JSON.
             * @function toJSON
             * @memberof CMsgHttpResponse.ResponseHeader
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            ResponseHeader.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return ResponseHeader;
        })();
    
        return CMsgHttpResponse;
    })();
    
    $root.CMsgAMFindAccounts = (function() {
    
        /**
         * Properties of a CMsgAMFindAccounts.
         * @exports ICMsgAMFindAccounts
         * @interface ICMsgAMFindAccounts
         * @property {number|null} [search_type] CMsgAMFindAccounts search_type
         * @property {string|null} [search_string] CMsgAMFindAccounts search_string
         */
    
        /**
         * Constructs a new CMsgAMFindAccounts.
         * @exports CMsgAMFindAccounts
         * @classdesc Represents a CMsgAMFindAccounts.
         * @implements ICMsgAMFindAccounts
         * @constructor
         * @param {ICMsgAMFindAccounts=} [properties] Properties to set
         */
        function CMsgAMFindAccounts(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgAMFindAccounts search_type.
         * @member {number} search_type
         * @memberof CMsgAMFindAccounts
         * @instance
         */
        CMsgAMFindAccounts.prototype.search_type = 0;
    
        /**
         * CMsgAMFindAccounts search_string.
         * @member {string} search_string
         * @memberof CMsgAMFindAccounts
         * @instance
         */
        CMsgAMFindAccounts.prototype.search_string = "";
    
        /**
         * Creates a new CMsgAMFindAccounts instance using the specified properties.
         * @function create
         * @memberof CMsgAMFindAccounts
         * @static
         * @param {ICMsgAMFindAccounts=} [properties] Properties to set
         * @returns {CMsgAMFindAccounts} CMsgAMFindAccounts instance
         */
        CMsgAMFindAccounts.create = function create(properties) {
            return new CMsgAMFindAccounts(properties);
        };
    
        /**
         * Encodes the specified CMsgAMFindAccounts message. Does not implicitly {@link CMsgAMFindAccounts.verify|verify} messages.
         * @function encode
         * @memberof CMsgAMFindAccounts
         * @static
         * @param {ICMsgAMFindAccounts} message CMsgAMFindAccounts message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMFindAccounts.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.search_type != null && message.hasOwnProperty("search_type"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.search_type);
            if (message.search_string != null && message.hasOwnProperty("search_string"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.search_string);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgAMFindAccounts message, length delimited. Does not implicitly {@link CMsgAMFindAccounts.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgAMFindAccounts
         * @static
         * @param {ICMsgAMFindAccounts} message CMsgAMFindAccounts message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMFindAccounts.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgAMFindAccounts message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgAMFindAccounts
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgAMFindAccounts} CMsgAMFindAccounts
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMFindAccounts.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMFindAccounts();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.search_type = reader.uint32();
                    break;
                case 2:
                    message.search_string = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgAMFindAccounts message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgAMFindAccounts
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgAMFindAccounts} CMsgAMFindAccounts
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMFindAccounts.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgAMFindAccounts message.
         * @function verify
         * @memberof CMsgAMFindAccounts
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgAMFindAccounts.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.search_type != null && message.hasOwnProperty("search_type"))
                if (!$util.isInteger(message.search_type))
                    return "search_type: integer expected";
            if (message.search_string != null && message.hasOwnProperty("search_string"))
                if (!$util.isString(message.search_string))
                    return "search_string: string expected";
            return null;
        };
    
        /**
         * Creates a CMsgAMFindAccounts message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgAMFindAccounts
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgAMFindAccounts} CMsgAMFindAccounts
         */
        CMsgAMFindAccounts.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgAMFindAccounts)
                return object;
            var message = new $root.CMsgAMFindAccounts();
            if (object.search_type != null)
                message.search_type = object.search_type >>> 0;
            if (object.search_string != null)
                message.search_string = String(object.search_string);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgAMFindAccounts message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgAMFindAccounts
         * @static
         * @param {CMsgAMFindAccounts} message CMsgAMFindAccounts
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgAMFindAccounts.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.search_type = 0;
                object.search_string = "";
            }
            if (message.search_type != null && message.hasOwnProperty("search_type"))
                object.search_type = message.search_type;
            if (message.search_string != null && message.hasOwnProperty("search_string"))
                object.search_string = message.search_string;
            return object;
        };
    
        /**
         * Converts this CMsgAMFindAccounts to JSON.
         * @function toJSON
         * @memberof CMsgAMFindAccounts
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgAMFindAccounts.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgAMFindAccounts;
    })();
    
    $root.CMsgAMFindAccountsResponse = (function() {
    
        /**
         * Properties of a CMsgAMFindAccountsResponse.
         * @exports ICMsgAMFindAccountsResponse
         * @interface ICMsgAMFindAccountsResponse
         * @property {Array.<number|Long>|null} [steam_id] CMsgAMFindAccountsResponse steam_id
         */
    
        /**
         * Constructs a new CMsgAMFindAccountsResponse.
         * @exports CMsgAMFindAccountsResponse
         * @classdesc Represents a CMsgAMFindAccountsResponse.
         * @implements ICMsgAMFindAccountsResponse
         * @constructor
         * @param {ICMsgAMFindAccountsResponse=} [properties] Properties to set
         */
        function CMsgAMFindAccountsResponse(properties) {
            this.steam_id = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgAMFindAccountsResponse steam_id.
         * @member {Array.<number|Long>} steam_id
         * @memberof CMsgAMFindAccountsResponse
         * @instance
         */
        CMsgAMFindAccountsResponse.prototype.steam_id = $util.emptyArray;
    
        /**
         * Creates a new CMsgAMFindAccountsResponse instance using the specified properties.
         * @function create
         * @memberof CMsgAMFindAccountsResponse
         * @static
         * @param {ICMsgAMFindAccountsResponse=} [properties] Properties to set
         * @returns {CMsgAMFindAccountsResponse} CMsgAMFindAccountsResponse instance
         */
        CMsgAMFindAccountsResponse.create = function create(properties) {
            return new CMsgAMFindAccountsResponse(properties);
        };
    
        /**
         * Encodes the specified CMsgAMFindAccountsResponse message. Does not implicitly {@link CMsgAMFindAccountsResponse.verify|verify} messages.
         * @function encode
         * @memberof CMsgAMFindAccountsResponse
         * @static
         * @param {ICMsgAMFindAccountsResponse} message CMsgAMFindAccountsResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMFindAccountsResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steam_id != null && message.steam_id.length)
                for (var i = 0; i < message.steam_id.length; ++i)
                    writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steam_id[i]);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgAMFindAccountsResponse message, length delimited. Does not implicitly {@link CMsgAMFindAccountsResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgAMFindAccountsResponse
         * @static
         * @param {ICMsgAMFindAccountsResponse} message CMsgAMFindAccountsResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMFindAccountsResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgAMFindAccountsResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgAMFindAccountsResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgAMFindAccountsResponse} CMsgAMFindAccountsResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMFindAccountsResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMFindAccountsResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.steam_id && message.steam_id.length))
                        message.steam_id = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.steam_id.push(reader.fixed64());
                    } else
                        message.steam_id.push(reader.fixed64());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgAMFindAccountsResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgAMFindAccountsResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgAMFindAccountsResponse} CMsgAMFindAccountsResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMFindAccountsResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgAMFindAccountsResponse message.
         * @function verify
         * @memberof CMsgAMFindAccountsResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgAMFindAccountsResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steam_id != null && message.hasOwnProperty("steam_id")) {
                if (!Array.isArray(message.steam_id))
                    return "steam_id: array expected";
                for (var i = 0; i < message.steam_id.length; ++i)
                    if (!$util.isInteger(message.steam_id[i]) && !(message.steam_id[i] && $util.isInteger(message.steam_id[i].low) && $util.isInteger(message.steam_id[i].high)))
                        return "steam_id: integer|Long[] expected";
            }
            return null;
        };
    
        /**
         * Creates a CMsgAMFindAccountsResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgAMFindAccountsResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgAMFindAccountsResponse} CMsgAMFindAccountsResponse
         */
        CMsgAMFindAccountsResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgAMFindAccountsResponse)
                return object;
            var message = new $root.CMsgAMFindAccountsResponse();
            if (object.steam_id) {
                if (!Array.isArray(object.steam_id))
                    throw TypeError(".CMsgAMFindAccountsResponse.steam_id: array expected");
                message.steam_id = [];
                for (var i = 0; i < object.steam_id.length; ++i)
                    if ($util.Long)
                        (message.steam_id[i] = $util.Long.fromValue(object.steam_id[i])).unsigned = false;
                    else if (typeof object.steam_id[i] === "string")
                        message.steam_id[i] = parseInt(object.steam_id[i], 10);
                    else if (typeof object.steam_id[i] === "number")
                        message.steam_id[i] = object.steam_id[i];
                    else if (typeof object.steam_id[i] === "object")
                        message.steam_id[i] = new $util.LongBits(object.steam_id[i].low >>> 0, object.steam_id[i].high >>> 0).toNumber();
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgAMFindAccountsResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgAMFindAccountsResponse
         * @static
         * @param {CMsgAMFindAccountsResponse} message CMsgAMFindAccountsResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgAMFindAccountsResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.steam_id = [];
            if (message.steam_id && message.steam_id.length) {
                object.steam_id = [];
                for (var j = 0; j < message.steam_id.length; ++j)
                    if (typeof message.steam_id[j] === "number")
                        object.steam_id[j] = options.longs === String ? String(message.steam_id[j]) : message.steam_id[j];
                    else
                        object.steam_id[j] = options.longs === String ? $util.Long.prototype.toString.call(message.steam_id[j]) : options.longs === Number ? new $util.LongBits(message.steam_id[j].low >>> 0, message.steam_id[j].high >>> 0).toNumber() : message.steam_id[j];
            }
            return object;
        };
    
        /**
         * Converts this CMsgAMFindAccountsResponse to JSON.
         * @function toJSON
         * @memberof CMsgAMFindAccountsResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgAMFindAccountsResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgAMFindAccountsResponse;
    })();
    
    $root.CMsgNotifyWatchdog = (function() {
    
        /**
         * Properties of a CMsgNotifyWatchdog.
         * @exports ICMsgNotifyWatchdog
         * @interface ICMsgNotifyWatchdog
         * @property {number|null} [source] CMsgNotifyWatchdog source
         * @property {number|null} [alert_type] CMsgNotifyWatchdog alert_type
         * @property {number|null} [alert_destination] CMsgNotifyWatchdog alert_destination
         * @property {boolean|null} [critical] CMsgNotifyWatchdog critical
         * @property {number|null} [time] CMsgNotifyWatchdog time
         * @property {number|null} [appid] CMsgNotifyWatchdog appid
         * @property {string|null} [text] CMsgNotifyWatchdog text
         */
    
        /**
         * Constructs a new CMsgNotifyWatchdog.
         * @exports CMsgNotifyWatchdog
         * @classdesc Represents a CMsgNotifyWatchdog.
         * @implements ICMsgNotifyWatchdog
         * @constructor
         * @param {ICMsgNotifyWatchdog=} [properties] Properties to set
         */
        function CMsgNotifyWatchdog(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgNotifyWatchdog source.
         * @member {number} source
         * @memberof CMsgNotifyWatchdog
         * @instance
         */
        CMsgNotifyWatchdog.prototype.source = 0;
    
        /**
         * CMsgNotifyWatchdog alert_type.
         * @member {number} alert_type
         * @memberof CMsgNotifyWatchdog
         * @instance
         */
        CMsgNotifyWatchdog.prototype.alert_type = 0;
    
        /**
         * CMsgNotifyWatchdog alert_destination.
         * @member {number} alert_destination
         * @memberof CMsgNotifyWatchdog
         * @instance
         */
        CMsgNotifyWatchdog.prototype.alert_destination = 0;
    
        /**
         * CMsgNotifyWatchdog critical.
         * @member {boolean} critical
         * @memberof CMsgNotifyWatchdog
         * @instance
         */
        CMsgNotifyWatchdog.prototype.critical = false;
    
        /**
         * CMsgNotifyWatchdog time.
         * @member {number} time
         * @memberof CMsgNotifyWatchdog
         * @instance
         */
        CMsgNotifyWatchdog.prototype.time = 0;
    
        /**
         * CMsgNotifyWatchdog appid.
         * @member {number} appid
         * @memberof CMsgNotifyWatchdog
         * @instance
         */
        CMsgNotifyWatchdog.prototype.appid = 0;
    
        /**
         * CMsgNotifyWatchdog text.
         * @member {string} text
         * @memberof CMsgNotifyWatchdog
         * @instance
         */
        CMsgNotifyWatchdog.prototype.text = "";
    
        /**
         * Creates a new CMsgNotifyWatchdog instance using the specified properties.
         * @function create
         * @memberof CMsgNotifyWatchdog
         * @static
         * @param {ICMsgNotifyWatchdog=} [properties] Properties to set
         * @returns {CMsgNotifyWatchdog} CMsgNotifyWatchdog instance
         */
        CMsgNotifyWatchdog.create = function create(properties) {
            return new CMsgNotifyWatchdog(properties);
        };
    
        /**
         * Encodes the specified CMsgNotifyWatchdog message. Does not implicitly {@link CMsgNotifyWatchdog.verify|verify} messages.
         * @function encode
         * @memberof CMsgNotifyWatchdog
         * @static
         * @param {ICMsgNotifyWatchdog} message CMsgNotifyWatchdog message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgNotifyWatchdog.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.source != null && message.hasOwnProperty("source"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.source);
            if (message.alert_type != null && message.hasOwnProperty("alert_type"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.alert_type);
            if (message.alert_destination != null && message.hasOwnProperty("alert_destination"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.alert_destination);
            if (message.critical != null && message.hasOwnProperty("critical"))
                writer.uint32(/* id 4, wireType 0 =*/32).bool(message.critical);
            if (message.time != null && message.hasOwnProperty("time"))
                writer.uint32(/* id 5, wireType 0 =*/40).uint32(message.time);
            if (message.appid != null && message.hasOwnProperty("appid"))
                writer.uint32(/* id 6, wireType 0 =*/48).uint32(message.appid);
            if (message.text != null && message.hasOwnProperty("text"))
                writer.uint32(/* id 7, wireType 2 =*/58).string(message.text);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgNotifyWatchdog message, length delimited. Does not implicitly {@link CMsgNotifyWatchdog.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgNotifyWatchdog
         * @static
         * @param {ICMsgNotifyWatchdog} message CMsgNotifyWatchdog message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgNotifyWatchdog.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgNotifyWatchdog message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgNotifyWatchdog
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgNotifyWatchdog} CMsgNotifyWatchdog
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgNotifyWatchdog.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgNotifyWatchdog();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.source = reader.uint32();
                    break;
                case 2:
                    message.alert_type = reader.uint32();
                    break;
                case 3:
                    message.alert_destination = reader.uint32();
                    break;
                case 4:
                    message.critical = reader.bool();
                    break;
                case 5:
                    message.time = reader.uint32();
                    break;
                case 6:
                    message.appid = reader.uint32();
                    break;
                case 7:
                    message.text = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgNotifyWatchdog message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgNotifyWatchdog
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgNotifyWatchdog} CMsgNotifyWatchdog
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgNotifyWatchdog.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgNotifyWatchdog message.
         * @function verify
         * @memberof CMsgNotifyWatchdog
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgNotifyWatchdog.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.source != null && message.hasOwnProperty("source"))
                if (!$util.isInteger(message.source))
                    return "source: integer expected";
            if (message.alert_type != null && message.hasOwnProperty("alert_type"))
                if (!$util.isInteger(message.alert_type))
                    return "alert_type: integer expected";
            if (message.alert_destination != null && message.hasOwnProperty("alert_destination"))
                if (!$util.isInteger(message.alert_destination))
                    return "alert_destination: integer expected";
            if (message.critical != null && message.hasOwnProperty("critical"))
                if (typeof message.critical !== "boolean")
                    return "critical: boolean expected";
            if (message.time != null && message.hasOwnProperty("time"))
                if (!$util.isInteger(message.time))
                    return "time: integer expected";
            if (message.appid != null && message.hasOwnProperty("appid"))
                if (!$util.isInteger(message.appid))
                    return "appid: integer expected";
            if (message.text != null && message.hasOwnProperty("text"))
                if (!$util.isString(message.text))
                    return "text: string expected";
            return null;
        };
    
        /**
         * Creates a CMsgNotifyWatchdog message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgNotifyWatchdog
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgNotifyWatchdog} CMsgNotifyWatchdog
         */
        CMsgNotifyWatchdog.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgNotifyWatchdog)
                return object;
            var message = new $root.CMsgNotifyWatchdog();
            if (object.source != null)
                message.source = object.source >>> 0;
            if (object.alert_type != null)
                message.alert_type = object.alert_type >>> 0;
            if (object.alert_destination != null)
                message.alert_destination = object.alert_destination >>> 0;
            if (object.critical != null)
                message.critical = Boolean(object.critical);
            if (object.time != null)
                message.time = object.time >>> 0;
            if (object.appid != null)
                message.appid = object.appid >>> 0;
            if (object.text != null)
                message.text = String(object.text);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgNotifyWatchdog message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgNotifyWatchdog
         * @static
         * @param {CMsgNotifyWatchdog} message CMsgNotifyWatchdog
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgNotifyWatchdog.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.source = 0;
                object.alert_type = 0;
                object.alert_destination = 0;
                object.critical = false;
                object.time = 0;
                object.appid = 0;
                object.text = "";
            }
            if (message.source != null && message.hasOwnProperty("source"))
                object.source = message.source;
            if (message.alert_type != null && message.hasOwnProperty("alert_type"))
                object.alert_type = message.alert_type;
            if (message.alert_destination != null && message.hasOwnProperty("alert_destination"))
                object.alert_destination = message.alert_destination;
            if (message.critical != null && message.hasOwnProperty("critical"))
                object.critical = message.critical;
            if (message.time != null && message.hasOwnProperty("time"))
                object.time = message.time;
            if (message.appid != null && message.hasOwnProperty("appid"))
                object.appid = message.appid;
            if (message.text != null && message.hasOwnProperty("text"))
                object.text = message.text;
            return object;
        };
    
        /**
         * Converts this CMsgNotifyWatchdog to JSON.
         * @function toJSON
         * @memberof CMsgNotifyWatchdog
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgNotifyWatchdog.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgNotifyWatchdog;
    })();
    
    $root.CMsgAMGetLicenses = (function() {
    
        /**
         * Properties of a CMsgAMGetLicenses.
         * @exports ICMsgAMGetLicenses
         * @interface ICMsgAMGetLicenses
         * @property {number|Long|null} [steamid] CMsgAMGetLicenses steamid
         */
    
        /**
         * Constructs a new CMsgAMGetLicenses.
         * @exports CMsgAMGetLicenses
         * @classdesc Represents a CMsgAMGetLicenses.
         * @implements ICMsgAMGetLicenses
         * @constructor
         * @param {ICMsgAMGetLicenses=} [properties] Properties to set
         */
        function CMsgAMGetLicenses(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgAMGetLicenses steamid.
         * @member {number|Long} steamid
         * @memberof CMsgAMGetLicenses
         * @instance
         */
        CMsgAMGetLicenses.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * Creates a new CMsgAMGetLicenses instance using the specified properties.
         * @function create
         * @memberof CMsgAMGetLicenses
         * @static
         * @param {ICMsgAMGetLicenses=} [properties] Properties to set
         * @returns {CMsgAMGetLicenses} CMsgAMGetLicenses instance
         */
        CMsgAMGetLicenses.create = function create(properties) {
            return new CMsgAMGetLicenses(properties);
        };
    
        /**
         * Encodes the specified CMsgAMGetLicenses message. Does not implicitly {@link CMsgAMGetLicenses.verify|verify} messages.
         * @function encode
         * @memberof CMsgAMGetLicenses
         * @static
         * @param {ICMsgAMGetLicenses} message CMsgAMGetLicenses message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMGetLicenses.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgAMGetLicenses message, length delimited. Does not implicitly {@link CMsgAMGetLicenses.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgAMGetLicenses
         * @static
         * @param {ICMsgAMGetLicenses} message CMsgAMGetLicenses message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMGetLicenses.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgAMGetLicenses message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgAMGetLicenses
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgAMGetLicenses} CMsgAMGetLicenses
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMGetLicenses.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMGetLicenses();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgAMGetLicenses message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgAMGetLicenses
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgAMGetLicenses} CMsgAMGetLicenses
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMGetLicenses.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgAMGetLicenses message.
         * @function verify
         * @memberof CMsgAMGetLicenses
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgAMGetLicenses.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CMsgAMGetLicenses message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgAMGetLicenses
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgAMGetLicenses} CMsgAMGetLicenses
         */
        CMsgAMGetLicenses.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgAMGetLicenses)
                return object;
            var message = new $root.CMsgAMGetLicenses();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgAMGetLicenses message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgAMGetLicenses
         * @static
         * @param {CMsgAMGetLicenses} message CMsgAMGetLicenses
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgAMGetLicenses.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            return object;
        };
    
        /**
         * Converts this CMsgAMGetLicenses to JSON.
         * @function toJSON
         * @memberof CMsgAMGetLicenses
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgAMGetLicenses.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgAMGetLicenses;
    })();
    
    $root.CMsgPackageLicense = (function() {
    
        /**
         * Properties of a CMsgPackageLicense.
         * @exports ICMsgPackageLicense
         * @interface ICMsgPackageLicense
         * @property {number|null} [package_id] CMsgPackageLicense package_id
         * @property {number|null} [time_created] CMsgPackageLicense time_created
         * @property {number|null} [owner_id] CMsgPackageLicense owner_id
         */
    
        /**
         * Constructs a new CMsgPackageLicense.
         * @exports CMsgPackageLicense
         * @classdesc Represents a CMsgPackageLicense.
         * @implements ICMsgPackageLicense
         * @constructor
         * @param {ICMsgPackageLicense=} [properties] Properties to set
         */
        function CMsgPackageLicense(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgPackageLicense package_id.
         * @member {number} package_id
         * @memberof CMsgPackageLicense
         * @instance
         */
        CMsgPackageLicense.prototype.package_id = 0;
    
        /**
         * CMsgPackageLicense time_created.
         * @member {number} time_created
         * @memberof CMsgPackageLicense
         * @instance
         */
        CMsgPackageLicense.prototype.time_created = 0;
    
        /**
         * CMsgPackageLicense owner_id.
         * @member {number} owner_id
         * @memberof CMsgPackageLicense
         * @instance
         */
        CMsgPackageLicense.prototype.owner_id = 0;
    
        /**
         * Creates a new CMsgPackageLicense instance using the specified properties.
         * @function create
         * @memberof CMsgPackageLicense
         * @static
         * @param {ICMsgPackageLicense=} [properties] Properties to set
         * @returns {CMsgPackageLicense} CMsgPackageLicense instance
         */
        CMsgPackageLicense.create = function create(properties) {
            return new CMsgPackageLicense(properties);
        };
    
        /**
         * Encodes the specified CMsgPackageLicense message. Does not implicitly {@link CMsgPackageLicense.verify|verify} messages.
         * @function encode
         * @memberof CMsgPackageLicense
         * @static
         * @param {ICMsgPackageLicense} message CMsgPackageLicense message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgPackageLicense.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.package_id != null && message.hasOwnProperty("package_id"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.package_id);
            if (message.time_created != null && message.hasOwnProperty("time_created"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.time_created);
            if (message.owner_id != null && message.hasOwnProperty("owner_id"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.owner_id);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgPackageLicense message, length delimited. Does not implicitly {@link CMsgPackageLicense.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgPackageLicense
         * @static
         * @param {ICMsgPackageLicense} message CMsgPackageLicense message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgPackageLicense.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgPackageLicense message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgPackageLicense
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgPackageLicense} CMsgPackageLicense
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgPackageLicense.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgPackageLicense();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.package_id = reader.uint32();
                    break;
                case 2:
                    message.time_created = reader.uint32();
                    break;
                case 3:
                    message.owner_id = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgPackageLicense message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgPackageLicense
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgPackageLicense} CMsgPackageLicense
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgPackageLicense.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgPackageLicense message.
         * @function verify
         * @memberof CMsgPackageLicense
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgPackageLicense.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.package_id != null && message.hasOwnProperty("package_id"))
                if (!$util.isInteger(message.package_id))
                    return "package_id: integer expected";
            if (message.time_created != null && message.hasOwnProperty("time_created"))
                if (!$util.isInteger(message.time_created))
                    return "time_created: integer expected";
            if (message.owner_id != null && message.hasOwnProperty("owner_id"))
                if (!$util.isInteger(message.owner_id))
                    return "owner_id: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgPackageLicense message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgPackageLicense
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgPackageLicense} CMsgPackageLicense
         */
        CMsgPackageLicense.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgPackageLicense)
                return object;
            var message = new $root.CMsgPackageLicense();
            if (object.package_id != null)
                message.package_id = object.package_id >>> 0;
            if (object.time_created != null)
                message.time_created = object.time_created >>> 0;
            if (object.owner_id != null)
                message.owner_id = object.owner_id >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgPackageLicense message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgPackageLicense
         * @static
         * @param {CMsgPackageLicense} message CMsgPackageLicense
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgPackageLicense.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.package_id = 0;
                object.time_created = 0;
                object.owner_id = 0;
            }
            if (message.package_id != null && message.hasOwnProperty("package_id"))
                object.package_id = message.package_id;
            if (message.time_created != null && message.hasOwnProperty("time_created"))
                object.time_created = message.time_created;
            if (message.owner_id != null && message.hasOwnProperty("owner_id"))
                object.owner_id = message.owner_id;
            return object;
        };
    
        /**
         * Converts this CMsgPackageLicense to JSON.
         * @function toJSON
         * @memberof CMsgPackageLicense
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgPackageLicense.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgPackageLicense;
    })();
    
    $root.CMsgAMGetLicensesResponse = (function() {
    
        /**
         * Properties of a CMsgAMGetLicensesResponse.
         * @exports ICMsgAMGetLicensesResponse
         * @interface ICMsgAMGetLicensesResponse
         * @property {Array.<ICMsgPackageLicense>|null} [license] CMsgAMGetLicensesResponse license
         * @property {number|null} [result] CMsgAMGetLicensesResponse result
         */
    
        /**
         * Constructs a new CMsgAMGetLicensesResponse.
         * @exports CMsgAMGetLicensesResponse
         * @classdesc Represents a CMsgAMGetLicensesResponse.
         * @implements ICMsgAMGetLicensesResponse
         * @constructor
         * @param {ICMsgAMGetLicensesResponse=} [properties] Properties to set
         */
        function CMsgAMGetLicensesResponse(properties) {
            this.license = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgAMGetLicensesResponse license.
         * @member {Array.<ICMsgPackageLicense>} license
         * @memberof CMsgAMGetLicensesResponse
         * @instance
         */
        CMsgAMGetLicensesResponse.prototype.license = $util.emptyArray;
    
        /**
         * CMsgAMGetLicensesResponse result.
         * @member {number} result
         * @memberof CMsgAMGetLicensesResponse
         * @instance
         */
        CMsgAMGetLicensesResponse.prototype.result = 0;
    
        /**
         * Creates a new CMsgAMGetLicensesResponse instance using the specified properties.
         * @function create
         * @memberof CMsgAMGetLicensesResponse
         * @static
         * @param {ICMsgAMGetLicensesResponse=} [properties] Properties to set
         * @returns {CMsgAMGetLicensesResponse} CMsgAMGetLicensesResponse instance
         */
        CMsgAMGetLicensesResponse.create = function create(properties) {
            return new CMsgAMGetLicensesResponse(properties);
        };
    
        /**
         * Encodes the specified CMsgAMGetLicensesResponse message. Does not implicitly {@link CMsgAMGetLicensesResponse.verify|verify} messages.
         * @function encode
         * @memberof CMsgAMGetLicensesResponse
         * @static
         * @param {ICMsgAMGetLicensesResponse} message CMsgAMGetLicensesResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMGetLicensesResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.license != null && message.license.length)
                for (var i = 0; i < message.license.length; ++i)
                    $root.CMsgPackageLicense.encode(message.license[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            if (message.result != null && message.hasOwnProperty("result"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.result);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgAMGetLicensesResponse message, length delimited. Does not implicitly {@link CMsgAMGetLicensesResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgAMGetLicensesResponse
         * @static
         * @param {ICMsgAMGetLicensesResponse} message CMsgAMGetLicensesResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMGetLicensesResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgAMGetLicensesResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgAMGetLicensesResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgAMGetLicensesResponse} CMsgAMGetLicensesResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMGetLicensesResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMGetLicensesResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.license && message.license.length))
                        message.license = [];
                    message.license.push($root.CMsgPackageLicense.decode(reader, reader.uint32()));
                    break;
                case 2:
                    message.result = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgAMGetLicensesResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgAMGetLicensesResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgAMGetLicensesResponse} CMsgAMGetLicensesResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMGetLicensesResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgAMGetLicensesResponse message.
         * @function verify
         * @memberof CMsgAMGetLicensesResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgAMGetLicensesResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.license != null && message.hasOwnProperty("license")) {
                if (!Array.isArray(message.license))
                    return "license: array expected";
                for (var i = 0; i < message.license.length; ++i) {
                    var error = $root.CMsgPackageLicense.verify(message.license[i]);
                    if (error)
                        return "license." + error;
                }
            }
            if (message.result != null && message.hasOwnProperty("result"))
                if (!$util.isInteger(message.result))
                    return "result: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgAMGetLicensesResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgAMGetLicensesResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgAMGetLicensesResponse} CMsgAMGetLicensesResponse
         */
        CMsgAMGetLicensesResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgAMGetLicensesResponse)
                return object;
            var message = new $root.CMsgAMGetLicensesResponse();
            if (object.license) {
                if (!Array.isArray(object.license))
                    throw TypeError(".CMsgAMGetLicensesResponse.license: array expected");
                message.license = [];
                for (var i = 0; i < object.license.length; ++i) {
                    if (typeof object.license[i] !== "object")
                        throw TypeError(".CMsgAMGetLicensesResponse.license: object expected");
                    message.license[i] = $root.CMsgPackageLicense.fromObject(object.license[i]);
                }
            }
            if (object.result != null)
                message.result = object.result >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgAMGetLicensesResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgAMGetLicensesResponse
         * @static
         * @param {CMsgAMGetLicensesResponse} message CMsgAMGetLicensesResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgAMGetLicensesResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.license = [];
            if (options.defaults)
                object.result = 0;
            if (message.license && message.license.length) {
                object.license = [];
                for (var j = 0; j < message.license.length; ++j)
                    object.license[j] = $root.CMsgPackageLicense.toObject(message.license[j], options);
            }
            if (message.result != null && message.hasOwnProperty("result"))
                object.result = message.result;
            return object;
        };
    
        /**
         * Converts this CMsgAMGetLicensesResponse to JSON.
         * @function toJSON
         * @memberof CMsgAMGetLicensesResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgAMGetLicensesResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgAMGetLicensesResponse;
    })();
    
    $root.CMsgAMGetUserGameStats = (function() {
    
        /**
         * Properties of a CMsgAMGetUserGameStats.
         * @exports ICMsgAMGetUserGameStats
         * @interface ICMsgAMGetUserGameStats
         * @property {number|Long|null} [steam_id] CMsgAMGetUserGameStats steam_id
         * @property {number|Long|null} [game_id] CMsgAMGetUserGameStats game_id
         * @property {Array.<number>|null} [stats] CMsgAMGetUserGameStats stats
         */
    
        /**
         * Constructs a new CMsgAMGetUserGameStats.
         * @exports CMsgAMGetUserGameStats
         * @classdesc Represents a CMsgAMGetUserGameStats.
         * @implements ICMsgAMGetUserGameStats
         * @constructor
         * @param {ICMsgAMGetUserGameStats=} [properties] Properties to set
         */
        function CMsgAMGetUserGameStats(properties) {
            this.stats = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgAMGetUserGameStats steam_id.
         * @member {number|Long} steam_id
         * @memberof CMsgAMGetUserGameStats
         * @instance
         */
        CMsgAMGetUserGameStats.prototype.steam_id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgAMGetUserGameStats game_id.
         * @member {number|Long} game_id
         * @memberof CMsgAMGetUserGameStats
         * @instance
         */
        CMsgAMGetUserGameStats.prototype.game_id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgAMGetUserGameStats stats.
         * @member {Array.<number>} stats
         * @memberof CMsgAMGetUserGameStats
         * @instance
         */
        CMsgAMGetUserGameStats.prototype.stats = $util.emptyArray;
    
        /**
         * Creates a new CMsgAMGetUserGameStats instance using the specified properties.
         * @function create
         * @memberof CMsgAMGetUserGameStats
         * @static
         * @param {ICMsgAMGetUserGameStats=} [properties] Properties to set
         * @returns {CMsgAMGetUserGameStats} CMsgAMGetUserGameStats instance
         */
        CMsgAMGetUserGameStats.create = function create(properties) {
            return new CMsgAMGetUserGameStats(properties);
        };
    
        /**
         * Encodes the specified CMsgAMGetUserGameStats message. Does not implicitly {@link CMsgAMGetUserGameStats.verify|verify} messages.
         * @function encode
         * @memberof CMsgAMGetUserGameStats
         * @static
         * @param {ICMsgAMGetUserGameStats} message CMsgAMGetUserGameStats message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMGetUserGameStats.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steam_id);
            if (message.game_id != null && message.hasOwnProperty("game_id"))
                writer.uint32(/* id 2, wireType 1 =*/17).fixed64(message.game_id);
            if (message.stats != null && message.stats.length)
                for (var i = 0; i < message.stats.length; ++i)
                    writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.stats[i]);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgAMGetUserGameStats message, length delimited. Does not implicitly {@link CMsgAMGetUserGameStats.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgAMGetUserGameStats
         * @static
         * @param {ICMsgAMGetUserGameStats} message CMsgAMGetUserGameStats message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMGetUserGameStats.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgAMGetUserGameStats message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgAMGetUserGameStats
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgAMGetUserGameStats} CMsgAMGetUserGameStats
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMGetUserGameStats.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMGetUserGameStats();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steam_id = reader.fixed64();
                    break;
                case 2:
                    message.game_id = reader.fixed64();
                    break;
                case 3:
                    if (!(message.stats && message.stats.length))
                        message.stats = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.stats.push(reader.uint32());
                    } else
                        message.stats.push(reader.uint32());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgAMGetUserGameStats message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgAMGetUserGameStats
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgAMGetUserGameStats} CMsgAMGetUserGameStats
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMGetUserGameStats.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgAMGetUserGameStats message.
         * @function verify
         * @memberof CMsgAMGetUserGameStats
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgAMGetUserGameStats.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                if (!$util.isInteger(message.steam_id) && !(message.steam_id && $util.isInteger(message.steam_id.low) && $util.isInteger(message.steam_id.high)))
                    return "steam_id: integer|Long expected";
            if (message.game_id != null && message.hasOwnProperty("game_id"))
                if (!$util.isInteger(message.game_id) && !(message.game_id && $util.isInteger(message.game_id.low) && $util.isInteger(message.game_id.high)))
                    return "game_id: integer|Long expected";
            if (message.stats != null && message.hasOwnProperty("stats")) {
                if (!Array.isArray(message.stats))
                    return "stats: array expected";
                for (var i = 0; i < message.stats.length; ++i)
                    if (!$util.isInteger(message.stats[i]))
                        return "stats: integer[] expected";
            }
            return null;
        };
    
        /**
         * Creates a CMsgAMGetUserGameStats message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgAMGetUserGameStats
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgAMGetUserGameStats} CMsgAMGetUserGameStats
         */
        CMsgAMGetUserGameStats.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgAMGetUserGameStats)
                return object;
            var message = new $root.CMsgAMGetUserGameStats();
            if (object.steam_id != null)
                if ($util.Long)
                    (message.steam_id = $util.Long.fromValue(object.steam_id)).unsigned = false;
                else if (typeof object.steam_id === "string")
                    message.steam_id = parseInt(object.steam_id, 10);
                else if (typeof object.steam_id === "number")
                    message.steam_id = object.steam_id;
                else if (typeof object.steam_id === "object")
                    message.steam_id = new $util.LongBits(object.steam_id.low >>> 0, object.steam_id.high >>> 0).toNumber();
            if (object.game_id != null)
                if ($util.Long)
                    (message.game_id = $util.Long.fromValue(object.game_id)).unsigned = false;
                else if (typeof object.game_id === "string")
                    message.game_id = parseInt(object.game_id, 10);
                else if (typeof object.game_id === "number")
                    message.game_id = object.game_id;
                else if (typeof object.game_id === "object")
                    message.game_id = new $util.LongBits(object.game_id.low >>> 0, object.game_id.high >>> 0).toNumber();
            if (object.stats) {
                if (!Array.isArray(object.stats))
                    throw TypeError(".CMsgAMGetUserGameStats.stats: array expected");
                message.stats = [];
                for (var i = 0; i < object.stats.length; ++i)
                    message.stats[i] = object.stats[i] >>> 0;
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgAMGetUserGameStats message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgAMGetUserGameStats
         * @static
         * @param {CMsgAMGetUserGameStats} message CMsgAMGetUserGameStats
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgAMGetUserGameStats.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.stats = [];
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steam_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steam_id = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.game_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.game_id = options.longs === String ? "0" : 0;
            }
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                if (typeof message.steam_id === "number")
                    object.steam_id = options.longs === String ? String(message.steam_id) : message.steam_id;
                else
                    object.steam_id = options.longs === String ? $util.Long.prototype.toString.call(message.steam_id) : options.longs === Number ? new $util.LongBits(message.steam_id.low >>> 0, message.steam_id.high >>> 0).toNumber() : message.steam_id;
            if (message.game_id != null && message.hasOwnProperty("game_id"))
                if (typeof message.game_id === "number")
                    object.game_id = options.longs === String ? String(message.game_id) : message.game_id;
                else
                    object.game_id = options.longs === String ? $util.Long.prototype.toString.call(message.game_id) : options.longs === Number ? new $util.LongBits(message.game_id.low >>> 0, message.game_id.high >>> 0).toNumber() : message.game_id;
            if (message.stats && message.stats.length) {
                object.stats = [];
                for (var j = 0; j < message.stats.length; ++j)
                    object.stats[j] = message.stats[j];
            }
            return object;
        };
    
        /**
         * Converts this CMsgAMGetUserGameStats to JSON.
         * @function toJSON
         * @memberof CMsgAMGetUserGameStats
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgAMGetUserGameStats.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgAMGetUserGameStats;
    })();
    
    $root.CMsgAMGetUserGameStatsResponse = (function() {
    
        /**
         * Properties of a CMsgAMGetUserGameStatsResponse.
         * @exports ICMsgAMGetUserGameStatsResponse
         * @interface ICMsgAMGetUserGameStatsResponse
         * @property {number|Long|null} [steam_id] CMsgAMGetUserGameStatsResponse steam_id
         * @property {number|Long|null} [game_id] CMsgAMGetUserGameStatsResponse game_id
         * @property {number|null} [eresult] CMsgAMGetUserGameStatsResponse eresult
         * @property {Array.<CMsgAMGetUserGameStatsResponse.IStats>|null} [stats] CMsgAMGetUserGameStatsResponse stats
         * @property {Array.<CMsgAMGetUserGameStatsResponse.IAchievement_Blocks>|null} [achievement_blocks] CMsgAMGetUserGameStatsResponse achievement_blocks
         */
    
        /**
         * Constructs a new CMsgAMGetUserGameStatsResponse.
         * @exports CMsgAMGetUserGameStatsResponse
         * @classdesc Represents a CMsgAMGetUserGameStatsResponse.
         * @implements ICMsgAMGetUserGameStatsResponse
         * @constructor
         * @param {ICMsgAMGetUserGameStatsResponse=} [properties] Properties to set
         */
        function CMsgAMGetUserGameStatsResponse(properties) {
            this.stats = [];
            this.achievement_blocks = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgAMGetUserGameStatsResponse steam_id.
         * @member {number|Long} steam_id
         * @memberof CMsgAMGetUserGameStatsResponse
         * @instance
         */
        CMsgAMGetUserGameStatsResponse.prototype.steam_id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgAMGetUserGameStatsResponse game_id.
         * @member {number|Long} game_id
         * @memberof CMsgAMGetUserGameStatsResponse
         * @instance
         */
        CMsgAMGetUserGameStatsResponse.prototype.game_id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgAMGetUserGameStatsResponse eresult.
         * @member {number} eresult
         * @memberof CMsgAMGetUserGameStatsResponse
         * @instance
         */
        CMsgAMGetUserGameStatsResponse.prototype.eresult = 2;
    
        /**
         * CMsgAMGetUserGameStatsResponse stats.
         * @member {Array.<CMsgAMGetUserGameStatsResponse.IStats>} stats
         * @memberof CMsgAMGetUserGameStatsResponse
         * @instance
         */
        CMsgAMGetUserGameStatsResponse.prototype.stats = $util.emptyArray;
    
        /**
         * CMsgAMGetUserGameStatsResponse achievement_blocks.
         * @member {Array.<CMsgAMGetUserGameStatsResponse.IAchievement_Blocks>} achievement_blocks
         * @memberof CMsgAMGetUserGameStatsResponse
         * @instance
         */
        CMsgAMGetUserGameStatsResponse.prototype.achievement_blocks = $util.emptyArray;
    
        /**
         * Creates a new CMsgAMGetUserGameStatsResponse instance using the specified properties.
         * @function create
         * @memberof CMsgAMGetUserGameStatsResponse
         * @static
         * @param {ICMsgAMGetUserGameStatsResponse=} [properties] Properties to set
         * @returns {CMsgAMGetUserGameStatsResponse} CMsgAMGetUserGameStatsResponse instance
         */
        CMsgAMGetUserGameStatsResponse.create = function create(properties) {
            return new CMsgAMGetUserGameStatsResponse(properties);
        };
    
        /**
         * Encodes the specified CMsgAMGetUserGameStatsResponse message. Does not implicitly {@link CMsgAMGetUserGameStatsResponse.verify|verify} messages.
         * @function encode
         * @memberof CMsgAMGetUserGameStatsResponse
         * @static
         * @param {ICMsgAMGetUserGameStatsResponse} message CMsgAMGetUserGameStatsResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMGetUserGameStatsResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steam_id);
            if (message.game_id != null && message.hasOwnProperty("game_id"))
                writer.uint32(/* id 2, wireType 1 =*/17).fixed64(message.game_id);
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                writer.uint32(/* id 3, wireType 0 =*/24).int32(message.eresult);
            if (message.stats != null && message.stats.length)
                for (var i = 0; i < message.stats.length; ++i)
                    $root.CMsgAMGetUserGameStatsResponse.Stats.encode(message.stats[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
            if (message.achievement_blocks != null && message.achievement_blocks.length)
                for (var i = 0; i < message.achievement_blocks.length; ++i)
                    $root.CMsgAMGetUserGameStatsResponse.Achievement_Blocks.encode(message.achievement_blocks[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CMsgAMGetUserGameStatsResponse message, length delimited. Does not implicitly {@link CMsgAMGetUserGameStatsResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgAMGetUserGameStatsResponse
         * @static
         * @param {ICMsgAMGetUserGameStatsResponse} message CMsgAMGetUserGameStatsResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMGetUserGameStatsResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgAMGetUserGameStatsResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgAMGetUserGameStatsResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgAMGetUserGameStatsResponse} CMsgAMGetUserGameStatsResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMGetUserGameStatsResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMGetUserGameStatsResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steam_id = reader.fixed64();
                    break;
                case 2:
                    message.game_id = reader.fixed64();
                    break;
                case 3:
                    message.eresult = reader.int32();
                    break;
                case 4:
                    if (!(message.stats && message.stats.length))
                        message.stats = [];
                    message.stats.push($root.CMsgAMGetUserGameStatsResponse.Stats.decode(reader, reader.uint32()));
                    break;
                case 5:
                    if (!(message.achievement_blocks && message.achievement_blocks.length))
                        message.achievement_blocks = [];
                    message.achievement_blocks.push($root.CMsgAMGetUserGameStatsResponse.Achievement_Blocks.decode(reader, reader.uint32()));
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgAMGetUserGameStatsResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgAMGetUserGameStatsResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgAMGetUserGameStatsResponse} CMsgAMGetUserGameStatsResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMGetUserGameStatsResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgAMGetUserGameStatsResponse message.
         * @function verify
         * @memberof CMsgAMGetUserGameStatsResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgAMGetUserGameStatsResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                if (!$util.isInteger(message.steam_id) && !(message.steam_id && $util.isInteger(message.steam_id.low) && $util.isInteger(message.steam_id.high)))
                    return "steam_id: integer|Long expected";
            if (message.game_id != null && message.hasOwnProperty("game_id"))
                if (!$util.isInteger(message.game_id) && !(message.game_id && $util.isInteger(message.game_id.low) && $util.isInteger(message.game_id.high)))
                    return "game_id: integer|Long expected";
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                if (!$util.isInteger(message.eresult))
                    return "eresult: integer expected";
            if (message.stats != null && message.hasOwnProperty("stats")) {
                if (!Array.isArray(message.stats))
                    return "stats: array expected";
                for (var i = 0; i < message.stats.length; ++i) {
                    var error = $root.CMsgAMGetUserGameStatsResponse.Stats.verify(message.stats[i]);
                    if (error)
                        return "stats." + error;
                }
            }
            if (message.achievement_blocks != null && message.hasOwnProperty("achievement_blocks")) {
                if (!Array.isArray(message.achievement_blocks))
                    return "achievement_blocks: array expected";
                for (var i = 0; i < message.achievement_blocks.length; ++i) {
                    var error = $root.CMsgAMGetUserGameStatsResponse.Achievement_Blocks.verify(message.achievement_blocks[i]);
                    if (error)
                        return "achievement_blocks." + error;
                }
            }
            return null;
        };
    
        /**
         * Creates a CMsgAMGetUserGameStatsResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgAMGetUserGameStatsResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgAMGetUserGameStatsResponse} CMsgAMGetUserGameStatsResponse
         */
        CMsgAMGetUserGameStatsResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgAMGetUserGameStatsResponse)
                return object;
            var message = new $root.CMsgAMGetUserGameStatsResponse();
            if (object.steam_id != null)
                if ($util.Long)
                    (message.steam_id = $util.Long.fromValue(object.steam_id)).unsigned = false;
                else if (typeof object.steam_id === "string")
                    message.steam_id = parseInt(object.steam_id, 10);
                else if (typeof object.steam_id === "number")
                    message.steam_id = object.steam_id;
                else if (typeof object.steam_id === "object")
                    message.steam_id = new $util.LongBits(object.steam_id.low >>> 0, object.steam_id.high >>> 0).toNumber();
            if (object.game_id != null)
                if ($util.Long)
                    (message.game_id = $util.Long.fromValue(object.game_id)).unsigned = false;
                else if (typeof object.game_id === "string")
                    message.game_id = parseInt(object.game_id, 10);
                else if (typeof object.game_id === "number")
                    message.game_id = object.game_id;
                else if (typeof object.game_id === "object")
                    message.game_id = new $util.LongBits(object.game_id.low >>> 0, object.game_id.high >>> 0).toNumber();
            if (object.eresult != null)
                message.eresult = object.eresult | 0;
            if (object.stats) {
                if (!Array.isArray(object.stats))
                    throw TypeError(".CMsgAMGetUserGameStatsResponse.stats: array expected");
                message.stats = [];
                for (var i = 0; i < object.stats.length; ++i) {
                    if (typeof object.stats[i] !== "object")
                        throw TypeError(".CMsgAMGetUserGameStatsResponse.stats: object expected");
                    message.stats[i] = $root.CMsgAMGetUserGameStatsResponse.Stats.fromObject(object.stats[i]);
                }
            }
            if (object.achievement_blocks) {
                if (!Array.isArray(object.achievement_blocks))
                    throw TypeError(".CMsgAMGetUserGameStatsResponse.achievement_blocks: array expected");
                message.achievement_blocks = [];
                for (var i = 0; i < object.achievement_blocks.length; ++i) {
                    if (typeof object.achievement_blocks[i] !== "object")
                        throw TypeError(".CMsgAMGetUserGameStatsResponse.achievement_blocks: object expected");
                    message.achievement_blocks[i] = $root.CMsgAMGetUserGameStatsResponse.Achievement_Blocks.fromObject(object.achievement_blocks[i]);
                }
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgAMGetUserGameStatsResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgAMGetUserGameStatsResponse
         * @static
         * @param {CMsgAMGetUserGameStatsResponse} message CMsgAMGetUserGameStatsResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgAMGetUserGameStatsResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults) {
                object.stats = [];
                object.achievement_blocks = [];
            }
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steam_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steam_id = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.game_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.game_id = options.longs === String ? "0" : 0;
                object.eresult = 2;
            }
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                if (typeof message.steam_id === "number")
                    object.steam_id = options.longs === String ? String(message.steam_id) : message.steam_id;
                else
                    object.steam_id = options.longs === String ? $util.Long.prototype.toString.call(message.steam_id) : options.longs === Number ? new $util.LongBits(message.steam_id.low >>> 0, message.steam_id.high >>> 0).toNumber() : message.steam_id;
            if (message.game_id != null && message.hasOwnProperty("game_id"))
                if (typeof message.game_id === "number")
                    object.game_id = options.longs === String ? String(message.game_id) : message.game_id;
                else
                    object.game_id = options.longs === String ? $util.Long.prototype.toString.call(message.game_id) : options.longs === Number ? new $util.LongBits(message.game_id.low >>> 0, message.game_id.high >>> 0).toNumber() : message.game_id;
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                object.eresult = message.eresult;
            if (message.stats && message.stats.length) {
                object.stats = [];
                for (var j = 0; j < message.stats.length; ++j)
                    object.stats[j] = $root.CMsgAMGetUserGameStatsResponse.Stats.toObject(message.stats[j], options);
            }
            if (message.achievement_blocks && message.achievement_blocks.length) {
                object.achievement_blocks = [];
                for (var j = 0; j < message.achievement_blocks.length; ++j)
                    object.achievement_blocks[j] = $root.CMsgAMGetUserGameStatsResponse.Achievement_Blocks.toObject(message.achievement_blocks[j], options);
            }
            return object;
        };
    
        /**
         * Converts this CMsgAMGetUserGameStatsResponse to JSON.
         * @function toJSON
         * @memberof CMsgAMGetUserGameStatsResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgAMGetUserGameStatsResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgAMGetUserGameStatsResponse.Stats = (function() {
    
            /**
             * Properties of a Stats.
             * @memberof CMsgAMGetUserGameStatsResponse
             * @interface IStats
             * @property {number|null} [stat_id] Stats stat_id
             * @property {number|null} [stat_value] Stats stat_value
             */
    
            /**
             * Constructs a new Stats.
             * @memberof CMsgAMGetUserGameStatsResponse
             * @classdesc Represents a Stats.
             * @implements IStats
             * @constructor
             * @param {CMsgAMGetUserGameStatsResponse.IStats=} [properties] Properties to set
             */
            function Stats(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * Stats stat_id.
             * @member {number} stat_id
             * @memberof CMsgAMGetUserGameStatsResponse.Stats
             * @instance
             */
            Stats.prototype.stat_id = 0;
    
            /**
             * Stats stat_value.
             * @member {number} stat_value
             * @memberof CMsgAMGetUserGameStatsResponse.Stats
             * @instance
             */
            Stats.prototype.stat_value = 0;
    
            /**
             * Creates a new Stats instance using the specified properties.
             * @function create
             * @memberof CMsgAMGetUserGameStatsResponse.Stats
             * @static
             * @param {CMsgAMGetUserGameStatsResponse.IStats=} [properties] Properties to set
             * @returns {CMsgAMGetUserGameStatsResponse.Stats} Stats instance
             */
            Stats.create = function create(properties) {
                return new Stats(properties);
            };
    
            /**
             * Encodes the specified Stats message. Does not implicitly {@link CMsgAMGetUserGameStatsResponse.Stats.verify|verify} messages.
             * @function encode
             * @memberof CMsgAMGetUserGameStatsResponse.Stats
             * @static
             * @param {CMsgAMGetUserGameStatsResponse.IStats} message Stats message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Stats.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.stat_id != null && message.hasOwnProperty("stat_id"))
                    writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.stat_id);
                if (message.stat_value != null && message.hasOwnProperty("stat_value"))
                    writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.stat_value);
                return writer;
            };
    
            /**
             * Encodes the specified Stats message, length delimited. Does not implicitly {@link CMsgAMGetUserGameStatsResponse.Stats.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgAMGetUserGameStatsResponse.Stats
             * @static
             * @param {CMsgAMGetUserGameStatsResponse.IStats} message Stats message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Stats.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a Stats message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgAMGetUserGameStatsResponse.Stats
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgAMGetUserGameStatsResponse.Stats} Stats
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Stats.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMGetUserGameStatsResponse.Stats();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.stat_id = reader.uint32();
                        break;
                    case 2:
                        message.stat_value = reader.uint32();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a Stats message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgAMGetUserGameStatsResponse.Stats
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgAMGetUserGameStatsResponse.Stats} Stats
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Stats.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a Stats message.
             * @function verify
             * @memberof CMsgAMGetUserGameStatsResponse.Stats
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            Stats.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.stat_id != null && message.hasOwnProperty("stat_id"))
                    if (!$util.isInteger(message.stat_id))
                        return "stat_id: integer expected";
                if (message.stat_value != null && message.hasOwnProperty("stat_value"))
                    if (!$util.isInteger(message.stat_value))
                        return "stat_value: integer expected";
                return null;
            };
    
            /**
             * Creates a Stats message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgAMGetUserGameStatsResponse.Stats
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgAMGetUserGameStatsResponse.Stats} Stats
             */
            Stats.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgAMGetUserGameStatsResponse.Stats)
                    return object;
                var message = new $root.CMsgAMGetUserGameStatsResponse.Stats();
                if (object.stat_id != null)
                    message.stat_id = object.stat_id >>> 0;
                if (object.stat_value != null)
                    message.stat_value = object.stat_value >>> 0;
                return message;
            };
    
            /**
             * Creates a plain object from a Stats message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgAMGetUserGameStatsResponse.Stats
             * @static
             * @param {CMsgAMGetUserGameStatsResponse.Stats} message Stats
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            Stats.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.stat_id = 0;
                    object.stat_value = 0;
                }
                if (message.stat_id != null && message.hasOwnProperty("stat_id"))
                    object.stat_id = message.stat_id;
                if (message.stat_value != null && message.hasOwnProperty("stat_value"))
                    object.stat_value = message.stat_value;
                return object;
            };
    
            /**
             * Converts this Stats to JSON.
             * @function toJSON
             * @memberof CMsgAMGetUserGameStatsResponse.Stats
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            Stats.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return Stats;
        })();
    
        CMsgAMGetUserGameStatsResponse.Achievement_Blocks = (function() {
    
            /**
             * Properties of an Achievement_Blocks.
             * @memberof CMsgAMGetUserGameStatsResponse
             * @interface IAchievement_Blocks
             * @property {number|null} [achievement_id] Achievement_Blocks achievement_id
             * @property {number|null} [achievement_bit_id] Achievement_Blocks achievement_bit_id
             * @property {number|null} [unlock_time] Achievement_Blocks unlock_time
             */
    
            /**
             * Constructs a new Achievement_Blocks.
             * @memberof CMsgAMGetUserGameStatsResponse
             * @classdesc Represents an Achievement_Blocks.
             * @implements IAchievement_Blocks
             * @constructor
             * @param {CMsgAMGetUserGameStatsResponse.IAchievement_Blocks=} [properties] Properties to set
             */
            function Achievement_Blocks(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * Achievement_Blocks achievement_id.
             * @member {number} achievement_id
             * @memberof CMsgAMGetUserGameStatsResponse.Achievement_Blocks
             * @instance
             */
            Achievement_Blocks.prototype.achievement_id = 0;
    
            /**
             * Achievement_Blocks achievement_bit_id.
             * @member {number} achievement_bit_id
             * @memberof CMsgAMGetUserGameStatsResponse.Achievement_Blocks
             * @instance
             */
            Achievement_Blocks.prototype.achievement_bit_id = 0;
    
            /**
             * Achievement_Blocks unlock_time.
             * @member {number} unlock_time
             * @memberof CMsgAMGetUserGameStatsResponse.Achievement_Blocks
             * @instance
             */
            Achievement_Blocks.prototype.unlock_time = 0;
    
            /**
             * Creates a new Achievement_Blocks instance using the specified properties.
             * @function create
             * @memberof CMsgAMGetUserGameStatsResponse.Achievement_Blocks
             * @static
             * @param {CMsgAMGetUserGameStatsResponse.IAchievement_Blocks=} [properties] Properties to set
             * @returns {CMsgAMGetUserGameStatsResponse.Achievement_Blocks} Achievement_Blocks instance
             */
            Achievement_Blocks.create = function create(properties) {
                return new Achievement_Blocks(properties);
            };
    
            /**
             * Encodes the specified Achievement_Blocks message. Does not implicitly {@link CMsgAMGetUserGameStatsResponse.Achievement_Blocks.verify|verify} messages.
             * @function encode
             * @memberof CMsgAMGetUserGameStatsResponse.Achievement_Blocks
             * @static
             * @param {CMsgAMGetUserGameStatsResponse.IAchievement_Blocks} message Achievement_Blocks message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Achievement_Blocks.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.achievement_id != null && message.hasOwnProperty("achievement_id"))
                    writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.achievement_id);
                if (message.achievement_bit_id != null && message.hasOwnProperty("achievement_bit_id"))
                    writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.achievement_bit_id);
                if (message.unlock_time != null && message.hasOwnProperty("unlock_time"))
                    writer.uint32(/* id 3, wireType 5 =*/29).fixed32(message.unlock_time);
                return writer;
            };
    
            /**
             * Encodes the specified Achievement_Blocks message, length delimited. Does not implicitly {@link CMsgAMGetUserGameStatsResponse.Achievement_Blocks.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgAMGetUserGameStatsResponse.Achievement_Blocks
             * @static
             * @param {CMsgAMGetUserGameStatsResponse.IAchievement_Blocks} message Achievement_Blocks message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Achievement_Blocks.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes an Achievement_Blocks message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgAMGetUserGameStatsResponse.Achievement_Blocks
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgAMGetUserGameStatsResponse.Achievement_Blocks} Achievement_Blocks
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Achievement_Blocks.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMGetUserGameStatsResponse.Achievement_Blocks();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.achievement_id = reader.uint32();
                        break;
                    case 2:
                        message.achievement_bit_id = reader.uint32();
                        break;
                    case 3:
                        message.unlock_time = reader.fixed32();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes an Achievement_Blocks message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgAMGetUserGameStatsResponse.Achievement_Blocks
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgAMGetUserGameStatsResponse.Achievement_Blocks} Achievement_Blocks
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Achievement_Blocks.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies an Achievement_Blocks message.
             * @function verify
             * @memberof CMsgAMGetUserGameStatsResponse.Achievement_Blocks
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            Achievement_Blocks.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.achievement_id != null && message.hasOwnProperty("achievement_id"))
                    if (!$util.isInteger(message.achievement_id))
                        return "achievement_id: integer expected";
                if (message.achievement_bit_id != null && message.hasOwnProperty("achievement_bit_id"))
                    if (!$util.isInteger(message.achievement_bit_id))
                        return "achievement_bit_id: integer expected";
                if (message.unlock_time != null && message.hasOwnProperty("unlock_time"))
                    if (!$util.isInteger(message.unlock_time))
                        return "unlock_time: integer expected";
                return null;
            };
    
            /**
             * Creates an Achievement_Blocks message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgAMGetUserGameStatsResponse.Achievement_Blocks
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgAMGetUserGameStatsResponse.Achievement_Blocks} Achievement_Blocks
             */
            Achievement_Blocks.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgAMGetUserGameStatsResponse.Achievement_Blocks)
                    return object;
                var message = new $root.CMsgAMGetUserGameStatsResponse.Achievement_Blocks();
                if (object.achievement_id != null)
                    message.achievement_id = object.achievement_id >>> 0;
                if (object.achievement_bit_id != null)
                    message.achievement_bit_id = object.achievement_bit_id >>> 0;
                if (object.unlock_time != null)
                    message.unlock_time = object.unlock_time >>> 0;
                return message;
            };
    
            /**
             * Creates a plain object from an Achievement_Blocks message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgAMGetUserGameStatsResponse.Achievement_Blocks
             * @static
             * @param {CMsgAMGetUserGameStatsResponse.Achievement_Blocks} message Achievement_Blocks
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            Achievement_Blocks.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.achievement_id = 0;
                    object.achievement_bit_id = 0;
                    object.unlock_time = 0;
                }
                if (message.achievement_id != null && message.hasOwnProperty("achievement_id"))
                    object.achievement_id = message.achievement_id;
                if (message.achievement_bit_id != null && message.hasOwnProperty("achievement_bit_id"))
                    object.achievement_bit_id = message.achievement_bit_id;
                if (message.unlock_time != null && message.hasOwnProperty("unlock_time"))
                    object.unlock_time = message.unlock_time;
                return object;
            };
    
            /**
             * Converts this Achievement_Blocks to JSON.
             * @function toJSON
             * @memberof CMsgAMGetUserGameStatsResponse.Achievement_Blocks
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            Achievement_Blocks.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return Achievement_Blocks;
        })();
    
        return CMsgAMGetUserGameStatsResponse;
    })();
    
    $root.CMsgGCGetCommandList = (function() {
    
        /**
         * Properties of a CMsgGCGetCommandList.
         * @exports ICMsgGCGetCommandList
         * @interface ICMsgGCGetCommandList
         * @property {number|null} [app_id] CMsgGCGetCommandList app_id
         * @property {string|null} [command_prefix] CMsgGCGetCommandList command_prefix
         */
    
        /**
         * Constructs a new CMsgGCGetCommandList.
         * @exports CMsgGCGetCommandList
         * @classdesc Represents a CMsgGCGetCommandList.
         * @implements ICMsgGCGetCommandList
         * @constructor
         * @param {ICMsgGCGetCommandList=} [properties] Properties to set
         */
        function CMsgGCGetCommandList(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCGetCommandList app_id.
         * @member {number} app_id
         * @memberof CMsgGCGetCommandList
         * @instance
         */
        CMsgGCGetCommandList.prototype.app_id = 0;
    
        /**
         * CMsgGCGetCommandList command_prefix.
         * @member {string} command_prefix
         * @memberof CMsgGCGetCommandList
         * @instance
         */
        CMsgGCGetCommandList.prototype.command_prefix = "";
    
        /**
         * Creates a new CMsgGCGetCommandList instance using the specified properties.
         * @function create
         * @memberof CMsgGCGetCommandList
         * @static
         * @param {ICMsgGCGetCommandList=} [properties] Properties to set
         * @returns {CMsgGCGetCommandList} CMsgGCGetCommandList instance
         */
        CMsgGCGetCommandList.create = function create(properties) {
            return new CMsgGCGetCommandList(properties);
        };
    
        /**
         * Encodes the specified CMsgGCGetCommandList message. Does not implicitly {@link CMsgGCGetCommandList.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCGetCommandList
         * @static
         * @param {ICMsgGCGetCommandList} message CMsgGCGetCommandList message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetCommandList.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.app_id != null && message.hasOwnProperty("app_id"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.app_id);
            if (message.command_prefix != null && message.hasOwnProperty("command_prefix"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.command_prefix);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCGetCommandList message, length delimited. Does not implicitly {@link CMsgGCGetCommandList.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCGetCommandList
         * @static
         * @param {ICMsgGCGetCommandList} message CMsgGCGetCommandList message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetCommandList.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCGetCommandList message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCGetCommandList
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCGetCommandList} CMsgGCGetCommandList
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetCommandList.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCGetCommandList();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.app_id = reader.uint32();
                    break;
                case 2:
                    message.command_prefix = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCGetCommandList message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCGetCommandList
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCGetCommandList} CMsgGCGetCommandList
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetCommandList.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCGetCommandList message.
         * @function verify
         * @memberof CMsgGCGetCommandList
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCGetCommandList.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.app_id != null && message.hasOwnProperty("app_id"))
                if (!$util.isInteger(message.app_id))
                    return "app_id: integer expected";
            if (message.command_prefix != null && message.hasOwnProperty("command_prefix"))
                if (!$util.isString(message.command_prefix))
                    return "command_prefix: string expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCGetCommandList message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCGetCommandList
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCGetCommandList} CMsgGCGetCommandList
         */
        CMsgGCGetCommandList.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCGetCommandList)
                return object;
            var message = new $root.CMsgGCGetCommandList();
            if (object.app_id != null)
                message.app_id = object.app_id >>> 0;
            if (object.command_prefix != null)
                message.command_prefix = String(object.command_prefix);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCGetCommandList message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCGetCommandList
         * @static
         * @param {CMsgGCGetCommandList} message CMsgGCGetCommandList
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCGetCommandList.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.app_id = 0;
                object.command_prefix = "";
            }
            if (message.app_id != null && message.hasOwnProperty("app_id"))
                object.app_id = message.app_id;
            if (message.command_prefix != null && message.hasOwnProperty("command_prefix"))
                object.command_prefix = message.command_prefix;
            return object;
        };
    
        /**
         * Converts this CMsgGCGetCommandList to JSON.
         * @function toJSON
         * @memberof CMsgGCGetCommandList
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCGetCommandList.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCGetCommandList;
    })();
    
    $root.CMsgGCGetCommandListResponse = (function() {
    
        /**
         * Properties of a CMsgGCGetCommandListResponse.
         * @exports ICMsgGCGetCommandListResponse
         * @interface ICMsgGCGetCommandListResponse
         * @property {Array.<string>|null} [command_name] CMsgGCGetCommandListResponse command_name
         */
    
        /**
         * Constructs a new CMsgGCGetCommandListResponse.
         * @exports CMsgGCGetCommandListResponse
         * @classdesc Represents a CMsgGCGetCommandListResponse.
         * @implements ICMsgGCGetCommandListResponse
         * @constructor
         * @param {ICMsgGCGetCommandListResponse=} [properties] Properties to set
         */
        function CMsgGCGetCommandListResponse(properties) {
            this.command_name = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCGetCommandListResponse command_name.
         * @member {Array.<string>} command_name
         * @memberof CMsgGCGetCommandListResponse
         * @instance
         */
        CMsgGCGetCommandListResponse.prototype.command_name = $util.emptyArray;
    
        /**
         * Creates a new CMsgGCGetCommandListResponse instance using the specified properties.
         * @function create
         * @memberof CMsgGCGetCommandListResponse
         * @static
         * @param {ICMsgGCGetCommandListResponse=} [properties] Properties to set
         * @returns {CMsgGCGetCommandListResponse} CMsgGCGetCommandListResponse instance
         */
        CMsgGCGetCommandListResponse.create = function create(properties) {
            return new CMsgGCGetCommandListResponse(properties);
        };
    
        /**
         * Encodes the specified CMsgGCGetCommandListResponse message. Does not implicitly {@link CMsgGCGetCommandListResponse.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCGetCommandListResponse
         * @static
         * @param {ICMsgGCGetCommandListResponse} message CMsgGCGetCommandListResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetCommandListResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.command_name != null && message.command_name.length)
                for (var i = 0; i < message.command_name.length; ++i)
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.command_name[i]);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCGetCommandListResponse message, length delimited. Does not implicitly {@link CMsgGCGetCommandListResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCGetCommandListResponse
         * @static
         * @param {ICMsgGCGetCommandListResponse} message CMsgGCGetCommandListResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetCommandListResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCGetCommandListResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCGetCommandListResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCGetCommandListResponse} CMsgGCGetCommandListResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetCommandListResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCGetCommandListResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.command_name && message.command_name.length))
                        message.command_name = [];
                    message.command_name.push(reader.string());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCGetCommandListResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCGetCommandListResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCGetCommandListResponse} CMsgGCGetCommandListResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetCommandListResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCGetCommandListResponse message.
         * @function verify
         * @memberof CMsgGCGetCommandListResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCGetCommandListResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.command_name != null && message.hasOwnProperty("command_name")) {
                if (!Array.isArray(message.command_name))
                    return "command_name: array expected";
                for (var i = 0; i < message.command_name.length; ++i)
                    if (!$util.isString(message.command_name[i]))
                        return "command_name: string[] expected";
            }
            return null;
        };
    
        /**
         * Creates a CMsgGCGetCommandListResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCGetCommandListResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCGetCommandListResponse} CMsgGCGetCommandListResponse
         */
        CMsgGCGetCommandListResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCGetCommandListResponse)
                return object;
            var message = new $root.CMsgGCGetCommandListResponse();
            if (object.command_name) {
                if (!Array.isArray(object.command_name))
                    throw TypeError(".CMsgGCGetCommandListResponse.command_name: array expected");
                message.command_name = [];
                for (var i = 0; i < object.command_name.length; ++i)
                    message.command_name[i] = String(object.command_name[i]);
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCGetCommandListResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCGetCommandListResponse
         * @static
         * @param {CMsgGCGetCommandListResponse} message CMsgGCGetCommandListResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCGetCommandListResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.command_name = [];
            if (message.command_name && message.command_name.length) {
                object.command_name = [];
                for (var j = 0; j < message.command_name.length; ++j)
                    object.command_name[j] = message.command_name[j];
            }
            return object;
        };
    
        /**
         * Converts this CMsgGCGetCommandListResponse to JSON.
         * @function toJSON
         * @memberof CMsgGCGetCommandListResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCGetCommandListResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCGetCommandListResponse;
    })();
    
    $root.CGCMsgMemCachedGet = (function() {
    
        /**
         * Properties of a CGCMsgMemCachedGet.
         * @exports ICGCMsgMemCachedGet
         * @interface ICGCMsgMemCachedGet
         * @property {Array.<string>|null} [keys] CGCMsgMemCachedGet keys
         */
    
        /**
         * Constructs a new CGCMsgMemCachedGet.
         * @exports CGCMsgMemCachedGet
         * @classdesc Represents a CGCMsgMemCachedGet.
         * @implements ICGCMsgMemCachedGet
         * @constructor
         * @param {ICGCMsgMemCachedGet=} [properties] Properties to set
         */
        function CGCMsgMemCachedGet(properties) {
            this.keys = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCMsgMemCachedGet keys.
         * @member {Array.<string>} keys
         * @memberof CGCMsgMemCachedGet
         * @instance
         */
        CGCMsgMemCachedGet.prototype.keys = $util.emptyArray;
    
        /**
         * Creates a new CGCMsgMemCachedGet instance using the specified properties.
         * @function create
         * @memberof CGCMsgMemCachedGet
         * @static
         * @param {ICGCMsgMemCachedGet=} [properties] Properties to set
         * @returns {CGCMsgMemCachedGet} CGCMsgMemCachedGet instance
         */
        CGCMsgMemCachedGet.create = function create(properties) {
            return new CGCMsgMemCachedGet(properties);
        };
    
        /**
         * Encodes the specified CGCMsgMemCachedGet message. Does not implicitly {@link CGCMsgMemCachedGet.verify|verify} messages.
         * @function encode
         * @memberof CGCMsgMemCachedGet
         * @static
         * @param {ICGCMsgMemCachedGet} message CGCMsgMemCachedGet message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgMemCachedGet.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.keys != null && message.keys.length)
                for (var i = 0; i < message.keys.length; ++i)
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.keys[i]);
            return writer;
        };
    
        /**
         * Encodes the specified CGCMsgMemCachedGet message, length delimited. Does not implicitly {@link CGCMsgMemCachedGet.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCMsgMemCachedGet
         * @static
         * @param {ICGCMsgMemCachedGet} message CGCMsgMemCachedGet message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgMemCachedGet.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCMsgMemCachedGet message from the specified reader or buffer.
         * @function decode
         * @memberof CGCMsgMemCachedGet
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCMsgMemCachedGet} CGCMsgMemCachedGet
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgMemCachedGet.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgMemCachedGet();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.keys && message.keys.length))
                        message.keys = [];
                    message.keys.push(reader.string());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCMsgMemCachedGet message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCMsgMemCachedGet
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCMsgMemCachedGet} CGCMsgMemCachedGet
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgMemCachedGet.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCMsgMemCachedGet message.
         * @function verify
         * @memberof CGCMsgMemCachedGet
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCMsgMemCachedGet.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.keys != null && message.hasOwnProperty("keys")) {
                if (!Array.isArray(message.keys))
                    return "keys: array expected";
                for (var i = 0; i < message.keys.length; ++i)
                    if (!$util.isString(message.keys[i]))
                        return "keys: string[] expected";
            }
            return null;
        };
    
        /**
         * Creates a CGCMsgMemCachedGet message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCMsgMemCachedGet
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCMsgMemCachedGet} CGCMsgMemCachedGet
         */
        CGCMsgMemCachedGet.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCMsgMemCachedGet)
                return object;
            var message = new $root.CGCMsgMemCachedGet();
            if (object.keys) {
                if (!Array.isArray(object.keys))
                    throw TypeError(".CGCMsgMemCachedGet.keys: array expected");
                message.keys = [];
                for (var i = 0; i < object.keys.length; ++i)
                    message.keys[i] = String(object.keys[i]);
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CGCMsgMemCachedGet message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCMsgMemCachedGet
         * @static
         * @param {CGCMsgMemCachedGet} message CGCMsgMemCachedGet
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCMsgMemCachedGet.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.keys = [];
            if (message.keys && message.keys.length) {
                object.keys = [];
                for (var j = 0; j < message.keys.length; ++j)
                    object.keys[j] = message.keys[j];
            }
            return object;
        };
    
        /**
         * Converts this CGCMsgMemCachedGet to JSON.
         * @function toJSON
         * @memberof CGCMsgMemCachedGet
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCMsgMemCachedGet.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCMsgMemCachedGet;
    })();
    
    $root.CGCMsgMemCachedGetResponse = (function() {
    
        /**
         * Properties of a CGCMsgMemCachedGetResponse.
         * @exports ICGCMsgMemCachedGetResponse
         * @interface ICGCMsgMemCachedGetResponse
         * @property {Array.<CGCMsgMemCachedGetResponse.IValueTag>|null} [values] CGCMsgMemCachedGetResponse values
         */
    
        /**
         * Constructs a new CGCMsgMemCachedGetResponse.
         * @exports CGCMsgMemCachedGetResponse
         * @classdesc Represents a CGCMsgMemCachedGetResponse.
         * @implements ICGCMsgMemCachedGetResponse
         * @constructor
         * @param {ICGCMsgMemCachedGetResponse=} [properties] Properties to set
         */
        function CGCMsgMemCachedGetResponse(properties) {
            this.values = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCMsgMemCachedGetResponse values.
         * @member {Array.<CGCMsgMemCachedGetResponse.IValueTag>} values
         * @memberof CGCMsgMemCachedGetResponse
         * @instance
         */
        CGCMsgMemCachedGetResponse.prototype.values = $util.emptyArray;
    
        /**
         * Creates a new CGCMsgMemCachedGetResponse instance using the specified properties.
         * @function create
         * @memberof CGCMsgMemCachedGetResponse
         * @static
         * @param {ICGCMsgMemCachedGetResponse=} [properties] Properties to set
         * @returns {CGCMsgMemCachedGetResponse} CGCMsgMemCachedGetResponse instance
         */
        CGCMsgMemCachedGetResponse.create = function create(properties) {
            return new CGCMsgMemCachedGetResponse(properties);
        };
    
        /**
         * Encodes the specified CGCMsgMemCachedGetResponse message. Does not implicitly {@link CGCMsgMemCachedGetResponse.verify|verify} messages.
         * @function encode
         * @memberof CGCMsgMemCachedGetResponse
         * @static
         * @param {ICGCMsgMemCachedGetResponse} message CGCMsgMemCachedGetResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgMemCachedGetResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.values != null && message.values.length)
                for (var i = 0; i < message.values.length; ++i)
                    $root.CGCMsgMemCachedGetResponse.ValueTag.encode(message.values[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CGCMsgMemCachedGetResponse message, length delimited. Does not implicitly {@link CGCMsgMemCachedGetResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCMsgMemCachedGetResponse
         * @static
         * @param {ICGCMsgMemCachedGetResponse} message CGCMsgMemCachedGetResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgMemCachedGetResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCMsgMemCachedGetResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CGCMsgMemCachedGetResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCMsgMemCachedGetResponse} CGCMsgMemCachedGetResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgMemCachedGetResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgMemCachedGetResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.values && message.values.length))
                        message.values = [];
                    message.values.push($root.CGCMsgMemCachedGetResponse.ValueTag.decode(reader, reader.uint32()));
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCMsgMemCachedGetResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCMsgMemCachedGetResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCMsgMemCachedGetResponse} CGCMsgMemCachedGetResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgMemCachedGetResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCMsgMemCachedGetResponse message.
         * @function verify
         * @memberof CGCMsgMemCachedGetResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCMsgMemCachedGetResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.values != null && message.hasOwnProperty("values")) {
                if (!Array.isArray(message.values))
                    return "values: array expected";
                for (var i = 0; i < message.values.length; ++i) {
                    var error = $root.CGCMsgMemCachedGetResponse.ValueTag.verify(message.values[i]);
                    if (error)
                        return "values." + error;
                }
            }
            return null;
        };
    
        /**
         * Creates a CGCMsgMemCachedGetResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCMsgMemCachedGetResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCMsgMemCachedGetResponse} CGCMsgMemCachedGetResponse
         */
        CGCMsgMemCachedGetResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCMsgMemCachedGetResponse)
                return object;
            var message = new $root.CGCMsgMemCachedGetResponse();
            if (object.values) {
                if (!Array.isArray(object.values))
                    throw TypeError(".CGCMsgMemCachedGetResponse.values: array expected");
                message.values = [];
                for (var i = 0; i < object.values.length; ++i) {
                    if (typeof object.values[i] !== "object")
                        throw TypeError(".CGCMsgMemCachedGetResponse.values: object expected");
                    message.values[i] = $root.CGCMsgMemCachedGetResponse.ValueTag.fromObject(object.values[i]);
                }
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CGCMsgMemCachedGetResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCMsgMemCachedGetResponse
         * @static
         * @param {CGCMsgMemCachedGetResponse} message CGCMsgMemCachedGetResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCMsgMemCachedGetResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.values = [];
            if (message.values && message.values.length) {
                object.values = [];
                for (var j = 0; j < message.values.length; ++j)
                    object.values[j] = $root.CGCMsgMemCachedGetResponse.ValueTag.toObject(message.values[j], options);
            }
            return object;
        };
    
        /**
         * Converts this CGCMsgMemCachedGetResponse to JSON.
         * @function toJSON
         * @memberof CGCMsgMemCachedGetResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCMsgMemCachedGetResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CGCMsgMemCachedGetResponse.ValueTag = (function() {
    
            /**
             * Properties of a ValueTag.
             * @memberof CGCMsgMemCachedGetResponse
             * @interface IValueTag
             * @property {boolean|null} [found] ValueTag found
             * @property {Uint8Array|null} [value] ValueTag value
             */
    
            /**
             * Constructs a new ValueTag.
             * @memberof CGCMsgMemCachedGetResponse
             * @classdesc Represents a ValueTag.
             * @implements IValueTag
             * @constructor
             * @param {CGCMsgMemCachedGetResponse.IValueTag=} [properties] Properties to set
             */
            function ValueTag(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * ValueTag found.
             * @member {boolean} found
             * @memberof CGCMsgMemCachedGetResponse.ValueTag
             * @instance
             */
            ValueTag.prototype.found = false;
    
            /**
             * ValueTag value.
             * @member {Uint8Array} value
             * @memberof CGCMsgMemCachedGetResponse.ValueTag
             * @instance
             */
            ValueTag.prototype.value = $util.newBuffer([]);
    
            /**
             * Creates a new ValueTag instance using the specified properties.
             * @function create
             * @memberof CGCMsgMemCachedGetResponse.ValueTag
             * @static
             * @param {CGCMsgMemCachedGetResponse.IValueTag=} [properties] Properties to set
             * @returns {CGCMsgMemCachedGetResponse.ValueTag} ValueTag instance
             */
            ValueTag.create = function create(properties) {
                return new ValueTag(properties);
            };
    
            /**
             * Encodes the specified ValueTag message. Does not implicitly {@link CGCMsgMemCachedGetResponse.ValueTag.verify|verify} messages.
             * @function encode
             * @memberof CGCMsgMemCachedGetResponse.ValueTag
             * @static
             * @param {CGCMsgMemCachedGetResponse.IValueTag} message ValueTag message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            ValueTag.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.found != null && message.hasOwnProperty("found"))
                    writer.uint32(/* id 1, wireType 0 =*/8).bool(message.found);
                if (message.value != null && message.hasOwnProperty("value"))
                    writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.value);
                return writer;
            };
    
            /**
             * Encodes the specified ValueTag message, length delimited. Does not implicitly {@link CGCMsgMemCachedGetResponse.ValueTag.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CGCMsgMemCachedGetResponse.ValueTag
             * @static
             * @param {CGCMsgMemCachedGetResponse.IValueTag} message ValueTag message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            ValueTag.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a ValueTag message from the specified reader or buffer.
             * @function decode
             * @memberof CGCMsgMemCachedGetResponse.ValueTag
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CGCMsgMemCachedGetResponse.ValueTag} ValueTag
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            ValueTag.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgMemCachedGetResponse.ValueTag();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.found = reader.bool();
                        break;
                    case 2:
                        message.value = reader.bytes();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a ValueTag message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CGCMsgMemCachedGetResponse.ValueTag
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CGCMsgMemCachedGetResponse.ValueTag} ValueTag
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            ValueTag.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a ValueTag message.
             * @function verify
             * @memberof CGCMsgMemCachedGetResponse.ValueTag
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            ValueTag.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.found != null && message.hasOwnProperty("found"))
                    if (typeof message.found !== "boolean")
                        return "found: boolean expected";
                if (message.value != null && message.hasOwnProperty("value"))
                    if (!(message.value && typeof message.value.length === "number" || $util.isString(message.value)))
                        return "value: buffer expected";
                return null;
            };
    
            /**
             * Creates a ValueTag message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CGCMsgMemCachedGetResponse.ValueTag
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CGCMsgMemCachedGetResponse.ValueTag} ValueTag
             */
            ValueTag.fromObject = function fromObject(object) {
                if (object instanceof $root.CGCMsgMemCachedGetResponse.ValueTag)
                    return object;
                var message = new $root.CGCMsgMemCachedGetResponse.ValueTag();
                if (object.found != null)
                    message.found = Boolean(object.found);
                if (object.value != null)
                    if (typeof object.value === "string")
                        $util.base64.decode(object.value, message.value = $util.newBuffer($util.base64.length(object.value)), 0);
                    else if (object.value.length)
                        message.value = object.value;
                return message;
            };
    
            /**
             * Creates a plain object from a ValueTag message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CGCMsgMemCachedGetResponse.ValueTag
             * @static
             * @param {CGCMsgMemCachedGetResponse.ValueTag} message ValueTag
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            ValueTag.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.found = false;
                    if (options.bytes === String)
                        object.value = "";
                    else {
                        object.value = [];
                        if (options.bytes !== Array)
                            object.value = $util.newBuffer(object.value);
                    }
                }
                if (message.found != null && message.hasOwnProperty("found"))
                    object.found = message.found;
                if (message.value != null && message.hasOwnProperty("value"))
                    object.value = options.bytes === String ? $util.base64.encode(message.value, 0, message.value.length) : options.bytes === Array ? Array.prototype.slice.call(message.value) : message.value;
                return object;
            };
    
            /**
             * Converts this ValueTag to JSON.
             * @function toJSON
             * @memberof CGCMsgMemCachedGetResponse.ValueTag
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            ValueTag.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return ValueTag;
        })();
    
        return CGCMsgMemCachedGetResponse;
    })();
    
    $root.CGCMsgMemCachedSet = (function() {
    
        /**
         * Properties of a CGCMsgMemCachedSet.
         * @exports ICGCMsgMemCachedSet
         * @interface ICGCMsgMemCachedSet
         * @property {Array.<CGCMsgMemCachedSet.IKeyPair>|null} [keys] CGCMsgMemCachedSet keys
         */
    
        /**
         * Constructs a new CGCMsgMemCachedSet.
         * @exports CGCMsgMemCachedSet
         * @classdesc Represents a CGCMsgMemCachedSet.
         * @implements ICGCMsgMemCachedSet
         * @constructor
         * @param {ICGCMsgMemCachedSet=} [properties] Properties to set
         */
        function CGCMsgMemCachedSet(properties) {
            this.keys = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCMsgMemCachedSet keys.
         * @member {Array.<CGCMsgMemCachedSet.IKeyPair>} keys
         * @memberof CGCMsgMemCachedSet
         * @instance
         */
        CGCMsgMemCachedSet.prototype.keys = $util.emptyArray;
    
        /**
         * Creates a new CGCMsgMemCachedSet instance using the specified properties.
         * @function create
         * @memberof CGCMsgMemCachedSet
         * @static
         * @param {ICGCMsgMemCachedSet=} [properties] Properties to set
         * @returns {CGCMsgMemCachedSet} CGCMsgMemCachedSet instance
         */
        CGCMsgMemCachedSet.create = function create(properties) {
            return new CGCMsgMemCachedSet(properties);
        };
    
        /**
         * Encodes the specified CGCMsgMemCachedSet message. Does not implicitly {@link CGCMsgMemCachedSet.verify|verify} messages.
         * @function encode
         * @memberof CGCMsgMemCachedSet
         * @static
         * @param {ICGCMsgMemCachedSet} message CGCMsgMemCachedSet message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgMemCachedSet.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.keys != null && message.keys.length)
                for (var i = 0; i < message.keys.length; ++i)
                    $root.CGCMsgMemCachedSet.KeyPair.encode(message.keys[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CGCMsgMemCachedSet message, length delimited. Does not implicitly {@link CGCMsgMemCachedSet.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCMsgMemCachedSet
         * @static
         * @param {ICGCMsgMemCachedSet} message CGCMsgMemCachedSet message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgMemCachedSet.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCMsgMemCachedSet message from the specified reader or buffer.
         * @function decode
         * @memberof CGCMsgMemCachedSet
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCMsgMemCachedSet} CGCMsgMemCachedSet
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgMemCachedSet.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgMemCachedSet();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.keys && message.keys.length))
                        message.keys = [];
                    message.keys.push($root.CGCMsgMemCachedSet.KeyPair.decode(reader, reader.uint32()));
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCMsgMemCachedSet message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCMsgMemCachedSet
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCMsgMemCachedSet} CGCMsgMemCachedSet
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgMemCachedSet.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCMsgMemCachedSet message.
         * @function verify
         * @memberof CGCMsgMemCachedSet
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCMsgMemCachedSet.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.keys != null && message.hasOwnProperty("keys")) {
                if (!Array.isArray(message.keys))
                    return "keys: array expected";
                for (var i = 0; i < message.keys.length; ++i) {
                    var error = $root.CGCMsgMemCachedSet.KeyPair.verify(message.keys[i]);
                    if (error)
                        return "keys." + error;
                }
            }
            return null;
        };
    
        /**
         * Creates a CGCMsgMemCachedSet message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCMsgMemCachedSet
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCMsgMemCachedSet} CGCMsgMemCachedSet
         */
        CGCMsgMemCachedSet.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCMsgMemCachedSet)
                return object;
            var message = new $root.CGCMsgMemCachedSet();
            if (object.keys) {
                if (!Array.isArray(object.keys))
                    throw TypeError(".CGCMsgMemCachedSet.keys: array expected");
                message.keys = [];
                for (var i = 0; i < object.keys.length; ++i) {
                    if (typeof object.keys[i] !== "object")
                        throw TypeError(".CGCMsgMemCachedSet.keys: object expected");
                    message.keys[i] = $root.CGCMsgMemCachedSet.KeyPair.fromObject(object.keys[i]);
                }
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CGCMsgMemCachedSet message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCMsgMemCachedSet
         * @static
         * @param {CGCMsgMemCachedSet} message CGCMsgMemCachedSet
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCMsgMemCachedSet.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.keys = [];
            if (message.keys && message.keys.length) {
                object.keys = [];
                for (var j = 0; j < message.keys.length; ++j)
                    object.keys[j] = $root.CGCMsgMemCachedSet.KeyPair.toObject(message.keys[j], options);
            }
            return object;
        };
    
        /**
         * Converts this CGCMsgMemCachedSet to JSON.
         * @function toJSON
         * @memberof CGCMsgMemCachedSet
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCMsgMemCachedSet.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CGCMsgMemCachedSet.KeyPair = (function() {
    
            /**
             * Properties of a KeyPair.
             * @memberof CGCMsgMemCachedSet
             * @interface IKeyPair
             * @property {string|null} [name] KeyPair name
             * @property {Uint8Array|null} [value] KeyPair value
             */
    
            /**
             * Constructs a new KeyPair.
             * @memberof CGCMsgMemCachedSet
             * @classdesc Represents a KeyPair.
             * @implements IKeyPair
             * @constructor
             * @param {CGCMsgMemCachedSet.IKeyPair=} [properties] Properties to set
             */
            function KeyPair(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * KeyPair name.
             * @member {string} name
             * @memberof CGCMsgMemCachedSet.KeyPair
             * @instance
             */
            KeyPair.prototype.name = "";
    
            /**
             * KeyPair value.
             * @member {Uint8Array} value
             * @memberof CGCMsgMemCachedSet.KeyPair
             * @instance
             */
            KeyPair.prototype.value = $util.newBuffer([]);
    
            /**
             * Creates a new KeyPair instance using the specified properties.
             * @function create
             * @memberof CGCMsgMemCachedSet.KeyPair
             * @static
             * @param {CGCMsgMemCachedSet.IKeyPair=} [properties] Properties to set
             * @returns {CGCMsgMemCachedSet.KeyPair} KeyPair instance
             */
            KeyPair.create = function create(properties) {
                return new KeyPair(properties);
            };
    
            /**
             * Encodes the specified KeyPair message. Does not implicitly {@link CGCMsgMemCachedSet.KeyPair.verify|verify} messages.
             * @function encode
             * @memberof CGCMsgMemCachedSet.KeyPair
             * @static
             * @param {CGCMsgMemCachedSet.IKeyPair} message KeyPair message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            KeyPair.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.name != null && message.hasOwnProperty("name"))
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
                if (message.value != null && message.hasOwnProperty("value"))
                    writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.value);
                return writer;
            };
    
            /**
             * Encodes the specified KeyPair message, length delimited. Does not implicitly {@link CGCMsgMemCachedSet.KeyPair.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CGCMsgMemCachedSet.KeyPair
             * @static
             * @param {CGCMsgMemCachedSet.IKeyPair} message KeyPair message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            KeyPair.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a KeyPair message from the specified reader or buffer.
             * @function decode
             * @memberof CGCMsgMemCachedSet.KeyPair
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CGCMsgMemCachedSet.KeyPair} KeyPair
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            KeyPair.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgMemCachedSet.KeyPair();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.name = reader.string();
                        break;
                    case 2:
                        message.value = reader.bytes();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a KeyPair message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CGCMsgMemCachedSet.KeyPair
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CGCMsgMemCachedSet.KeyPair} KeyPair
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            KeyPair.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a KeyPair message.
             * @function verify
             * @memberof CGCMsgMemCachedSet.KeyPair
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            KeyPair.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.name != null && message.hasOwnProperty("name"))
                    if (!$util.isString(message.name))
                        return "name: string expected";
                if (message.value != null && message.hasOwnProperty("value"))
                    if (!(message.value && typeof message.value.length === "number" || $util.isString(message.value)))
                        return "value: buffer expected";
                return null;
            };
    
            /**
             * Creates a KeyPair message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CGCMsgMemCachedSet.KeyPair
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CGCMsgMemCachedSet.KeyPair} KeyPair
             */
            KeyPair.fromObject = function fromObject(object) {
                if (object instanceof $root.CGCMsgMemCachedSet.KeyPair)
                    return object;
                var message = new $root.CGCMsgMemCachedSet.KeyPair();
                if (object.name != null)
                    message.name = String(object.name);
                if (object.value != null)
                    if (typeof object.value === "string")
                        $util.base64.decode(object.value, message.value = $util.newBuffer($util.base64.length(object.value)), 0);
                    else if (object.value.length)
                        message.value = object.value;
                return message;
            };
    
            /**
             * Creates a plain object from a KeyPair message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CGCMsgMemCachedSet.KeyPair
             * @static
             * @param {CGCMsgMemCachedSet.KeyPair} message KeyPair
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            KeyPair.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.name = "";
                    if (options.bytes === String)
                        object.value = "";
                    else {
                        object.value = [];
                        if (options.bytes !== Array)
                            object.value = $util.newBuffer(object.value);
                    }
                }
                if (message.name != null && message.hasOwnProperty("name"))
                    object.name = message.name;
                if (message.value != null && message.hasOwnProperty("value"))
                    object.value = options.bytes === String ? $util.base64.encode(message.value, 0, message.value.length) : options.bytes === Array ? Array.prototype.slice.call(message.value) : message.value;
                return object;
            };
    
            /**
             * Converts this KeyPair to JSON.
             * @function toJSON
             * @memberof CGCMsgMemCachedSet.KeyPair
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            KeyPair.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return KeyPair;
        })();
    
        return CGCMsgMemCachedSet;
    })();
    
    $root.CGCMsgMemCachedDelete = (function() {
    
        /**
         * Properties of a CGCMsgMemCachedDelete.
         * @exports ICGCMsgMemCachedDelete
         * @interface ICGCMsgMemCachedDelete
         * @property {Array.<string>|null} [keys] CGCMsgMemCachedDelete keys
         */
    
        /**
         * Constructs a new CGCMsgMemCachedDelete.
         * @exports CGCMsgMemCachedDelete
         * @classdesc Represents a CGCMsgMemCachedDelete.
         * @implements ICGCMsgMemCachedDelete
         * @constructor
         * @param {ICGCMsgMemCachedDelete=} [properties] Properties to set
         */
        function CGCMsgMemCachedDelete(properties) {
            this.keys = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCMsgMemCachedDelete keys.
         * @member {Array.<string>} keys
         * @memberof CGCMsgMemCachedDelete
         * @instance
         */
        CGCMsgMemCachedDelete.prototype.keys = $util.emptyArray;
    
        /**
         * Creates a new CGCMsgMemCachedDelete instance using the specified properties.
         * @function create
         * @memberof CGCMsgMemCachedDelete
         * @static
         * @param {ICGCMsgMemCachedDelete=} [properties] Properties to set
         * @returns {CGCMsgMemCachedDelete} CGCMsgMemCachedDelete instance
         */
        CGCMsgMemCachedDelete.create = function create(properties) {
            return new CGCMsgMemCachedDelete(properties);
        };
    
        /**
         * Encodes the specified CGCMsgMemCachedDelete message. Does not implicitly {@link CGCMsgMemCachedDelete.verify|verify} messages.
         * @function encode
         * @memberof CGCMsgMemCachedDelete
         * @static
         * @param {ICGCMsgMemCachedDelete} message CGCMsgMemCachedDelete message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgMemCachedDelete.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.keys != null && message.keys.length)
                for (var i = 0; i < message.keys.length; ++i)
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.keys[i]);
            return writer;
        };
    
        /**
         * Encodes the specified CGCMsgMemCachedDelete message, length delimited. Does not implicitly {@link CGCMsgMemCachedDelete.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCMsgMemCachedDelete
         * @static
         * @param {ICGCMsgMemCachedDelete} message CGCMsgMemCachedDelete message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgMemCachedDelete.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCMsgMemCachedDelete message from the specified reader or buffer.
         * @function decode
         * @memberof CGCMsgMemCachedDelete
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCMsgMemCachedDelete} CGCMsgMemCachedDelete
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgMemCachedDelete.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgMemCachedDelete();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.keys && message.keys.length))
                        message.keys = [];
                    message.keys.push(reader.string());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCMsgMemCachedDelete message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCMsgMemCachedDelete
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCMsgMemCachedDelete} CGCMsgMemCachedDelete
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgMemCachedDelete.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCMsgMemCachedDelete message.
         * @function verify
         * @memberof CGCMsgMemCachedDelete
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCMsgMemCachedDelete.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.keys != null && message.hasOwnProperty("keys")) {
                if (!Array.isArray(message.keys))
                    return "keys: array expected";
                for (var i = 0; i < message.keys.length; ++i)
                    if (!$util.isString(message.keys[i]))
                        return "keys: string[] expected";
            }
            return null;
        };
    
        /**
         * Creates a CGCMsgMemCachedDelete message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCMsgMemCachedDelete
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCMsgMemCachedDelete} CGCMsgMemCachedDelete
         */
        CGCMsgMemCachedDelete.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCMsgMemCachedDelete)
                return object;
            var message = new $root.CGCMsgMemCachedDelete();
            if (object.keys) {
                if (!Array.isArray(object.keys))
                    throw TypeError(".CGCMsgMemCachedDelete.keys: array expected");
                message.keys = [];
                for (var i = 0; i < object.keys.length; ++i)
                    message.keys[i] = String(object.keys[i]);
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CGCMsgMemCachedDelete message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCMsgMemCachedDelete
         * @static
         * @param {CGCMsgMemCachedDelete} message CGCMsgMemCachedDelete
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCMsgMemCachedDelete.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.keys = [];
            if (message.keys && message.keys.length) {
                object.keys = [];
                for (var j = 0; j < message.keys.length; ++j)
                    object.keys[j] = message.keys[j];
            }
            return object;
        };
    
        /**
         * Converts this CGCMsgMemCachedDelete to JSON.
         * @function toJSON
         * @memberof CGCMsgMemCachedDelete
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCMsgMemCachedDelete.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCMsgMemCachedDelete;
    })();
    
    $root.CGCMsgMemCachedStats = (function() {
    
        /**
         * Properties of a CGCMsgMemCachedStats.
         * @exports ICGCMsgMemCachedStats
         * @interface ICGCMsgMemCachedStats
         */
    
        /**
         * Constructs a new CGCMsgMemCachedStats.
         * @exports CGCMsgMemCachedStats
         * @classdesc Represents a CGCMsgMemCachedStats.
         * @implements ICGCMsgMemCachedStats
         * @constructor
         * @param {ICGCMsgMemCachedStats=} [properties] Properties to set
         */
        function CGCMsgMemCachedStats(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * Creates a new CGCMsgMemCachedStats instance using the specified properties.
         * @function create
         * @memberof CGCMsgMemCachedStats
         * @static
         * @param {ICGCMsgMemCachedStats=} [properties] Properties to set
         * @returns {CGCMsgMemCachedStats} CGCMsgMemCachedStats instance
         */
        CGCMsgMemCachedStats.create = function create(properties) {
            return new CGCMsgMemCachedStats(properties);
        };
    
        /**
         * Encodes the specified CGCMsgMemCachedStats message. Does not implicitly {@link CGCMsgMemCachedStats.verify|verify} messages.
         * @function encode
         * @memberof CGCMsgMemCachedStats
         * @static
         * @param {ICGCMsgMemCachedStats} message CGCMsgMemCachedStats message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgMemCachedStats.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };
    
        /**
         * Encodes the specified CGCMsgMemCachedStats message, length delimited. Does not implicitly {@link CGCMsgMemCachedStats.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCMsgMemCachedStats
         * @static
         * @param {ICGCMsgMemCachedStats} message CGCMsgMemCachedStats message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgMemCachedStats.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCMsgMemCachedStats message from the specified reader or buffer.
         * @function decode
         * @memberof CGCMsgMemCachedStats
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCMsgMemCachedStats} CGCMsgMemCachedStats
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgMemCachedStats.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgMemCachedStats();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCMsgMemCachedStats message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCMsgMemCachedStats
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCMsgMemCachedStats} CGCMsgMemCachedStats
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgMemCachedStats.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCMsgMemCachedStats message.
         * @function verify
         * @memberof CGCMsgMemCachedStats
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCMsgMemCachedStats.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };
    
        /**
         * Creates a CGCMsgMemCachedStats message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCMsgMemCachedStats
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCMsgMemCachedStats} CGCMsgMemCachedStats
         */
        CGCMsgMemCachedStats.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCMsgMemCachedStats)
                return object;
            return new $root.CGCMsgMemCachedStats();
        };
    
        /**
         * Creates a plain object from a CGCMsgMemCachedStats message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCMsgMemCachedStats
         * @static
         * @param {CGCMsgMemCachedStats} message CGCMsgMemCachedStats
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCMsgMemCachedStats.toObject = function toObject() {
            return {};
        };
    
        /**
         * Converts this CGCMsgMemCachedStats to JSON.
         * @function toJSON
         * @memberof CGCMsgMemCachedStats
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCMsgMemCachedStats.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCMsgMemCachedStats;
    })();
    
    $root.CGCMsgMemCachedStatsResponse = (function() {
    
        /**
         * Properties of a CGCMsgMemCachedStatsResponse.
         * @exports ICGCMsgMemCachedStatsResponse
         * @interface ICGCMsgMemCachedStatsResponse
         * @property {number|Long|null} [curr_connections] CGCMsgMemCachedStatsResponse curr_connections
         * @property {number|Long|null} [cmd_get] CGCMsgMemCachedStatsResponse cmd_get
         * @property {number|Long|null} [cmd_set] CGCMsgMemCachedStatsResponse cmd_set
         * @property {number|Long|null} [cmd_flush] CGCMsgMemCachedStatsResponse cmd_flush
         * @property {number|Long|null} [get_hits] CGCMsgMemCachedStatsResponse get_hits
         * @property {number|Long|null} [get_misses] CGCMsgMemCachedStatsResponse get_misses
         * @property {number|Long|null} [delete_hits] CGCMsgMemCachedStatsResponse delete_hits
         * @property {number|Long|null} [delete_misses] CGCMsgMemCachedStatsResponse delete_misses
         * @property {number|Long|null} [bytes_read] CGCMsgMemCachedStatsResponse bytes_read
         * @property {number|Long|null} [bytes_written] CGCMsgMemCachedStatsResponse bytes_written
         * @property {number|Long|null} [limit_maxbytes] CGCMsgMemCachedStatsResponse limit_maxbytes
         * @property {number|Long|null} [curr_items] CGCMsgMemCachedStatsResponse curr_items
         * @property {number|Long|null} [evictions] CGCMsgMemCachedStatsResponse evictions
         * @property {number|Long|null} [bytes] CGCMsgMemCachedStatsResponse bytes
         */
    
        /**
         * Constructs a new CGCMsgMemCachedStatsResponse.
         * @exports CGCMsgMemCachedStatsResponse
         * @classdesc Represents a CGCMsgMemCachedStatsResponse.
         * @implements ICGCMsgMemCachedStatsResponse
         * @constructor
         * @param {ICGCMsgMemCachedStatsResponse=} [properties] Properties to set
         */
        function CGCMsgMemCachedStatsResponse(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCMsgMemCachedStatsResponse curr_connections.
         * @member {number|Long} curr_connections
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.curr_connections = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCMsgMemCachedStatsResponse cmd_get.
         * @member {number|Long} cmd_get
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.cmd_get = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCMsgMemCachedStatsResponse cmd_set.
         * @member {number|Long} cmd_set
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.cmd_set = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCMsgMemCachedStatsResponse cmd_flush.
         * @member {number|Long} cmd_flush
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.cmd_flush = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCMsgMemCachedStatsResponse get_hits.
         * @member {number|Long} get_hits
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.get_hits = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCMsgMemCachedStatsResponse get_misses.
         * @member {number|Long} get_misses
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.get_misses = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCMsgMemCachedStatsResponse delete_hits.
         * @member {number|Long} delete_hits
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.delete_hits = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCMsgMemCachedStatsResponse delete_misses.
         * @member {number|Long} delete_misses
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.delete_misses = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCMsgMemCachedStatsResponse bytes_read.
         * @member {number|Long} bytes_read
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.bytes_read = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCMsgMemCachedStatsResponse bytes_written.
         * @member {number|Long} bytes_written
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.bytes_written = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCMsgMemCachedStatsResponse limit_maxbytes.
         * @member {number|Long} limit_maxbytes
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.limit_maxbytes = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCMsgMemCachedStatsResponse curr_items.
         * @member {number|Long} curr_items
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.curr_items = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCMsgMemCachedStatsResponse evictions.
         * @member {number|Long} evictions
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.evictions = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCMsgMemCachedStatsResponse bytes.
         * @member {number|Long} bytes
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         */
        CGCMsgMemCachedStatsResponse.prototype.bytes = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * Creates a new CGCMsgMemCachedStatsResponse instance using the specified properties.
         * @function create
         * @memberof CGCMsgMemCachedStatsResponse
         * @static
         * @param {ICGCMsgMemCachedStatsResponse=} [properties] Properties to set
         * @returns {CGCMsgMemCachedStatsResponse} CGCMsgMemCachedStatsResponse instance
         */
        CGCMsgMemCachedStatsResponse.create = function create(properties) {
            return new CGCMsgMemCachedStatsResponse(properties);
        };
    
        /**
         * Encodes the specified CGCMsgMemCachedStatsResponse message. Does not implicitly {@link CGCMsgMemCachedStatsResponse.verify|verify} messages.
         * @function encode
         * @memberof CGCMsgMemCachedStatsResponse
         * @static
         * @param {ICGCMsgMemCachedStatsResponse} message CGCMsgMemCachedStatsResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgMemCachedStatsResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.curr_connections != null && message.hasOwnProperty("curr_connections"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.curr_connections);
            if (message.cmd_get != null && message.hasOwnProperty("cmd_get"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint64(message.cmd_get);
            if (message.cmd_set != null && message.hasOwnProperty("cmd_set"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint64(message.cmd_set);
            if (message.cmd_flush != null && message.hasOwnProperty("cmd_flush"))
                writer.uint32(/* id 4, wireType 0 =*/32).uint64(message.cmd_flush);
            if (message.get_hits != null && message.hasOwnProperty("get_hits"))
                writer.uint32(/* id 5, wireType 0 =*/40).uint64(message.get_hits);
            if (message.get_misses != null && message.hasOwnProperty("get_misses"))
                writer.uint32(/* id 6, wireType 0 =*/48).uint64(message.get_misses);
            if (message.delete_hits != null && message.hasOwnProperty("delete_hits"))
                writer.uint32(/* id 7, wireType 0 =*/56).uint64(message.delete_hits);
            if (message.delete_misses != null && message.hasOwnProperty("delete_misses"))
                writer.uint32(/* id 8, wireType 0 =*/64).uint64(message.delete_misses);
            if (message.bytes_read != null && message.hasOwnProperty("bytes_read"))
                writer.uint32(/* id 9, wireType 0 =*/72).uint64(message.bytes_read);
            if (message.bytes_written != null && message.hasOwnProperty("bytes_written"))
                writer.uint32(/* id 10, wireType 0 =*/80).uint64(message.bytes_written);
            if (message.limit_maxbytes != null && message.hasOwnProperty("limit_maxbytes"))
                writer.uint32(/* id 11, wireType 0 =*/88).uint64(message.limit_maxbytes);
            if (message.curr_items != null && message.hasOwnProperty("curr_items"))
                writer.uint32(/* id 12, wireType 0 =*/96).uint64(message.curr_items);
            if (message.evictions != null && message.hasOwnProperty("evictions"))
                writer.uint32(/* id 13, wireType 0 =*/104).uint64(message.evictions);
            if (message.bytes != null && message.hasOwnProperty("bytes"))
                writer.uint32(/* id 14, wireType 0 =*/112).uint64(message.bytes);
            return writer;
        };
    
        /**
         * Encodes the specified CGCMsgMemCachedStatsResponse message, length delimited. Does not implicitly {@link CGCMsgMemCachedStatsResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCMsgMemCachedStatsResponse
         * @static
         * @param {ICGCMsgMemCachedStatsResponse} message CGCMsgMemCachedStatsResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgMemCachedStatsResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCMsgMemCachedStatsResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CGCMsgMemCachedStatsResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCMsgMemCachedStatsResponse} CGCMsgMemCachedStatsResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgMemCachedStatsResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgMemCachedStatsResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.curr_connections = reader.uint64();
                    break;
                case 2:
                    message.cmd_get = reader.uint64();
                    break;
                case 3:
                    message.cmd_set = reader.uint64();
                    break;
                case 4:
                    message.cmd_flush = reader.uint64();
                    break;
                case 5:
                    message.get_hits = reader.uint64();
                    break;
                case 6:
                    message.get_misses = reader.uint64();
                    break;
                case 7:
                    message.delete_hits = reader.uint64();
                    break;
                case 8:
                    message.delete_misses = reader.uint64();
                    break;
                case 9:
                    message.bytes_read = reader.uint64();
                    break;
                case 10:
                    message.bytes_written = reader.uint64();
                    break;
                case 11:
                    message.limit_maxbytes = reader.uint64();
                    break;
                case 12:
                    message.curr_items = reader.uint64();
                    break;
                case 13:
                    message.evictions = reader.uint64();
                    break;
                case 14:
                    message.bytes = reader.uint64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCMsgMemCachedStatsResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCMsgMemCachedStatsResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCMsgMemCachedStatsResponse} CGCMsgMemCachedStatsResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgMemCachedStatsResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCMsgMemCachedStatsResponse message.
         * @function verify
         * @memberof CGCMsgMemCachedStatsResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCMsgMemCachedStatsResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.curr_connections != null && message.hasOwnProperty("curr_connections"))
                if (!$util.isInteger(message.curr_connections) && !(message.curr_connections && $util.isInteger(message.curr_connections.low) && $util.isInteger(message.curr_connections.high)))
                    return "curr_connections: integer|Long expected";
            if (message.cmd_get != null && message.hasOwnProperty("cmd_get"))
                if (!$util.isInteger(message.cmd_get) && !(message.cmd_get && $util.isInteger(message.cmd_get.low) && $util.isInteger(message.cmd_get.high)))
                    return "cmd_get: integer|Long expected";
            if (message.cmd_set != null && message.hasOwnProperty("cmd_set"))
                if (!$util.isInteger(message.cmd_set) && !(message.cmd_set && $util.isInteger(message.cmd_set.low) && $util.isInteger(message.cmd_set.high)))
                    return "cmd_set: integer|Long expected";
            if (message.cmd_flush != null && message.hasOwnProperty("cmd_flush"))
                if (!$util.isInteger(message.cmd_flush) && !(message.cmd_flush && $util.isInteger(message.cmd_flush.low) && $util.isInteger(message.cmd_flush.high)))
                    return "cmd_flush: integer|Long expected";
            if (message.get_hits != null && message.hasOwnProperty("get_hits"))
                if (!$util.isInteger(message.get_hits) && !(message.get_hits && $util.isInteger(message.get_hits.low) && $util.isInteger(message.get_hits.high)))
                    return "get_hits: integer|Long expected";
            if (message.get_misses != null && message.hasOwnProperty("get_misses"))
                if (!$util.isInteger(message.get_misses) && !(message.get_misses && $util.isInteger(message.get_misses.low) && $util.isInteger(message.get_misses.high)))
                    return "get_misses: integer|Long expected";
            if (message.delete_hits != null && message.hasOwnProperty("delete_hits"))
                if (!$util.isInteger(message.delete_hits) && !(message.delete_hits && $util.isInteger(message.delete_hits.low) && $util.isInteger(message.delete_hits.high)))
                    return "delete_hits: integer|Long expected";
            if (message.delete_misses != null && message.hasOwnProperty("delete_misses"))
                if (!$util.isInteger(message.delete_misses) && !(message.delete_misses && $util.isInteger(message.delete_misses.low) && $util.isInteger(message.delete_misses.high)))
                    return "delete_misses: integer|Long expected";
            if (message.bytes_read != null && message.hasOwnProperty("bytes_read"))
                if (!$util.isInteger(message.bytes_read) && !(message.bytes_read && $util.isInteger(message.bytes_read.low) && $util.isInteger(message.bytes_read.high)))
                    return "bytes_read: integer|Long expected";
            if (message.bytes_written != null && message.hasOwnProperty("bytes_written"))
                if (!$util.isInteger(message.bytes_written) && !(message.bytes_written && $util.isInteger(message.bytes_written.low) && $util.isInteger(message.bytes_written.high)))
                    return "bytes_written: integer|Long expected";
            if (message.limit_maxbytes != null && message.hasOwnProperty("limit_maxbytes"))
                if (!$util.isInteger(message.limit_maxbytes) && !(message.limit_maxbytes && $util.isInteger(message.limit_maxbytes.low) && $util.isInteger(message.limit_maxbytes.high)))
                    return "limit_maxbytes: integer|Long expected";
            if (message.curr_items != null && message.hasOwnProperty("curr_items"))
                if (!$util.isInteger(message.curr_items) && !(message.curr_items && $util.isInteger(message.curr_items.low) && $util.isInteger(message.curr_items.high)))
                    return "curr_items: integer|Long expected";
            if (message.evictions != null && message.hasOwnProperty("evictions"))
                if (!$util.isInteger(message.evictions) && !(message.evictions && $util.isInteger(message.evictions.low) && $util.isInteger(message.evictions.high)))
                    return "evictions: integer|Long expected";
            if (message.bytes != null && message.hasOwnProperty("bytes"))
                if (!$util.isInteger(message.bytes) && !(message.bytes && $util.isInteger(message.bytes.low) && $util.isInteger(message.bytes.high)))
                    return "bytes: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CGCMsgMemCachedStatsResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCMsgMemCachedStatsResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCMsgMemCachedStatsResponse} CGCMsgMemCachedStatsResponse
         */
        CGCMsgMemCachedStatsResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCMsgMemCachedStatsResponse)
                return object;
            var message = new $root.CGCMsgMemCachedStatsResponse();
            if (object.curr_connections != null)
                if ($util.Long)
                    (message.curr_connections = $util.Long.fromValue(object.curr_connections)).unsigned = true;
                else if (typeof object.curr_connections === "string")
                    message.curr_connections = parseInt(object.curr_connections, 10);
                else if (typeof object.curr_connections === "number")
                    message.curr_connections = object.curr_connections;
                else if (typeof object.curr_connections === "object")
                    message.curr_connections = new $util.LongBits(object.curr_connections.low >>> 0, object.curr_connections.high >>> 0).toNumber(true);
            if (object.cmd_get != null)
                if ($util.Long)
                    (message.cmd_get = $util.Long.fromValue(object.cmd_get)).unsigned = true;
                else if (typeof object.cmd_get === "string")
                    message.cmd_get = parseInt(object.cmd_get, 10);
                else if (typeof object.cmd_get === "number")
                    message.cmd_get = object.cmd_get;
                else if (typeof object.cmd_get === "object")
                    message.cmd_get = new $util.LongBits(object.cmd_get.low >>> 0, object.cmd_get.high >>> 0).toNumber(true);
            if (object.cmd_set != null)
                if ($util.Long)
                    (message.cmd_set = $util.Long.fromValue(object.cmd_set)).unsigned = true;
                else if (typeof object.cmd_set === "string")
                    message.cmd_set = parseInt(object.cmd_set, 10);
                else if (typeof object.cmd_set === "number")
                    message.cmd_set = object.cmd_set;
                else if (typeof object.cmd_set === "object")
                    message.cmd_set = new $util.LongBits(object.cmd_set.low >>> 0, object.cmd_set.high >>> 0).toNumber(true);
            if (object.cmd_flush != null)
                if ($util.Long)
                    (message.cmd_flush = $util.Long.fromValue(object.cmd_flush)).unsigned = true;
                else if (typeof object.cmd_flush === "string")
                    message.cmd_flush = parseInt(object.cmd_flush, 10);
                else if (typeof object.cmd_flush === "number")
                    message.cmd_flush = object.cmd_flush;
                else if (typeof object.cmd_flush === "object")
                    message.cmd_flush = new $util.LongBits(object.cmd_flush.low >>> 0, object.cmd_flush.high >>> 0).toNumber(true);
            if (object.get_hits != null)
                if ($util.Long)
                    (message.get_hits = $util.Long.fromValue(object.get_hits)).unsigned = true;
                else if (typeof object.get_hits === "string")
                    message.get_hits = parseInt(object.get_hits, 10);
                else if (typeof object.get_hits === "number")
                    message.get_hits = object.get_hits;
                else if (typeof object.get_hits === "object")
                    message.get_hits = new $util.LongBits(object.get_hits.low >>> 0, object.get_hits.high >>> 0).toNumber(true);
            if (object.get_misses != null)
                if ($util.Long)
                    (message.get_misses = $util.Long.fromValue(object.get_misses)).unsigned = true;
                else if (typeof object.get_misses === "string")
                    message.get_misses = parseInt(object.get_misses, 10);
                else if (typeof object.get_misses === "number")
                    message.get_misses = object.get_misses;
                else if (typeof object.get_misses === "object")
                    message.get_misses = new $util.LongBits(object.get_misses.low >>> 0, object.get_misses.high >>> 0).toNumber(true);
            if (object.delete_hits != null)
                if ($util.Long)
                    (message.delete_hits = $util.Long.fromValue(object.delete_hits)).unsigned = true;
                else if (typeof object.delete_hits === "string")
                    message.delete_hits = parseInt(object.delete_hits, 10);
                else if (typeof object.delete_hits === "number")
                    message.delete_hits = object.delete_hits;
                else if (typeof object.delete_hits === "object")
                    message.delete_hits = new $util.LongBits(object.delete_hits.low >>> 0, object.delete_hits.high >>> 0).toNumber(true);
            if (object.delete_misses != null)
                if ($util.Long)
                    (message.delete_misses = $util.Long.fromValue(object.delete_misses)).unsigned = true;
                else if (typeof object.delete_misses === "string")
                    message.delete_misses = parseInt(object.delete_misses, 10);
                else if (typeof object.delete_misses === "number")
                    message.delete_misses = object.delete_misses;
                else if (typeof object.delete_misses === "object")
                    message.delete_misses = new $util.LongBits(object.delete_misses.low >>> 0, object.delete_misses.high >>> 0).toNumber(true);
            if (object.bytes_read != null)
                if ($util.Long)
                    (message.bytes_read = $util.Long.fromValue(object.bytes_read)).unsigned = true;
                else if (typeof object.bytes_read === "string")
                    message.bytes_read = parseInt(object.bytes_read, 10);
                else if (typeof object.bytes_read === "number")
                    message.bytes_read = object.bytes_read;
                else if (typeof object.bytes_read === "object")
                    message.bytes_read = new $util.LongBits(object.bytes_read.low >>> 0, object.bytes_read.high >>> 0).toNumber(true);
            if (object.bytes_written != null)
                if ($util.Long)
                    (message.bytes_written = $util.Long.fromValue(object.bytes_written)).unsigned = true;
                else if (typeof object.bytes_written === "string")
                    message.bytes_written = parseInt(object.bytes_written, 10);
                else if (typeof object.bytes_written === "number")
                    message.bytes_written = object.bytes_written;
                else if (typeof object.bytes_written === "object")
                    message.bytes_written = new $util.LongBits(object.bytes_written.low >>> 0, object.bytes_written.high >>> 0).toNumber(true);
            if (object.limit_maxbytes != null)
                if ($util.Long)
                    (message.limit_maxbytes = $util.Long.fromValue(object.limit_maxbytes)).unsigned = true;
                else if (typeof object.limit_maxbytes === "string")
                    message.limit_maxbytes = parseInt(object.limit_maxbytes, 10);
                else if (typeof object.limit_maxbytes === "number")
                    message.limit_maxbytes = object.limit_maxbytes;
                else if (typeof object.limit_maxbytes === "object")
                    message.limit_maxbytes = new $util.LongBits(object.limit_maxbytes.low >>> 0, object.limit_maxbytes.high >>> 0).toNumber(true);
            if (object.curr_items != null)
                if ($util.Long)
                    (message.curr_items = $util.Long.fromValue(object.curr_items)).unsigned = true;
                else if (typeof object.curr_items === "string")
                    message.curr_items = parseInt(object.curr_items, 10);
                else if (typeof object.curr_items === "number")
                    message.curr_items = object.curr_items;
                else if (typeof object.curr_items === "object")
                    message.curr_items = new $util.LongBits(object.curr_items.low >>> 0, object.curr_items.high >>> 0).toNumber(true);
            if (object.evictions != null)
                if ($util.Long)
                    (message.evictions = $util.Long.fromValue(object.evictions)).unsigned = true;
                else if (typeof object.evictions === "string")
                    message.evictions = parseInt(object.evictions, 10);
                else if (typeof object.evictions === "number")
                    message.evictions = object.evictions;
                else if (typeof object.evictions === "object")
                    message.evictions = new $util.LongBits(object.evictions.low >>> 0, object.evictions.high >>> 0).toNumber(true);
            if (object.bytes != null)
                if ($util.Long)
                    (message.bytes = $util.Long.fromValue(object.bytes)).unsigned = true;
                else if (typeof object.bytes === "string")
                    message.bytes = parseInt(object.bytes, 10);
                else if (typeof object.bytes === "number")
                    message.bytes = object.bytes;
                else if (typeof object.bytes === "object")
                    message.bytes = new $util.LongBits(object.bytes.low >>> 0, object.bytes.high >>> 0).toNumber(true);
            return message;
        };
    
        /**
         * Creates a plain object from a CGCMsgMemCachedStatsResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCMsgMemCachedStatsResponse
         * @static
         * @param {CGCMsgMemCachedStatsResponse} message CGCMsgMemCachedStatsResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCMsgMemCachedStatsResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.curr_connections = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.curr_connections = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.cmd_get = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.cmd_get = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.cmd_set = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.cmd_set = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.cmd_flush = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.cmd_flush = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.get_hits = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.get_hits = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.get_misses = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.get_misses = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.delete_hits = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.delete_hits = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.delete_misses = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.delete_misses = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.bytes_read = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.bytes_read = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.bytes_written = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.bytes_written = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.limit_maxbytes = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.limit_maxbytes = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.curr_items = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.curr_items = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.evictions = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.evictions = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.bytes = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.bytes = options.longs === String ? "0" : 0;
            }
            if (message.curr_connections != null && message.hasOwnProperty("curr_connections"))
                if (typeof message.curr_connections === "number")
                    object.curr_connections = options.longs === String ? String(message.curr_connections) : message.curr_connections;
                else
                    object.curr_connections = options.longs === String ? $util.Long.prototype.toString.call(message.curr_connections) : options.longs === Number ? new $util.LongBits(message.curr_connections.low >>> 0, message.curr_connections.high >>> 0).toNumber(true) : message.curr_connections;
            if (message.cmd_get != null && message.hasOwnProperty("cmd_get"))
                if (typeof message.cmd_get === "number")
                    object.cmd_get = options.longs === String ? String(message.cmd_get) : message.cmd_get;
                else
                    object.cmd_get = options.longs === String ? $util.Long.prototype.toString.call(message.cmd_get) : options.longs === Number ? new $util.LongBits(message.cmd_get.low >>> 0, message.cmd_get.high >>> 0).toNumber(true) : message.cmd_get;
            if (message.cmd_set != null && message.hasOwnProperty("cmd_set"))
                if (typeof message.cmd_set === "number")
                    object.cmd_set = options.longs === String ? String(message.cmd_set) : message.cmd_set;
                else
                    object.cmd_set = options.longs === String ? $util.Long.prototype.toString.call(message.cmd_set) : options.longs === Number ? new $util.LongBits(message.cmd_set.low >>> 0, message.cmd_set.high >>> 0).toNumber(true) : message.cmd_set;
            if (message.cmd_flush != null && message.hasOwnProperty("cmd_flush"))
                if (typeof message.cmd_flush === "number")
                    object.cmd_flush = options.longs === String ? String(message.cmd_flush) : message.cmd_flush;
                else
                    object.cmd_flush = options.longs === String ? $util.Long.prototype.toString.call(message.cmd_flush) : options.longs === Number ? new $util.LongBits(message.cmd_flush.low >>> 0, message.cmd_flush.high >>> 0).toNumber(true) : message.cmd_flush;
            if (message.get_hits != null && message.hasOwnProperty("get_hits"))
                if (typeof message.get_hits === "number")
                    object.get_hits = options.longs === String ? String(message.get_hits) : message.get_hits;
                else
                    object.get_hits = options.longs === String ? $util.Long.prototype.toString.call(message.get_hits) : options.longs === Number ? new $util.LongBits(message.get_hits.low >>> 0, message.get_hits.high >>> 0).toNumber(true) : message.get_hits;
            if (message.get_misses != null && message.hasOwnProperty("get_misses"))
                if (typeof message.get_misses === "number")
                    object.get_misses = options.longs === String ? String(message.get_misses) : message.get_misses;
                else
                    object.get_misses = options.longs === String ? $util.Long.prototype.toString.call(message.get_misses) : options.longs === Number ? new $util.LongBits(message.get_misses.low >>> 0, message.get_misses.high >>> 0).toNumber(true) : message.get_misses;
            if (message.delete_hits != null && message.hasOwnProperty("delete_hits"))
                if (typeof message.delete_hits === "number")
                    object.delete_hits = options.longs === String ? String(message.delete_hits) : message.delete_hits;
                else
                    object.delete_hits = options.longs === String ? $util.Long.prototype.toString.call(message.delete_hits) : options.longs === Number ? new $util.LongBits(message.delete_hits.low >>> 0, message.delete_hits.high >>> 0).toNumber(true) : message.delete_hits;
            if (message.delete_misses != null && message.hasOwnProperty("delete_misses"))
                if (typeof message.delete_misses === "number")
                    object.delete_misses = options.longs === String ? String(message.delete_misses) : message.delete_misses;
                else
                    object.delete_misses = options.longs === String ? $util.Long.prototype.toString.call(message.delete_misses) : options.longs === Number ? new $util.LongBits(message.delete_misses.low >>> 0, message.delete_misses.high >>> 0).toNumber(true) : message.delete_misses;
            if (message.bytes_read != null && message.hasOwnProperty("bytes_read"))
                if (typeof message.bytes_read === "number")
                    object.bytes_read = options.longs === String ? String(message.bytes_read) : message.bytes_read;
                else
                    object.bytes_read = options.longs === String ? $util.Long.prototype.toString.call(message.bytes_read) : options.longs === Number ? new $util.LongBits(message.bytes_read.low >>> 0, message.bytes_read.high >>> 0).toNumber(true) : message.bytes_read;
            if (message.bytes_written != null && message.hasOwnProperty("bytes_written"))
                if (typeof message.bytes_written === "number")
                    object.bytes_written = options.longs === String ? String(message.bytes_written) : message.bytes_written;
                else
                    object.bytes_written = options.longs === String ? $util.Long.prototype.toString.call(message.bytes_written) : options.longs === Number ? new $util.LongBits(message.bytes_written.low >>> 0, message.bytes_written.high >>> 0).toNumber(true) : message.bytes_written;
            if (message.limit_maxbytes != null && message.hasOwnProperty("limit_maxbytes"))
                if (typeof message.limit_maxbytes === "number")
                    object.limit_maxbytes = options.longs === String ? String(message.limit_maxbytes) : message.limit_maxbytes;
                else
                    object.limit_maxbytes = options.longs === String ? $util.Long.prototype.toString.call(message.limit_maxbytes) : options.longs === Number ? new $util.LongBits(message.limit_maxbytes.low >>> 0, message.limit_maxbytes.high >>> 0).toNumber(true) : message.limit_maxbytes;
            if (message.curr_items != null && message.hasOwnProperty("curr_items"))
                if (typeof message.curr_items === "number")
                    object.curr_items = options.longs === String ? String(message.curr_items) : message.curr_items;
                else
                    object.curr_items = options.longs === String ? $util.Long.prototype.toString.call(message.curr_items) : options.longs === Number ? new $util.LongBits(message.curr_items.low >>> 0, message.curr_items.high >>> 0).toNumber(true) : message.curr_items;
            if (message.evictions != null && message.hasOwnProperty("evictions"))
                if (typeof message.evictions === "number")
                    object.evictions = options.longs === String ? String(message.evictions) : message.evictions;
                else
                    object.evictions = options.longs === String ? $util.Long.prototype.toString.call(message.evictions) : options.longs === Number ? new $util.LongBits(message.evictions.low >>> 0, message.evictions.high >>> 0).toNumber(true) : message.evictions;
            if (message.bytes != null && message.hasOwnProperty("bytes"))
                if (typeof message.bytes === "number")
                    object.bytes = options.longs === String ? String(message.bytes) : message.bytes;
                else
                    object.bytes = options.longs === String ? $util.Long.prototype.toString.call(message.bytes) : options.longs === Number ? new $util.LongBits(message.bytes.low >>> 0, message.bytes.high >>> 0).toNumber(true) : message.bytes;
            return object;
        };
    
        /**
         * Converts this CGCMsgMemCachedStatsResponse to JSON.
         * @function toJSON
         * @memberof CGCMsgMemCachedStatsResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCMsgMemCachedStatsResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCMsgMemCachedStatsResponse;
    })();
    
    $root.CGCMsgSQLStats = (function() {
    
        /**
         * Properties of a CGCMsgSQLStats.
         * @exports ICGCMsgSQLStats
         * @interface ICGCMsgSQLStats
         * @property {number|null} [schema_catalog] CGCMsgSQLStats schema_catalog
         */
    
        /**
         * Constructs a new CGCMsgSQLStats.
         * @exports CGCMsgSQLStats
         * @classdesc Represents a CGCMsgSQLStats.
         * @implements ICGCMsgSQLStats
         * @constructor
         * @param {ICGCMsgSQLStats=} [properties] Properties to set
         */
        function CGCMsgSQLStats(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCMsgSQLStats schema_catalog.
         * @member {number} schema_catalog
         * @memberof CGCMsgSQLStats
         * @instance
         */
        CGCMsgSQLStats.prototype.schema_catalog = 0;
    
        /**
         * Creates a new CGCMsgSQLStats instance using the specified properties.
         * @function create
         * @memberof CGCMsgSQLStats
         * @static
         * @param {ICGCMsgSQLStats=} [properties] Properties to set
         * @returns {CGCMsgSQLStats} CGCMsgSQLStats instance
         */
        CGCMsgSQLStats.create = function create(properties) {
            return new CGCMsgSQLStats(properties);
        };
    
        /**
         * Encodes the specified CGCMsgSQLStats message. Does not implicitly {@link CGCMsgSQLStats.verify|verify} messages.
         * @function encode
         * @memberof CGCMsgSQLStats
         * @static
         * @param {ICGCMsgSQLStats} message CGCMsgSQLStats message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgSQLStats.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.schema_catalog != null && message.hasOwnProperty("schema_catalog"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.schema_catalog);
            return writer;
        };
    
        /**
         * Encodes the specified CGCMsgSQLStats message, length delimited. Does not implicitly {@link CGCMsgSQLStats.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCMsgSQLStats
         * @static
         * @param {ICGCMsgSQLStats} message CGCMsgSQLStats message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgSQLStats.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCMsgSQLStats message from the specified reader or buffer.
         * @function decode
         * @memberof CGCMsgSQLStats
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCMsgSQLStats} CGCMsgSQLStats
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgSQLStats.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgSQLStats();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.schema_catalog = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCMsgSQLStats message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCMsgSQLStats
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCMsgSQLStats} CGCMsgSQLStats
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgSQLStats.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCMsgSQLStats message.
         * @function verify
         * @memberof CGCMsgSQLStats
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCMsgSQLStats.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.schema_catalog != null && message.hasOwnProperty("schema_catalog"))
                if (!$util.isInteger(message.schema_catalog))
                    return "schema_catalog: integer expected";
            return null;
        };
    
        /**
         * Creates a CGCMsgSQLStats message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCMsgSQLStats
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCMsgSQLStats} CGCMsgSQLStats
         */
        CGCMsgSQLStats.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCMsgSQLStats)
                return object;
            var message = new $root.CGCMsgSQLStats();
            if (object.schema_catalog != null)
                message.schema_catalog = object.schema_catalog >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CGCMsgSQLStats message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCMsgSQLStats
         * @static
         * @param {CGCMsgSQLStats} message CGCMsgSQLStats
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCMsgSQLStats.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.schema_catalog = 0;
            if (message.schema_catalog != null && message.hasOwnProperty("schema_catalog"))
                object.schema_catalog = message.schema_catalog;
            return object;
        };
    
        /**
         * Converts this CGCMsgSQLStats to JSON.
         * @function toJSON
         * @memberof CGCMsgSQLStats
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCMsgSQLStats.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCMsgSQLStats;
    })();
    
    $root.CGCMsgSQLStatsResponse = (function() {
    
        /**
         * Properties of a CGCMsgSQLStatsResponse.
         * @exports ICGCMsgSQLStatsResponse
         * @interface ICGCMsgSQLStatsResponse
         * @property {number|null} [threads] CGCMsgSQLStatsResponse threads
         * @property {number|null} [threads_connected] CGCMsgSQLStatsResponse threads_connected
         * @property {number|null} [threads_active] CGCMsgSQLStatsResponse threads_active
         * @property {number|null} [operations_submitted] CGCMsgSQLStatsResponse operations_submitted
         * @property {number|null} [prepared_statements_executed] CGCMsgSQLStatsResponse prepared_statements_executed
         * @property {number|null} [non_prepared_statements_executed] CGCMsgSQLStatsResponse non_prepared_statements_executed
         * @property {number|null} [deadlock_retries] CGCMsgSQLStatsResponse deadlock_retries
         * @property {number|null} [operations_timed_out_in_queue] CGCMsgSQLStatsResponse operations_timed_out_in_queue
         * @property {number|null} [errors] CGCMsgSQLStatsResponse errors
         */
    
        /**
         * Constructs a new CGCMsgSQLStatsResponse.
         * @exports CGCMsgSQLStatsResponse
         * @classdesc Represents a CGCMsgSQLStatsResponse.
         * @implements ICGCMsgSQLStatsResponse
         * @constructor
         * @param {ICGCMsgSQLStatsResponse=} [properties] Properties to set
         */
        function CGCMsgSQLStatsResponse(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCMsgSQLStatsResponse threads.
         * @member {number} threads
         * @memberof CGCMsgSQLStatsResponse
         * @instance
         */
        CGCMsgSQLStatsResponse.prototype.threads = 0;
    
        /**
         * CGCMsgSQLStatsResponse threads_connected.
         * @member {number} threads_connected
         * @memberof CGCMsgSQLStatsResponse
         * @instance
         */
        CGCMsgSQLStatsResponse.prototype.threads_connected = 0;
    
        /**
         * CGCMsgSQLStatsResponse threads_active.
         * @member {number} threads_active
         * @memberof CGCMsgSQLStatsResponse
         * @instance
         */
        CGCMsgSQLStatsResponse.prototype.threads_active = 0;
    
        /**
         * CGCMsgSQLStatsResponse operations_submitted.
         * @member {number} operations_submitted
         * @memberof CGCMsgSQLStatsResponse
         * @instance
         */
        CGCMsgSQLStatsResponse.prototype.operations_submitted = 0;
    
        /**
         * CGCMsgSQLStatsResponse prepared_statements_executed.
         * @member {number} prepared_statements_executed
         * @memberof CGCMsgSQLStatsResponse
         * @instance
         */
        CGCMsgSQLStatsResponse.prototype.prepared_statements_executed = 0;
    
        /**
         * CGCMsgSQLStatsResponse non_prepared_statements_executed.
         * @member {number} non_prepared_statements_executed
         * @memberof CGCMsgSQLStatsResponse
         * @instance
         */
        CGCMsgSQLStatsResponse.prototype.non_prepared_statements_executed = 0;
    
        /**
         * CGCMsgSQLStatsResponse deadlock_retries.
         * @member {number} deadlock_retries
         * @memberof CGCMsgSQLStatsResponse
         * @instance
         */
        CGCMsgSQLStatsResponse.prototype.deadlock_retries = 0;
    
        /**
         * CGCMsgSQLStatsResponse operations_timed_out_in_queue.
         * @member {number} operations_timed_out_in_queue
         * @memberof CGCMsgSQLStatsResponse
         * @instance
         */
        CGCMsgSQLStatsResponse.prototype.operations_timed_out_in_queue = 0;
    
        /**
         * CGCMsgSQLStatsResponse errors.
         * @member {number} errors
         * @memberof CGCMsgSQLStatsResponse
         * @instance
         */
        CGCMsgSQLStatsResponse.prototype.errors = 0;
    
        /**
         * Creates a new CGCMsgSQLStatsResponse instance using the specified properties.
         * @function create
         * @memberof CGCMsgSQLStatsResponse
         * @static
         * @param {ICGCMsgSQLStatsResponse=} [properties] Properties to set
         * @returns {CGCMsgSQLStatsResponse} CGCMsgSQLStatsResponse instance
         */
        CGCMsgSQLStatsResponse.create = function create(properties) {
            return new CGCMsgSQLStatsResponse(properties);
        };
    
        /**
         * Encodes the specified CGCMsgSQLStatsResponse message. Does not implicitly {@link CGCMsgSQLStatsResponse.verify|verify} messages.
         * @function encode
         * @memberof CGCMsgSQLStatsResponse
         * @static
         * @param {ICGCMsgSQLStatsResponse} message CGCMsgSQLStatsResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgSQLStatsResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.threads != null && message.hasOwnProperty("threads"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.threads);
            if (message.threads_connected != null && message.hasOwnProperty("threads_connected"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.threads_connected);
            if (message.threads_active != null && message.hasOwnProperty("threads_active"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.threads_active);
            if (message.operations_submitted != null && message.hasOwnProperty("operations_submitted"))
                writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.operations_submitted);
            if (message.prepared_statements_executed != null && message.hasOwnProperty("prepared_statements_executed"))
                writer.uint32(/* id 5, wireType 0 =*/40).uint32(message.prepared_statements_executed);
            if (message.non_prepared_statements_executed != null && message.hasOwnProperty("non_prepared_statements_executed"))
                writer.uint32(/* id 6, wireType 0 =*/48).uint32(message.non_prepared_statements_executed);
            if (message.deadlock_retries != null && message.hasOwnProperty("deadlock_retries"))
                writer.uint32(/* id 7, wireType 0 =*/56).uint32(message.deadlock_retries);
            if (message.operations_timed_out_in_queue != null && message.hasOwnProperty("operations_timed_out_in_queue"))
                writer.uint32(/* id 8, wireType 0 =*/64).uint32(message.operations_timed_out_in_queue);
            if (message.errors != null && message.hasOwnProperty("errors"))
                writer.uint32(/* id 9, wireType 0 =*/72).uint32(message.errors);
            return writer;
        };
    
        /**
         * Encodes the specified CGCMsgSQLStatsResponse message, length delimited. Does not implicitly {@link CGCMsgSQLStatsResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCMsgSQLStatsResponse
         * @static
         * @param {ICGCMsgSQLStatsResponse} message CGCMsgSQLStatsResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgSQLStatsResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCMsgSQLStatsResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CGCMsgSQLStatsResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCMsgSQLStatsResponse} CGCMsgSQLStatsResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgSQLStatsResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgSQLStatsResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.threads = reader.uint32();
                    break;
                case 2:
                    message.threads_connected = reader.uint32();
                    break;
                case 3:
                    message.threads_active = reader.uint32();
                    break;
                case 4:
                    message.operations_submitted = reader.uint32();
                    break;
                case 5:
                    message.prepared_statements_executed = reader.uint32();
                    break;
                case 6:
                    message.non_prepared_statements_executed = reader.uint32();
                    break;
                case 7:
                    message.deadlock_retries = reader.uint32();
                    break;
                case 8:
                    message.operations_timed_out_in_queue = reader.uint32();
                    break;
                case 9:
                    message.errors = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCMsgSQLStatsResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCMsgSQLStatsResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCMsgSQLStatsResponse} CGCMsgSQLStatsResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgSQLStatsResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCMsgSQLStatsResponse message.
         * @function verify
         * @memberof CGCMsgSQLStatsResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCMsgSQLStatsResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.threads != null && message.hasOwnProperty("threads"))
                if (!$util.isInteger(message.threads))
                    return "threads: integer expected";
            if (message.threads_connected != null && message.hasOwnProperty("threads_connected"))
                if (!$util.isInteger(message.threads_connected))
                    return "threads_connected: integer expected";
            if (message.threads_active != null && message.hasOwnProperty("threads_active"))
                if (!$util.isInteger(message.threads_active))
                    return "threads_active: integer expected";
            if (message.operations_submitted != null && message.hasOwnProperty("operations_submitted"))
                if (!$util.isInteger(message.operations_submitted))
                    return "operations_submitted: integer expected";
            if (message.prepared_statements_executed != null && message.hasOwnProperty("prepared_statements_executed"))
                if (!$util.isInteger(message.prepared_statements_executed))
                    return "prepared_statements_executed: integer expected";
            if (message.non_prepared_statements_executed != null && message.hasOwnProperty("non_prepared_statements_executed"))
                if (!$util.isInteger(message.non_prepared_statements_executed))
                    return "non_prepared_statements_executed: integer expected";
            if (message.deadlock_retries != null && message.hasOwnProperty("deadlock_retries"))
                if (!$util.isInteger(message.deadlock_retries))
                    return "deadlock_retries: integer expected";
            if (message.operations_timed_out_in_queue != null && message.hasOwnProperty("operations_timed_out_in_queue"))
                if (!$util.isInteger(message.operations_timed_out_in_queue))
                    return "operations_timed_out_in_queue: integer expected";
            if (message.errors != null && message.hasOwnProperty("errors"))
                if (!$util.isInteger(message.errors))
                    return "errors: integer expected";
            return null;
        };
    
        /**
         * Creates a CGCMsgSQLStatsResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCMsgSQLStatsResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCMsgSQLStatsResponse} CGCMsgSQLStatsResponse
         */
        CGCMsgSQLStatsResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCMsgSQLStatsResponse)
                return object;
            var message = new $root.CGCMsgSQLStatsResponse();
            if (object.threads != null)
                message.threads = object.threads >>> 0;
            if (object.threads_connected != null)
                message.threads_connected = object.threads_connected >>> 0;
            if (object.threads_active != null)
                message.threads_active = object.threads_active >>> 0;
            if (object.operations_submitted != null)
                message.operations_submitted = object.operations_submitted >>> 0;
            if (object.prepared_statements_executed != null)
                message.prepared_statements_executed = object.prepared_statements_executed >>> 0;
            if (object.non_prepared_statements_executed != null)
                message.non_prepared_statements_executed = object.non_prepared_statements_executed >>> 0;
            if (object.deadlock_retries != null)
                message.deadlock_retries = object.deadlock_retries >>> 0;
            if (object.operations_timed_out_in_queue != null)
                message.operations_timed_out_in_queue = object.operations_timed_out_in_queue >>> 0;
            if (object.errors != null)
                message.errors = object.errors >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CGCMsgSQLStatsResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCMsgSQLStatsResponse
         * @static
         * @param {CGCMsgSQLStatsResponse} message CGCMsgSQLStatsResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCMsgSQLStatsResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.threads = 0;
                object.threads_connected = 0;
                object.threads_active = 0;
                object.operations_submitted = 0;
                object.prepared_statements_executed = 0;
                object.non_prepared_statements_executed = 0;
                object.deadlock_retries = 0;
                object.operations_timed_out_in_queue = 0;
                object.errors = 0;
            }
            if (message.threads != null && message.hasOwnProperty("threads"))
                object.threads = message.threads;
            if (message.threads_connected != null && message.hasOwnProperty("threads_connected"))
                object.threads_connected = message.threads_connected;
            if (message.threads_active != null && message.hasOwnProperty("threads_active"))
                object.threads_active = message.threads_active;
            if (message.operations_submitted != null && message.hasOwnProperty("operations_submitted"))
                object.operations_submitted = message.operations_submitted;
            if (message.prepared_statements_executed != null && message.hasOwnProperty("prepared_statements_executed"))
                object.prepared_statements_executed = message.prepared_statements_executed;
            if (message.non_prepared_statements_executed != null && message.hasOwnProperty("non_prepared_statements_executed"))
                object.non_prepared_statements_executed = message.non_prepared_statements_executed;
            if (message.deadlock_retries != null && message.hasOwnProperty("deadlock_retries"))
                object.deadlock_retries = message.deadlock_retries;
            if (message.operations_timed_out_in_queue != null && message.hasOwnProperty("operations_timed_out_in_queue"))
                object.operations_timed_out_in_queue = message.operations_timed_out_in_queue;
            if (message.errors != null && message.hasOwnProperty("errors"))
                object.errors = message.errors;
            return object;
        };
    
        /**
         * Converts this CGCMsgSQLStatsResponse to JSON.
         * @function toJSON
         * @memberof CGCMsgSQLStatsResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCMsgSQLStatsResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCMsgSQLStatsResponse;
    })();
    
    $root.CMsgAMAddFreeLicense = (function() {
    
        /**
         * Properties of a CMsgAMAddFreeLicense.
         * @exports ICMsgAMAddFreeLicense
         * @interface ICMsgAMAddFreeLicense
         * @property {number|Long|null} [steamid] CMsgAMAddFreeLicense steamid
         * @property {number|null} [ip_public] CMsgAMAddFreeLicense ip_public
         * @property {number|null} [packageid] CMsgAMAddFreeLicense packageid
         * @property {string|null} [store_country_code] CMsgAMAddFreeLicense store_country_code
         */
    
        /**
         * Constructs a new CMsgAMAddFreeLicense.
         * @exports CMsgAMAddFreeLicense
         * @classdesc Represents a CMsgAMAddFreeLicense.
         * @implements ICMsgAMAddFreeLicense
         * @constructor
         * @param {ICMsgAMAddFreeLicense=} [properties] Properties to set
         */
        function CMsgAMAddFreeLicense(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgAMAddFreeLicense steamid.
         * @member {number|Long} steamid
         * @memberof CMsgAMAddFreeLicense
         * @instance
         */
        CMsgAMAddFreeLicense.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgAMAddFreeLicense ip_public.
         * @member {number} ip_public
         * @memberof CMsgAMAddFreeLicense
         * @instance
         */
        CMsgAMAddFreeLicense.prototype.ip_public = 0;
    
        /**
         * CMsgAMAddFreeLicense packageid.
         * @member {number} packageid
         * @memberof CMsgAMAddFreeLicense
         * @instance
         */
        CMsgAMAddFreeLicense.prototype.packageid = 0;
    
        /**
         * CMsgAMAddFreeLicense store_country_code.
         * @member {string} store_country_code
         * @memberof CMsgAMAddFreeLicense
         * @instance
         */
        CMsgAMAddFreeLicense.prototype.store_country_code = "";
    
        /**
         * Creates a new CMsgAMAddFreeLicense instance using the specified properties.
         * @function create
         * @memberof CMsgAMAddFreeLicense
         * @static
         * @param {ICMsgAMAddFreeLicense=} [properties] Properties to set
         * @returns {CMsgAMAddFreeLicense} CMsgAMAddFreeLicense instance
         */
        CMsgAMAddFreeLicense.create = function create(properties) {
            return new CMsgAMAddFreeLicense(properties);
        };
    
        /**
         * Encodes the specified CMsgAMAddFreeLicense message. Does not implicitly {@link CMsgAMAddFreeLicense.verify|verify} messages.
         * @function encode
         * @memberof CMsgAMAddFreeLicense
         * @static
         * @param {ICMsgAMAddFreeLicense} message CMsgAMAddFreeLicense message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMAddFreeLicense.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            if (message.ip_public != null && message.hasOwnProperty("ip_public"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.ip_public);
            if (message.packageid != null && message.hasOwnProperty("packageid"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.packageid);
            if (message.store_country_code != null && message.hasOwnProperty("store_country_code"))
                writer.uint32(/* id 4, wireType 2 =*/34).string(message.store_country_code);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgAMAddFreeLicense message, length delimited. Does not implicitly {@link CMsgAMAddFreeLicense.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgAMAddFreeLicense
         * @static
         * @param {ICMsgAMAddFreeLicense} message CMsgAMAddFreeLicense message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMAddFreeLicense.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgAMAddFreeLicense message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgAMAddFreeLicense
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgAMAddFreeLicense} CMsgAMAddFreeLicense
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMAddFreeLicense.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMAddFreeLicense();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                case 2:
                    message.ip_public = reader.uint32();
                    break;
                case 3:
                    message.packageid = reader.uint32();
                    break;
                case 4:
                    message.store_country_code = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgAMAddFreeLicense message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgAMAddFreeLicense
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgAMAddFreeLicense} CMsgAMAddFreeLicense
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMAddFreeLicense.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgAMAddFreeLicense message.
         * @function verify
         * @memberof CMsgAMAddFreeLicense
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgAMAddFreeLicense.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            if (message.ip_public != null && message.hasOwnProperty("ip_public"))
                if (!$util.isInteger(message.ip_public))
                    return "ip_public: integer expected";
            if (message.packageid != null && message.hasOwnProperty("packageid"))
                if (!$util.isInteger(message.packageid))
                    return "packageid: integer expected";
            if (message.store_country_code != null && message.hasOwnProperty("store_country_code"))
                if (!$util.isString(message.store_country_code))
                    return "store_country_code: string expected";
            return null;
        };
    
        /**
         * Creates a CMsgAMAddFreeLicense message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgAMAddFreeLicense
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgAMAddFreeLicense} CMsgAMAddFreeLicense
         */
        CMsgAMAddFreeLicense.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgAMAddFreeLicense)
                return object;
            var message = new $root.CMsgAMAddFreeLicense();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            if (object.ip_public != null)
                message.ip_public = object.ip_public >>> 0;
            if (object.packageid != null)
                message.packageid = object.packageid >>> 0;
            if (object.store_country_code != null)
                message.store_country_code = String(object.store_country_code);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgAMAddFreeLicense message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgAMAddFreeLicense
         * @static
         * @param {CMsgAMAddFreeLicense} message CMsgAMAddFreeLicense
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgAMAddFreeLicense.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
                object.ip_public = 0;
                object.packageid = 0;
                object.store_country_code = "";
            }
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            if (message.ip_public != null && message.hasOwnProperty("ip_public"))
                object.ip_public = message.ip_public;
            if (message.packageid != null && message.hasOwnProperty("packageid"))
                object.packageid = message.packageid;
            if (message.store_country_code != null && message.hasOwnProperty("store_country_code"))
                object.store_country_code = message.store_country_code;
            return object;
        };
    
        /**
         * Converts this CMsgAMAddFreeLicense to JSON.
         * @function toJSON
         * @memberof CMsgAMAddFreeLicense
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgAMAddFreeLicense.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgAMAddFreeLicense;
    })();
    
    $root.CMsgAMAddFreeLicenseResponse = (function() {
    
        /**
         * Properties of a CMsgAMAddFreeLicenseResponse.
         * @exports ICMsgAMAddFreeLicenseResponse
         * @interface ICMsgAMAddFreeLicenseResponse
         * @property {number|null} [eresult] CMsgAMAddFreeLicenseResponse eresult
         * @property {number|null} [purchase_result_detail] CMsgAMAddFreeLicenseResponse purchase_result_detail
         * @property {number|Long|null} [transid] CMsgAMAddFreeLicenseResponse transid
         */
    
        /**
         * Constructs a new CMsgAMAddFreeLicenseResponse.
         * @exports CMsgAMAddFreeLicenseResponse
         * @classdesc Represents a CMsgAMAddFreeLicenseResponse.
         * @implements ICMsgAMAddFreeLicenseResponse
         * @constructor
         * @param {ICMsgAMAddFreeLicenseResponse=} [properties] Properties to set
         */
        function CMsgAMAddFreeLicenseResponse(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgAMAddFreeLicenseResponse eresult.
         * @member {number} eresult
         * @memberof CMsgAMAddFreeLicenseResponse
         * @instance
         */
        CMsgAMAddFreeLicenseResponse.prototype.eresult = 2;
    
        /**
         * CMsgAMAddFreeLicenseResponse purchase_result_detail.
         * @member {number} purchase_result_detail
         * @memberof CMsgAMAddFreeLicenseResponse
         * @instance
         */
        CMsgAMAddFreeLicenseResponse.prototype.purchase_result_detail = 0;
    
        /**
         * CMsgAMAddFreeLicenseResponse transid.
         * @member {number|Long} transid
         * @memberof CMsgAMAddFreeLicenseResponse
         * @instance
         */
        CMsgAMAddFreeLicenseResponse.prototype.transid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * Creates a new CMsgAMAddFreeLicenseResponse instance using the specified properties.
         * @function create
         * @memberof CMsgAMAddFreeLicenseResponse
         * @static
         * @param {ICMsgAMAddFreeLicenseResponse=} [properties] Properties to set
         * @returns {CMsgAMAddFreeLicenseResponse} CMsgAMAddFreeLicenseResponse instance
         */
        CMsgAMAddFreeLicenseResponse.create = function create(properties) {
            return new CMsgAMAddFreeLicenseResponse(properties);
        };
    
        /**
         * Encodes the specified CMsgAMAddFreeLicenseResponse message. Does not implicitly {@link CMsgAMAddFreeLicenseResponse.verify|verify} messages.
         * @function encode
         * @memberof CMsgAMAddFreeLicenseResponse
         * @static
         * @param {ICMsgAMAddFreeLicenseResponse} message CMsgAMAddFreeLicenseResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMAddFreeLicenseResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.eresult);
            if (message.purchase_result_detail != null && message.hasOwnProperty("purchase_result_detail"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.purchase_result_detail);
            if (message.transid != null && message.hasOwnProperty("transid"))
                writer.uint32(/* id 3, wireType 1 =*/25).fixed64(message.transid);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgAMAddFreeLicenseResponse message, length delimited. Does not implicitly {@link CMsgAMAddFreeLicenseResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgAMAddFreeLicenseResponse
         * @static
         * @param {ICMsgAMAddFreeLicenseResponse} message CMsgAMAddFreeLicenseResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMAddFreeLicenseResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgAMAddFreeLicenseResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgAMAddFreeLicenseResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgAMAddFreeLicenseResponse} CMsgAMAddFreeLicenseResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMAddFreeLicenseResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMAddFreeLicenseResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.eresult = reader.int32();
                    break;
                case 2:
                    message.purchase_result_detail = reader.int32();
                    break;
                case 3:
                    message.transid = reader.fixed64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgAMAddFreeLicenseResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgAMAddFreeLicenseResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgAMAddFreeLicenseResponse} CMsgAMAddFreeLicenseResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMAddFreeLicenseResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgAMAddFreeLicenseResponse message.
         * @function verify
         * @memberof CMsgAMAddFreeLicenseResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgAMAddFreeLicenseResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                if (!$util.isInteger(message.eresult))
                    return "eresult: integer expected";
            if (message.purchase_result_detail != null && message.hasOwnProperty("purchase_result_detail"))
                if (!$util.isInteger(message.purchase_result_detail))
                    return "purchase_result_detail: integer expected";
            if (message.transid != null && message.hasOwnProperty("transid"))
                if (!$util.isInteger(message.transid) && !(message.transid && $util.isInteger(message.transid.low) && $util.isInteger(message.transid.high)))
                    return "transid: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CMsgAMAddFreeLicenseResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgAMAddFreeLicenseResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgAMAddFreeLicenseResponse} CMsgAMAddFreeLicenseResponse
         */
        CMsgAMAddFreeLicenseResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgAMAddFreeLicenseResponse)
                return object;
            var message = new $root.CMsgAMAddFreeLicenseResponse();
            if (object.eresult != null)
                message.eresult = object.eresult | 0;
            if (object.purchase_result_detail != null)
                message.purchase_result_detail = object.purchase_result_detail | 0;
            if (object.transid != null)
                if ($util.Long)
                    (message.transid = $util.Long.fromValue(object.transid)).unsigned = false;
                else if (typeof object.transid === "string")
                    message.transid = parseInt(object.transid, 10);
                else if (typeof object.transid === "number")
                    message.transid = object.transid;
                else if (typeof object.transid === "object")
                    message.transid = new $util.LongBits(object.transid.low >>> 0, object.transid.high >>> 0).toNumber();
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgAMAddFreeLicenseResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgAMAddFreeLicenseResponse
         * @static
         * @param {CMsgAMAddFreeLicenseResponse} message CMsgAMAddFreeLicenseResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgAMAddFreeLicenseResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.eresult = 2;
                object.purchase_result_detail = 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.transid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.transid = options.longs === String ? "0" : 0;
            }
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                object.eresult = message.eresult;
            if (message.purchase_result_detail != null && message.hasOwnProperty("purchase_result_detail"))
                object.purchase_result_detail = message.purchase_result_detail;
            if (message.transid != null && message.hasOwnProperty("transid"))
                if (typeof message.transid === "number")
                    object.transid = options.longs === String ? String(message.transid) : message.transid;
                else
                    object.transid = options.longs === String ? $util.Long.prototype.toString.call(message.transid) : options.longs === Number ? new $util.LongBits(message.transid.low >>> 0, message.transid.high >>> 0).toNumber() : message.transid;
            return object;
        };
    
        /**
         * Converts this CMsgAMAddFreeLicenseResponse to JSON.
         * @function toJSON
         * @memberof CMsgAMAddFreeLicenseResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgAMAddFreeLicenseResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgAMAddFreeLicenseResponse;
    })();
    
    $root.CGCMsgGetIPLocation = (function() {
    
        /**
         * Properties of a CGCMsgGetIPLocation.
         * @exports ICGCMsgGetIPLocation
         * @interface ICGCMsgGetIPLocation
         * @property {Array.<number>|null} [ips] CGCMsgGetIPLocation ips
         */
    
        /**
         * Constructs a new CGCMsgGetIPLocation.
         * @exports CGCMsgGetIPLocation
         * @classdesc Represents a CGCMsgGetIPLocation.
         * @implements ICGCMsgGetIPLocation
         * @constructor
         * @param {ICGCMsgGetIPLocation=} [properties] Properties to set
         */
        function CGCMsgGetIPLocation(properties) {
            this.ips = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCMsgGetIPLocation ips.
         * @member {Array.<number>} ips
         * @memberof CGCMsgGetIPLocation
         * @instance
         */
        CGCMsgGetIPLocation.prototype.ips = $util.emptyArray;
    
        /**
         * Creates a new CGCMsgGetIPLocation instance using the specified properties.
         * @function create
         * @memberof CGCMsgGetIPLocation
         * @static
         * @param {ICGCMsgGetIPLocation=} [properties] Properties to set
         * @returns {CGCMsgGetIPLocation} CGCMsgGetIPLocation instance
         */
        CGCMsgGetIPLocation.create = function create(properties) {
            return new CGCMsgGetIPLocation(properties);
        };
    
        /**
         * Encodes the specified CGCMsgGetIPLocation message. Does not implicitly {@link CGCMsgGetIPLocation.verify|verify} messages.
         * @function encode
         * @memberof CGCMsgGetIPLocation
         * @static
         * @param {ICGCMsgGetIPLocation} message CGCMsgGetIPLocation message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgGetIPLocation.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.ips != null && message.ips.length)
                for (var i = 0; i < message.ips.length; ++i)
                    writer.uint32(/* id 1, wireType 5 =*/13).fixed32(message.ips[i]);
            return writer;
        };
    
        /**
         * Encodes the specified CGCMsgGetIPLocation message, length delimited. Does not implicitly {@link CGCMsgGetIPLocation.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCMsgGetIPLocation
         * @static
         * @param {ICGCMsgGetIPLocation} message CGCMsgGetIPLocation message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgGetIPLocation.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCMsgGetIPLocation message from the specified reader or buffer.
         * @function decode
         * @memberof CGCMsgGetIPLocation
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCMsgGetIPLocation} CGCMsgGetIPLocation
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgGetIPLocation.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgGetIPLocation();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.ips && message.ips.length))
                        message.ips = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.ips.push(reader.fixed32());
                    } else
                        message.ips.push(reader.fixed32());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCMsgGetIPLocation message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCMsgGetIPLocation
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCMsgGetIPLocation} CGCMsgGetIPLocation
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgGetIPLocation.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCMsgGetIPLocation message.
         * @function verify
         * @memberof CGCMsgGetIPLocation
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCMsgGetIPLocation.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.ips != null && message.hasOwnProperty("ips")) {
                if (!Array.isArray(message.ips))
                    return "ips: array expected";
                for (var i = 0; i < message.ips.length; ++i)
                    if (!$util.isInteger(message.ips[i]))
                        return "ips: integer[] expected";
            }
            return null;
        };
    
        /**
         * Creates a CGCMsgGetIPLocation message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCMsgGetIPLocation
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCMsgGetIPLocation} CGCMsgGetIPLocation
         */
        CGCMsgGetIPLocation.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCMsgGetIPLocation)
                return object;
            var message = new $root.CGCMsgGetIPLocation();
            if (object.ips) {
                if (!Array.isArray(object.ips))
                    throw TypeError(".CGCMsgGetIPLocation.ips: array expected");
                message.ips = [];
                for (var i = 0; i < object.ips.length; ++i)
                    message.ips[i] = object.ips[i] >>> 0;
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CGCMsgGetIPLocation message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCMsgGetIPLocation
         * @static
         * @param {CGCMsgGetIPLocation} message CGCMsgGetIPLocation
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCMsgGetIPLocation.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.ips = [];
            if (message.ips && message.ips.length) {
                object.ips = [];
                for (var j = 0; j < message.ips.length; ++j)
                    object.ips[j] = message.ips[j];
            }
            return object;
        };
    
        /**
         * Converts this CGCMsgGetIPLocation to JSON.
         * @function toJSON
         * @memberof CGCMsgGetIPLocation
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCMsgGetIPLocation.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCMsgGetIPLocation;
    })();
    
    $root.CIPLocationInfo = (function() {
    
        /**
         * Properties of a CIPLocationInfo.
         * @exports ICIPLocationInfo
         * @interface ICIPLocationInfo
         * @property {number|null} [ip] CIPLocationInfo ip
         * @property {number|null} [latitude] CIPLocationInfo latitude
         * @property {number|null} [longitude] CIPLocationInfo longitude
         * @property {string|null} [country] CIPLocationInfo country
         * @property {string|null} [state] CIPLocationInfo state
         * @property {string|null} [city] CIPLocationInfo city
         */
    
        /**
         * Constructs a new CIPLocationInfo.
         * @exports CIPLocationInfo
         * @classdesc Represents a CIPLocationInfo.
         * @implements ICIPLocationInfo
         * @constructor
         * @param {ICIPLocationInfo=} [properties] Properties to set
         */
        function CIPLocationInfo(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CIPLocationInfo ip.
         * @member {number} ip
         * @memberof CIPLocationInfo
         * @instance
         */
        CIPLocationInfo.prototype.ip = 0;
    
        /**
         * CIPLocationInfo latitude.
         * @member {number} latitude
         * @memberof CIPLocationInfo
         * @instance
         */
        CIPLocationInfo.prototype.latitude = 0;
    
        /**
         * CIPLocationInfo longitude.
         * @member {number} longitude
         * @memberof CIPLocationInfo
         * @instance
         */
        CIPLocationInfo.prototype.longitude = 0;
    
        /**
         * CIPLocationInfo country.
         * @member {string} country
         * @memberof CIPLocationInfo
         * @instance
         */
        CIPLocationInfo.prototype.country = "";
    
        /**
         * CIPLocationInfo state.
         * @member {string} state
         * @memberof CIPLocationInfo
         * @instance
         */
        CIPLocationInfo.prototype.state = "";
    
        /**
         * CIPLocationInfo city.
         * @member {string} city
         * @memberof CIPLocationInfo
         * @instance
         */
        CIPLocationInfo.prototype.city = "";
    
        /**
         * Creates a new CIPLocationInfo instance using the specified properties.
         * @function create
         * @memberof CIPLocationInfo
         * @static
         * @param {ICIPLocationInfo=} [properties] Properties to set
         * @returns {CIPLocationInfo} CIPLocationInfo instance
         */
        CIPLocationInfo.create = function create(properties) {
            return new CIPLocationInfo(properties);
        };
    
        /**
         * Encodes the specified CIPLocationInfo message. Does not implicitly {@link CIPLocationInfo.verify|verify} messages.
         * @function encode
         * @memberof CIPLocationInfo
         * @static
         * @param {ICIPLocationInfo} message CIPLocationInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CIPLocationInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.ip != null && message.hasOwnProperty("ip"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.ip);
            if (message.latitude != null && message.hasOwnProperty("latitude"))
                writer.uint32(/* id 2, wireType 5 =*/21).float(message.latitude);
            if (message.longitude != null && message.hasOwnProperty("longitude"))
                writer.uint32(/* id 3, wireType 5 =*/29).float(message.longitude);
            if (message.country != null && message.hasOwnProperty("country"))
                writer.uint32(/* id 4, wireType 2 =*/34).string(message.country);
            if (message.state != null && message.hasOwnProperty("state"))
                writer.uint32(/* id 5, wireType 2 =*/42).string(message.state);
            if (message.city != null && message.hasOwnProperty("city"))
                writer.uint32(/* id 6, wireType 2 =*/50).string(message.city);
            return writer;
        };
    
        /**
         * Encodes the specified CIPLocationInfo message, length delimited. Does not implicitly {@link CIPLocationInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CIPLocationInfo
         * @static
         * @param {ICIPLocationInfo} message CIPLocationInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CIPLocationInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CIPLocationInfo message from the specified reader or buffer.
         * @function decode
         * @memberof CIPLocationInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CIPLocationInfo} CIPLocationInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CIPLocationInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CIPLocationInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.ip = reader.uint32();
                    break;
                case 2:
                    message.latitude = reader.float();
                    break;
                case 3:
                    message.longitude = reader.float();
                    break;
                case 4:
                    message.country = reader.string();
                    break;
                case 5:
                    message.state = reader.string();
                    break;
                case 6:
                    message.city = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CIPLocationInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CIPLocationInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CIPLocationInfo} CIPLocationInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CIPLocationInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CIPLocationInfo message.
         * @function verify
         * @memberof CIPLocationInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CIPLocationInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.ip != null && message.hasOwnProperty("ip"))
                if (!$util.isInteger(message.ip))
                    return "ip: integer expected";
            if (message.latitude != null && message.hasOwnProperty("latitude"))
                if (typeof message.latitude !== "number")
                    return "latitude: number expected";
            if (message.longitude != null && message.hasOwnProperty("longitude"))
                if (typeof message.longitude !== "number")
                    return "longitude: number expected";
            if (message.country != null && message.hasOwnProperty("country"))
                if (!$util.isString(message.country))
                    return "country: string expected";
            if (message.state != null && message.hasOwnProperty("state"))
                if (!$util.isString(message.state))
                    return "state: string expected";
            if (message.city != null && message.hasOwnProperty("city"))
                if (!$util.isString(message.city))
                    return "city: string expected";
            return null;
        };
    
        /**
         * Creates a CIPLocationInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CIPLocationInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CIPLocationInfo} CIPLocationInfo
         */
        CIPLocationInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.CIPLocationInfo)
                return object;
            var message = new $root.CIPLocationInfo();
            if (object.ip != null)
                message.ip = object.ip >>> 0;
            if (object.latitude != null)
                message.latitude = Number(object.latitude);
            if (object.longitude != null)
                message.longitude = Number(object.longitude);
            if (object.country != null)
                message.country = String(object.country);
            if (object.state != null)
                message.state = String(object.state);
            if (object.city != null)
                message.city = String(object.city);
            return message;
        };
    
        /**
         * Creates a plain object from a CIPLocationInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CIPLocationInfo
         * @static
         * @param {CIPLocationInfo} message CIPLocationInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CIPLocationInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.ip = 0;
                object.latitude = 0;
                object.longitude = 0;
                object.country = "";
                object.state = "";
                object.city = "";
            }
            if (message.ip != null && message.hasOwnProperty("ip"))
                object.ip = message.ip;
            if (message.latitude != null && message.hasOwnProperty("latitude"))
                object.latitude = options.json && !isFinite(message.latitude) ? String(message.latitude) : message.latitude;
            if (message.longitude != null && message.hasOwnProperty("longitude"))
                object.longitude = options.json && !isFinite(message.longitude) ? String(message.longitude) : message.longitude;
            if (message.country != null && message.hasOwnProperty("country"))
                object.country = message.country;
            if (message.state != null && message.hasOwnProperty("state"))
                object.state = message.state;
            if (message.city != null && message.hasOwnProperty("city"))
                object.city = message.city;
            return object;
        };
    
        /**
         * Converts this CIPLocationInfo to JSON.
         * @function toJSON
         * @memberof CIPLocationInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CIPLocationInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CIPLocationInfo;
    })();
    
    $root.CGCMsgGetIPLocationResponse = (function() {
    
        /**
         * Properties of a CGCMsgGetIPLocationResponse.
         * @exports ICGCMsgGetIPLocationResponse
         * @interface ICGCMsgGetIPLocationResponse
         * @property {Array.<ICIPLocationInfo>|null} [infos] CGCMsgGetIPLocationResponse infos
         */
    
        /**
         * Constructs a new CGCMsgGetIPLocationResponse.
         * @exports CGCMsgGetIPLocationResponse
         * @classdesc Represents a CGCMsgGetIPLocationResponse.
         * @implements ICGCMsgGetIPLocationResponse
         * @constructor
         * @param {ICGCMsgGetIPLocationResponse=} [properties] Properties to set
         */
        function CGCMsgGetIPLocationResponse(properties) {
            this.infos = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCMsgGetIPLocationResponse infos.
         * @member {Array.<ICIPLocationInfo>} infos
         * @memberof CGCMsgGetIPLocationResponse
         * @instance
         */
        CGCMsgGetIPLocationResponse.prototype.infos = $util.emptyArray;
    
        /**
         * Creates a new CGCMsgGetIPLocationResponse instance using the specified properties.
         * @function create
         * @memberof CGCMsgGetIPLocationResponse
         * @static
         * @param {ICGCMsgGetIPLocationResponse=} [properties] Properties to set
         * @returns {CGCMsgGetIPLocationResponse} CGCMsgGetIPLocationResponse instance
         */
        CGCMsgGetIPLocationResponse.create = function create(properties) {
            return new CGCMsgGetIPLocationResponse(properties);
        };
    
        /**
         * Encodes the specified CGCMsgGetIPLocationResponse message. Does not implicitly {@link CGCMsgGetIPLocationResponse.verify|verify} messages.
         * @function encode
         * @memberof CGCMsgGetIPLocationResponse
         * @static
         * @param {ICGCMsgGetIPLocationResponse} message CGCMsgGetIPLocationResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgGetIPLocationResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.infos != null && message.infos.length)
                for (var i = 0; i < message.infos.length; ++i)
                    $root.CIPLocationInfo.encode(message.infos[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CGCMsgGetIPLocationResponse message, length delimited. Does not implicitly {@link CGCMsgGetIPLocationResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCMsgGetIPLocationResponse
         * @static
         * @param {ICGCMsgGetIPLocationResponse} message CGCMsgGetIPLocationResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgGetIPLocationResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCMsgGetIPLocationResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CGCMsgGetIPLocationResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCMsgGetIPLocationResponse} CGCMsgGetIPLocationResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgGetIPLocationResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgGetIPLocationResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.infos && message.infos.length))
                        message.infos = [];
                    message.infos.push($root.CIPLocationInfo.decode(reader, reader.uint32()));
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCMsgGetIPLocationResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCMsgGetIPLocationResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCMsgGetIPLocationResponse} CGCMsgGetIPLocationResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgGetIPLocationResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCMsgGetIPLocationResponse message.
         * @function verify
         * @memberof CGCMsgGetIPLocationResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCMsgGetIPLocationResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.infos != null && message.hasOwnProperty("infos")) {
                if (!Array.isArray(message.infos))
                    return "infos: array expected";
                for (var i = 0; i < message.infos.length; ++i) {
                    var error = $root.CIPLocationInfo.verify(message.infos[i]);
                    if (error)
                        return "infos." + error;
                }
            }
            return null;
        };
    
        /**
         * Creates a CGCMsgGetIPLocationResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCMsgGetIPLocationResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCMsgGetIPLocationResponse} CGCMsgGetIPLocationResponse
         */
        CGCMsgGetIPLocationResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCMsgGetIPLocationResponse)
                return object;
            var message = new $root.CGCMsgGetIPLocationResponse();
            if (object.infos) {
                if (!Array.isArray(object.infos))
                    throw TypeError(".CGCMsgGetIPLocationResponse.infos: array expected");
                message.infos = [];
                for (var i = 0; i < object.infos.length; ++i) {
                    if (typeof object.infos[i] !== "object")
                        throw TypeError(".CGCMsgGetIPLocationResponse.infos: object expected");
                    message.infos[i] = $root.CIPLocationInfo.fromObject(object.infos[i]);
                }
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CGCMsgGetIPLocationResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCMsgGetIPLocationResponse
         * @static
         * @param {CGCMsgGetIPLocationResponse} message CGCMsgGetIPLocationResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCMsgGetIPLocationResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.infos = [];
            if (message.infos && message.infos.length) {
                object.infos = [];
                for (var j = 0; j < message.infos.length; ++j)
                    object.infos[j] = $root.CIPLocationInfo.toObject(message.infos[j], options);
            }
            return object;
        };
    
        /**
         * Converts this CGCMsgGetIPLocationResponse to JSON.
         * @function toJSON
         * @memberof CGCMsgGetIPLocationResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCMsgGetIPLocationResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCMsgGetIPLocationResponse;
    })();
    
    $root.CGCMsgSystemStatsSchema = (function() {
    
        /**
         * Properties of a CGCMsgSystemStatsSchema.
         * @exports ICGCMsgSystemStatsSchema
         * @interface ICGCMsgSystemStatsSchema
         * @property {number|null} [gc_app_id] CGCMsgSystemStatsSchema gc_app_id
         * @property {Uint8Array|null} [schema_kv] CGCMsgSystemStatsSchema schema_kv
         */
    
        /**
         * Constructs a new CGCMsgSystemStatsSchema.
         * @exports CGCMsgSystemStatsSchema
         * @classdesc Represents a CGCMsgSystemStatsSchema.
         * @implements ICGCMsgSystemStatsSchema
         * @constructor
         * @param {ICGCMsgSystemStatsSchema=} [properties] Properties to set
         */
        function CGCMsgSystemStatsSchema(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCMsgSystemStatsSchema gc_app_id.
         * @member {number} gc_app_id
         * @memberof CGCMsgSystemStatsSchema
         * @instance
         */
        CGCMsgSystemStatsSchema.prototype.gc_app_id = 0;
    
        /**
         * CGCMsgSystemStatsSchema schema_kv.
         * @member {Uint8Array} schema_kv
         * @memberof CGCMsgSystemStatsSchema
         * @instance
         */
        CGCMsgSystemStatsSchema.prototype.schema_kv = $util.newBuffer([]);
    
        /**
         * Creates a new CGCMsgSystemStatsSchema instance using the specified properties.
         * @function create
         * @memberof CGCMsgSystemStatsSchema
         * @static
         * @param {ICGCMsgSystemStatsSchema=} [properties] Properties to set
         * @returns {CGCMsgSystemStatsSchema} CGCMsgSystemStatsSchema instance
         */
        CGCMsgSystemStatsSchema.create = function create(properties) {
            return new CGCMsgSystemStatsSchema(properties);
        };
    
        /**
         * Encodes the specified CGCMsgSystemStatsSchema message. Does not implicitly {@link CGCMsgSystemStatsSchema.verify|verify} messages.
         * @function encode
         * @memberof CGCMsgSystemStatsSchema
         * @static
         * @param {ICGCMsgSystemStatsSchema} message CGCMsgSystemStatsSchema message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgSystemStatsSchema.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.gc_app_id != null && message.hasOwnProperty("gc_app_id"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.gc_app_id);
            if (message.schema_kv != null && message.hasOwnProperty("schema_kv"))
                writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.schema_kv);
            return writer;
        };
    
        /**
         * Encodes the specified CGCMsgSystemStatsSchema message, length delimited. Does not implicitly {@link CGCMsgSystemStatsSchema.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCMsgSystemStatsSchema
         * @static
         * @param {ICGCMsgSystemStatsSchema} message CGCMsgSystemStatsSchema message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgSystemStatsSchema.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCMsgSystemStatsSchema message from the specified reader or buffer.
         * @function decode
         * @memberof CGCMsgSystemStatsSchema
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCMsgSystemStatsSchema} CGCMsgSystemStatsSchema
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgSystemStatsSchema.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgSystemStatsSchema();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.gc_app_id = reader.uint32();
                    break;
                case 2:
                    message.schema_kv = reader.bytes();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCMsgSystemStatsSchema message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCMsgSystemStatsSchema
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCMsgSystemStatsSchema} CGCMsgSystemStatsSchema
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgSystemStatsSchema.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCMsgSystemStatsSchema message.
         * @function verify
         * @memberof CGCMsgSystemStatsSchema
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCMsgSystemStatsSchema.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.gc_app_id != null && message.hasOwnProperty("gc_app_id"))
                if (!$util.isInteger(message.gc_app_id))
                    return "gc_app_id: integer expected";
            if (message.schema_kv != null && message.hasOwnProperty("schema_kv"))
                if (!(message.schema_kv && typeof message.schema_kv.length === "number" || $util.isString(message.schema_kv)))
                    return "schema_kv: buffer expected";
            return null;
        };
    
        /**
         * Creates a CGCMsgSystemStatsSchema message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCMsgSystemStatsSchema
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCMsgSystemStatsSchema} CGCMsgSystemStatsSchema
         */
        CGCMsgSystemStatsSchema.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCMsgSystemStatsSchema)
                return object;
            var message = new $root.CGCMsgSystemStatsSchema();
            if (object.gc_app_id != null)
                message.gc_app_id = object.gc_app_id >>> 0;
            if (object.schema_kv != null)
                if (typeof object.schema_kv === "string")
                    $util.base64.decode(object.schema_kv, message.schema_kv = $util.newBuffer($util.base64.length(object.schema_kv)), 0);
                else if (object.schema_kv.length)
                    message.schema_kv = object.schema_kv;
            return message;
        };
    
        /**
         * Creates a plain object from a CGCMsgSystemStatsSchema message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCMsgSystemStatsSchema
         * @static
         * @param {CGCMsgSystemStatsSchema} message CGCMsgSystemStatsSchema
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCMsgSystemStatsSchema.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.gc_app_id = 0;
                if (options.bytes === String)
                    object.schema_kv = "";
                else {
                    object.schema_kv = [];
                    if (options.bytes !== Array)
                        object.schema_kv = $util.newBuffer(object.schema_kv);
                }
            }
            if (message.gc_app_id != null && message.hasOwnProperty("gc_app_id"))
                object.gc_app_id = message.gc_app_id;
            if (message.schema_kv != null && message.hasOwnProperty("schema_kv"))
                object.schema_kv = options.bytes === String ? $util.base64.encode(message.schema_kv, 0, message.schema_kv.length) : options.bytes === Array ? Array.prototype.slice.call(message.schema_kv) : message.schema_kv;
            return object;
        };
    
        /**
         * Converts this CGCMsgSystemStatsSchema to JSON.
         * @function toJSON
         * @memberof CGCMsgSystemStatsSchema
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCMsgSystemStatsSchema.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCMsgSystemStatsSchema;
    })();
    
    $root.CGCMsgGetSystemStats = (function() {
    
        /**
         * Properties of a CGCMsgGetSystemStats.
         * @exports ICGCMsgGetSystemStats
         * @interface ICGCMsgGetSystemStats
         */
    
        /**
         * Constructs a new CGCMsgGetSystemStats.
         * @exports CGCMsgGetSystemStats
         * @classdesc Represents a CGCMsgGetSystemStats.
         * @implements ICGCMsgGetSystemStats
         * @constructor
         * @param {ICGCMsgGetSystemStats=} [properties] Properties to set
         */
        function CGCMsgGetSystemStats(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * Creates a new CGCMsgGetSystemStats instance using the specified properties.
         * @function create
         * @memberof CGCMsgGetSystemStats
         * @static
         * @param {ICGCMsgGetSystemStats=} [properties] Properties to set
         * @returns {CGCMsgGetSystemStats} CGCMsgGetSystemStats instance
         */
        CGCMsgGetSystemStats.create = function create(properties) {
            return new CGCMsgGetSystemStats(properties);
        };
    
        /**
         * Encodes the specified CGCMsgGetSystemStats message. Does not implicitly {@link CGCMsgGetSystemStats.verify|verify} messages.
         * @function encode
         * @memberof CGCMsgGetSystemStats
         * @static
         * @param {ICGCMsgGetSystemStats} message CGCMsgGetSystemStats message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgGetSystemStats.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };
    
        /**
         * Encodes the specified CGCMsgGetSystemStats message, length delimited. Does not implicitly {@link CGCMsgGetSystemStats.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCMsgGetSystemStats
         * @static
         * @param {ICGCMsgGetSystemStats} message CGCMsgGetSystemStats message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgGetSystemStats.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCMsgGetSystemStats message from the specified reader or buffer.
         * @function decode
         * @memberof CGCMsgGetSystemStats
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCMsgGetSystemStats} CGCMsgGetSystemStats
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgGetSystemStats.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgGetSystemStats();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCMsgGetSystemStats message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCMsgGetSystemStats
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCMsgGetSystemStats} CGCMsgGetSystemStats
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgGetSystemStats.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCMsgGetSystemStats message.
         * @function verify
         * @memberof CGCMsgGetSystemStats
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCMsgGetSystemStats.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };
    
        /**
         * Creates a CGCMsgGetSystemStats message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCMsgGetSystemStats
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCMsgGetSystemStats} CGCMsgGetSystemStats
         */
        CGCMsgGetSystemStats.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCMsgGetSystemStats)
                return object;
            return new $root.CGCMsgGetSystemStats();
        };
    
        /**
         * Creates a plain object from a CGCMsgGetSystemStats message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCMsgGetSystemStats
         * @static
         * @param {CGCMsgGetSystemStats} message CGCMsgGetSystemStats
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCMsgGetSystemStats.toObject = function toObject() {
            return {};
        };
    
        /**
         * Converts this CGCMsgGetSystemStats to JSON.
         * @function toJSON
         * @memberof CGCMsgGetSystemStats
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCMsgGetSystemStats.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCMsgGetSystemStats;
    })();
    
    $root.CGCMsgGetSystemStatsResponse = (function() {
    
        /**
         * Properties of a CGCMsgGetSystemStatsResponse.
         * @exports ICGCMsgGetSystemStatsResponse
         * @interface ICGCMsgGetSystemStatsResponse
         * @property {number|null} [gc_app_id] CGCMsgGetSystemStatsResponse gc_app_id
         * @property {Uint8Array|null} [stats_kv] CGCMsgGetSystemStatsResponse stats_kv
         * @property {number|null} [active_jobs] CGCMsgGetSystemStatsResponse active_jobs
         * @property {number|null} [yielding_jobs] CGCMsgGetSystemStatsResponse yielding_jobs
         * @property {number|null} [user_sessions] CGCMsgGetSystemStatsResponse user_sessions
         * @property {number|null} [game_server_sessions] CGCMsgGetSystemStatsResponse game_server_sessions
         * @property {number|null} [socaches] CGCMsgGetSystemStatsResponse socaches
         * @property {number|null} [socaches_to_unload] CGCMsgGetSystemStatsResponse socaches_to_unload
         * @property {number|null} [socaches_loading] CGCMsgGetSystemStatsResponse socaches_loading
         * @property {number|null} [writeback_queue] CGCMsgGetSystemStatsResponse writeback_queue
         * @property {number|null} [steamid_locks] CGCMsgGetSystemStatsResponse steamid_locks
         * @property {number|null} [logon_queue] CGCMsgGetSystemStatsResponse logon_queue
         * @property {number|null} [logon_jobs] CGCMsgGetSystemStatsResponse logon_jobs
         */
    
        /**
         * Constructs a new CGCMsgGetSystemStatsResponse.
         * @exports CGCMsgGetSystemStatsResponse
         * @classdesc Represents a CGCMsgGetSystemStatsResponse.
         * @implements ICGCMsgGetSystemStatsResponse
         * @constructor
         * @param {ICGCMsgGetSystemStatsResponse=} [properties] Properties to set
         */
        function CGCMsgGetSystemStatsResponse(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCMsgGetSystemStatsResponse gc_app_id.
         * @member {number} gc_app_id
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         */
        CGCMsgGetSystemStatsResponse.prototype.gc_app_id = 0;
    
        /**
         * CGCMsgGetSystemStatsResponse stats_kv.
         * @member {Uint8Array} stats_kv
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         */
        CGCMsgGetSystemStatsResponse.prototype.stats_kv = $util.newBuffer([]);
    
        /**
         * CGCMsgGetSystemStatsResponse active_jobs.
         * @member {number} active_jobs
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         */
        CGCMsgGetSystemStatsResponse.prototype.active_jobs = 0;
    
        /**
         * CGCMsgGetSystemStatsResponse yielding_jobs.
         * @member {number} yielding_jobs
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         */
        CGCMsgGetSystemStatsResponse.prototype.yielding_jobs = 0;
    
        /**
         * CGCMsgGetSystemStatsResponse user_sessions.
         * @member {number} user_sessions
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         */
        CGCMsgGetSystemStatsResponse.prototype.user_sessions = 0;
    
        /**
         * CGCMsgGetSystemStatsResponse game_server_sessions.
         * @member {number} game_server_sessions
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         */
        CGCMsgGetSystemStatsResponse.prototype.game_server_sessions = 0;
    
        /**
         * CGCMsgGetSystemStatsResponse socaches.
         * @member {number} socaches
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         */
        CGCMsgGetSystemStatsResponse.prototype.socaches = 0;
    
        /**
         * CGCMsgGetSystemStatsResponse socaches_to_unload.
         * @member {number} socaches_to_unload
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         */
        CGCMsgGetSystemStatsResponse.prototype.socaches_to_unload = 0;
    
        /**
         * CGCMsgGetSystemStatsResponse socaches_loading.
         * @member {number} socaches_loading
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         */
        CGCMsgGetSystemStatsResponse.prototype.socaches_loading = 0;
    
        /**
         * CGCMsgGetSystemStatsResponse writeback_queue.
         * @member {number} writeback_queue
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         */
        CGCMsgGetSystemStatsResponse.prototype.writeback_queue = 0;
    
        /**
         * CGCMsgGetSystemStatsResponse steamid_locks.
         * @member {number} steamid_locks
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         */
        CGCMsgGetSystemStatsResponse.prototype.steamid_locks = 0;
    
        /**
         * CGCMsgGetSystemStatsResponse logon_queue.
         * @member {number} logon_queue
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         */
        CGCMsgGetSystemStatsResponse.prototype.logon_queue = 0;
    
        /**
         * CGCMsgGetSystemStatsResponse logon_jobs.
         * @member {number} logon_jobs
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         */
        CGCMsgGetSystemStatsResponse.prototype.logon_jobs = 0;
    
        /**
         * Creates a new CGCMsgGetSystemStatsResponse instance using the specified properties.
         * @function create
         * @memberof CGCMsgGetSystemStatsResponse
         * @static
         * @param {ICGCMsgGetSystemStatsResponse=} [properties] Properties to set
         * @returns {CGCMsgGetSystemStatsResponse} CGCMsgGetSystemStatsResponse instance
         */
        CGCMsgGetSystemStatsResponse.create = function create(properties) {
            return new CGCMsgGetSystemStatsResponse(properties);
        };
    
        /**
         * Encodes the specified CGCMsgGetSystemStatsResponse message. Does not implicitly {@link CGCMsgGetSystemStatsResponse.verify|verify} messages.
         * @function encode
         * @memberof CGCMsgGetSystemStatsResponse
         * @static
         * @param {ICGCMsgGetSystemStatsResponse} message CGCMsgGetSystemStatsResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgGetSystemStatsResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.gc_app_id != null && message.hasOwnProperty("gc_app_id"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.gc_app_id);
            if (message.stats_kv != null && message.hasOwnProperty("stats_kv"))
                writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.stats_kv);
            if (message.active_jobs != null && message.hasOwnProperty("active_jobs"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.active_jobs);
            if (message.yielding_jobs != null && message.hasOwnProperty("yielding_jobs"))
                writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.yielding_jobs);
            if (message.user_sessions != null && message.hasOwnProperty("user_sessions"))
                writer.uint32(/* id 5, wireType 0 =*/40).uint32(message.user_sessions);
            if (message.game_server_sessions != null && message.hasOwnProperty("game_server_sessions"))
                writer.uint32(/* id 6, wireType 0 =*/48).uint32(message.game_server_sessions);
            if (message.socaches != null && message.hasOwnProperty("socaches"))
                writer.uint32(/* id 7, wireType 0 =*/56).uint32(message.socaches);
            if (message.socaches_to_unload != null && message.hasOwnProperty("socaches_to_unload"))
                writer.uint32(/* id 8, wireType 0 =*/64).uint32(message.socaches_to_unload);
            if (message.socaches_loading != null && message.hasOwnProperty("socaches_loading"))
                writer.uint32(/* id 9, wireType 0 =*/72).uint32(message.socaches_loading);
            if (message.writeback_queue != null && message.hasOwnProperty("writeback_queue"))
                writer.uint32(/* id 10, wireType 0 =*/80).uint32(message.writeback_queue);
            if (message.steamid_locks != null && message.hasOwnProperty("steamid_locks"))
                writer.uint32(/* id 11, wireType 0 =*/88).uint32(message.steamid_locks);
            if (message.logon_queue != null && message.hasOwnProperty("logon_queue"))
                writer.uint32(/* id 12, wireType 0 =*/96).uint32(message.logon_queue);
            if (message.logon_jobs != null && message.hasOwnProperty("logon_jobs"))
                writer.uint32(/* id 13, wireType 0 =*/104).uint32(message.logon_jobs);
            return writer;
        };
    
        /**
         * Encodes the specified CGCMsgGetSystemStatsResponse message, length delimited. Does not implicitly {@link CGCMsgGetSystemStatsResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCMsgGetSystemStatsResponse
         * @static
         * @param {ICGCMsgGetSystemStatsResponse} message CGCMsgGetSystemStatsResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCMsgGetSystemStatsResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCMsgGetSystemStatsResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CGCMsgGetSystemStatsResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCMsgGetSystemStatsResponse} CGCMsgGetSystemStatsResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgGetSystemStatsResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCMsgGetSystemStatsResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.gc_app_id = reader.uint32();
                    break;
                case 2:
                    message.stats_kv = reader.bytes();
                    break;
                case 3:
                    message.active_jobs = reader.uint32();
                    break;
                case 4:
                    message.yielding_jobs = reader.uint32();
                    break;
                case 5:
                    message.user_sessions = reader.uint32();
                    break;
                case 6:
                    message.game_server_sessions = reader.uint32();
                    break;
                case 7:
                    message.socaches = reader.uint32();
                    break;
                case 8:
                    message.socaches_to_unload = reader.uint32();
                    break;
                case 9:
                    message.socaches_loading = reader.uint32();
                    break;
                case 10:
                    message.writeback_queue = reader.uint32();
                    break;
                case 11:
                    message.steamid_locks = reader.uint32();
                    break;
                case 12:
                    message.logon_queue = reader.uint32();
                    break;
                case 13:
                    message.logon_jobs = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCMsgGetSystemStatsResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCMsgGetSystemStatsResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCMsgGetSystemStatsResponse} CGCMsgGetSystemStatsResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCMsgGetSystemStatsResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCMsgGetSystemStatsResponse message.
         * @function verify
         * @memberof CGCMsgGetSystemStatsResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCMsgGetSystemStatsResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.gc_app_id != null && message.hasOwnProperty("gc_app_id"))
                if (!$util.isInteger(message.gc_app_id))
                    return "gc_app_id: integer expected";
            if (message.stats_kv != null && message.hasOwnProperty("stats_kv"))
                if (!(message.stats_kv && typeof message.stats_kv.length === "number" || $util.isString(message.stats_kv)))
                    return "stats_kv: buffer expected";
            if (message.active_jobs != null && message.hasOwnProperty("active_jobs"))
                if (!$util.isInteger(message.active_jobs))
                    return "active_jobs: integer expected";
            if (message.yielding_jobs != null && message.hasOwnProperty("yielding_jobs"))
                if (!$util.isInteger(message.yielding_jobs))
                    return "yielding_jobs: integer expected";
            if (message.user_sessions != null && message.hasOwnProperty("user_sessions"))
                if (!$util.isInteger(message.user_sessions))
                    return "user_sessions: integer expected";
            if (message.game_server_sessions != null && message.hasOwnProperty("game_server_sessions"))
                if (!$util.isInteger(message.game_server_sessions))
                    return "game_server_sessions: integer expected";
            if (message.socaches != null && message.hasOwnProperty("socaches"))
                if (!$util.isInteger(message.socaches))
                    return "socaches: integer expected";
            if (message.socaches_to_unload != null && message.hasOwnProperty("socaches_to_unload"))
                if (!$util.isInteger(message.socaches_to_unload))
                    return "socaches_to_unload: integer expected";
            if (message.socaches_loading != null && message.hasOwnProperty("socaches_loading"))
                if (!$util.isInteger(message.socaches_loading))
                    return "socaches_loading: integer expected";
            if (message.writeback_queue != null && message.hasOwnProperty("writeback_queue"))
                if (!$util.isInteger(message.writeback_queue))
                    return "writeback_queue: integer expected";
            if (message.steamid_locks != null && message.hasOwnProperty("steamid_locks"))
                if (!$util.isInteger(message.steamid_locks))
                    return "steamid_locks: integer expected";
            if (message.logon_queue != null && message.hasOwnProperty("logon_queue"))
                if (!$util.isInteger(message.logon_queue))
                    return "logon_queue: integer expected";
            if (message.logon_jobs != null && message.hasOwnProperty("logon_jobs"))
                if (!$util.isInteger(message.logon_jobs))
                    return "logon_jobs: integer expected";
            return null;
        };
    
        /**
         * Creates a CGCMsgGetSystemStatsResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCMsgGetSystemStatsResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCMsgGetSystemStatsResponse} CGCMsgGetSystemStatsResponse
         */
        CGCMsgGetSystemStatsResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCMsgGetSystemStatsResponse)
                return object;
            var message = new $root.CGCMsgGetSystemStatsResponse();
            if (object.gc_app_id != null)
                message.gc_app_id = object.gc_app_id >>> 0;
            if (object.stats_kv != null)
                if (typeof object.stats_kv === "string")
                    $util.base64.decode(object.stats_kv, message.stats_kv = $util.newBuffer($util.base64.length(object.stats_kv)), 0);
                else if (object.stats_kv.length)
                    message.stats_kv = object.stats_kv;
            if (object.active_jobs != null)
                message.active_jobs = object.active_jobs >>> 0;
            if (object.yielding_jobs != null)
                message.yielding_jobs = object.yielding_jobs >>> 0;
            if (object.user_sessions != null)
                message.user_sessions = object.user_sessions >>> 0;
            if (object.game_server_sessions != null)
                message.game_server_sessions = object.game_server_sessions >>> 0;
            if (object.socaches != null)
                message.socaches = object.socaches >>> 0;
            if (object.socaches_to_unload != null)
                message.socaches_to_unload = object.socaches_to_unload >>> 0;
            if (object.socaches_loading != null)
                message.socaches_loading = object.socaches_loading >>> 0;
            if (object.writeback_queue != null)
                message.writeback_queue = object.writeback_queue >>> 0;
            if (object.steamid_locks != null)
                message.steamid_locks = object.steamid_locks >>> 0;
            if (object.logon_queue != null)
                message.logon_queue = object.logon_queue >>> 0;
            if (object.logon_jobs != null)
                message.logon_jobs = object.logon_jobs >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CGCMsgGetSystemStatsResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCMsgGetSystemStatsResponse
         * @static
         * @param {CGCMsgGetSystemStatsResponse} message CGCMsgGetSystemStatsResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCMsgGetSystemStatsResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.gc_app_id = 0;
                if (options.bytes === String)
                    object.stats_kv = "";
                else {
                    object.stats_kv = [];
                    if (options.bytes !== Array)
                        object.stats_kv = $util.newBuffer(object.stats_kv);
                }
                object.active_jobs = 0;
                object.yielding_jobs = 0;
                object.user_sessions = 0;
                object.game_server_sessions = 0;
                object.socaches = 0;
                object.socaches_to_unload = 0;
                object.socaches_loading = 0;
                object.writeback_queue = 0;
                object.steamid_locks = 0;
                object.logon_queue = 0;
                object.logon_jobs = 0;
            }
            if (message.gc_app_id != null && message.hasOwnProperty("gc_app_id"))
                object.gc_app_id = message.gc_app_id;
            if (message.stats_kv != null && message.hasOwnProperty("stats_kv"))
                object.stats_kv = options.bytes === String ? $util.base64.encode(message.stats_kv, 0, message.stats_kv.length) : options.bytes === Array ? Array.prototype.slice.call(message.stats_kv) : message.stats_kv;
            if (message.active_jobs != null && message.hasOwnProperty("active_jobs"))
                object.active_jobs = message.active_jobs;
            if (message.yielding_jobs != null && message.hasOwnProperty("yielding_jobs"))
                object.yielding_jobs = message.yielding_jobs;
            if (message.user_sessions != null && message.hasOwnProperty("user_sessions"))
                object.user_sessions = message.user_sessions;
            if (message.game_server_sessions != null && message.hasOwnProperty("game_server_sessions"))
                object.game_server_sessions = message.game_server_sessions;
            if (message.socaches != null && message.hasOwnProperty("socaches"))
                object.socaches = message.socaches;
            if (message.socaches_to_unload != null && message.hasOwnProperty("socaches_to_unload"))
                object.socaches_to_unload = message.socaches_to_unload;
            if (message.socaches_loading != null && message.hasOwnProperty("socaches_loading"))
                object.socaches_loading = message.socaches_loading;
            if (message.writeback_queue != null && message.hasOwnProperty("writeback_queue"))
                object.writeback_queue = message.writeback_queue;
            if (message.steamid_locks != null && message.hasOwnProperty("steamid_locks"))
                object.steamid_locks = message.steamid_locks;
            if (message.logon_queue != null && message.hasOwnProperty("logon_queue"))
                object.logon_queue = message.logon_queue;
            if (message.logon_jobs != null && message.hasOwnProperty("logon_jobs"))
                object.logon_jobs = message.logon_jobs;
            return object;
        };
    
        /**
         * Converts this CGCMsgGetSystemStatsResponse to JSON.
         * @function toJSON
         * @memberof CGCMsgGetSystemStatsResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCMsgGetSystemStatsResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCMsgGetSystemStatsResponse;
    })();
    
    $root.CMsgAMSendEmail = (function() {
    
        /**
         * Properties of a CMsgAMSendEmail.
         * @exports ICMsgAMSendEmail
         * @interface ICMsgAMSendEmail
         * @property {number|Long|null} [steamid] CMsgAMSendEmail steamid
         * @property {number|null} [email_msg_type] CMsgAMSendEmail email_msg_type
         * @property {number|null} [email_format] CMsgAMSendEmail email_format
         * @property {Array.<CMsgAMSendEmail.IPersonaNameReplacementToken>|null} [persona_name_tokens] CMsgAMSendEmail persona_name_tokens
         * @property {number|null} [source_gc] CMsgAMSendEmail source_gc
         * @property {Array.<CMsgAMSendEmail.IReplacementToken>|null} [tokens] CMsgAMSendEmail tokens
         */
    
        /**
         * Constructs a new CMsgAMSendEmail.
         * @exports CMsgAMSendEmail
         * @classdesc Represents a CMsgAMSendEmail.
         * @implements ICMsgAMSendEmail
         * @constructor
         * @param {ICMsgAMSendEmail=} [properties] Properties to set
         */
        function CMsgAMSendEmail(properties) {
            this.persona_name_tokens = [];
            this.tokens = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgAMSendEmail steamid.
         * @member {number|Long} steamid
         * @memberof CMsgAMSendEmail
         * @instance
         */
        CMsgAMSendEmail.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgAMSendEmail email_msg_type.
         * @member {number} email_msg_type
         * @memberof CMsgAMSendEmail
         * @instance
         */
        CMsgAMSendEmail.prototype.email_msg_type = 0;
    
        /**
         * CMsgAMSendEmail email_format.
         * @member {number} email_format
         * @memberof CMsgAMSendEmail
         * @instance
         */
        CMsgAMSendEmail.prototype.email_format = 0;
    
        /**
         * CMsgAMSendEmail persona_name_tokens.
         * @member {Array.<CMsgAMSendEmail.IPersonaNameReplacementToken>} persona_name_tokens
         * @memberof CMsgAMSendEmail
         * @instance
         */
        CMsgAMSendEmail.prototype.persona_name_tokens = $util.emptyArray;
    
        /**
         * CMsgAMSendEmail source_gc.
         * @member {number} source_gc
         * @memberof CMsgAMSendEmail
         * @instance
         */
        CMsgAMSendEmail.prototype.source_gc = 0;
    
        /**
         * CMsgAMSendEmail tokens.
         * @member {Array.<CMsgAMSendEmail.IReplacementToken>} tokens
         * @memberof CMsgAMSendEmail
         * @instance
         */
        CMsgAMSendEmail.prototype.tokens = $util.emptyArray;
    
        /**
         * Creates a new CMsgAMSendEmail instance using the specified properties.
         * @function create
         * @memberof CMsgAMSendEmail
         * @static
         * @param {ICMsgAMSendEmail=} [properties] Properties to set
         * @returns {CMsgAMSendEmail} CMsgAMSendEmail instance
         */
        CMsgAMSendEmail.create = function create(properties) {
            return new CMsgAMSendEmail(properties);
        };
    
        /**
         * Encodes the specified CMsgAMSendEmail message. Does not implicitly {@link CMsgAMSendEmail.verify|verify} messages.
         * @function encode
         * @memberof CMsgAMSendEmail
         * @static
         * @param {ICMsgAMSendEmail} message CMsgAMSendEmail message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMSendEmail.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            if (message.email_msg_type != null && message.hasOwnProperty("email_msg_type"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.email_msg_type);
            if (message.email_format != null && message.hasOwnProperty("email_format"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.email_format);
            if (message.persona_name_tokens != null && message.persona_name_tokens.length)
                for (var i = 0; i < message.persona_name_tokens.length; ++i)
                    $root.CMsgAMSendEmail.PersonaNameReplacementToken.encode(message.persona_name_tokens[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
            if (message.source_gc != null && message.hasOwnProperty("source_gc"))
                writer.uint32(/* id 6, wireType 0 =*/48).uint32(message.source_gc);
            if (message.tokens != null && message.tokens.length)
                for (var i = 0; i < message.tokens.length; ++i)
                    $root.CMsgAMSendEmail.ReplacementToken.encode(message.tokens[i], writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CMsgAMSendEmail message, length delimited. Does not implicitly {@link CMsgAMSendEmail.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgAMSendEmail
         * @static
         * @param {ICMsgAMSendEmail} message CMsgAMSendEmail message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMSendEmail.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgAMSendEmail message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgAMSendEmail
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgAMSendEmail} CMsgAMSendEmail
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMSendEmail.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMSendEmail();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                case 2:
                    message.email_msg_type = reader.uint32();
                    break;
                case 3:
                    message.email_format = reader.uint32();
                    break;
                case 5:
                    if (!(message.persona_name_tokens && message.persona_name_tokens.length))
                        message.persona_name_tokens = [];
                    message.persona_name_tokens.push($root.CMsgAMSendEmail.PersonaNameReplacementToken.decode(reader, reader.uint32()));
                    break;
                case 6:
                    message.source_gc = reader.uint32();
                    break;
                case 7:
                    if (!(message.tokens && message.tokens.length))
                        message.tokens = [];
                    message.tokens.push($root.CMsgAMSendEmail.ReplacementToken.decode(reader, reader.uint32()));
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgAMSendEmail message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgAMSendEmail
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgAMSendEmail} CMsgAMSendEmail
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMSendEmail.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgAMSendEmail message.
         * @function verify
         * @memberof CMsgAMSendEmail
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgAMSendEmail.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            if (message.email_msg_type != null && message.hasOwnProperty("email_msg_type"))
                if (!$util.isInteger(message.email_msg_type))
                    return "email_msg_type: integer expected";
            if (message.email_format != null && message.hasOwnProperty("email_format"))
                if (!$util.isInteger(message.email_format))
                    return "email_format: integer expected";
            if (message.persona_name_tokens != null && message.hasOwnProperty("persona_name_tokens")) {
                if (!Array.isArray(message.persona_name_tokens))
                    return "persona_name_tokens: array expected";
                for (var i = 0; i < message.persona_name_tokens.length; ++i) {
                    var error = $root.CMsgAMSendEmail.PersonaNameReplacementToken.verify(message.persona_name_tokens[i]);
                    if (error)
                        return "persona_name_tokens." + error;
                }
            }
            if (message.source_gc != null && message.hasOwnProperty("source_gc"))
                if (!$util.isInteger(message.source_gc))
                    return "source_gc: integer expected";
            if (message.tokens != null && message.hasOwnProperty("tokens")) {
                if (!Array.isArray(message.tokens))
                    return "tokens: array expected";
                for (var i = 0; i < message.tokens.length; ++i) {
                    var error = $root.CMsgAMSendEmail.ReplacementToken.verify(message.tokens[i]);
                    if (error)
                        return "tokens." + error;
                }
            }
            return null;
        };
    
        /**
         * Creates a CMsgAMSendEmail message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgAMSendEmail
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgAMSendEmail} CMsgAMSendEmail
         */
        CMsgAMSendEmail.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgAMSendEmail)
                return object;
            var message = new $root.CMsgAMSendEmail();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            if (object.email_msg_type != null)
                message.email_msg_type = object.email_msg_type >>> 0;
            if (object.email_format != null)
                message.email_format = object.email_format >>> 0;
            if (object.persona_name_tokens) {
                if (!Array.isArray(object.persona_name_tokens))
                    throw TypeError(".CMsgAMSendEmail.persona_name_tokens: array expected");
                message.persona_name_tokens = [];
                for (var i = 0; i < object.persona_name_tokens.length; ++i) {
                    if (typeof object.persona_name_tokens[i] !== "object")
                        throw TypeError(".CMsgAMSendEmail.persona_name_tokens: object expected");
                    message.persona_name_tokens[i] = $root.CMsgAMSendEmail.PersonaNameReplacementToken.fromObject(object.persona_name_tokens[i]);
                }
            }
            if (object.source_gc != null)
                message.source_gc = object.source_gc >>> 0;
            if (object.tokens) {
                if (!Array.isArray(object.tokens))
                    throw TypeError(".CMsgAMSendEmail.tokens: array expected");
                message.tokens = [];
                for (var i = 0; i < object.tokens.length; ++i) {
                    if (typeof object.tokens[i] !== "object")
                        throw TypeError(".CMsgAMSendEmail.tokens: object expected");
                    message.tokens[i] = $root.CMsgAMSendEmail.ReplacementToken.fromObject(object.tokens[i]);
                }
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgAMSendEmail message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgAMSendEmail
         * @static
         * @param {CMsgAMSendEmail} message CMsgAMSendEmail
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgAMSendEmail.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults) {
                object.persona_name_tokens = [];
                object.tokens = [];
            }
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
                object.email_msg_type = 0;
                object.email_format = 0;
                object.source_gc = 0;
            }
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            if (message.email_msg_type != null && message.hasOwnProperty("email_msg_type"))
                object.email_msg_type = message.email_msg_type;
            if (message.email_format != null && message.hasOwnProperty("email_format"))
                object.email_format = message.email_format;
            if (message.persona_name_tokens && message.persona_name_tokens.length) {
                object.persona_name_tokens = [];
                for (var j = 0; j < message.persona_name_tokens.length; ++j)
                    object.persona_name_tokens[j] = $root.CMsgAMSendEmail.PersonaNameReplacementToken.toObject(message.persona_name_tokens[j], options);
            }
            if (message.source_gc != null && message.hasOwnProperty("source_gc"))
                object.source_gc = message.source_gc;
            if (message.tokens && message.tokens.length) {
                object.tokens = [];
                for (var j = 0; j < message.tokens.length; ++j)
                    object.tokens[j] = $root.CMsgAMSendEmail.ReplacementToken.toObject(message.tokens[j], options);
            }
            return object;
        };
    
        /**
         * Converts this CMsgAMSendEmail to JSON.
         * @function toJSON
         * @memberof CMsgAMSendEmail
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgAMSendEmail.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgAMSendEmail.ReplacementToken = (function() {
    
            /**
             * Properties of a ReplacementToken.
             * @memberof CMsgAMSendEmail
             * @interface IReplacementToken
             * @property {string|null} [token_name] ReplacementToken token_name
             * @property {string|null} [token_value] ReplacementToken token_value
             */
    
            /**
             * Constructs a new ReplacementToken.
             * @memberof CMsgAMSendEmail
             * @classdesc Represents a ReplacementToken.
             * @implements IReplacementToken
             * @constructor
             * @param {CMsgAMSendEmail.IReplacementToken=} [properties] Properties to set
             */
            function ReplacementToken(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * ReplacementToken token_name.
             * @member {string} token_name
             * @memberof CMsgAMSendEmail.ReplacementToken
             * @instance
             */
            ReplacementToken.prototype.token_name = "";
    
            /**
             * ReplacementToken token_value.
             * @member {string} token_value
             * @memberof CMsgAMSendEmail.ReplacementToken
             * @instance
             */
            ReplacementToken.prototype.token_value = "";
    
            /**
             * Creates a new ReplacementToken instance using the specified properties.
             * @function create
             * @memberof CMsgAMSendEmail.ReplacementToken
             * @static
             * @param {CMsgAMSendEmail.IReplacementToken=} [properties] Properties to set
             * @returns {CMsgAMSendEmail.ReplacementToken} ReplacementToken instance
             */
            ReplacementToken.create = function create(properties) {
                return new ReplacementToken(properties);
            };
    
            /**
             * Encodes the specified ReplacementToken message. Does not implicitly {@link CMsgAMSendEmail.ReplacementToken.verify|verify} messages.
             * @function encode
             * @memberof CMsgAMSendEmail.ReplacementToken
             * @static
             * @param {CMsgAMSendEmail.IReplacementToken} message ReplacementToken message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            ReplacementToken.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.token_name != null && message.hasOwnProperty("token_name"))
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.token_name);
                if (message.token_value != null && message.hasOwnProperty("token_value"))
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.token_value);
                return writer;
            };
    
            /**
             * Encodes the specified ReplacementToken message, length delimited. Does not implicitly {@link CMsgAMSendEmail.ReplacementToken.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgAMSendEmail.ReplacementToken
             * @static
             * @param {CMsgAMSendEmail.IReplacementToken} message ReplacementToken message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            ReplacementToken.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a ReplacementToken message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgAMSendEmail.ReplacementToken
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgAMSendEmail.ReplacementToken} ReplacementToken
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            ReplacementToken.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMSendEmail.ReplacementToken();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.token_name = reader.string();
                        break;
                    case 2:
                        message.token_value = reader.string();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a ReplacementToken message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgAMSendEmail.ReplacementToken
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgAMSendEmail.ReplacementToken} ReplacementToken
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            ReplacementToken.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a ReplacementToken message.
             * @function verify
             * @memberof CMsgAMSendEmail.ReplacementToken
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            ReplacementToken.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.token_name != null && message.hasOwnProperty("token_name"))
                    if (!$util.isString(message.token_name))
                        return "token_name: string expected";
                if (message.token_value != null && message.hasOwnProperty("token_value"))
                    if (!$util.isString(message.token_value))
                        return "token_value: string expected";
                return null;
            };
    
            /**
             * Creates a ReplacementToken message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgAMSendEmail.ReplacementToken
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgAMSendEmail.ReplacementToken} ReplacementToken
             */
            ReplacementToken.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgAMSendEmail.ReplacementToken)
                    return object;
                var message = new $root.CMsgAMSendEmail.ReplacementToken();
                if (object.token_name != null)
                    message.token_name = String(object.token_name);
                if (object.token_value != null)
                    message.token_value = String(object.token_value);
                return message;
            };
    
            /**
             * Creates a plain object from a ReplacementToken message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgAMSendEmail.ReplacementToken
             * @static
             * @param {CMsgAMSendEmail.ReplacementToken} message ReplacementToken
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            ReplacementToken.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.token_name = "";
                    object.token_value = "";
                }
                if (message.token_name != null && message.hasOwnProperty("token_name"))
                    object.token_name = message.token_name;
                if (message.token_value != null && message.hasOwnProperty("token_value"))
                    object.token_value = message.token_value;
                return object;
            };
    
            /**
             * Converts this ReplacementToken to JSON.
             * @function toJSON
             * @memberof CMsgAMSendEmail.ReplacementToken
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            ReplacementToken.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return ReplacementToken;
        })();
    
        CMsgAMSendEmail.PersonaNameReplacementToken = (function() {
    
            /**
             * Properties of a PersonaNameReplacementToken.
             * @memberof CMsgAMSendEmail
             * @interface IPersonaNameReplacementToken
             * @property {number|Long|null} [steamid] PersonaNameReplacementToken steamid
             * @property {string|null} [token_name] PersonaNameReplacementToken token_name
             */
    
            /**
             * Constructs a new PersonaNameReplacementToken.
             * @memberof CMsgAMSendEmail
             * @classdesc Represents a PersonaNameReplacementToken.
             * @implements IPersonaNameReplacementToken
             * @constructor
             * @param {CMsgAMSendEmail.IPersonaNameReplacementToken=} [properties] Properties to set
             */
            function PersonaNameReplacementToken(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * PersonaNameReplacementToken steamid.
             * @member {number|Long} steamid
             * @memberof CMsgAMSendEmail.PersonaNameReplacementToken
             * @instance
             */
            PersonaNameReplacementToken.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
            /**
             * PersonaNameReplacementToken token_name.
             * @member {string} token_name
             * @memberof CMsgAMSendEmail.PersonaNameReplacementToken
             * @instance
             */
            PersonaNameReplacementToken.prototype.token_name = "";
    
            /**
             * Creates a new PersonaNameReplacementToken instance using the specified properties.
             * @function create
             * @memberof CMsgAMSendEmail.PersonaNameReplacementToken
             * @static
             * @param {CMsgAMSendEmail.IPersonaNameReplacementToken=} [properties] Properties to set
             * @returns {CMsgAMSendEmail.PersonaNameReplacementToken} PersonaNameReplacementToken instance
             */
            PersonaNameReplacementToken.create = function create(properties) {
                return new PersonaNameReplacementToken(properties);
            };
    
            /**
             * Encodes the specified PersonaNameReplacementToken message. Does not implicitly {@link CMsgAMSendEmail.PersonaNameReplacementToken.verify|verify} messages.
             * @function encode
             * @memberof CMsgAMSendEmail.PersonaNameReplacementToken
             * @static
             * @param {CMsgAMSendEmail.IPersonaNameReplacementToken} message PersonaNameReplacementToken message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            PersonaNameReplacementToken.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.steamid != null && message.hasOwnProperty("steamid"))
                    writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
                if (message.token_name != null && message.hasOwnProperty("token_name"))
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.token_name);
                return writer;
            };
    
            /**
             * Encodes the specified PersonaNameReplacementToken message, length delimited. Does not implicitly {@link CMsgAMSendEmail.PersonaNameReplacementToken.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgAMSendEmail.PersonaNameReplacementToken
             * @static
             * @param {CMsgAMSendEmail.IPersonaNameReplacementToken} message PersonaNameReplacementToken message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            PersonaNameReplacementToken.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a PersonaNameReplacementToken message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgAMSendEmail.PersonaNameReplacementToken
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgAMSendEmail.PersonaNameReplacementToken} PersonaNameReplacementToken
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            PersonaNameReplacementToken.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMSendEmail.PersonaNameReplacementToken();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.steamid = reader.fixed64();
                        break;
                    case 2:
                        message.token_name = reader.string();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a PersonaNameReplacementToken message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgAMSendEmail.PersonaNameReplacementToken
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgAMSendEmail.PersonaNameReplacementToken} PersonaNameReplacementToken
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            PersonaNameReplacementToken.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a PersonaNameReplacementToken message.
             * @function verify
             * @memberof CMsgAMSendEmail.PersonaNameReplacementToken
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            PersonaNameReplacementToken.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.steamid != null && message.hasOwnProperty("steamid"))
                    if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                        return "steamid: integer|Long expected";
                if (message.token_name != null && message.hasOwnProperty("token_name"))
                    if (!$util.isString(message.token_name))
                        return "token_name: string expected";
                return null;
            };
    
            /**
             * Creates a PersonaNameReplacementToken message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgAMSendEmail.PersonaNameReplacementToken
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgAMSendEmail.PersonaNameReplacementToken} PersonaNameReplacementToken
             */
            PersonaNameReplacementToken.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgAMSendEmail.PersonaNameReplacementToken)
                    return object;
                var message = new $root.CMsgAMSendEmail.PersonaNameReplacementToken();
                if (object.steamid != null)
                    if ($util.Long)
                        (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                    else if (typeof object.steamid === "string")
                        message.steamid = parseInt(object.steamid, 10);
                    else if (typeof object.steamid === "number")
                        message.steamid = object.steamid;
                    else if (typeof object.steamid === "object")
                        message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
                if (object.token_name != null)
                    message.token_name = String(object.token_name);
                return message;
            };
    
            /**
             * Creates a plain object from a PersonaNameReplacementToken message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgAMSendEmail.PersonaNameReplacementToken
             * @static
             * @param {CMsgAMSendEmail.PersonaNameReplacementToken} message PersonaNameReplacementToken
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            PersonaNameReplacementToken.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, false);
                        object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                    } else
                        object.steamid = options.longs === String ? "0" : 0;
                    object.token_name = "";
                }
                if (message.steamid != null && message.hasOwnProperty("steamid"))
                    if (typeof message.steamid === "number")
                        object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                    else
                        object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
                if (message.token_name != null && message.hasOwnProperty("token_name"))
                    object.token_name = message.token_name;
                return object;
            };
    
            /**
             * Converts this PersonaNameReplacementToken to JSON.
             * @function toJSON
             * @memberof CMsgAMSendEmail.PersonaNameReplacementToken
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            PersonaNameReplacementToken.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return PersonaNameReplacementToken;
        })();
    
        return CMsgAMSendEmail;
    })();
    
    $root.CMsgAMSendEmailResponse = (function() {
    
        /**
         * Properties of a CMsgAMSendEmailResponse.
         * @exports ICMsgAMSendEmailResponse
         * @interface ICMsgAMSendEmailResponse
         * @property {number|null} [eresult] CMsgAMSendEmailResponse eresult
         */
    
        /**
         * Constructs a new CMsgAMSendEmailResponse.
         * @exports CMsgAMSendEmailResponse
         * @classdesc Represents a CMsgAMSendEmailResponse.
         * @implements ICMsgAMSendEmailResponse
         * @constructor
         * @param {ICMsgAMSendEmailResponse=} [properties] Properties to set
         */
        function CMsgAMSendEmailResponse(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgAMSendEmailResponse eresult.
         * @member {number} eresult
         * @memberof CMsgAMSendEmailResponse
         * @instance
         */
        CMsgAMSendEmailResponse.prototype.eresult = 2;
    
        /**
         * Creates a new CMsgAMSendEmailResponse instance using the specified properties.
         * @function create
         * @memberof CMsgAMSendEmailResponse
         * @static
         * @param {ICMsgAMSendEmailResponse=} [properties] Properties to set
         * @returns {CMsgAMSendEmailResponse} CMsgAMSendEmailResponse instance
         */
        CMsgAMSendEmailResponse.create = function create(properties) {
            return new CMsgAMSendEmailResponse(properties);
        };
    
        /**
         * Encodes the specified CMsgAMSendEmailResponse message. Does not implicitly {@link CMsgAMSendEmailResponse.verify|verify} messages.
         * @function encode
         * @memberof CMsgAMSendEmailResponse
         * @static
         * @param {ICMsgAMSendEmailResponse} message CMsgAMSendEmailResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMSendEmailResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.eresult);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgAMSendEmailResponse message, length delimited. Does not implicitly {@link CMsgAMSendEmailResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgAMSendEmailResponse
         * @static
         * @param {ICMsgAMSendEmailResponse} message CMsgAMSendEmailResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMSendEmailResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgAMSendEmailResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgAMSendEmailResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgAMSendEmailResponse} CMsgAMSendEmailResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMSendEmailResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMSendEmailResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.eresult = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgAMSendEmailResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgAMSendEmailResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgAMSendEmailResponse} CMsgAMSendEmailResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMSendEmailResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgAMSendEmailResponse message.
         * @function verify
         * @memberof CMsgAMSendEmailResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgAMSendEmailResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                if (!$util.isInteger(message.eresult))
                    return "eresult: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgAMSendEmailResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgAMSendEmailResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgAMSendEmailResponse} CMsgAMSendEmailResponse
         */
        CMsgAMSendEmailResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgAMSendEmailResponse)
                return object;
            var message = new $root.CMsgAMSendEmailResponse();
            if (object.eresult != null)
                message.eresult = object.eresult >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgAMSendEmailResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgAMSendEmailResponse
         * @static
         * @param {CMsgAMSendEmailResponse} message CMsgAMSendEmailResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgAMSendEmailResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.eresult = 2;
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                object.eresult = message.eresult;
            return object;
        };
    
        /**
         * Converts this CMsgAMSendEmailResponse to JSON.
         * @function toJSON
         * @memberof CMsgAMSendEmailResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgAMSendEmailResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgAMSendEmailResponse;
    })();
    
    $root.CMsgGCGetEmailTemplate = (function() {
    
        /**
         * Properties of a CMsgGCGetEmailTemplate.
         * @exports ICMsgGCGetEmailTemplate
         * @interface ICMsgGCGetEmailTemplate
         * @property {number|null} [app_id] CMsgGCGetEmailTemplate app_id
         * @property {number|null} [email_msg_type] CMsgGCGetEmailTemplate email_msg_type
         * @property {number|null} [email_lang] CMsgGCGetEmailTemplate email_lang
         * @property {number|null} [email_format] CMsgGCGetEmailTemplate email_format
         */
    
        /**
         * Constructs a new CMsgGCGetEmailTemplate.
         * @exports CMsgGCGetEmailTemplate
         * @classdesc Represents a CMsgGCGetEmailTemplate.
         * @implements ICMsgGCGetEmailTemplate
         * @constructor
         * @param {ICMsgGCGetEmailTemplate=} [properties] Properties to set
         */
        function CMsgGCGetEmailTemplate(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCGetEmailTemplate app_id.
         * @member {number} app_id
         * @memberof CMsgGCGetEmailTemplate
         * @instance
         */
        CMsgGCGetEmailTemplate.prototype.app_id = 0;
    
        /**
         * CMsgGCGetEmailTemplate email_msg_type.
         * @member {number} email_msg_type
         * @memberof CMsgGCGetEmailTemplate
         * @instance
         */
        CMsgGCGetEmailTemplate.prototype.email_msg_type = 0;
    
        /**
         * CMsgGCGetEmailTemplate email_lang.
         * @member {number} email_lang
         * @memberof CMsgGCGetEmailTemplate
         * @instance
         */
        CMsgGCGetEmailTemplate.prototype.email_lang = 0;
    
        /**
         * CMsgGCGetEmailTemplate email_format.
         * @member {number} email_format
         * @memberof CMsgGCGetEmailTemplate
         * @instance
         */
        CMsgGCGetEmailTemplate.prototype.email_format = 0;
    
        /**
         * Creates a new CMsgGCGetEmailTemplate instance using the specified properties.
         * @function create
         * @memberof CMsgGCGetEmailTemplate
         * @static
         * @param {ICMsgGCGetEmailTemplate=} [properties] Properties to set
         * @returns {CMsgGCGetEmailTemplate} CMsgGCGetEmailTemplate instance
         */
        CMsgGCGetEmailTemplate.create = function create(properties) {
            return new CMsgGCGetEmailTemplate(properties);
        };
    
        /**
         * Encodes the specified CMsgGCGetEmailTemplate message. Does not implicitly {@link CMsgGCGetEmailTemplate.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCGetEmailTemplate
         * @static
         * @param {ICMsgGCGetEmailTemplate} message CMsgGCGetEmailTemplate message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetEmailTemplate.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.app_id != null && message.hasOwnProperty("app_id"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.app_id);
            if (message.email_msg_type != null && message.hasOwnProperty("email_msg_type"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.email_msg_type);
            if (message.email_lang != null && message.hasOwnProperty("email_lang"))
                writer.uint32(/* id 3, wireType 0 =*/24).int32(message.email_lang);
            if (message.email_format != null && message.hasOwnProperty("email_format"))
                writer.uint32(/* id 4, wireType 0 =*/32).int32(message.email_format);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCGetEmailTemplate message, length delimited. Does not implicitly {@link CMsgGCGetEmailTemplate.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCGetEmailTemplate
         * @static
         * @param {ICMsgGCGetEmailTemplate} message CMsgGCGetEmailTemplate message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetEmailTemplate.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCGetEmailTemplate message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCGetEmailTemplate
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCGetEmailTemplate} CMsgGCGetEmailTemplate
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetEmailTemplate.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCGetEmailTemplate();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.app_id = reader.uint32();
                    break;
                case 2:
                    message.email_msg_type = reader.uint32();
                    break;
                case 3:
                    message.email_lang = reader.int32();
                    break;
                case 4:
                    message.email_format = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCGetEmailTemplate message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCGetEmailTemplate
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCGetEmailTemplate} CMsgGCGetEmailTemplate
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetEmailTemplate.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCGetEmailTemplate message.
         * @function verify
         * @memberof CMsgGCGetEmailTemplate
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCGetEmailTemplate.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.app_id != null && message.hasOwnProperty("app_id"))
                if (!$util.isInteger(message.app_id))
                    return "app_id: integer expected";
            if (message.email_msg_type != null && message.hasOwnProperty("email_msg_type"))
                if (!$util.isInteger(message.email_msg_type))
                    return "email_msg_type: integer expected";
            if (message.email_lang != null && message.hasOwnProperty("email_lang"))
                if (!$util.isInteger(message.email_lang))
                    return "email_lang: integer expected";
            if (message.email_format != null && message.hasOwnProperty("email_format"))
                if (!$util.isInteger(message.email_format))
                    return "email_format: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCGetEmailTemplate message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCGetEmailTemplate
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCGetEmailTemplate} CMsgGCGetEmailTemplate
         */
        CMsgGCGetEmailTemplate.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCGetEmailTemplate)
                return object;
            var message = new $root.CMsgGCGetEmailTemplate();
            if (object.app_id != null)
                message.app_id = object.app_id >>> 0;
            if (object.email_msg_type != null)
                message.email_msg_type = object.email_msg_type >>> 0;
            if (object.email_lang != null)
                message.email_lang = object.email_lang | 0;
            if (object.email_format != null)
                message.email_format = object.email_format | 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCGetEmailTemplate message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCGetEmailTemplate
         * @static
         * @param {CMsgGCGetEmailTemplate} message CMsgGCGetEmailTemplate
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCGetEmailTemplate.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.app_id = 0;
                object.email_msg_type = 0;
                object.email_lang = 0;
                object.email_format = 0;
            }
            if (message.app_id != null && message.hasOwnProperty("app_id"))
                object.app_id = message.app_id;
            if (message.email_msg_type != null && message.hasOwnProperty("email_msg_type"))
                object.email_msg_type = message.email_msg_type;
            if (message.email_lang != null && message.hasOwnProperty("email_lang"))
                object.email_lang = message.email_lang;
            if (message.email_format != null && message.hasOwnProperty("email_format"))
                object.email_format = message.email_format;
            return object;
        };
    
        /**
         * Converts this CMsgGCGetEmailTemplate to JSON.
         * @function toJSON
         * @memberof CMsgGCGetEmailTemplate
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCGetEmailTemplate.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCGetEmailTemplate;
    })();
    
    $root.CMsgGCGetEmailTemplateResponse = (function() {
    
        /**
         * Properties of a CMsgGCGetEmailTemplateResponse.
         * @exports ICMsgGCGetEmailTemplateResponse
         * @interface ICMsgGCGetEmailTemplateResponse
         * @property {number|null} [eresult] CMsgGCGetEmailTemplateResponse eresult
         * @property {boolean|null} [template_exists] CMsgGCGetEmailTemplateResponse template_exists
         * @property {string|null} [template] CMsgGCGetEmailTemplateResponse template
         */
    
        /**
         * Constructs a new CMsgGCGetEmailTemplateResponse.
         * @exports CMsgGCGetEmailTemplateResponse
         * @classdesc Represents a CMsgGCGetEmailTemplateResponse.
         * @implements ICMsgGCGetEmailTemplateResponse
         * @constructor
         * @param {ICMsgGCGetEmailTemplateResponse=} [properties] Properties to set
         */
        function CMsgGCGetEmailTemplateResponse(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCGetEmailTemplateResponse eresult.
         * @member {number} eresult
         * @memberof CMsgGCGetEmailTemplateResponse
         * @instance
         */
        CMsgGCGetEmailTemplateResponse.prototype.eresult = 2;
    
        /**
         * CMsgGCGetEmailTemplateResponse template_exists.
         * @member {boolean} template_exists
         * @memberof CMsgGCGetEmailTemplateResponse
         * @instance
         */
        CMsgGCGetEmailTemplateResponse.prototype.template_exists = false;
    
        /**
         * CMsgGCGetEmailTemplateResponse template.
         * @member {string} template
         * @memberof CMsgGCGetEmailTemplateResponse
         * @instance
         */
        CMsgGCGetEmailTemplateResponse.prototype.template = "";
    
        /**
         * Creates a new CMsgGCGetEmailTemplateResponse instance using the specified properties.
         * @function create
         * @memberof CMsgGCGetEmailTemplateResponse
         * @static
         * @param {ICMsgGCGetEmailTemplateResponse=} [properties] Properties to set
         * @returns {CMsgGCGetEmailTemplateResponse} CMsgGCGetEmailTemplateResponse instance
         */
        CMsgGCGetEmailTemplateResponse.create = function create(properties) {
            return new CMsgGCGetEmailTemplateResponse(properties);
        };
    
        /**
         * Encodes the specified CMsgGCGetEmailTemplateResponse message. Does not implicitly {@link CMsgGCGetEmailTemplateResponse.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCGetEmailTemplateResponse
         * @static
         * @param {ICMsgGCGetEmailTemplateResponse} message CMsgGCGetEmailTemplateResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetEmailTemplateResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.eresult);
            if (message.template_exists != null && message.hasOwnProperty("template_exists"))
                writer.uint32(/* id 2, wireType 0 =*/16).bool(message.template_exists);
            if (message.template != null && message.hasOwnProperty("template"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.template);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCGetEmailTemplateResponse message, length delimited. Does not implicitly {@link CMsgGCGetEmailTemplateResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCGetEmailTemplateResponse
         * @static
         * @param {ICMsgGCGetEmailTemplateResponse} message CMsgGCGetEmailTemplateResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetEmailTemplateResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCGetEmailTemplateResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCGetEmailTemplateResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCGetEmailTemplateResponse} CMsgGCGetEmailTemplateResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetEmailTemplateResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCGetEmailTemplateResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.eresult = reader.uint32();
                    break;
                case 2:
                    message.template_exists = reader.bool();
                    break;
                case 3:
                    message.template = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCGetEmailTemplateResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCGetEmailTemplateResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCGetEmailTemplateResponse} CMsgGCGetEmailTemplateResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetEmailTemplateResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCGetEmailTemplateResponse message.
         * @function verify
         * @memberof CMsgGCGetEmailTemplateResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCGetEmailTemplateResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                if (!$util.isInteger(message.eresult))
                    return "eresult: integer expected";
            if (message.template_exists != null && message.hasOwnProperty("template_exists"))
                if (typeof message.template_exists !== "boolean")
                    return "template_exists: boolean expected";
            if (message.template != null && message.hasOwnProperty("template"))
                if (!$util.isString(message.template))
                    return "template: string expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCGetEmailTemplateResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCGetEmailTemplateResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCGetEmailTemplateResponse} CMsgGCGetEmailTemplateResponse
         */
        CMsgGCGetEmailTemplateResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCGetEmailTemplateResponse)
                return object;
            var message = new $root.CMsgGCGetEmailTemplateResponse();
            if (object.eresult != null)
                message.eresult = object.eresult >>> 0;
            if (object.template_exists != null)
                message.template_exists = Boolean(object.template_exists);
            if (object.template != null)
                message.template = String(object.template);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCGetEmailTemplateResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCGetEmailTemplateResponse
         * @static
         * @param {CMsgGCGetEmailTemplateResponse} message CMsgGCGetEmailTemplateResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCGetEmailTemplateResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.eresult = 2;
                object.template_exists = false;
                object.template = "";
            }
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                object.eresult = message.eresult;
            if (message.template_exists != null && message.hasOwnProperty("template_exists"))
                object.template_exists = message.template_exists;
            if (message.template != null && message.hasOwnProperty("template"))
                object.template = message.template;
            return object;
        };
    
        /**
         * Converts this CMsgGCGetEmailTemplateResponse to JSON.
         * @function toJSON
         * @memberof CMsgGCGetEmailTemplateResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCGetEmailTemplateResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCGetEmailTemplateResponse;
    })();
    
    $root.CMsgAMGrantGuestPasses2 = (function() {
    
        /**
         * Properties of a CMsgAMGrantGuestPasses2.
         * @exports ICMsgAMGrantGuestPasses2
         * @interface ICMsgAMGrantGuestPasses2
         * @property {number|Long|null} [steam_id] CMsgAMGrantGuestPasses2 steam_id
         * @property {number|null} [package_id] CMsgAMGrantGuestPasses2 package_id
         * @property {number|null} [passes_to_grant] CMsgAMGrantGuestPasses2 passes_to_grant
         * @property {number|null} [days_to_expiration] CMsgAMGrantGuestPasses2 days_to_expiration
         * @property {number|null} [action] CMsgAMGrantGuestPasses2 action
         */
    
        /**
         * Constructs a new CMsgAMGrantGuestPasses2.
         * @exports CMsgAMGrantGuestPasses2
         * @classdesc Represents a CMsgAMGrantGuestPasses2.
         * @implements ICMsgAMGrantGuestPasses2
         * @constructor
         * @param {ICMsgAMGrantGuestPasses2=} [properties] Properties to set
         */
        function CMsgAMGrantGuestPasses2(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgAMGrantGuestPasses2 steam_id.
         * @member {number|Long} steam_id
         * @memberof CMsgAMGrantGuestPasses2
         * @instance
         */
        CMsgAMGrantGuestPasses2.prototype.steam_id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgAMGrantGuestPasses2 package_id.
         * @member {number} package_id
         * @memberof CMsgAMGrantGuestPasses2
         * @instance
         */
        CMsgAMGrantGuestPasses2.prototype.package_id = 0;
    
        /**
         * CMsgAMGrantGuestPasses2 passes_to_grant.
         * @member {number} passes_to_grant
         * @memberof CMsgAMGrantGuestPasses2
         * @instance
         */
        CMsgAMGrantGuestPasses2.prototype.passes_to_grant = 0;
    
        /**
         * CMsgAMGrantGuestPasses2 days_to_expiration.
         * @member {number} days_to_expiration
         * @memberof CMsgAMGrantGuestPasses2
         * @instance
         */
        CMsgAMGrantGuestPasses2.prototype.days_to_expiration = 0;
    
        /**
         * CMsgAMGrantGuestPasses2 action.
         * @member {number} action
         * @memberof CMsgAMGrantGuestPasses2
         * @instance
         */
        CMsgAMGrantGuestPasses2.prototype.action = 0;
    
        /**
         * Creates a new CMsgAMGrantGuestPasses2 instance using the specified properties.
         * @function create
         * @memberof CMsgAMGrantGuestPasses2
         * @static
         * @param {ICMsgAMGrantGuestPasses2=} [properties] Properties to set
         * @returns {CMsgAMGrantGuestPasses2} CMsgAMGrantGuestPasses2 instance
         */
        CMsgAMGrantGuestPasses2.create = function create(properties) {
            return new CMsgAMGrantGuestPasses2(properties);
        };
    
        /**
         * Encodes the specified CMsgAMGrantGuestPasses2 message. Does not implicitly {@link CMsgAMGrantGuestPasses2.verify|verify} messages.
         * @function encode
         * @memberof CMsgAMGrantGuestPasses2
         * @static
         * @param {ICMsgAMGrantGuestPasses2} message CMsgAMGrantGuestPasses2 message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMGrantGuestPasses2.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steam_id);
            if (message.package_id != null && message.hasOwnProperty("package_id"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.package_id);
            if (message.passes_to_grant != null && message.hasOwnProperty("passes_to_grant"))
                writer.uint32(/* id 3, wireType 0 =*/24).int32(message.passes_to_grant);
            if (message.days_to_expiration != null && message.hasOwnProperty("days_to_expiration"))
                writer.uint32(/* id 4, wireType 0 =*/32).int32(message.days_to_expiration);
            if (message.action != null && message.hasOwnProperty("action"))
                writer.uint32(/* id 5, wireType 0 =*/40).int32(message.action);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgAMGrantGuestPasses2 message, length delimited. Does not implicitly {@link CMsgAMGrantGuestPasses2.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgAMGrantGuestPasses2
         * @static
         * @param {ICMsgAMGrantGuestPasses2} message CMsgAMGrantGuestPasses2 message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMGrantGuestPasses2.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgAMGrantGuestPasses2 message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgAMGrantGuestPasses2
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgAMGrantGuestPasses2} CMsgAMGrantGuestPasses2
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMGrantGuestPasses2.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMGrantGuestPasses2();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steam_id = reader.fixed64();
                    break;
                case 2:
                    message.package_id = reader.uint32();
                    break;
                case 3:
                    message.passes_to_grant = reader.int32();
                    break;
                case 4:
                    message.days_to_expiration = reader.int32();
                    break;
                case 5:
                    message.action = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgAMGrantGuestPasses2 message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgAMGrantGuestPasses2
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgAMGrantGuestPasses2} CMsgAMGrantGuestPasses2
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMGrantGuestPasses2.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgAMGrantGuestPasses2 message.
         * @function verify
         * @memberof CMsgAMGrantGuestPasses2
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgAMGrantGuestPasses2.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                if (!$util.isInteger(message.steam_id) && !(message.steam_id && $util.isInteger(message.steam_id.low) && $util.isInteger(message.steam_id.high)))
                    return "steam_id: integer|Long expected";
            if (message.package_id != null && message.hasOwnProperty("package_id"))
                if (!$util.isInteger(message.package_id))
                    return "package_id: integer expected";
            if (message.passes_to_grant != null && message.hasOwnProperty("passes_to_grant"))
                if (!$util.isInteger(message.passes_to_grant))
                    return "passes_to_grant: integer expected";
            if (message.days_to_expiration != null && message.hasOwnProperty("days_to_expiration"))
                if (!$util.isInteger(message.days_to_expiration))
                    return "days_to_expiration: integer expected";
            if (message.action != null && message.hasOwnProperty("action"))
                if (!$util.isInteger(message.action))
                    return "action: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgAMGrantGuestPasses2 message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgAMGrantGuestPasses2
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgAMGrantGuestPasses2} CMsgAMGrantGuestPasses2
         */
        CMsgAMGrantGuestPasses2.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgAMGrantGuestPasses2)
                return object;
            var message = new $root.CMsgAMGrantGuestPasses2();
            if (object.steam_id != null)
                if ($util.Long)
                    (message.steam_id = $util.Long.fromValue(object.steam_id)).unsigned = false;
                else if (typeof object.steam_id === "string")
                    message.steam_id = parseInt(object.steam_id, 10);
                else if (typeof object.steam_id === "number")
                    message.steam_id = object.steam_id;
                else if (typeof object.steam_id === "object")
                    message.steam_id = new $util.LongBits(object.steam_id.low >>> 0, object.steam_id.high >>> 0).toNumber();
            if (object.package_id != null)
                message.package_id = object.package_id >>> 0;
            if (object.passes_to_grant != null)
                message.passes_to_grant = object.passes_to_grant | 0;
            if (object.days_to_expiration != null)
                message.days_to_expiration = object.days_to_expiration | 0;
            if (object.action != null)
                message.action = object.action | 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgAMGrantGuestPasses2 message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgAMGrantGuestPasses2
         * @static
         * @param {CMsgAMGrantGuestPasses2} message CMsgAMGrantGuestPasses2
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgAMGrantGuestPasses2.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steam_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steam_id = options.longs === String ? "0" : 0;
                object.package_id = 0;
                object.passes_to_grant = 0;
                object.days_to_expiration = 0;
                object.action = 0;
            }
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                if (typeof message.steam_id === "number")
                    object.steam_id = options.longs === String ? String(message.steam_id) : message.steam_id;
                else
                    object.steam_id = options.longs === String ? $util.Long.prototype.toString.call(message.steam_id) : options.longs === Number ? new $util.LongBits(message.steam_id.low >>> 0, message.steam_id.high >>> 0).toNumber() : message.steam_id;
            if (message.package_id != null && message.hasOwnProperty("package_id"))
                object.package_id = message.package_id;
            if (message.passes_to_grant != null && message.hasOwnProperty("passes_to_grant"))
                object.passes_to_grant = message.passes_to_grant;
            if (message.days_to_expiration != null && message.hasOwnProperty("days_to_expiration"))
                object.days_to_expiration = message.days_to_expiration;
            if (message.action != null && message.hasOwnProperty("action"))
                object.action = message.action;
            return object;
        };
    
        /**
         * Converts this CMsgAMGrantGuestPasses2 to JSON.
         * @function toJSON
         * @memberof CMsgAMGrantGuestPasses2
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgAMGrantGuestPasses2.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgAMGrantGuestPasses2;
    })();
    
    $root.CMsgAMGrantGuestPasses2Response = (function() {
    
        /**
         * Properties of a CMsgAMGrantGuestPasses2Response.
         * @exports ICMsgAMGrantGuestPasses2Response
         * @interface ICMsgAMGrantGuestPasses2Response
         * @property {number|null} [eresult] CMsgAMGrantGuestPasses2Response eresult
         * @property {number|null} [passes_granted] CMsgAMGrantGuestPasses2Response passes_granted
         */
    
        /**
         * Constructs a new CMsgAMGrantGuestPasses2Response.
         * @exports CMsgAMGrantGuestPasses2Response
         * @classdesc Represents a CMsgAMGrantGuestPasses2Response.
         * @implements ICMsgAMGrantGuestPasses2Response
         * @constructor
         * @param {ICMsgAMGrantGuestPasses2Response=} [properties] Properties to set
         */
        function CMsgAMGrantGuestPasses2Response(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgAMGrantGuestPasses2Response eresult.
         * @member {number} eresult
         * @memberof CMsgAMGrantGuestPasses2Response
         * @instance
         */
        CMsgAMGrantGuestPasses2Response.prototype.eresult = 2;
    
        /**
         * CMsgAMGrantGuestPasses2Response passes_granted.
         * @member {number} passes_granted
         * @memberof CMsgAMGrantGuestPasses2Response
         * @instance
         */
        CMsgAMGrantGuestPasses2Response.prototype.passes_granted = 0;
    
        /**
         * Creates a new CMsgAMGrantGuestPasses2Response instance using the specified properties.
         * @function create
         * @memberof CMsgAMGrantGuestPasses2Response
         * @static
         * @param {ICMsgAMGrantGuestPasses2Response=} [properties] Properties to set
         * @returns {CMsgAMGrantGuestPasses2Response} CMsgAMGrantGuestPasses2Response instance
         */
        CMsgAMGrantGuestPasses2Response.create = function create(properties) {
            return new CMsgAMGrantGuestPasses2Response(properties);
        };
    
        /**
         * Encodes the specified CMsgAMGrantGuestPasses2Response message. Does not implicitly {@link CMsgAMGrantGuestPasses2Response.verify|verify} messages.
         * @function encode
         * @memberof CMsgAMGrantGuestPasses2Response
         * @static
         * @param {ICMsgAMGrantGuestPasses2Response} message CMsgAMGrantGuestPasses2Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMGrantGuestPasses2Response.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.eresult);
            if (message.passes_granted != null && message.hasOwnProperty("passes_granted"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.passes_granted);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgAMGrantGuestPasses2Response message, length delimited. Does not implicitly {@link CMsgAMGrantGuestPasses2Response.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgAMGrantGuestPasses2Response
         * @static
         * @param {ICMsgAMGrantGuestPasses2Response} message CMsgAMGrantGuestPasses2Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgAMGrantGuestPasses2Response.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgAMGrantGuestPasses2Response message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgAMGrantGuestPasses2Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgAMGrantGuestPasses2Response} CMsgAMGrantGuestPasses2Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMGrantGuestPasses2Response.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgAMGrantGuestPasses2Response();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.eresult = reader.int32();
                    break;
                case 2:
                    message.passes_granted = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgAMGrantGuestPasses2Response message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgAMGrantGuestPasses2Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgAMGrantGuestPasses2Response} CMsgAMGrantGuestPasses2Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgAMGrantGuestPasses2Response.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgAMGrantGuestPasses2Response message.
         * @function verify
         * @memberof CMsgAMGrantGuestPasses2Response
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgAMGrantGuestPasses2Response.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                if (!$util.isInteger(message.eresult))
                    return "eresult: integer expected";
            if (message.passes_granted != null && message.hasOwnProperty("passes_granted"))
                if (!$util.isInteger(message.passes_granted))
                    return "passes_granted: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgAMGrantGuestPasses2Response message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgAMGrantGuestPasses2Response
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgAMGrantGuestPasses2Response} CMsgAMGrantGuestPasses2Response
         */
        CMsgAMGrantGuestPasses2Response.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgAMGrantGuestPasses2Response)
                return object;
            var message = new $root.CMsgAMGrantGuestPasses2Response();
            if (object.eresult != null)
                message.eresult = object.eresult | 0;
            if (object.passes_granted != null)
                message.passes_granted = object.passes_granted | 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgAMGrantGuestPasses2Response message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgAMGrantGuestPasses2Response
         * @static
         * @param {CMsgAMGrantGuestPasses2Response} message CMsgAMGrantGuestPasses2Response
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgAMGrantGuestPasses2Response.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.eresult = 2;
                object.passes_granted = 0;
            }
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                object.eresult = message.eresult;
            if (message.passes_granted != null && message.hasOwnProperty("passes_granted"))
                object.passes_granted = message.passes_granted;
            return object;
        };
    
        /**
         * Converts this CMsgAMGrantGuestPasses2Response to JSON.
         * @function toJSON
         * @memberof CMsgAMGrantGuestPasses2Response
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgAMGrantGuestPasses2Response.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgAMGrantGuestPasses2Response;
    })();
    
    $root.CGCSystemMsg_GetAccountDetails = (function() {
    
        /**
         * Properties of a CGCSystemMsg_GetAccountDetails.
         * @exports ICGCSystemMsg_GetAccountDetails
         * @interface ICGCSystemMsg_GetAccountDetails
         * @property {number|Long|null} [steamid] CGCSystemMsg_GetAccountDetails steamid
         * @property {number|null} [appid] CGCSystemMsg_GetAccountDetails appid
         */
    
        /**
         * Constructs a new CGCSystemMsg_GetAccountDetails.
         * @exports CGCSystemMsg_GetAccountDetails
         * @classdesc Represents a CGCSystemMsg_GetAccountDetails.
         * @implements ICGCSystemMsg_GetAccountDetails
         * @constructor
         * @param {ICGCSystemMsg_GetAccountDetails=} [properties] Properties to set
         */
        function CGCSystemMsg_GetAccountDetails(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCSystemMsg_GetAccountDetails steamid.
         * @member {number|Long} steamid
         * @memberof CGCSystemMsg_GetAccountDetails
         * @instance
         */
        CGCSystemMsg_GetAccountDetails.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails appid.
         * @member {number} appid
         * @memberof CGCSystemMsg_GetAccountDetails
         * @instance
         */
        CGCSystemMsg_GetAccountDetails.prototype.appid = 0;
    
        /**
         * Creates a new CGCSystemMsg_GetAccountDetails instance using the specified properties.
         * @function create
         * @memberof CGCSystemMsg_GetAccountDetails
         * @static
         * @param {ICGCSystemMsg_GetAccountDetails=} [properties] Properties to set
         * @returns {CGCSystemMsg_GetAccountDetails} CGCSystemMsg_GetAccountDetails instance
         */
        CGCSystemMsg_GetAccountDetails.create = function create(properties) {
            return new CGCSystemMsg_GetAccountDetails(properties);
        };
    
        /**
         * Encodes the specified CGCSystemMsg_GetAccountDetails message. Does not implicitly {@link CGCSystemMsg_GetAccountDetails.verify|verify} messages.
         * @function encode
         * @memberof CGCSystemMsg_GetAccountDetails
         * @static
         * @param {ICGCSystemMsg_GetAccountDetails} message CGCSystemMsg_GetAccountDetails message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCSystemMsg_GetAccountDetails.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            if (message.appid != null && message.hasOwnProperty("appid"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.appid);
            return writer;
        };
    
        /**
         * Encodes the specified CGCSystemMsg_GetAccountDetails message, length delimited. Does not implicitly {@link CGCSystemMsg_GetAccountDetails.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCSystemMsg_GetAccountDetails
         * @static
         * @param {ICGCSystemMsg_GetAccountDetails} message CGCSystemMsg_GetAccountDetails message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCSystemMsg_GetAccountDetails.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCSystemMsg_GetAccountDetails message from the specified reader or buffer.
         * @function decode
         * @memberof CGCSystemMsg_GetAccountDetails
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCSystemMsg_GetAccountDetails} CGCSystemMsg_GetAccountDetails
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCSystemMsg_GetAccountDetails.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCSystemMsg_GetAccountDetails();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                case 2:
                    message.appid = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCSystemMsg_GetAccountDetails message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCSystemMsg_GetAccountDetails
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCSystemMsg_GetAccountDetails} CGCSystemMsg_GetAccountDetails
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCSystemMsg_GetAccountDetails.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCSystemMsg_GetAccountDetails message.
         * @function verify
         * @memberof CGCSystemMsg_GetAccountDetails
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCSystemMsg_GetAccountDetails.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            if (message.appid != null && message.hasOwnProperty("appid"))
                if (!$util.isInteger(message.appid))
                    return "appid: integer expected";
            return null;
        };
    
        /**
         * Creates a CGCSystemMsg_GetAccountDetails message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCSystemMsg_GetAccountDetails
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCSystemMsg_GetAccountDetails} CGCSystemMsg_GetAccountDetails
         */
        CGCSystemMsg_GetAccountDetails.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCSystemMsg_GetAccountDetails)
                return object;
            var message = new $root.CGCSystemMsg_GetAccountDetails();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            if (object.appid != null)
                message.appid = object.appid >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CGCSystemMsg_GetAccountDetails message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCSystemMsg_GetAccountDetails
         * @static
         * @param {CGCSystemMsg_GetAccountDetails} message CGCSystemMsg_GetAccountDetails
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCSystemMsg_GetAccountDetails.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
                object.appid = 0;
            }
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            if (message.appid != null && message.hasOwnProperty("appid"))
                object.appid = message.appid;
            return object;
        };
    
        /**
         * Converts this CGCSystemMsg_GetAccountDetails to JSON.
         * @function toJSON
         * @memberof CGCSystemMsg_GetAccountDetails
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCSystemMsg_GetAccountDetails.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCSystemMsg_GetAccountDetails;
    })();
    
    $root.CGCSystemMsg_GetAccountDetails_Response = (function() {
    
        /**
         * Properties of a CGCSystemMsg_GetAccountDetails_Response.
         * @exports ICGCSystemMsg_GetAccountDetails_Response
         * @interface ICGCSystemMsg_GetAccountDetails_Response
         * @property {number|null} [eresult_deprecated] CGCSystemMsg_GetAccountDetails_Response eresult_deprecated
         * @property {string|null} [account_name] CGCSystemMsg_GetAccountDetails_Response account_name
         * @property {string|null} [persona_name] CGCSystemMsg_GetAccountDetails_Response persona_name
         * @property {boolean|null} [is_profile_public] CGCSystemMsg_GetAccountDetails_Response is_profile_public
         * @property {boolean|null} [is_inventory_public] CGCSystemMsg_GetAccountDetails_Response is_inventory_public
         * @property {boolean|null} [is_vac_banned] CGCSystemMsg_GetAccountDetails_Response is_vac_banned
         * @property {boolean|null} [is_cyber_cafe] CGCSystemMsg_GetAccountDetails_Response is_cyber_cafe
         * @property {boolean|null} [is_school_account] CGCSystemMsg_GetAccountDetails_Response is_school_account
         * @property {boolean|null} [is_limited] CGCSystemMsg_GetAccountDetails_Response is_limited
         * @property {boolean|null} [is_subscribed] CGCSystemMsg_GetAccountDetails_Response is_subscribed
         * @property {number|null} ["package"] CGCSystemMsg_GetAccountDetails_Response package
         * @property {boolean|null} [is_free_trial_account] CGCSystemMsg_GetAccountDetails_Response is_free_trial_account
         * @property {number|null} [free_trial_expiration] CGCSystemMsg_GetAccountDetails_Response free_trial_expiration
         * @property {boolean|null} [is_low_violence] CGCSystemMsg_GetAccountDetails_Response is_low_violence
         * @property {boolean|null} [is_account_locked_down] CGCSystemMsg_GetAccountDetails_Response is_account_locked_down
         * @property {boolean|null} [is_community_banned] CGCSystemMsg_GetAccountDetails_Response is_community_banned
         * @property {boolean|null} [is_trade_banned] CGCSystemMsg_GetAccountDetails_Response is_trade_banned
         * @property {number|null} [trade_ban_expiration] CGCSystemMsg_GetAccountDetails_Response trade_ban_expiration
         * @property {number|null} [accountid] CGCSystemMsg_GetAccountDetails_Response accountid
         * @property {number|null} [suspension_end_time] CGCSystemMsg_GetAccountDetails_Response suspension_end_time
         * @property {string|null} [currency] CGCSystemMsg_GetAccountDetails_Response currency
         * @property {number|null} [steam_level] CGCSystemMsg_GetAccountDetails_Response steam_level
         * @property {number|null} [friend_count] CGCSystemMsg_GetAccountDetails_Response friend_count
         * @property {number|null} [account_creation_time] CGCSystemMsg_GetAccountDetails_Response account_creation_time
         * @property {boolean|null} [is_steamguard_enabled] CGCSystemMsg_GetAccountDetails_Response is_steamguard_enabled
         * @property {boolean|null} [is_phone_verified] CGCSystemMsg_GetAccountDetails_Response is_phone_verified
         * @property {boolean|null} [is_two_factor_auth_enabled] CGCSystemMsg_GetAccountDetails_Response is_two_factor_auth_enabled
         * @property {number|null} [two_factor_enabled_time] CGCSystemMsg_GetAccountDetails_Response two_factor_enabled_time
         * @property {number|null} [phone_verification_time] CGCSystemMsg_GetAccountDetails_Response phone_verification_time
         * @property {number|Long|null} [phone_id] CGCSystemMsg_GetAccountDetails_Response phone_id
         * @property {boolean|null} [is_phone_identifying] CGCSystemMsg_GetAccountDetails_Response is_phone_identifying
         * @property {number|null} [rt_identity_linked] CGCSystemMsg_GetAccountDetails_Response rt_identity_linked
         * @property {number|null} [rt_birth_date] CGCSystemMsg_GetAccountDetails_Response rt_birth_date
         * @property {string|null} [txn_country_code] CGCSystemMsg_GetAccountDetails_Response txn_country_code
         */
    
        /**
         * Constructs a new CGCSystemMsg_GetAccountDetails_Response.
         * @exports CGCSystemMsg_GetAccountDetails_Response
         * @classdesc Represents a CGCSystemMsg_GetAccountDetails_Response.
         * @implements ICGCSystemMsg_GetAccountDetails_Response
         * @constructor
         * @param {ICGCSystemMsg_GetAccountDetails_Response=} [properties] Properties to set
         */
        function CGCSystemMsg_GetAccountDetails_Response(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response eresult_deprecated.
         * @member {number} eresult_deprecated
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.eresult_deprecated = 2;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response account_name.
         * @member {string} account_name
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.account_name = "";
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response persona_name.
         * @member {string} persona_name
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.persona_name = "";
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_profile_public.
         * @member {boolean} is_profile_public
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_profile_public = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_inventory_public.
         * @member {boolean} is_inventory_public
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_inventory_public = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_vac_banned.
         * @member {boolean} is_vac_banned
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_vac_banned = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_cyber_cafe.
         * @member {boolean} is_cyber_cafe
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_cyber_cafe = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_school_account.
         * @member {boolean} is_school_account
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_school_account = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_limited.
         * @member {boolean} is_limited
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_limited = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_subscribed.
         * @member {boolean} is_subscribed
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_subscribed = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response package.
         * @member {number} package
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype["package"] = 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_free_trial_account.
         * @member {boolean} is_free_trial_account
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_free_trial_account = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response free_trial_expiration.
         * @member {number} free_trial_expiration
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.free_trial_expiration = 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_low_violence.
         * @member {boolean} is_low_violence
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_low_violence = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_account_locked_down.
         * @member {boolean} is_account_locked_down
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_account_locked_down = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_community_banned.
         * @member {boolean} is_community_banned
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_community_banned = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_trade_banned.
         * @member {boolean} is_trade_banned
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_trade_banned = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response trade_ban_expiration.
         * @member {number} trade_ban_expiration
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.trade_ban_expiration = 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response accountid.
         * @member {number} accountid
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.accountid = 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response suspension_end_time.
         * @member {number} suspension_end_time
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.suspension_end_time = 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response currency.
         * @member {string} currency
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.currency = "";
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response steam_level.
         * @member {number} steam_level
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.steam_level = 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response friend_count.
         * @member {number} friend_count
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.friend_count = 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response account_creation_time.
         * @member {number} account_creation_time
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.account_creation_time = 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_steamguard_enabled.
         * @member {boolean} is_steamguard_enabled
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_steamguard_enabled = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_phone_verified.
         * @member {boolean} is_phone_verified
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_phone_verified = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_two_factor_auth_enabled.
         * @member {boolean} is_two_factor_auth_enabled
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_two_factor_auth_enabled = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response two_factor_enabled_time.
         * @member {number} two_factor_enabled_time
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.two_factor_enabled_time = 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response phone_verification_time.
         * @member {number} phone_verification_time
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.phone_verification_time = 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response phone_id.
         * @member {number|Long} phone_id
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.phone_id = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response is_phone_identifying.
         * @member {boolean} is_phone_identifying
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.is_phone_identifying = false;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response rt_identity_linked.
         * @member {number} rt_identity_linked
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.rt_identity_linked = 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response rt_birth_date.
         * @member {number} rt_birth_date
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.rt_birth_date = 0;
    
        /**
         * CGCSystemMsg_GetAccountDetails_Response txn_country_code.
         * @member {string} txn_country_code
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.txn_country_code = "";
    
        /**
         * Creates a new CGCSystemMsg_GetAccountDetails_Response instance using the specified properties.
         * @function create
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @static
         * @param {ICGCSystemMsg_GetAccountDetails_Response=} [properties] Properties to set
         * @returns {CGCSystemMsg_GetAccountDetails_Response} CGCSystemMsg_GetAccountDetails_Response instance
         */
        CGCSystemMsg_GetAccountDetails_Response.create = function create(properties) {
            return new CGCSystemMsg_GetAccountDetails_Response(properties);
        };
    
        /**
         * Encodes the specified CGCSystemMsg_GetAccountDetails_Response message. Does not implicitly {@link CGCSystemMsg_GetAccountDetails_Response.verify|verify} messages.
         * @function encode
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @static
         * @param {ICGCSystemMsg_GetAccountDetails_Response} message CGCSystemMsg_GetAccountDetails_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCSystemMsg_GetAccountDetails_Response.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.eresult_deprecated != null && message.hasOwnProperty("eresult_deprecated"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.eresult_deprecated);
            if (message.account_name != null && message.hasOwnProperty("account_name"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.account_name);
            if (message.persona_name != null && message.hasOwnProperty("persona_name"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.persona_name);
            if (message.is_profile_public != null && message.hasOwnProperty("is_profile_public"))
                writer.uint32(/* id 4, wireType 0 =*/32).bool(message.is_profile_public);
            if (message.is_inventory_public != null && message.hasOwnProperty("is_inventory_public"))
                writer.uint32(/* id 5, wireType 0 =*/40).bool(message.is_inventory_public);
            if (message.is_vac_banned != null && message.hasOwnProperty("is_vac_banned"))
                writer.uint32(/* id 7, wireType 0 =*/56).bool(message.is_vac_banned);
            if (message.is_cyber_cafe != null && message.hasOwnProperty("is_cyber_cafe"))
                writer.uint32(/* id 8, wireType 0 =*/64).bool(message.is_cyber_cafe);
            if (message.is_school_account != null && message.hasOwnProperty("is_school_account"))
                writer.uint32(/* id 9, wireType 0 =*/72).bool(message.is_school_account);
            if (message.is_limited != null && message.hasOwnProperty("is_limited"))
                writer.uint32(/* id 10, wireType 0 =*/80).bool(message.is_limited);
            if (message.is_subscribed != null && message.hasOwnProperty("is_subscribed"))
                writer.uint32(/* id 11, wireType 0 =*/88).bool(message.is_subscribed);
            if (message["package"] != null && message.hasOwnProperty("package"))
                writer.uint32(/* id 12, wireType 0 =*/96).uint32(message["package"]);
            if (message.is_free_trial_account != null && message.hasOwnProperty("is_free_trial_account"))
                writer.uint32(/* id 13, wireType 0 =*/104).bool(message.is_free_trial_account);
            if (message.free_trial_expiration != null && message.hasOwnProperty("free_trial_expiration"))
                writer.uint32(/* id 14, wireType 0 =*/112).uint32(message.free_trial_expiration);
            if (message.is_low_violence != null && message.hasOwnProperty("is_low_violence"))
                writer.uint32(/* id 15, wireType 0 =*/120).bool(message.is_low_violence);
            if (message.is_account_locked_down != null && message.hasOwnProperty("is_account_locked_down"))
                writer.uint32(/* id 16, wireType 0 =*/128).bool(message.is_account_locked_down);
            if (message.is_community_banned != null && message.hasOwnProperty("is_community_banned"))
                writer.uint32(/* id 17, wireType 0 =*/136).bool(message.is_community_banned);
            if (message.is_trade_banned != null && message.hasOwnProperty("is_trade_banned"))
                writer.uint32(/* id 18, wireType 0 =*/144).bool(message.is_trade_banned);
            if (message.trade_ban_expiration != null && message.hasOwnProperty("trade_ban_expiration"))
                writer.uint32(/* id 19, wireType 0 =*/152).uint32(message.trade_ban_expiration);
            if (message.accountid != null && message.hasOwnProperty("accountid"))
                writer.uint32(/* id 20, wireType 0 =*/160).uint32(message.accountid);
            if (message.suspension_end_time != null && message.hasOwnProperty("suspension_end_time"))
                writer.uint32(/* id 21, wireType 0 =*/168).uint32(message.suspension_end_time);
            if (message.currency != null && message.hasOwnProperty("currency"))
                writer.uint32(/* id 22, wireType 2 =*/178).string(message.currency);
            if (message.steam_level != null && message.hasOwnProperty("steam_level"))
                writer.uint32(/* id 23, wireType 0 =*/184).uint32(message.steam_level);
            if (message.friend_count != null && message.hasOwnProperty("friend_count"))
                writer.uint32(/* id 24, wireType 0 =*/192).uint32(message.friend_count);
            if (message.account_creation_time != null && message.hasOwnProperty("account_creation_time"))
                writer.uint32(/* id 25, wireType 0 =*/200).uint32(message.account_creation_time);
            if (message.is_steamguard_enabled != null && message.hasOwnProperty("is_steamguard_enabled"))
                writer.uint32(/* id 27, wireType 0 =*/216).bool(message.is_steamguard_enabled);
            if (message.is_phone_verified != null && message.hasOwnProperty("is_phone_verified"))
                writer.uint32(/* id 28, wireType 0 =*/224).bool(message.is_phone_verified);
            if (message.is_two_factor_auth_enabled != null && message.hasOwnProperty("is_two_factor_auth_enabled"))
                writer.uint32(/* id 29, wireType 0 =*/232).bool(message.is_two_factor_auth_enabled);
            if (message.two_factor_enabled_time != null && message.hasOwnProperty("two_factor_enabled_time"))
                writer.uint32(/* id 30, wireType 0 =*/240).uint32(message.two_factor_enabled_time);
            if (message.phone_verification_time != null && message.hasOwnProperty("phone_verification_time"))
                writer.uint32(/* id 31, wireType 0 =*/248).uint32(message.phone_verification_time);
            if (message.phone_id != null && message.hasOwnProperty("phone_id"))
                writer.uint32(/* id 33, wireType 0 =*/264).uint64(message.phone_id);
            if (message.is_phone_identifying != null && message.hasOwnProperty("is_phone_identifying"))
                writer.uint32(/* id 34, wireType 0 =*/272).bool(message.is_phone_identifying);
            if (message.rt_identity_linked != null && message.hasOwnProperty("rt_identity_linked"))
                writer.uint32(/* id 35, wireType 0 =*/280).uint32(message.rt_identity_linked);
            if (message.rt_birth_date != null && message.hasOwnProperty("rt_birth_date"))
                writer.uint32(/* id 36, wireType 0 =*/288).uint32(message.rt_birth_date);
            if (message.txn_country_code != null && message.hasOwnProperty("txn_country_code"))
                writer.uint32(/* id 37, wireType 2 =*/298).string(message.txn_country_code);
            return writer;
        };
    
        /**
         * Encodes the specified CGCSystemMsg_GetAccountDetails_Response message, length delimited. Does not implicitly {@link CGCSystemMsg_GetAccountDetails_Response.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @static
         * @param {ICGCSystemMsg_GetAccountDetails_Response} message CGCSystemMsg_GetAccountDetails_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCSystemMsg_GetAccountDetails_Response.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCSystemMsg_GetAccountDetails_Response message from the specified reader or buffer.
         * @function decode
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCSystemMsg_GetAccountDetails_Response} CGCSystemMsg_GetAccountDetails_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCSystemMsg_GetAccountDetails_Response.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCSystemMsg_GetAccountDetails_Response();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.eresult_deprecated = reader.uint32();
                    break;
                case 2:
                    message.account_name = reader.string();
                    break;
                case 3:
                    message.persona_name = reader.string();
                    break;
                case 4:
                    message.is_profile_public = reader.bool();
                    break;
                case 5:
                    message.is_inventory_public = reader.bool();
                    break;
                case 7:
                    message.is_vac_banned = reader.bool();
                    break;
                case 8:
                    message.is_cyber_cafe = reader.bool();
                    break;
                case 9:
                    message.is_school_account = reader.bool();
                    break;
                case 10:
                    message.is_limited = reader.bool();
                    break;
                case 11:
                    message.is_subscribed = reader.bool();
                    break;
                case 12:
                    message["package"] = reader.uint32();
                    break;
                case 13:
                    message.is_free_trial_account = reader.bool();
                    break;
                case 14:
                    message.free_trial_expiration = reader.uint32();
                    break;
                case 15:
                    message.is_low_violence = reader.bool();
                    break;
                case 16:
                    message.is_account_locked_down = reader.bool();
                    break;
                case 17:
                    message.is_community_banned = reader.bool();
                    break;
                case 18:
                    message.is_trade_banned = reader.bool();
                    break;
                case 19:
                    message.trade_ban_expiration = reader.uint32();
                    break;
                case 20:
                    message.accountid = reader.uint32();
                    break;
                case 21:
                    message.suspension_end_time = reader.uint32();
                    break;
                case 22:
                    message.currency = reader.string();
                    break;
                case 23:
                    message.steam_level = reader.uint32();
                    break;
                case 24:
                    message.friend_count = reader.uint32();
                    break;
                case 25:
                    message.account_creation_time = reader.uint32();
                    break;
                case 27:
                    message.is_steamguard_enabled = reader.bool();
                    break;
                case 28:
                    message.is_phone_verified = reader.bool();
                    break;
                case 29:
                    message.is_two_factor_auth_enabled = reader.bool();
                    break;
                case 30:
                    message.two_factor_enabled_time = reader.uint32();
                    break;
                case 31:
                    message.phone_verification_time = reader.uint32();
                    break;
                case 33:
                    message.phone_id = reader.uint64();
                    break;
                case 34:
                    message.is_phone_identifying = reader.bool();
                    break;
                case 35:
                    message.rt_identity_linked = reader.uint32();
                    break;
                case 36:
                    message.rt_birth_date = reader.uint32();
                    break;
                case 37:
                    message.txn_country_code = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCSystemMsg_GetAccountDetails_Response message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCSystemMsg_GetAccountDetails_Response} CGCSystemMsg_GetAccountDetails_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCSystemMsg_GetAccountDetails_Response.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCSystemMsg_GetAccountDetails_Response message.
         * @function verify
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCSystemMsg_GetAccountDetails_Response.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.eresult_deprecated != null && message.hasOwnProperty("eresult_deprecated"))
                if (!$util.isInteger(message.eresult_deprecated))
                    return "eresult_deprecated: integer expected";
            if (message.account_name != null && message.hasOwnProperty("account_name"))
                if (!$util.isString(message.account_name))
                    return "account_name: string expected";
            if (message.persona_name != null && message.hasOwnProperty("persona_name"))
                if (!$util.isString(message.persona_name))
                    return "persona_name: string expected";
            if (message.is_profile_public != null && message.hasOwnProperty("is_profile_public"))
                if (typeof message.is_profile_public !== "boolean")
                    return "is_profile_public: boolean expected";
            if (message.is_inventory_public != null && message.hasOwnProperty("is_inventory_public"))
                if (typeof message.is_inventory_public !== "boolean")
                    return "is_inventory_public: boolean expected";
            if (message.is_vac_banned != null && message.hasOwnProperty("is_vac_banned"))
                if (typeof message.is_vac_banned !== "boolean")
                    return "is_vac_banned: boolean expected";
            if (message.is_cyber_cafe != null && message.hasOwnProperty("is_cyber_cafe"))
                if (typeof message.is_cyber_cafe !== "boolean")
                    return "is_cyber_cafe: boolean expected";
            if (message.is_school_account != null && message.hasOwnProperty("is_school_account"))
                if (typeof message.is_school_account !== "boolean")
                    return "is_school_account: boolean expected";
            if (message.is_limited != null && message.hasOwnProperty("is_limited"))
                if (typeof message.is_limited !== "boolean")
                    return "is_limited: boolean expected";
            if (message.is_subscribed != null && message.hasOwnProperty("is_subscribed"))
                if (typeof message.is_subscribed !== "boolean")
                    return "is_subscribed: boolean expected";
            if (message["package"] != null && message.hasOwnProperty("package"))
                if (!$util.isInteger(message["package"]))
                    return "package: integer expected";
            if (message.is_free_trial_account != null && message.hasOwnProperty("is_free_trial_account"))
                if (typeof message.is_free_trial_account !== "boolean")
                    return "is_free_trial_account: boolean expected";
            if (message.free_trial_expiration != null && message.hasOwnProperty("free_trial_expiration"))
                if (!$util.isInteger(message.free_trial_expiration))
                    return "free_trial_expiration: integer expected";
            if (message.is_low_violence != null && message.hasOwnProperty("is_low_violence"))
                if (typeof message.is_low_violence !== "boolean")
                    return "is_low_violence: boolean expected";
            if (message.is_account_locked_down != null && message.hasOwnProperty("is_account_locked_down"))
                if (typeof message.is_account_locked_down !== "boolean")
                    return "is_account_locked_down: boolean expected";
            if (message.is_community_banned != null && message.hasOwnProperty("is_community_banned"))
                if (typeof message.is_community_banned !== "boolean")
                    return "is_community_banned: boolean expected";
            if (message.is_trade_banned != null && message.hasOwnProperty("is_trade_banned"))
                if (typeof message.is_trade_banned !== "boolean")
                    return "is_trade_banned: boolean expected";
            if (message.trade_ban_expiration != null && message.hasOwnProperty("trade_ban_expiration"))
                if (!$util.isInteger(message.trade_ban_expiration))
                    return "trade_ban_expiration: integer expected";
            if (message.accountid != null && message.hasOwnProperty("accountid"))
                if (!$util.isInteger(message.accountid))
                    return "accountid: integer expected";
            if (message.suspension_end_time != null && message.hasOwnProperty("suspension_end_time"))
                if (!$util.isInteger(message.suspension_end_time))
                    return "suspension_end_time: integer expected";
            if (message.currency != null && message.hasOwnProperty("currency"))
                if (!$util.isString(message.currency))
                    return "currency: string expected";
            if (message.steam_level != null && message.hasOwnProperty("steam_level"))
                if (!$util.isInteger(message.steam_level))
                    return "steam_level: integer expected";
            if (message.friend_count != null && message.hasOwnProperty("friend_count"))
                if (!$util.isInteger(message.friend_count))
                    return "friend_count: integer expected";
            if (message.account_creation_time != null && message.hasOwnProperty("account_creation_time"))
                if (!$util.isInteger(message.account_creation_time))
                    return "account_creation_time: integer expected";
            if (message.is_steamguard_enabled != null && message.hasOwnProperty("is_steamguard_enabled"))
                if (typeof message.is_steamguard_enabled !== "boolean")
                    return "is_steamguard_enabled: boolean expected";
            if (message.is_phone_verified != null && message.hasOwnProperty("is_phone_verified"))
                if (typeof message.is_phone_verified !== "boolean")
                    return "is_phone_verified: boolean expected";
            if (message.is_two_factor_auth_enabled != null && message.hasOwnProperty("is_two_factor_auth_enabled"))
                if (typeof message.is_two_factor_auth_enabled !== "boolean")
                    return "is_two_factor_auth_enabled: boolean expected";
            if (message.two_factor_enabled_time != null && message.hasOwnProperty("two_factor_enabled_time"))
                if (!$util.isInteger(message.two_factor_enabled_time))
                    return "two_factor_enabled_time: integer expected";
            if (message.phone_verification_time != null && message.hasOwnProperty("phone_verification_time"))
                if (!$util.isInteger(message.phone_verification_time))
                    return "phone_verification_time: integer expected";
            if (message.phone_id != null && message.hasOwnProperty("phone_id"))
                if (!$util.isInteger(message.phone_id) && !(message.phone_id && $util.isInteger(message.phone_id.low) && $util.isInteger(message.phone_id.high)))
                    return "phone_id: integer|Long expected";
            if (message.is_phone_identifying != null && message.hasOwnProperty("is_phone_identifying"))
                if (typeof message.is_phone_identifying !== "boolean")
                    return "is_phone_identifying: boolean expected";
            if (message.rt_identity_linked != null && message.hasOwnProperty("rt_identity_linked"))
                if (!$util.isInteger(message.rt_identity_linked))
                    return "rt_identity_linked: integer expected";
            if (message.rt_birth_date != null && message.hasOwnProperty("rt_birth_date"))
                if (!$util.isInteger(message.rt_birth_date))
                    return "rt_birth_date: integer expected";
            if (message.txn_country_code != null && message.hasOwnProperty("txn_country_code"))
                if (!$util.isString(message.txn_country_code))
                    return "txn_country_code: string expected";
            return null;
        };
    
        /**
         * Creates a CGCSystemMsg_GetAccountDetails_Response message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCSystemMsg_GetAccountDetails_Response} CGCSystemMsg_GetAccountDetails_Response
         */
        CGCSystemMsg_GetAccountDetails_Response.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCSystemMsg_GetAccountDetails_Response)
                return object;
            var message = new $root.CGCSystemMsg_GetAccountDetails_Response();
            if (object.eresult_deprecated != null)
                message.eresult_deprecated = object.eresult_deprecated >>> 0;
            if (object.account_name != null)
                message.account_name = String(object.account_name);
            if (object.persona_name != null)
                message.persona_name = String(object.persona_name);
            if (object.is_profile_public != null)
                message.is_profile_public = Boolean(object.is_profile_public);
            if (object.is_inventory_public != null)
                message.is_inventory_public = Boolean(object.is_inventory_public);
            if (object.is_vac_banned != null)
                message.is_vac_banned = Boolean(object.is_vac_banned);
            if (object.is_cyber_cafe != null)
                message.is_cyber_cafe = Boolean(object.is_cyber_cafe);
            if (object.is_school_account != null)
                message.is_school_account = Boolean(object.is_school_account);
            if (object.is_limited != null)
                message.is_limited = Boolean(object.is_limited);
            if (object.is_subscribed != null)
                message.is_subscribed = Boolean(object.is_subscribed);
            if (object["package"] != null)
                message["package"] = object["package"] >>> 0;
            if (object.is_free_trial_account != null)
                message.is_free_trial_account = Boolean(object.is_free_trial_account);
            if (object.free_trial_expiration != null)
                message.free_trial_expiration = object.free_trial_expiration >>> 0;
            if (object.is_low_violence != null)
                message.is_low_violence = Boolean(object.is_low_violence);
            if (object.is_account_locked_down != null)
                message.is_account_locked_down = Boolean(object.is_account_locked_down);
            if (object.is_community_banned != null)
                message.is_community_banned = Boolean(object.is_community_banned);
            if (object.is_trade_banned != null)
                message.is_trade_banned = Boolean(object.is_trade_banned);
            if (object.trade_ban_expiration != null)
                message.trade_ban_expiration = object.trade_ban_expiration >>> 0;
            if (object.accountid != null)
                message.accountid = object.accountid >>> 0;
            if (object.suspension_end_time != null)
                message.suspension_end_time = object.suspension_end_time >>> 0;
            if (object.currency != null)
                message.currency = String(object.currency);
            if (object.steam_level != null)
                message.steam_level = object.steam_level >>> 0;
            if (object.friend_count != null)
                message.friend_count = object.friend_count >>> 0;
            if (object.account_creation_time != null)
                message.account_creation_time = object.account_creation_time >>> 0;
            if (object.is_steamguard_enabled != null)
                message.is_steamguard_enabled = Boolean(object.is_steamguard_enabled);
            if (object.is_phone_verified != null)
                message.is_phone_verified = Boolean(object.is_phone_verified);
            if (object.is_two_factor_auth_enabled != null)
                message.is_two_factor_auth_enabled = Boolean(object.is_two_factor_auth_enabled);
            if (object.two_factor_enabled_time != null)
                message.two_factor_enabled_time = object.two_factor_enabled_time >>> 0;
            if (object.phone_verification_time != null)
                message.phone_verification_time = object.phone_verification_time >>> 0;
            if (object.phone_id != null)
                if ($util.Long)
                    (message.phone_id = $util.Long.fromValue(object.phone_id)).unsigned = true;
                else if (typeof object.phone_id === "string")
                    message.phone_id = parseInt(object.phone_id, 10);
                else if (typeof object.phone_id === "number")
                    message.phone_id = object.phone_id;
                else if (typeof object.phone_id === "object")
                    message.phone_id = new $util.LongBits(object.phone_id.low >>> 0, object.phone_id.high >>> 0).toNumber(true);
            if (object.is_phone_identifying != null)
                message.is_phone_identifying = Boolean(object.is_phone_identifying);
            if (object.rt_identity_linked != null)
                message.rt_identity_linked = object.rt_identity_linked >>> 0;
            if (object.rt_birth_date != null)
                message.rt_birth_date = object.rt_birth_date >>> 0;
            if (object.txn_country_code != null)
                message.txn_country_code = String(object.txn_country_code);
            return message;
        };
    
        /**
         * Creates a plain object from a CGCSystemMsg_GetAccountDetails_Response message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @static
         * @param {CGCSystemMsg_GetAccountDetails_Response} message CGCSystemMsg_GetAccountDetails_Response
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCSystemMsg_GetAccountDetails_Response.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.eresult_deprecated = 2;
                object.account_name = "";
                object.persona_name = "";
                object.is_profile_public = false;
                object.is_inventory_public = false;
                object.is_vac_banned = false;
                object.is_cyber_cafe = false;
                object.is_school_account = false;
                object.is_limited = false;
                object.is_subscribed = false;
                object["package"] = 0;
                object.is_free_trial_account = false;
                object.free_trial_expiration = 0;
                object.is_low_violence = false;
                object.is_account_locked_down = false;
                object.is_community_banned = false;
                object.is_trade_banned = false;
                object.trade_ban_expiration = 0;
                object.accountid = 0;
                object.suspension_end_time = 0;
                object.currency = "";
                object.steam_level = 0;
                object.friend_count = 0;
                object.account_creation_time = 0;
                object.is_steamguard_enabled = false;
                object.is_phone_verified = false;
                object.is_two_factor_auth_enabled = false;
                object.two_factor_enabled_time = 0;
                object.phone_verification_time = 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.phone_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.phone_id = options.longs === String ? "0" : 0;
                object.is_phone_identifying = false;
                object.rt_identity_linked = 0;
                object.rt_birth_date = 0;
                object.txn_country_code = "";
            }
            if (message.eresult_deprecated != null && message.hasOwnProperty("eresult_deprecated"))
                object.eresult_deprecated = message.eresult_deprecated;
            if (message.account_name != null && message.hasOwnProperty("account_name"))
                object.account_name = message.account_name;
            if (message.persona_name != null && message.hasOwnProperty("persona_name"))
                object.persona_name = message.persona_name;
            if (message.is_profile_public != null && message.hasOwnProperty("is_profile_public"))
                object.is_profile_public = message.is_profile_public;
            if (message.is_inventory_public != null && message.hasOwnProperty("is_inventory_public"))
                object.is_inventory_public = message.is_inventory_public;
            if (message.is_vac_banned != null && message.hasOwnProperty("is_vac_banned"))
                object.is_vac_banned = message.is_vac_banned;
            if (message.is_cyber_cafe != null && message.hasOwnProperty("is_cyber_cafe"))
                object.is_cyber_cafe = message.is_cyber_cafe;
            if (message.is_school_account != null && message.hasOwnProperty("is_school_account"))
                object.is_school_account = message.is_school_account;
            if (message.is_limited != null && message.hasOwnProperty("is_limited"))
                object.is_limited = message.is_limited;
            if (message.is_subscribed != null && message.hasOwnProperty("is_subscribed"))
                object.is_subscribed = message.is_subscribed;
            if (message["package"] != null && message.hasOwnProperty("package"))
                object["package"] = message["package"];
            if (message.is_free_trial_account != null && message.hasOwnProperty("is_free_trial_account"))
                object.is_free_trial_account = message.is_free_trial_account;
            if (message.free_trial_expiration != null && message.hasOwnProperty("free_trial_expiration"))
                object.free_trial_expiration = message.free_trial_expiration;
            if (message.is_low_violence != null && message.hasOwnProperty("is_low_violence"))
                object.is_low_violence = message.is_low_violence;
            if (message.is_account_locked_down != null && message.hasOwnProperty("is_account_locked_down"))
                object.is_account_locked_down = message.is_account_locked_down;
            if (message.is_community_banned != null && message.hasOwnProperty("is_community_banned"))
                object.is_community_banned = message.is_community_banned;
            if (message.is_trade_banned != null && message.hasOwnProperty("is_trade_banned"))
                object.is_trade_banned = message.is_trade_banned;
            if (message.trade_ban_expiration != null && message.hasOwnProperty("trade_ban_expiration"))
                object.trade_ban_expiration = message.trade_ban_expiration;
            if (message.accountid != null && message.hasOwnProperty("accountid"))
                object.accountid = message.accountid;
            if (message.suspension_end_time != null && message.hasOwnProperty("suspension_end_time"))
                object.suspension_end_time = message.suspension_end_time;
            if (message.currency != null && message.hasOwnProperty("currency"))
                object.currency = message.currency;
            if (message.steam_level != null && message.hasOwnProperty("steam_level"))
                object.steam_level = message.steam_level;
            if (message.friend_count != null && message.hasOwnProperty("friend_count"))
                object.friend_count = message.friend_count;
            if (message.account_creation_time != null && message.hasOwnProperty("account_creation_time"))
                object.account_creation_time = message.account_creation_time;
            if (message.is_steamguard_enabled != null && message.hasOwnProperty("is_steamguard_enabled"))
                object.is_steamguard_enabled = message.is_steamguard_enabled;
            if (message.is_phone_verified != null && message.hasOwnProperty("is_phone_verified"))
                object.is_phone_verified = message.is_phone_verified;
            if (message.is_two_factor_auth_enabled != null && message.hasOwnProperty("is_two_factor_auth_enabled"))
                object.is_two_factor_auth_enabled = message.is_two_factor_auth_enabled;
            if (message.two_factor_enabled_time != null && message.hasOwnProperty("two_factor_enabled_time"))
                object.two_factor_enabled_time = message.two_factor_enabled_time;
            if (message.phone_verification_time != null && message.hasOwnProperty("phone_verification_time"))
                object.phone_verification_time = message.phone_verification_time;
            if (message.phone_id != null && message.hasOwnProperty("phone_id"))
                if (typeof message.phone_id === "number")
                    object.phone_id = options.longs === String ? String(message.phone_id) : message.phone_id;
                else
                    object.phone_id = options.longs === String ? $util.Long.prototype.toString.call(message.phone_id) : options.longs === Number ? new $util.LongBits(message.phone_id.low >>> 0, message.phone_id.high >>> 0).toNumber(true) : message.phone_id;
            if (message.is_phone_identifying != null && message.hasOwnProperty("is_phone_identifying"))
                object.is_phone_identifying = message.is_phone_identifying;
            if (message.rt_identity_linked != null && message.hasOwnProperty("rt_identity_linked"))
                object.rt_identity_linked = message.rt_identity_linked;
            if (message.rt_birth_date != null && message.hasOwnProperty("rt_birth_date"))
                object.rt_birth_date = message.rt_birth_date;
            if (message.txn_country_code != null && message.hasOwnProperty("txn_country_code"))
                object.txn_country_code = message.txn_country_code;
            return object;
        };
    
        /**
         * Converts this CGCSystemMsg_GetAccountDetails_Response to JSON.
         * @function toJSON
         * @memberof CGCSystemMsg_GetAccountDetails_Response
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCSystemMsg_GetAccountDetails_Response.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCSystemMsg_GetAccountDetails_Response;
    })();
    
    $root.CMsgGCCheckClanMembership = (function() {
    
        /**
         * Properties of a CMsgGCCheckClanMembership.
         * @exports ICMsgGCCheckClanMembership
         * @interface ICMsgGCCheckClanMembership
         * @property {number|Long|null} [steamid] CMsgGCCheckClanMembership steamid
         * @property {number|null} [clanid] CMsgGCCheckClanMembership clanid
         */
    
        /**
         * Constructs a new CMsgGCCheckClanMembership.
         * @exports CMsgGCCheckClanMembership
         * @classdesc Represents a CMsgGCCheckClanMembership.
         * @implements ICMsgGCCheckClanMembership
         * @constructor
         * @param {ICMsgGCCheckClanMembership=} [properties] Properties to set
         */
        function CMsgGCCheckClanMembership(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCCheckClanMembership steamid.
         * @member {number|Long} steamid
         * @memberof CMsgGCCheckClanMembership
         * @instance
         */
        CMsgGCCheckClanMembership.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCCheckClanMembership clanid.
         * @member {number} clanid
         * @memberof CMsgGCCheckClanMembership
         * @instance
         */
        CMsgGCCheckClanMembership.prototype.clanid = 0;
    
        /**
         * Creates a new CMsgGCCheckClanMembership instance using the specified properties.
         * @function create
         * @memberof CMsgGCCheckClanMembership
         * @static
         * @param {ICMsgGCCheckClanMembership=} [properties] Properties to set
         * @returns {CMsgGCCheckClanMembership} CMsgGCCheckClanMembership instance
         */
        CMsgGCCheckClanMembership.create = function create(properties) {
            return new CMsgGCCheckClanMembership(properties);
        };
    
        /**
         * Encodes the specified CMsgGCCheckClanMembership message. Does not implicitly {@link CMsgGCCheckClanMembership.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCCheckClanMembership
         * @static
         * @param {ICMsgGCCheckClanMembership} message CMsgGCCheckClanMembership message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCCheckClanMembership.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            if (message.clanid != null && message.hasOwnProperty("clanid"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.clanid);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCCheckClanMembership message, length delimited. Does not implicitly {@link CMsgGCCheckClanMembership.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCCheckClanMembership
         * @static
         * @param {ICMsgGCCheckClanMembership} message CMsgGCCheckClanMembership message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCCheckClanMembership.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCCheckClanMembership message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCCheckClanMembership
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCCheckClanMembership} CMsgGCCheckClanMembership
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCCheckClanMembership.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCCheckClanMembership();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                case 2:
                    message.clanid = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCCheckClanMembership message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCCheckClanMembership
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCCheckClanMembership} CMsgGCCheckClanMembership
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCCheckClanMembership.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCCheckClanMembership message.
         * @function verify
         * @memberof CMsgGCCheckClanMembership
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCCheckClanMembership.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            if (message.clanid != null && message.hasOwnProperty("clanid"))
                if (!$util.isInteger(message.clanid))
                    return "clanid: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCCheckClanMembership message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCCheckClanMembership
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCCheckClanMembership} CMsgGCCheckClanMembership
         */
        CMsgGCCheckClanMembership.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCCheckClanMembership)
                return object;
            var message = new $root.CMsgGCCheckClanMembership();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            if (object.clanid != null)
                message.clanid = object.clanid >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCCheckClanMembership message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCCheckClanMembership
         * @static
         * @param {CMsgGCCheckClanMembership} message CMsgGCCheckClanMembership
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCCheckClanMembership.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
                object.clanid = 0;
            }
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            if (message.clanid != null && message.hasOwnProperty("clanid"))
                object.clanid = message.clanid;
            return object;
        };
    
        /**
         * Converts this CMsgGCCheckClanMembership to JSON.
         * @function toJSON
         * @memberof CMsgGCCheckClanMembership
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCCheckClanMembership.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCCheckClanMembership;
    })();
    
    $root.CMsgGCCheckClanMembership_Response = (function() {
    
        /**
         * Properties of a CMsgGCCheckClanMembership_Response.
         * @exports ICMsgGCCheckClanMembership_Response
         * @interface ICMsgGCCheckClanMembership_Response
         * @property {boolean|null} [ismember] CMsgGCCheckClanMembership_Response ismember
         */
    
        /**
         * Constructs a new CMsgGCCheckClanMembership_Response.
         * @exports CMsgGCCheckClanMembership_Response
         * @classdesc Represents a CMsgGCCheckClanMembership_Response.
         * @implements ICMsgGCCheckClanMembership_Response
         * @constructor
         * @param {ICMsgGCCheckClanMembership_Response=} [properties] Properties to set
         */
        function CMsgGCCheckClanMembership_Response(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCCheckClanMembership_Response ismember.
         * @member {boolean} ismember
         * @memberof CMsgGCCheckClanMembership_Response
         * @instance
         */
        CMsgGCCheckClanMembership_Response.prototype.ismember = false;
    
        /**
         * Creates a new CMsgGCCheckClanMembership_Response instance using the specified properties.
         * @function create
         * @memberof CMsgGCCheckClanMembership_Response
         * @static
         * @param {ICMsgGCCheckClanMembership_Response=} [properties] Properties to set
         * @returns {CMsgGCCheckClanMembership_Response} CMsgGCCheckClanMembership_Response instance
         */
        CMsgGCCheckClanMembership_Response.create = function create(properties) {
            return new CMsgGCCheckClanMembership_Response(properties);
        };
    
        /**
         * Encodes the specified CMsgGCCheckClanMembership_Response message. Does not implicitly {@link CMsgGCCheckClanMembership_Response.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCCheckClanMembership_Response
         * @static
         * @param {ICMsgGCCheckClanMembership_Response} message CMsgGCCheckClanMembership_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCCheckClanMembership_Response.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.ismember != null && message.hasOwnProperty("ismember"))
                writer.uint32(/* id 1, wireType 0 =*/8).bool(message.ismember);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCCheckClanMembership_Response message, length delimited. Does not implicitly {@link CMsgGCCheckClanMembership_Response.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCCheckClanMembership_Response
         * @static
         * @param {ICMsgGCCheckClanMembership_Response} message CMsgGCCheckClanMembership_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCCheckClanMembership_Response.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCCheckClanMembership_Response message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCCheckClanMembership_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCCheckClanMembership_Response} CMsgGCCheckClanMembership_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCCheckClanMembership_Response.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCCheckClanMembership_Response();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.ismember = reader.bool();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCCheckClanMembership_Response message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCCheckClanMembership_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCCheckClanMembership_Response} CMsgGCCheckClanMembership_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCCheckClanMembership_Response.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCCheckClanMembership_Response message.
         * @function verify
         * @memberof CMsgGCCheckClanMembership_Response
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCCheckClanMembership_Response.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.ismember != null && message.hasOwnProperty("ismember"))
                if (typeof message.ismember !== "boolean")
                    return "ismember: boolean expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCCheckClanMembership_Response message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCCheckClanMembership_Response
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCCheckClanMembership_Response} CMsgGCCheckClanMembership_Response
         */
        CMsgGCCheckClanMembership_Response.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCCheckClanMembership_Response)
                return object;
            var message = new $root.CMsgGCCheckClanMembership_Response();
            if (object.ismember != null)
                message.ismember = Boolean(object.ismember);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCCheckClanMembership_Response message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCCheckClanMembership_Response
         * @static
         * @param {CMsgGCCheckClanMembership_Response} message CMsgGCCheckClanMembership_Response
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCCheckClanMembership_Response.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.ismember = false;
            if (message.ismember != null && message.hasOwnProperty("ismember"))
                object.ismember = message.ismember;
            return object;
        };
    
        /**
         * Converts this CMsgGCCheckClanMembership_Response to JSON.
         * @function toJSON
         * @memberof CMsgGCCheckClanMembership_Response
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCCheckClanMembership_Response.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCCheckClanMembership_Response;
    })();
    
    $root.CMsgGCGetPersonaNames = (function() {
    
        /**
         * Properties of a CMsgGCGetPersonaNames.
         * @exports ICMsgGCGetPersonaNames
         * @interface ICMsgGCGetPersonaNames
         * @property {Array.<number|Long>|null} [steamids] CMsgGCGetPersonaNames steamids
         */
    
        /**
         * Constructs a new CMsgGCGetPersonaNames.
         * @exports CMsgGCGetPersonaNames
         * @classdesc Represents a CMsgGCGetPersonaNames.
         * @implements ICMsgGCGetPersonaNames
         * @constructor
         * @param {ICMsgGCGetPersonaNames=} [properties] Properties to set
         */
        function CMsgGCGetPersonaNames(properties) {
            this.steamids = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCGetPersonaNames steamids.
         * @member {Array.<number|Long>} steamids
         * @memberof CMsgGCGetPersonaNames
         * @instance
         */
        CMsgGCGetPersonaNames.prototype.steamids = $util.emptyArray;
    
        /**
         * Creates a new CMsgGCGetPersonaNames instance using the specified properties.
         * @function create
         * @memberof CMsgGCGetPersonaNames
         * @static
         * @param {ICMsgGCGetPersonaNames=} [properties] Properties to set
         * @returns {CMsgGCGetPersonaNames} CMsgGCGetPersonaNames instance
         */
        CMsgGCGetPersonaNames.create = function create(properties) {
            return new CMsgGCGetPersonaNames(properties);
        };
    
        /**
         * Encodes the specified CMsgGCGetPersonaNames message. Does not implicitly {@link CMsgGCGetPersonaNames.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCGetPersonaNames
         * @static
         * @param {ICMsgGCGetPersonaNames} message CMsgGCGetPersonaNames message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetPersonaNames.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamids != null && message.steamids.length)
                for (var i = 0; i < message.steamids.length; ++i)
                    writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamids[i]);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCGetPersonaNames message, length delimited. Does not implicitly {@link CMsgGCGetPersonaNames.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCGetPersonaNames
         * @static
         * @param {ICMsgGCGetPersonaNames} message CMsgGCGetPersonaNames message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetPersonaNames.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCGetPersonaNames message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCGetPersonaNames
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCGetPersonaNames} CMsgGCGetPersonaNames
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetPersonaNames.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCGetPersonaNames();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.steamids && message.steamids.length))
                        message.steamids = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.steamids.push(reader.fixed64());
                    } else
                        message.steamids.push(reader.fixed64());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCGetPersonaNames message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCGetPersonaNames
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCGetPersonaNames} CMsgGCGetPersonaNames
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetPersonaNames.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCGetPersonaNames message.
         * @function verify
         * @memberof CMsgGCGetPersonaNames
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCGetPersonaNames.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamids != null && message.hasOwnProperty("steamids")) {
                if (!Array.isArray(message.steamids))
                    return "steamids: array expected";
                for (var i = 0; i < message.steamids.length; ++i)
                    if (!$util.isInteger(message.steamids[i]) && !(message.steamids[i] && $util.isInteger(message.steamids[i].low) && $util.isInteger(message.steamids[i].high)))
                        return "steamids: integer|Long[] expected";
            }
            return null;
        };
    
        /**
         * Creates a CMsgGCGetPersonaNames message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCGetPersonaNames
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCGetPersonaNames} CMsgGCGetPersonaNames
         */
        CMsgGCGetPersonaNames.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCGetPersonaNames)
                return object;
            var message = new $root.CMsgGCGetPersonaNames();
            if (object.steamids) {
                if (!Array.isArray(object.steamids))
                    throw TypeError(".CMsgGCGetPersonaNames.steamids: array expected");
                message.steamids = [];
                for (var i = 0; i < object.steamids.length; ++i)
                    if ($util.Long)
                        (message.steamids[i] = $util.Long.fromValue(object.steamids[i])).unsigned = false;
                    else if (typeof object.steamids[i] === "string")
                        message.steamids[i] = parseInt(object.steamids[i], 10);
                    else if (typeof object.steamids[i] === "number")
                        message.steamids[i] = object.steamids[i];
                    else if (typeof object.steamids[i] === "object")
                        message.steamids[i] = new $util.LongBits(object.steamids[i].low >>> 0, object.steamids[i].high >>> 0).toNumber();
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCGetPersonaNames message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCGetPersonaNames
         * @static
         * @param {CMsgGCGetPersonaNames} message CMsgGCGetPersonaNames
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCGetPersonaNames.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.steamids = [];
            if (message.steamids && message.steamids.length) {
                object.steamids = [];
                for (var j = 0; j < message.steamids.length; ++j)
                    if (typeof message.steamids[j] === "number")
                        object.steamids[j] = options.longs === String ? String(message.steamids[j]) : message.steamids[j];
                    else
                        object.steamids[j] = options.longs === String ? $util.Long.prototype.toString.call(message.steamids[j]) : options.longs === Number ? new $util.LongBits(message.steamids[j].low >>> 0, message.steamids[j].high >>> 0).toNumber() : message.steamids[j];
            }
            return object;
        };
    
        /**
         * Converts this CMsgGCGetPersonaNames to JSON.
         * @function toJSON
         * @memberof CMsgGCGetPersonaNames
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCGetPersonaNames.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCGetPersonaNames;
    })();
    
    $root.CMsgGCGetPersonaNames_Response = (function() {
    
        /**
         * Properties of a CMsgGCGetPersonaNames_Response.
         * @exports ICMsgGCGetPersonaNames_Response
         * @interface ICMsgGCGetPersonaNames_Response
         * @property {Array.<CMsgGCGetPersonaNames_Response.IPersonaName>|null} [succeeded_lookups] CMsgGCGetPersonaNames_Response succeeded_lookups
         * @property {Array.<number|Long>|null} [failed_lookup_steamids] CMsgGCGetPersonaNames_Response failed_lookup_steamids
         */
    
        /**
         * Constructs a new CMsgGCGetPersonaNames_Response.
         * @exports CMsgGCGetPersonaNames_Response
         * @classdesc Represents a CMsgGCGetPersonaNames_Response.
         * @implements ICMsgGCGetPersonaNames_Response
         * @constructor
         * @param {ICMsgGCGetPersonaNames_Response=} [properties] Properties to set
         */
        function CMsgGCGetPersonaNames_Response(properties) {
            this.succeeded_lookups = [];
            this.failed_lookup_steamids = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCGetPersonaNames_Response succeeded_lookups.
         * @member {Array.<CMsgGCGetPersonaNames_Response.IPersonaName>} succeeded_lookups
         * @memberof CMsgGCGetPersonaNames_Response
         * @instance
         */
        CMsgGCGetPersonaNames_Response.prototype.succeeded_lookups = $util.emptyArray;
    
        /**
         * CMsgGCGetPersonaNames_Response failed_lookup_steamids.
         * @member {Array.<number|Long>} failed_lookup_steamids
         * @memberof CMsgGCGetPersonaNames_Response
         * @instance
         */
        CMsgGCGetPersonaNames_Response.prototype.failed_lookup_steamids = $util.emptyArray;
    
        /**
         * Creates a new CMsgGCGetPersonaNames_Response instance using the specified properties.
         * @function create
         * @memberof CMsgGCGetPersonaNames_Response
         * @static
         * @param {ICMsgGCGetPersonaNames_Response=} [properties] Properties to set
         * @returns {CMsgGCGetPersonaNames_Response} CMsgGCGetPersonaNames_Response instance
         */
        CMsgGCGetPersonaNames_Response.create = function create(properties) {
            return new CMsgGCGetPersonaNames_Response(properties);
        };
    
        /**
         * Encodes the specified CMsgGCGetPersonaNames_Response message. Does not implicitly {@link CMsgGCGetPersonaNames_Response.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCGetPersonaNames_Response
         * @static
         * @param {ICMsgGCGetPersonaNames_Response} message CMsgGCGetPersonaNames_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetPersonaNames_Response.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.succeeded_lookups != null && message.succeeded_lookups.length)
                for (var i = 0; i < message.succeeded_lookups.length; ++i)
                    $root.CMsgGCGetPersonaNames_Response.PersonaName.encode(message.succeeded_lookups[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            if (message.failed_lookup_steamids != null && message.failed_lookup_steamids.length)
                for (var i = 0; i < message.failed_lookup_steamids.length; ++i)
                    writer.uint32(/* id 2, wireType 1 =*/17).fixed64(message.failed_lookup_steamids[i]);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCGetPersonaNames_Response message, length delimited. Does not implicitly {@link CMsgGCGetPersonaNames_Response.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCGetPersonaNames_Response
         * @static
         * @param {ICMsgGCGetPersonaNames_Response} message CMsgGCGetPersonaNames_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetPersonaNames_Response.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCGetPersonaNames_Response message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCGetPersonaNames_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCGetPersonaNames_Response} CMsgGCGetPersonaNames_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetPersonaNames_Response.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCGetPersonaNames_Response();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.succeeded_lookups && message.succeeded_lookups.length))
                        message.succeeded_lookups = [];
                    message.succeeded_lookups.push($root.CMsgGCGetPersonaNames_Response.PersonaName.decode(reader, reader.uint32()));
                    break;
                case 2:
                    if (!(message.failed_lookup_steamids && message.failed_lookup_steamids.length))
                        message.failed_lookup_steamids = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.failed_lookup_steamids.push(reader.fixed64());
                    } else
                        message.failed_lookup_steamids.push(reader.fixed64());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCGetPersonaNames_Response message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCGetPersonaNames_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCGetPersonaNames_Response} CMsgGCGetPersonaNames_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetPersonaNames_Response.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCGetPersonaNames_Response message.
         * @function verify
         * @memberof CMsgGCGetPersonaNames_Response
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCGetPersonaNames_Response.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.succeeded_lookups != null && message.hasOwnProperty("succeeded_lookups")) {
                if (!Array.isArray(message.succeeded_lookups))
                    return "succeeded_lookups: array expected";
                for (var i = 0; i < message.succeeded_lookups.length; ++i) {
                    var error = $root.CMsgGCGetPersonaNames_Response.PersonaName.verify(message.succeeded_lookups[i]);
                    if (error)
                        return "succeeded_lookups." + error;
                }
            }
            if (message.failed_lookup_steamids != null && message.hasOwnProperty("failed_lookup_steamids")) {
                if (!Array.isArray(message.failed_lookup_steamids))
                    return "failed_lookup_steamids: array expected";
                for (var i = 0; i < message.failed_lookup_steamids.length; ++i)
                    if (!$util.isInteger(message.failed_lookup_steamids[i]) && !(message.failed_lookup_steamids[i] && $util.isInteger(message.failed_lookup_steamids[i].low) && $util.isInteger(message.failed_lookup_steamids[i].high)))
                        return "failed_lookup_steamids: integer|Long[] expected";
            }
            return null;
        };
    
        /**
         * Creates a CMsgGCGetPersonaNames_Response message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCGetPersonaNames_Response
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCGetPersonaNames_Response} CMsgGCGetPersonaNames_Response
         */
        CMsgGCGetPersonaNames_Response.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCGetPersonaNames_Response)
                return object;
            var message = new $root.CMsgGCGetPersonaNames_Response();
            if (object.succeeded_lookups) {
                if (!Array.isArray(object.succeeded_lookups))
                    throw TypeError(".CMsgGCGetPersonaNames_Response.succeeded_lookups: array expected");
                message.succeeded_lookups = [];
                for (var i = 0; i < object.succeeded_lookups.length; ++i) {
                    if (typeof object.succeeded_lookups[i] !== "object")
                        throw TypeError(".CMsgGCGetPersonaNames_Response.succeeded_lookups: object expected");
                    message.succeeded_lookups[i] = $root.CMsgGCGetPersonaNames_Response.PersonaName.fromObject(object.succeeded_lookups[i]);
                }
            }
            if (object.failed_lookup_steamids) {
                if (!Array.isArray(object.failed_lookup_steamids))
                    throw TypeError(".CMsgGCGetPersonaNames_Response.failed_lookup_steamids: array expected");
                message.failed_lookup_steamids = [];
                for (var i = 0; i < object.failed_lookup_steamids.length; ++i)
                    if ($util.Long)
                        (message.failed_lookup_steamids[i] = $util.Long.fromValue(object.failed_lookup_steamids[i])).unsigned = false;
                    else if (typeof object.failed_lookup_steamids[i] === "string")
                        message.failed_lookup_steamids[i] = parseInt(object.failed_lookup_steamids[i], 10);
                    else if (typeof object.failed_lookup_steamids[i] === "number")
                        message.failed_lookup_steamids[i] = object.failed_lookup_steamids[i];
                    else if (typeof object.failed_lookup_steamids[i] === "object")
                        message.failed_lookup_steamids[i] = new $util.LongBits(object.failed_lookup_steamids[i].low >>> 0, object.failed_lookup_steamids[i].high >>> 0).toNumber();
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCGetPersonaNames_Response message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCGetPersonaNames_Response
         * @static
         * @param {CMsgGCGetPersonaNames_Response} message CMsgGCGetPersonaNames_Response
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCGetPersonaNames_Response.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults) {
                object.succeeded_lookups = [];
                object.failed_lookup_steamids = [];
            }
            if (message.succeeded_lookups && message.succeeded_lookups.length) {
                object.succeeded_lookups = [];
                for (var j = 0; j < message.succeeded_lookups.length; ++j)
                    object.succeeded_lookups[j] = $root.CMsgGCGetPersonaNames_Response.PersonaName.toObject(message.succeeded_lookups[j], options);
            }
            if (message.failed_lookup_steamids && message.failed_lookup_steamids.length) {
                object.failed_lookup_steamids = [];
                for (var j = 0; j < message.failed_lookup_steamids.length; ++j)
                    if (typeof message.failed_lookup_steamids[j] === "number")
                        object.failed_lookup_steamids[j] = options.longs === String ? String(message.failed_lookup_steamids[j]) : message.failed_lookup_steamids[j];
                    else
                        object.failed_lookup_steamids[j] = options.longs === String ? $util.Long.prototype.toString.call(message.failed_lookup_steamids[j]) : options.longs === Number ? new $util.LongBits(message.failed_lookup_steamids[j].low >>> 0, message.failed_lookup_steamids[j].high >>> 0).toNumber() : message.failed_lookup_steamids[j];
            }
            return object;
        };
    
        /**
         * Converts this CMsgGCGetPersonaNames_Response to JSON.
         * @function toJSON
         * @memberof CMsgGCGetPersonaNames_Response
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCGetPersonaNames_Response.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgGCGetPersonaNames_Response.PersonaName = (function() {
    
            /**
             * Properties of a PersonaName.
             * @memberof CMsgGCGetPersonaNames_Response
             * @interface IPersonaName
             * @property {number|Long|null} [steamid] PersonaName steamid
             * @property {string|null} [persona_name] PersonaName persona_name
             */
    
            /**
             * Constructs a new PersonaName.
             * @memberof CMsgGCGetPersonaNames_Response
             * @classdesc Represents a PersonaName.
             * @implements IPersonaName
             * @constructor
             * @param {CMsgGCGetPersonaNames_Response.IPersonaName=} [properties] Properties to set
             */
            function PersonaName(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * PersonaName steamid.
             * @member {number|Long} steamid
             * @memberof CMsgGCGetPersonaNames_Response.PersonaName
             * @instance
             */
            PersonaName.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
            /**
             * PersonaName persona_name.
             * @member {string} persona_name
             * @memberof CMsgGCGetPersonaNames_Response.PersonaName
             * @instance
             */
            PersonaName.prototype.persona_name = "";
    
            /**
             * Creates a new PersonaName instance using the specified properties.
             * @function create
             * @memberof CMsgGCGetPersonaNames_Response.PersonaName
             * @static
             * @param {CMsgGCGetPersonaNames_Response.IPersonaName=} [properties] Properties to set
             * @returns {CMsgGCGetPersonaNames_Response.PersonaName} PersonaName instance
             */
            PersonaName.create = function create(properties) {
                return new PersonaName(properties);
            };
    
            /**
             * Encodes the specified PersonaName message. Does not implicitly {@link CMsgGCGetPersonaNames_Response.PersonaName.verify|verify} messages.
             * @function encode
             * @memberof CMsgGCGetPersonaNames_Response.PersonaName
             * @static
             * @param {CMsgGCGetPersonaNames_Response.IPersonaName} message PersonaName message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            PersonaName.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.steamid != null && message.hasOwnProperty("steamid"))
                    writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
                if (message.persona_name != null && message.hasOwnProperty("persona_name"))
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.persona_name);
                return writer;
            };
    
            /**
             * Encodes the specified PersonaName message, length delimited. Does not implicitly {@link CMsgGCGetPersonaNames_Response.PersonaName.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgGCGetPersonaNames_Response.PersonaName
             * @static
             * @param {CMsgGCGetPersonaNames_Response.IPersonaName} message PersonaName message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            PersonaName.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a PersonaName message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgGCGetPersonaNames_Response.PersonaName
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgGCGetPersonaNames_Response.PersonaName} PersonaName
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            PersonaName.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCGetPersonaNames_Response.PersonaName();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.steamid = reader.fixed64();
                        break;
                    case 2:
                        message.persona_name = reader.string();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a PersonaName message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgGCGetPersonaNames_Response.PersonaName
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgGCGetPersonaNames_Response.PersonaName} PersonaName
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            PersonaName.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a PersonaName message.
             * @function verify
             * @memberof CMsgGCGetPersonaNames_Response.PersonaName
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            PersonaName.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.steamid != null && message.hasOwnProperty("steamid"))
                    if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                        return "steamid: integer|Long expected";
                if (message.persona_name != null && message.hasOwnProperty("persona_name"))
                    if (!$util.isString(message.persona_name))
                        return "persona_name: string expected";
                return null;
            };
    
            /**
             * Creates a PersonaName message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgGCGetPersonaNames_Response.PersonaName
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgGCGetPersonaNames_Response.PersonaName} PersonaName
             */
            PersonaName.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgGCGetPersonaNames_Response.PersonaName)
                    return object;
                var message = new $root.CMsgGCGetPersonaNames_Response.PersonaName();
                if (object.steamid != null)
                    if ($util.Long)
                        (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                    else if (typeof object.steamid === "string")
                        message.steamid = parseInt(object.steamid, 10);
                    else if (typeof object.steamid === "number")
                        message.steamid = object.steamid;
                    else if (typeof object.steamid === "object")
                        message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
                if (object.persona_name != null)
                    message.persona_name = String(object.persona_name);
                return message;
            };
    
            /**
             * Creates a plain object from a PersonaName message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgGCGetPersonaNames_Response.PersonaName
             * @static
             * @param {CMsgGCGetPersonaNames_Response.PersonaName} message PersonaName
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            PersonaName.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    if ($util.Long) {
                        var long = new $util.Long(0, 0, false);
                        object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                    } else
                        object.steamid = options.longs === String ? "0" : 0;
                    object.persona_name = "";
                }
                if (message.steamid != null && message.hasOwnProperty("steamid"))
                    if (typeof message.steamid === "number")
                        object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                    else
                        object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
                if (message.persona_name != null && message.hasOwnProperty("persona_name"))
                    object.persona_name = message.persona_name;
                return object;
            };
    
            /**
             * Converts this PersonaName to JSON.
             * @function toJSON
             * @memberof CMsgGCGetPersonaNames_Response.PersonaName
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            PersonaName.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return PersonaName;
        })();
    
        return CMsgGCGetPersonaNames_Response;
    })();
    
    $root.CMsgGCCheckFriendship = (function() {
    
        /**
         * Properties of a CMsgGCCheckFriendship.
         * @exports ICMsgGCCheckFriendship
         * @interface ICMsgGCCheckFriendship
         * @property {number|Long|null} [steamid_left] CMsgGCCheckFriendship steamid_left
         * @property {number|Long|null} [steamid_right] CMsgGCCheckFriendship steamid_right
         */
    
        /**
         * Constructs a new CMsgGCCheckFriendship.
         * @exports CMsgGCCheckFriendship
         * @classdesc Represents a CMsgGCCheckFriendship.
         * @implements ICMsgGCCheckFriendship
         * @constructor
         * @param {ICMsgGCCheckFriendship=} [properties] Properties to set
         */
        function CMsgGCCheckFriendship(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCCheckFriendship steamid_left.
         * @member {number|Long} steamid_left
         * @memberof CMsgGCCheckFriendship
         * @instance
         */
        CMsgGCCheckFriendship.prototype.steamid_left = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCCheckFriendship steamid_right.
         * @member {number|Long} steamid_right
         * @memberof CMsgGCCheckFriendship
         * @instance
         */
        CMsgGCCheckFriendship.prototype.steamid_right = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * Creates a new CMsgGCCheckFriendship instance using the specified properties.
         * @function create
         * @memberof CMsgGCCheckFriendship
         * @static
         * @param {ICMsgGCCheckFriendship=} [properties] Properties to set
         * @returns {CMsgGCCheckFriendship} CMsgGCCheckFriendship instance
         */
        CMsgGCCheckFriendship.create = function create(properties) {
            return new CMsgGCCheckFriendship(properties);
        };
    
        /**
         * Encodes the specified CMsgGCCheckFriendship message. Does not implicitly {@link CMsgGCCheckFriendship.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCCheckFriendship
         * @static
         * @param {ICMsgGCCheckFriendship} message CMsgGCCheckFriendship message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCCheckFriendship.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid_left != null && message.hasOwnProperty("steamid_left"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid_left);
            if (message.steamid_right != null && message.hasOwnProperty("steamid_right"))
                writer.uint32(/* id 2, wireType 1 =*/17).fixed64(message.steamid_right);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCCheckFriendship message, length delimited. Does not implicitly {@link CMsgGCCheckFriendship.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCCheckFriendship
         * @static
         * @param {ICMsgGCCheckFriendship} message CMsgGCCheckFriendship message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCCheckFriendship.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCCheckFriendship message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCCheckFriendship
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCCheckFriendship} CMsgGCCheckFriendship
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCCheckFriendship.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCCheckFriendship();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid_left = reader.fixed64();
                    break;
                case 2:
                    message.steamid_right = reader.fixed64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCCheckFriendship message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCCheckFriendship
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCCheckFriendship} CMsgGCCheckFriendship
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCCheckFriendship.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCCheckFriendship message.
         * @function verify
         * @memberof CMsgGCCheckFriendship
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCCheckFriendship.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid_left != null && message.hasOwnProperty("steamid_left"))
                if (!$util.isInteger(message.steamid_left) && !(message.steamid_left && $util.isInteger(message.steamid_left.low) && $util.isInteger(message.steamid_left.high)))
                    return "steamid_left: integer|Long expected";
            if (message.steamid_right != null && message.hasOwnProperty("steamid_right"))
                if (!$util.isInteger(message.steamid_right) && !(message.steamid_right && $util.isInteger(message.steamid_right.low) && $util.isInteger(message.steamid_right.high)))
                    return "steamid_right: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCCheckFriendship message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCCheckFriendship
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCCheckFriendship} CMsgGCCheckFriendship
         */
        CMsgGCCheckFriendship.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCCheckFriendship)
                return object;
            var message = new $root.CMsgGCCheckFriendship();
            if (object.steamid_left != null)
                if ($util.Long)
                    (message.steamid_left = $util.Long.fromValue(object.steamid_left)).unsigned = false;
                else if (typeof object.steamid_left === "string")
                    message.steamid_left = parseInt(object.steamid_left, 10);
                else if (typeof object.steamid_left === "number")
                    message.steamid_left = object.steamid_left;
                else if (typeof object.steamid_left === "object")
                    message.steamid_left = new $util.LongBits(object.steamid_left.low >>> 0, object.steamid_left.high >>> 0).toNumber();
            if (object.steamid_right != null)
                if ($util.Long)
                    (message.steamid_right = $util.Long.fromValue(object.steamid_right)).unsigned = false;
                else if (typeof object.steamid_right === "string")
                    message.steamid_right = parseInt(object.steamid_right, 10);
                else if (typeof object.steamid_right === "number")
                    message.steamid_right = object.steamid_right;
                else if (typeof object.steamid_right === "object")
                    message.steamid_right = new $util.LongBits(object.steamid_right.low >>> 0, object.steamid_right.high >>> 0).toNumber();
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCCheckFriendship message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCCheckFriendship
         * @static
         * @param {CMsgGCCheckFriendship} message CMsgGCCheckFriendship
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCCheckFriendship.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid_left = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid_left = options.longs === String ? "0" : 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid_right = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid_right = options.longs === String ? "0" : 0;
            }
            if (message.steamid_left != null && message.hasOwnProperty("steamid_left"))
                if (typeof message.steamid_left === "number")
                    object.steamid_left = options.longs === String ? String(message.steamid_left) : message.steamid_left;
                else
                    object.steamid_left = options.longs === String ? $util.Long.prototype.toString.call(message.steamid_left) : options.longs === Number ? new $util.LongBits(message.steamid_left.low >>> 0, message.steamid_left.high >>> 0).toNumber() : message.steamid_left;
            if (message.steamid_right != null && message.hasOwnProperty("steamid_right"))
                if (typeof message.steamid_right === "number")
                    object.steamid_right = options.longs === String ? String(message.steamid_right) : message.steamid_right;
                else
                    object.steamid_right = options.longs === String ? $util.Long.prototype.toString.call(message.steamid_right) : options.longs === Number ? new $util.LongBits(message.steamid_right.low >>> 0, message.steamid_right.high >>> 0).toNumber() : message.steamid_right;
            return object;
        };
    
        /**
         * Converts this CMsgGCCheckFriendship to JSON.
         * @function toJSON
         * @memberof CMsgGCCheckFriendship
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCCheckFriendship.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCCheckFriendship;
    })();
    
    $root.CMsgGCCheckFriendship_Response = (function() {
    
        /**
         * Properties of a CMsgGCCheckFriendship_Response.
         * @exports ICMsgGCCheckFriendship_Response
         * @interface ICMsgGCCheckFriendship_Response
         * @property {boolean|null} [success] CMsgGCCheckFriendship_Response success
         * @property {boolean|null} [found_friendship] CMsgGCCheckFriendship_Response found_friendship
         */
    
        /**
         * Constructs a new CMsgGCCheckFriendship_Response.
         * @exports CMsgGCCheckFriendship_Response
         * @classdesc Represents a CMsgGCCheckFriendship_Response.
         * @implements ICMsgGCCheckFriendship_Response
         * @constructor
         * @param {ICMsgGCCheckFriendship_Response=} [properties] Properties to set
         */
        function CMsgGCCheckFriendship_Response(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCCheckFriendship_Response success.
         * @member {boolean} success
         * @memberof CMsgGCCheckFriendship_Response
         * @instance
         */
        CMsgGCCheckFriendship_Response.prototype.success = false;
    
        /**
         * CMsgGCCheckFriendship_Response found_friendship.
         * @member {boolean} found_friendship
         * @memberof CMsgGCCheckFriendship_Response
         * @instance
         */
        CMsgGCCheckFriendship_Response.prototype.found_friendship = false;
    
        /**
         * Creates a new CMsgGCCheckFriendship_Response instance using the specified properties.
         * @function create
         * @memberof CMsgGCCheckFriendship_Response
         * @static
         * @param {ICMsgGCCheckFriendship_Response=} [properties] Properties to set
         * @returns {CMsgGCCheckFriendship_Response} CMsgGCCheckFriendship_Response instance
         */
        CMsgGCCheckFriendship_Response.create = function create(properties) {
            return new CMsgGCCheckFriendship_Response(properties);
        };
    
        /**
         * Encodes the specified CMsgGCCheckFriendship_Response message. Does not implicitly {@link CMsgGCCheckFriendship_Response.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCCheckFriendship_Response
         * @static
         * @param {ICMsgGCCheckFriendship_Response} message CMsgGCCheckFriendship_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCCheckFriendship_Response.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.success != null && message.hasOwnProperty("success"))
                writer.uint32(/* id 1, wireType 0 =*/8).bool(message.success);
            if (message.found_friendship != null && message.hasOwnProperty("found_friendship"))
                writer.uint32(/* id 2, wireType 0 =*/16).bool(message.found_friendship);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCCheckFriendship_Response message, length delimited. Does not implicitly {@link CMsgGCCheckFriendship_Response.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCCheckFriendship_Response
         * @static
         * @param {ICMsgGCCheckFriendship_Response} message CMsgGCCheckFriendship_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCCheckFriendship_Response.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCCheckFriendship_Response message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCCheckFriendship_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCCheckFriendship_Response} CMsgGCCheckFriendship_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCCheckFriendship_Response.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCCheckFriendship_Response();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.success = reader.bool();
                    break;
                case 2:
                    message.found_friendship = reader.bool();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCCheckFriendship_Response message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCCheckFriendship_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCCheckFriendship_Response} CMsgGCCheckFriendship_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCCheckFriendship_Response.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCCheckFriendship_Response message.
         * @function verify
         * @memberof CMsgGCCheckFriendship_Response
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCCheckFriendship_Response.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.success != null && message.hasOwnProperty("success"))
                if (typeof message.success !== "boolean")
                    return "success: boolean expected";
            if (message.found_friendship != null && message.hasOwnProperty("found_friendship"))
                if (typeof message.found_friendship !== "boolean")
                    return "found_friendship: boolean expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCCheckFriendship_Response message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCCheckFriendship_Response
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCCheckFriendship_Response} CMsgGCCheckFriendship_Response
         */
        CMsgGCCheckFriendship_Response.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCCheckFriendship_Response)
                return object;
            var message = new $root.CMsgGCCheckFriendship_Response();
            if (object.success != null)
                message.success = Boolean(object.success);
            if (object.found_friendship != null)
                message.found_friendship = Boolean(object.found_friendship);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCCheckFriendship_Response message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCCheckFriendship_Response
         * @static
         * @param {CMsgGCCheckFriendship_Response} message CMsgGCCheckFriendship_Response
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCCheckFriendship_Response.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.success = false;
                object.found_friendship = false;
            }
            if (message.success != null && message.hasOwnProperty("success"))
                object.success = message.success;
            if (message.found_friendship != null && message.hasOwnProperty("found_friendship"))
                object.found_friendship = message.found_friendship;
            return object;
        };
    
        /**
         * Converts this CMsgGCCheckFriendship_Response to JSON.
         * @function toJSON
         * @memberof CMsgGCCheckFriendship_Response
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCCheckFriendship_Response.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCCheckFriendship_Response;
    })();
    
    $root.CMsgGCMsgMasterSetDirectory = (function() {
    
        /**
         * Properties of a CMsgGCMsgMasterSetDirectory.
         * @exports ICMsgGCMsgMasterSetDirectory
         * @interface ICMsgGCMsgMasterSetDirectory
         * @property {number|null} [master_dir_index] CMsgGCMsgMasterSetDirectory master_dir_index
         * @property {Array.<CMsgGCMsgMasterSetDirectory.ISubGC>|null} [dir] CMsgGCMsgMasterSetDirectory dir
         */
    
        /**
         * Constructs a new CMsgGCMsgMasterSetDirectory.
         * @exports CMsgGCMsgMasterSetDirectory
         * @classdesc Represents a CMsgGCMsgMasterSetDirectory.
         * @implements ICMsgGCMsgMasterSetDirectory
         * @constructor
         * @param {ICMsgGCMsgMasterSetDirectory=} [properties] Properties to set
         */
        function CMsgGCMsgMasterSetDirectory(properties) {
            this.dir = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCMsgMasterSetDirectory master_dir_index.
         * @member {number} master_dir_index
         * @memberof CMsgGCMsgMasterSetDirectory
         * @instance
         */
        CMsgGCMsgMasterSetDirectory.prototype.master_dir_index = 0;
    
        /**
         * CMsgGCMsgMasterSetDirectory dir.
         * @member {Array.<CMsgGCMsgMasterSetDirectory.ISubGC>} dir
         * @memberof CMsgGCMsgMasterSetDirectory
         * @instance
         */
        CMsgGCMsgMasterSetDirectory.prototype.dir = $util.emptyArray;
    
        /**
         * Creates a new CMsgGCMsgMasterSetDirectory instance using the specified properties.
         * @function create
         * @memberof CMsgGCMsgMasterSetDirectory
         * @static
         * @param {ICMsgGCMsgMasterSetDirectory=} [properties] Properties to set
         * @returns {CMsgGCMsgMasterSetDirectory} CMsgGCMsgMasterSetDirectory instance
         */
        CMsgGCMsgMasterSetDirectory.create = function create(properties) {
            return new CMsgGCMsgMasterSetDirectory(properties);
        };
    
        /**
         * Encodes the specified CMsgGCMsgMasterSetDirectory message. Does not implicitly {@link CMsgGCMsgMasterSetDirectory.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCMsgMasterSetDirectory
         * @static
         * @param {ICMsgGCMsgMasterSetDirectory} message CMsgGCMsgMasterSetDirectory message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgMasterSetDirectory.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.master_dir_index != null && message.hasOwnProperty("master_dir_index"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.master_dir_index);
            if (message.dir != null && message.dir.length)
                for (var i = 0; i < message.dir.length; ++i)
                    $root.CMsgGCMsgMasterSetDirectory.SubGC.encode(message.dir[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCMsgMasterSetDirectory message, length delimited. Does not implicitly {@link CMsgGCMsgMasterSetDirectory.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCMsgMasterSetDirectory
         * @static
         * @param {ICMsgGCMsgMasterSetDirectory} message CMsgGCMsgMasterSetDirectory message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgMasterSetDirectory.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCMsgMasterSetDirectory message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCMsgMasterSetDirectory
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCMsgMasterSetDirectory} CMsgGCMsgMasterSetDirectory
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgMasterSetDirectory.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCMsgMasterSetDirectory();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.master_dir_index = reader.uint32();
                    break;
                case 2:
                    if (!(message.dir && message.dir.length))
                        message.dir = [];
                    message.dir.push($root.CMsgGCMsgMasterSetDirectory.SubGC.decode(reader, reader.uint32()));
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCMsgMasterSetDirectory message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCMsgMasterSetDirectory
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCMsgMasterSetDirectory} CMsgGCMsgMasterSetDirectory
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgMasterSetDirectory.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCMsgMasterSetDirectory message.
         * @function verify
         * @memberof CMsgGCMsgMasterSetDirectory
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCMsgMasterSetDirectory.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.master_dir_index != null && message.hasOwnProperty("master_dir_index"))
                if (!$util.isInteger(message.master_dir_index))
                    return "master_dir_index: integer expected";
            if (message.dir != null && message.hasOwnProperty("dir")) {
                if (!Array.isArray(message.dir))
                    return "dir: array expected";
                for (var i = 0; i < message.dir.length; ++i) {
                    var error = $root.CMsgGCMsgMasterSetDirectory.SubGC.verify(message.dir[i]);
                    if (error)
                        return "dir." + error;
                }
            }
            return null;
        };
    
        /**
         * Creates a CMsgGCMsgMasterSetDirectory message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCMsgMasterSetDirectory
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCMsgMasterSetDirectory} CMsgGCMsgMasterSetDirectory
         */
        CMsgGCMsgMasterSetDirectory.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCMsgMasterSetDirectory)
                return object;
            var message = new $root.CMsgGCMsgMasterSetDirectory();
            if (object.master_dir_index != null)
                message.master_dir_index = object.master_dir_index >>> 0;
            if (object.dir) {
                if (!Array.isArray(object.dir))
                    throw TypeError(".CMsgGCMsgMasterSetDirectory.dir: array expected");
                message.dir = [];
                for (var i = 0; i < object.dir.length; ++i) {
                    if (typeof object.dir[i] !== "object")
                        throw TypeError(".CMsgGCMsgMasterSetDirectory.dir: object expected");
                    message.dir[i] = $root.CMsgGCMsgMasterSetDirectory.SubGC.fromObject(object.dir[i]);
                }
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCMsgMasterSetDirectory message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCMsgMasterSetDirectory
         * @static
         * @param {CMsgGCMsgMasterSetDirectory} message CMsgGCMsgMasterSetDirectory
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCMsgMasterSetDirectory.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.dir = [];
            if (options.defaults)
                object.master_dir_index = 0;
            if (message.master_dir_index != null && message.hasOwnProperty("master_dir_index"))
                object.master_dir_index = message.master_dir_index;
            if (message.dir && message.dir.length) {
                object.dir = [];
                for (var j = 0; j < message.dir.length; ++j)
                    object.dir[j] = $root.CMsgGCMsgMasterSetDirectory.SubGC.toObject(message.dir[j], options);
            }
            return object;
        };
    
        /**
         * Converts this CMsgGCMsgMasterSetDirectory to JSON.
         * @function toJSON
         * @memberof CMsgGCMsgMasterSetDirectory
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCMsgMasterSetDirectory.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgGCMsgMasterSetDirectory.SubGC = (function() {
    
            /**
             * Properties of a SubGC.
             * @memberof CMsgGCMsgMasterSetDirectory
             * @interface ISubGC
             * @property {number|null} [dir_index] SubGC dir_index
             * @property {string|null} [name] SubGC name
             * @property {string|null} [box] SubGC box
             * @property {string|null} [command_line] SubGC command_line
             * @property {string|null} [gc_binary] SubGC gc_binary
             */
    
            /**
             * Constructs a new SubGC.
             * @memberof CMsgGCMsgMasterSetDirectory
             * @classdesc Represents a SubGC.
             * @implements ISubGC
             * @constructor
             * @param {CMsgGCMsgMasterSetDirectory.ISubGC=} [properties] Properties to set
             */
            function SubGC(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * SubGC dir_index.
             * @member {number} dir_index
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @instance
             */
            SubGC.prototype.dir_index = 0;
    
            /**
             * SubGC name.
             * @member {string} name
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @instance
             */
            SubGC.prototype.name = "";
    
            /**
             * SubGC box.
             * @member {string} box
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @instance
             */
            SubGC.prototype.box = "";
    
            /**
             * SubGC command_line.
             * @member {string} command_line
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @instance
             */
            SubGC.prototype.command_line = "";
    
            /**
             * SubGC gc_binary.
             * @member {string} gc_binary
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @instance
             */
            SubGC.prototype.gc_binary = "";
    
            /**
             * Creates a new SubGC instance using the specified properties.
             * @function create
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @static
             * @param {CMsgGCMsgMasterSetDirectory.ISubGC=} [properties] Properties to set
             * @returns {CMsgGCMsgMasterSetDirectory.SubGC} SubGC instance
             */
            SubGC.create = function create(properties) {
                return new SubGC(properties);
            };
    
            /**
             * Encodes the specified SubGC message. Does not implicitly {@link CMsgGCMsgMasterSetDirectory.SubGC.verify|verify} messages.
             * @function encode
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @static
             * @param {CMsgGCMsgMasterSetDirectory.ISubGC} message SubGC message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            SubGC.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.dir_index != null && message.hasOwnProperty("dir_index"))
                    writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.dir_index);
                if (message.name != null && message.hasOwnProperty("name"))
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.name);
                if (message.box != null && message.hasOwnProperty("box"))
                    writer.uint32(/* id 3, wireType 2 =*/26).string(message.box);
                if (message.command_line != null && message.hasOwnProperty("command_line"))
                    writer.uint32(/* id 4, wireType 2 =*/34).string(message.command_line);
                if (message.gc_binary != null && message.hasOwnProperty("gc_binary"))
                    writer.uint32(/* id 5, wireType 2 =*/42).string(message.gc_binary);
                return writer;
            };
    
            /**
             * Encodes the specified SubGC message, length delimited. Does not implicitly {@link CMsgGCMsgMasterSetDirectory.SubGC.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @static
             * @param {CMsgGCMsgMasterSetDirectory.ISubGC} message SubGC message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            SubGC.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a SubGC message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgGCMsgMasterSetDirectory.SubGC} SubGC
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            SubGC.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCMsgMasterSetDirectory.SubGC();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.dir_index = reader.uint32();
                        break;
                    case 2:
                        message.name = reader.string();
                        break;
                    case 3:
                        message.box = reader.string();
                        break;
                    case 4:
                        message.command_line = reader.string();
                        break;
                    case 5:
                        message.gc_binary = reader.string();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a SubGC message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgGCMsgMasterSetDirectory.SubGC} SubGC
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            SubGC.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a SubGC message.
             * @function verify
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            SubGC.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.dir_index != null && message.hasOwnProperty("dir_index"))
                    if (!$util.isInteger(message.dir_index))
                        return "dir_index: integer expected";
                if (message.name != null && message.hasOwnProperty("name"))
                    if (!$util.isString(message.name))
                        return "name: string expected";
                if (message.box != null && message.hasOwnProperty("box"))
                    if (!$util.isString(message.box))
                        return "box: string expected";
                if (message.command_line != null && message.hasOwnProperty("command_line"))
                    if (!$util.isString(message.command_line))
                        return "command_line: string expected";
                if (message.gc_binary != null && message.hasOwnProperty("gc_binary"))
                    if (!$util.isString(message.gc_binary))
                        return "gc_binary: string expected";
                return null;
            };
    
            /**
             * Creates a SubGC message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgGCMsgMasterSetDirectory.SubGC} SubGC
             */
            SubGC.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgGCMsgMasterSetDirectory.SubGC)
                    return object;
                var message = new $root.CMsgGCMsgMasterSetDirectory.SubGC();
                if (object.dir_index != null)
                    message.dir_index = object.dir_index >>> 0;
                if (object.name != null)
                    message.name = String(object.name);
                if (object.box != null)
                    message.box = String(object.box);
                if (object.command_line != null)
                    message.command_line = String(object.command_line);
                if (object.gc_binary != null)
                    message.gc_binary = String(object.gc_binary);
                return message;
            };
    
            /**
             * Creates a plain object from a SubGC message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @static
             * @param {CMsgGCMsgMasterSetDirectory.SubGC} message SubGC
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            SubGC.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.dir_index = 0;
                    object.name = "";
                    object.box = "";
                    object.command_line = "";
                    object.gc_binary = "";
                }
                if (message.dir_index != null && message.hasOwnProperty("dir_index"))
                    object.dir_index = message.dir_index;
                if (message.name != null && message.hasOwnProperty("name"))
                    object.name = message.name;
                if (message.box != null && message.hasOwnProperty("box"))
                    object.box = message.box;
                if (message.command_line != null && message.hasOwnProperty("command_line"))
                    object.command_line = message.command_line;
                if (message.gc_binary != null && message.hasOwnProperty("gc_binary"))
                    object.gc_binary = message.gc_binary;
                return object;
            };
    
            /**
             * Converts this SubGC to JSON.
             * @function toJSON
             * @memberof CMsgGCMsgMasterSetDirectory.SubGC
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            SubGC.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return SubGC;
        })();
    
        return CMsgGCMsgMasterSetDirectory;
    })();
    
    $root.CMsgGCMsgMasterSetDirectory_Response = (function() {
    
        /**
         * Properties of a CMsgGCMsgMasterSetDirectory_Response.
         * @exports ICMsgGCMsgMasterSetDirectory_Response
         * @interface ICMsgGCMsgMasterSetDirectory_Response
         * @property {number|null} [eresult] CMsgGCMsgMasterSetDirectory_Response eresult
         */
    
        /**
         * Constructs a new CMsgGCMsgMasterSetDirectory_Response.
         * @exports CMsgGCMsgMasterSetDirectory_Response
         * @classdesc Represents a CMsgGCMsgMasterSetDirectory_Response.
         * @implements ICMsgGCMsgMasterSetDirectory_Response
         * @constructor
         * @param {ICMsgGCMsgMasterSetDirectory_Response=} [properties] Properties to set
         */
        function CMsgGCMsgMasterSetDirectory_Response(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCMsgMasterSetDirectory_Response eresult.
         * @member {number} eresult
         * @memberof CMsgGCMsgMasterSetDirectory_Response
         * @instance
         */
        CMsgGCMsgMasterSetDirectory_Response.prototype.eresult = 2;
    
        /**
         * Creates a new CMsgGCMsgMasterSetDirectory_Response instance using the specified properties.
         * @function create
         * @memberof CMsgGCMsgMasterSetDirectory_Response
         * @static
         * @param {ICMsgGCMsgMasterSetDirectory_Response=} [properties] Properties to set
         * @returns {CMsgGCMsgMasterSetDirectory_Response} CMsgGCMsgMasterSetDirectory_Response instance
         */
        CMsgGCMsgMasterSetDirectory_Response.create = function create(properties) {
            return new CMsgGCMsgMasterSetDirectory_Response(properties);
        };
    
        /**
         * Encodes the specified CMsgGCMsgMasterSetDirectory_Response message. Does not implicitly {@link CMsgGCMsgMasterSetDirectory_Response.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCMsgMasterSetDirectory_Response
         * @static
         * @param {ICMsgGCMsgMasterSetDirectory_Response} message CMsgGCMsgMasterSetDirectory_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgMasterSetDirectory_Response.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.eresult);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCMsgMasterSetDirectory_Response message, length delimited. Does not implicitly {@link CMsgGCMsgMasterSetDirectory_Response.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCMsgMasterSetDirectory_Response
         * @static
         * @param {ICMsgGCMsgMasterSetDirectory_Response} message CMsgGCMsgMasterSetDirectory_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgMasterSetDirectory_Response.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCMsgMasterSetDirectory_Response message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCMsgMasterSetDirectory_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCMsgMasterSetDirectory_Response} CMsgGCMsgMasterSetDirectory_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgMasterSetDirectory_Response.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCMsgMasterSetDirectory_Response();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.eresult = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCMsgMasterSetDirectory_Response message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCMsgMasterSetDirectory_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCMsgMasterSetDirectory_Response} CMsgGCMsgMasterSetDirectory_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgMasterSetDirectory_Response.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCMsgMasterSetDirectory_Response message.
         * @function verify
         * @memberof CMsgGCMsgMasterSetDirectory_Response
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCMsgMasterSetDirectory_Response.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                if (!$util.isInteger(message.eresult))
                    return "eresult: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCMsgMasterSetDirectory_Response message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCMsgMasterSetDirectory_Response
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCMsgMasterSetDirectory_Response} CMsgGCMsgMasterSetDirectory_Response
         */
        CMsgGCMsgMasterSetDirectory_Response.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCMsgMasterSetDirectory_Response)
                return object;
            var message = new $root.CMsgGCMsgMasterSetDirectory_Response();
            if (object.eresult != null)
                message.eresult = object.eresult | 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCMsgMasterSetDirectory_Response message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCMsgMasterSetDirectory_Response
         * @static
         * @param {CMsgGCMsgMasterSetDirectory_Response} message CMsgGCMsgMasterSetDirectory_Response
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCMsgMasterSetDirectory_Response.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.eresult = 2;
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                object.eresult = message.eresult;
            return object;
        };
    
        /**
         * Converts this CMsgGCMsgMasterSetDirectory_Response to JSON.
         * @function toJSON
         * @memberof CMsgGCMsgMasterSetDirectory_Response
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCMsgMasterSetDirectory_Response.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCMsgMasterSetDirectory_Response;
    })();
    
    $root.CMsgGCMsgWebAPIJobRequestForwardResponse = (function() {
    
        /**
         * Properties of a CMsgGCMsgWebAPIJobRequestForwardResponse.
         * @exports ICMsgGCMsgWebAPIJobRequestForwardResponse
         * @interface ICMsgGCMsgWebAPIJobRequestForwardResponse
         * @property {number|null} [dir_index] CMsgGCMsgWebAPIJobRequestForwardResponse dir_index
         */
    
        /**
         * Constructs a new CMsgGCMsgWebAPIJobRequestForwardResponse.
         * @exports CMsgGCMsgWebAPIJobRequestForwardResponse
         * @classdesc Represents a CMsgGCMsgWebAPIJobRequestForwardResponse.
         * @implements ICMsgGCMsgWebAPIJobRequestForwardResponse
         * @constructor
         * @param {ICMsgGCMsgWebAPIJobRequestForwardResponse=} [properties] Properties to set
         */
        function CMsgGCMsgWebAPIJobRequestForwardResponse(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCMsgWebAPIJobRequestForwardResponse dir_index.
         * @member {number} dir_index
         * @memberof CMsgGCMsgWebAPIJobRequestForwardResponse
         * @instance
         */
        CMsgGCMsgWebAPIJobRequestForwardResponse.prototype.dir_index = 0;
    
        /**
         * Creates a new CMsgGCMsgWebAPIJobRequestForwardResponse instance using the specified properties.
         * @function create
         * @memberof CMsgGCMsgWebAPIJobRequestForwardResponse
         * @static
         * @param {ICMsgGCMsgWebAPIJobRequestForwardResponse=} [properties] Properties to set
         * @returns {CMsgGCMsgWebAPIJobRequestForwardResponse} CMsgGCMsgWebAPIJobRequestForwardResponse instance
         */
        CMsgGCMsgWebAPIJobRequestForwardResponse.create = function create(properties) {
            return new CMsgGCMsgWebAPIJobRequestForwardResponse(properties);
        };
    
        /**
         * Encodes the specified CMsgGCMsgWebAPIJobRequestForwardResponse message. Does not implicitly {@link CMsgGCMsgWebAPIJobRequestForwardResponse.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCMsgWebAPIJobRequestForwardResponse
         * @static
         * @param {ICMsgGCMsgWebAPIJobRequestForwardResponse} message CMsgGCMsgWebAPIJobRequestForwardResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgWebAPIJobRequestForwardResponse.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.dir_index != null && message.hasOwnProperty("dir_index"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.dir_index);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCMsgWebAPIJobRequestForwardResponse message, length delimited. Does not implicitly {@link CMsgGCMsgWebAPIJobRequestForwardResponse.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCMsgWebAPIJobRequestForwardResponse
         * @static
         * @param {ICMsgGCMsgWebAPIJobRequestForwardResponse} message CMsgGCMsgWebAPIJobRequestForwardResponse message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgWebAPIJobRequestForwardResponse.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCMsgWebAPIJobRequestForwardResponse message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCMsgWebAPIJobRequestForwardResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCMsgWebAPIJobRequestForwardResponse} CMsgGCMsgWebAPIJobRequestForwardResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgWebAPIJobRequestForwardResponse.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCMsgWebAPIJobRequestForwardResponse();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.dir_index = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCMsgWebAPIJobRequestForwardResponse message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCMsgWebAPIJobRequestForwardResponse
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCMsgWebAPIJobRequestForwardResponse} CMsgGCMsgWebAPIJobRequestForwardResponse
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgWebAPIJobRequestForwardResponse.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCMsgWebAPIJobRequestForwardResponse message.
         * @function verify
         * @memberof CMsgGCMsgWebAPIJobRequestForwardResponse
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCMsgWebAPIJobRequestForwardResponse.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.dir_index != null && message.hasOwnProperty("dir_index"))
                if (!$util.isInteger(message.dir_index))
                    return "dir_index: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCMsgWebAPIJobRequestForwardResponse message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCMsgWebAPIJobRequestForwardResponse
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCMsgWebAPIJobRequestForwardResponse} CMsgGCMsgWebAPIJobRequestForwardResponse
         */
        CMsgGCMsgWebAPIJobRequestForwardResponse.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCMsgWebAPIJobRequestForwardResponse)
                return object;
            var message = new $root.CMsgGCMsgWebAPIJobRequestForwardResponse();
            if (object.dir_index != null)
                message.dir_index = object.dir_index >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCMsgWebAPIJobRequestForwardResponse message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCMsgWebAPIJobRequestForwardResponse
         * @static
         * @param {CMsgGCMsgWebAPIJobRequestForwardResponse} message CMsgGCMsgWebAPIJobRequestForwardResponse
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCMsgWebAPIJobRequestForwardResponse.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.dir_index = 0;
            if (message.dir_index != null && message.hasOwnProperty("dir_index"))
                object.dir_index = message.dir_index;
            return object;
        };
    
        /**
         * Converts this CMsgGCMsgWebAPIJobRequestForwardResponse to JSON.
         * @function toJSON
         * @memberof CMsgGCMsgWebAPIJobRequestForwardResponse
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCMsgWebAPIJobRequestForwardResponse.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCMsgWebAPIJobRequestForwardResponse;
    })();
    
    $root.CGCSystemMsg_GetPurchaseTrust_Request = (function() {
    
        /**
         * Properties of a CGCSystemMsg_GetPurchaseTrust_Request.
         * @exports ICGCSystemMsg_GetPurchaseTrust_Request
         * @interface ICGCSystemMsg_GetPurchaseTrust_Request
         * @property {number|Long|null} [steamid] CGCSystemMsg_GetPurchaseTrust_Request steamid
         */
    
        /**
         * Constructs a new CGCSystemMsg_GetPurchaseTrust_Request.
         * @exports CGCSystemMsg_GetPurchaseTrust_Request
         * @classdesc Represents a CGCSystemMsg_GetPurchaseTrust_Request.
         * @implements ICGCSystemMsg_GetPurchaseTrust_Request
         * @constructor
         * @param {ICGCSystemMsg_GetPurchaseTrust_Request=} [properties] Properties to set
         */
        function CGCSystemMsg_GetPurchaseTrust_Request(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCSystemMsg_GetPurchaseTrust_Request steamid.
         * @member {number|Long} steamid
         * @memberof CGCSystemMsg_GetPurchaseTrust_Request
         * @instance
         */
        CGCSystemMsg_GetPurchaseTrust_Request.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * Creates a new CGCSystemMsg_GetPurchaseTrust_Request instance using the specified properties.
         * @function create
         * @memberof CGCSystemMsg_GetPurchaseTrust_Request
         * @static
         * @param {ICGCSystemMsg_GetPurchaseTrust_Request=} [properties] Properties to set
         * @returns {CGCSystemMsg_GetPurchaseTrust_Request} CGCSystemMsg_GetPurchaseTrust_Request instance
         */
        CGCSystemMsg_GetPurchaseTrust_Request.create = function create(properties) {
            return new CGCSystemMsg_GetPurchaseTrust_Request(properties);
        };
    
        /**
         * Encodes the specified CGCSystemMsg_GetPurchaseTrust_Request message. Does not implicitly {@link CGCSystemMsg_GetPurchaseTrust_Request.verify|verify} messages.
         * @function encode
         * @memberof CGCSystemMsg_GetPurchaseTrust_Request
         * @static
         * @param {ICGCSystemMsg_GetPurchaseTrust_Request} message CGCSystemMsg_GetPurchaseTrust_Request message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCSystemMsg_GetPurchaseTrust_Request.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            return writer;
        };
    
        /**
         * Encodes the specified CGCSystemMsg_GetPurchaseTrust_Request message, length delimited. Does not implicitly {@link CGCSystemMsg_GetPurchaseTrust_Request.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCSystemMsg_GetPurchaseTrust_Request
         * @static
         * @param {ICGCSystemMsg_GetPurchaseTrust_Request} message CGCSystemMsg_GetPurchaseTrust_Request message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCSystemMsg_GetPurchaseTrust_Request.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCSystemMsg_GetPurchaseTrust_Request message from the specified reader or buffer.
         * @function decode
         * @memberof CGCSystemMsg_GetPurchaseTrust_Request
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCSystemMsg_GetPurchaseTrust_Request} CGCSystemMsg_GetPurchaseTrust_Request
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCSystemMsg_GetPurchaseTrust_Request.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCSystemMsg_GetPurchaseTrust_Request();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCSystemMsg_GetPurchaseTrust_Request message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCSystemMsg_GetPurchaseTrust_Request
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCSystemMsg_GetPurchaseTrust_Request} CGCSystemMsg_GetPurchaseTrust_Request
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCSystemMsg_GetPurchaseTrust_Request.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCSystemMsg_GetPurchaseTrust_Request message.
         * @function verify
         * @memberof CGCSystemMsg_GetPurchaseTrust_Request
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCSystemMsg_GetPurchaseTrust_Request.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CGCSystemMsg_GetPurchaseTrust_Request message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCSystemMsg_GetPurchaseTrust_Request
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCSystemMsg_GetPurchaseTrust_Request} CGCSystemMsg_GetPurchaseTrust_Request
         */
        CGCSystemMsg_GetPurchaseTrust_Request.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCSystemMsg_GetPurchaseTrust_Request)
                return object;
            var message = new $root.CGCSystemMsg_GetPurchaseTrust_Request();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            return message;
        };
    
        /**
         * Creates a plain object from a CGCSystemMsg_GetPurchaseTrust_Request message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCSystemMsg_GetPurchaseTrust_Request
         * @static
         * @param {CGCSystemMsg_GetPurchaseTrust_Request} message CGCSystemMsg_GetPurchaseTrust_Request
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCSystemMsg_GetPurchaseTrust_Request.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            return object;
        };
    
        /**
         * Converts this CGCSystemMsg_GetPurchaseTrust_Request to JSON.
         * @function toJSON
         * @memberof CGCSystemMsg_GetPurchaseTrust_Request
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCSystemMsg_GetPurchaseTrust_Request.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCSystemMsg_GetPurchaseTrust_Request;
    })();
    
    $root.CGCSystemMsg_GetPurchaseTrust_Response = (function() {
    
        /**
         * Properties of a CGCSystemMsg_GetPurchaseTrust_Response.
         * @exports ICGCSystemMsg_GetPurchaseTrust_Response
         * @interface ICGCSystemMsg_GetPurchaseTrust_Response
         * @property {boolean|null} [has_prior_purchase_history] CGCSystemMsg_GetPurchaseTrust_Response has_prior_purchase_history
         * @property {boolean|null} [has_no_recent_password_resets] CGCSystemMsg_GetPurchaseTrust_Response has_no_recent_password_resets
         * @property {boolean|null} [is_wallet_cash_trusted] CGCSystemMsg_GetPurchaseTrust_Response is_wallet_cash_trusted
         * @property {number|null} [time_all_trusted] CGCSystemMsg_GetPurchaseTrust_Response time_all_trusted
         */
    
        /**
         * Constructs a new CGCSystemMsg_GetPurchaseTrust_Response.
         * @exports CGCSystemMsg_GetPurchaseTrust_Response
         * @classdesc Represents a CGCSystemMsg_GetPurchaseTrust_Response.
         * @implements ICGCSystemMsg_GetPurchaseTrust_Response
         * @constructor
         * @param {ICGCSystemMsg_GetPurchaseTrust_Response=} [properties] Properties to set
         */
        function CGCSystemMsg_GetPurchaseTrust_Response(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CGCSystemMsg_GetPurchaseTrust_Response has_prior_purchase_history.
         * @member {boolean} has_prior_purchase_history
         * @memberof CGCSystemMsg_GetPurchaseTrust_Response
         * @instance
         */
        CGCSystemMsg_GetPurchaseTrust_Response.prototype.has_prior_purchase_history = false;
    
        /**
         * CGCSystemMsg_GetPurchaseTrust_Response has_no_recent_password_resets.
         * @member {boolean} has_no_recent_password_resets
         * @memberof CGCSystemMsg_GetPurchaseTrust_Response
         * @instance
         */
        CGCSystemMsg_GetPurchaseTrust_Response.prototype.has_no_recent_password_resets = false;
    
        /**
         * CGCSystemMsg_GetPurchaseTrust_Response is_wallet_cash_trusted.
         * @member {boolean} is_wallet_cash_trusted
         * @memberof CGCSystemMsg_GetPurchaseTrust_Response
         * @instance
         */
        CGCSystemMsg_GetPurchaseTrust_Response.prototype.is_wallet_cash_trusted = false;
    
        /**
         * CGCSystemMsg_GetPurchaseTrust_Response time_all_trusted.
         * @member {number} time_all_trusted
         * @memberof CGCSystemMsg_GetPurchaseTrust_Response
         * @instance
         */
        CGCSystemMsg_GetPurchaseTrust_Response.prototype.time_all_trusted = 0;
    
        /**
         * Creates a new CGCSystemMsg_GetPurchaseTrust_Response instance using the specified properties.
         * @function create
         * @memberof CGCSystemMsg_GetPurchaseTrust_Response
         * @static
         * @param {ICGCSystemMsg_GetPurchaseTrust_Response=} [properties] Properties to set
         * @returns {CGCSystemMsg_GetPurchaseTrust_Response} CGCSystemMsg_GetPurchaseTrust_Response instance
         */
        CGCSystemMsg_GetPurchaseTrust_Response.create = function create(properties) {
            return new CGCSystemMsg_GetPurchaseTrust_Response(properties);
        };
    
        /**
         * Encodes the specified CGCSystemMsg_GetPurchaseTrust_Response message. Does not implicitly {@link CGCSystemMsg_GetPurchaseTrust_Response.verify|verify} messages.
         * @function encode
         * @memberof CGCSystemMsg_GetPurchaseTrust_Response
         * @static
         * @param {ICGCSystemMsg_GetPurchaseTrust_Response} message CGCSystemMsg_GetPurchaseTrust_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCSystemMsg_GetPurchaseTrust_Response.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.has_prior_purchase_history != null && message.hasOwnProperty("has_prior_purchase_history"))
                writer.uint32(/* id 1, wireType 0 =*/8).bool(message.has_prior_purchase_history);
            if (message.has_no_recent_password_resets != null && message.hasOwnProperty("has_no_recent_password_resets"))
                writer.uint32(/* id 2, wireType 0 =*/16).bool(message.has_no_recent_password_resets);
            if (message.is_wallet_cash_trusted != null && message.hasOwnProperty("is_wallet_cash_trusted"))
                writer.uint32(/* id 3, wireType 0 =*/24).bool(message.is_wallet_cash_trusted);
            if (message.time_all_trusted != null && message.hasOwnProperty("time_all_trusted"))
                writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.time_all_trusted);
            return writer;
        };
    
        /**
         * Encodes the specified CGCSystemMsg_GetPurchaseTrust_Response message, length delimited. Does not implicitly {@link CGCSystemMsg_GetPurchaseTrust_Response.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CGCSystemMsg_GetPurchaseTrust_Response
         * @static
         * @param {ICGCSystemMsg_GetPurchaseTrust_Response} message CGCSystemMsg_GetPurchaseTrust_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CGCSystemMsg_GetPurchaseTrust_Response.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CGCSystemMsg_GetPurchaseTrust_Response message from the specified reader or buffer.
         * @function decode
         * @memberof CGCSystemMsg_GetPurchaseTrust_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CGCSystemMsg_GetPurchaseTrust_Response} CGCSystemMsg_GetPurchaseTrust_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCSystemMsg_GetPurchaseTrust_Response.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CGCSystemMsg_GetPurchaseTrust_Response();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.has_prior_purchase_history = reader.bool();
                    break;
                case 2:
                    message.has_no_recent_password_resets = reader.bool();
                    break;
                case 3:
                    message.is_wallet_cash_trusted = reader.bool();
                    break;
                case 4:
                    message.time_all_trusted = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CGCSystemMsg_GetPurchaseTrust_Response message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CGCSystemMsg_GetPurchaseTrust_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CGCSystemMsg_GetPurchaseTrust_Response} CGCSystemMsg_GetPurchaseTrust_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CGCSystemMsg_GetPurchaseTrust_Response.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CGCSystemMsg_GetPurchaseTrust_Response message.
         * @function verify
         * @memberof CGCSystemMsg_GetPurchaseTrust_Response
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CGCSystemMsg_GetPurchaseTrust_Response.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.has_prior_purchase_history != null && message.hasOwnProperty("has_prior_purchase_history"))
                if (typeof message.has_prior_purchase_history !== "boolean")
                    return "has_prior_purchase_history: boolean expected";
            if (message.has_no_recent_password_resets != null && message.hasOwnProperty("has_no_recent_password_resets"))
                if (typeof message.has_no_recent_password_resets !== "boolean")
                    return "has_no_recent_password_resets: boolean expected";
            if (message.is_wallet_cash_trusted != null && message.hasOwnProperty("is_wallet_cash_trusted"))
                if (typeof message.is_wallet_cash_trusted !== "boolean")
                    return "is_wallet_cash_trusted: boolean expected";
            if (message.time_all_trusted != null && message.hasOwnProperty("time_all_trusted"))
                if (!$util.isInteger(message.time_all_trusted))
                    return "time_all_trusted: integer expected";
            return null;
        };
    
        /**
         * Creates a CGCSystemMsg_GetPurchaseTrust_Response message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CGCSystemMsg_GetPurchaseTrust_Response
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CGCSystemMsg_GetPurchaseTrust_Response} CGCSystemMsg_GetPurchaseTrust_Response
         */
        CGCSystemMsg_GetPurchaseTrust_Response.fromObject = function fromObject(object) {
            if (object instanceof $root.CGCSystemMsg_GetPurchaseTrust_Response)
                return object;
            var message = new $root.CGCSystemMsg_GetPurchaseTrust_Response();
            if (object.has_prior_purchase_history != null)
                message.has_prior_purchase_history = Boolean(object.has_prior_purchase_history);
            if (object.has_no_recent_password_resets != null)
                message.has_no_recent_password_resets = Boolean(object.has_no_recent_password_resets);
            if (object.is_wallet_cash_trusted != null)
                message.is_wallet_cash_trusted = Boolean(object.is_wallet_cash_trusted);
            if (object.time_all_trusted != null)
                message.time_all_trusted = object.time_all_trusted >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CGCSystemMsg_GetPurchaseTrust_Response message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CGCSystemMsg_GetPurchaseTrust_Response
         * @static
         * @param {CGCSystemMsg_GetPurchaseTrust_Response} message CGCSystemMsg_GetPurchaseTrust_Response
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CGCSystemMsg_GetPurchaseTrust_Response.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.has_prior_purchase_history = false;
                object.has_no_recent_password_resets = false;
                object.is_wallet_cash_trusted = false;
                object.time_all_trusted = 0;
            }
            if (message.has_prior_purchase_history != null && message.hasOwnProperty("has_prior_purchase_history"))
                object.has_prior_purchase_history = message.has_prior_purchase_history;
            if (message.has_no_recent_password_resets != null && message.hasOwnProperty("has_no_recent_password_resets"))
                object.has_no_recent_password_resets = message.has_no_recent_password_resets;
            if (message.is_wallet_cash_trusted != null && message.hasOwnProperty("is_wallet_cash_trusted"))
                object.is_wallet_cash_trusted = message.is_wallet_cash_trusted;
            if (message.time_all_trusted != null && message.hasOwnProperty("time_all_trusted"))
                object.time_all_trusted = message.time_all_trusted;
            return object;
        };
    
        /**
         * Converts this CGCSystemMsg_GetPurchaseTrust_Response to JSON.
         * @function toJSON
         * @memberof CGCSystemMsg_GetPurchaseTrust_Response
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CGCSystemMsg_GetPurchaseTrust_Response.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CGCSystemMsg_GetPurchaseTrust_Response;
    })();
    
    $root.CMsgGCHAccountVacStatusChange = (function() {
    
        /**
         * Properties of a CMsgGCHAccountVacStatusChange.
         * @exports ICMsgGCHAccountVacStatusChange
         * @interface ICMsgGCHAccountVacStatusChange
         * @property {number|Long|null} [steam_id] CMsgGCHAccountVacStatusChange steam_id
         * @property {number|null} [app_id] CMsgGCHAccountVacStatusChange app_id
         * @property {number|null} [rtime_vacban_starts] CMsgGCHAccountVacStatusChange rtime_vacban_starts
         * @property {boolean|null} [is_banned_now] CMsgGCHAccountVacStatusChange is_banned_now
         * @property {boolean|null} [is_banned_future] CMsgGCHAccountVacStatusChange is_banned_future
         */
    
        /**
         * Constructs a new CMsgGCHAccountVacStatusChange.
         * @exports CMsgGCHAccountVacStatusChange
         * @classdesc Represents a CMsgGCHAccountVacStatusChange.
         * @implements ICMsgGCHAccountVacStatusChange
         * @constructor
         * @param {ICMsgGCHAccountVacStatusChange=} [properties] Properties to set
         */
        function CMsgGCHAccountVacStatusChange(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCHAccountVacStatusChange steam_id.
         * @member {number|Long} steam_id
         * @memberof CMsgGCHAccountVacStatusChange
         * @instance
         */
        CMsgGCHAccountVacStatusChange.prototype.steam_id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCHAccountVacStatusChange app_id.
         * @member {number} app_id
         * @memberof CMsgGCHAccountVacStatusChange
         * @instance
         */
        CMsgGCHAccountVacStatusChange.prototype.app_id = 0;
    
        /**
         * CMsgGCHAccountVacStatusChange rtime_vacban_starts.
         * @member {number} rtime_vacban_starts
         * @memberof CMsgGCHAccountVacStatusChange
         * @instance
         */
        CMsgGCHAccountVacStatusChange.prototype.rtime_vacban_starts = 0;
    
        /**
         * CMsgGCHAccountVacStatusChange is_banned_now.
         * @member {boolean} is_banned_now
         * @memberof CMsgGCHAccountVacStatusChange
         * @instance
         */
        CMsgGCHAccountVacStatusChange.prototype.is_banned_now = false;
    
        /**
         * CMsgGCHAccountVacStatusChange is_banned_future.
         * @member {boolean} is_banned_future
         * @memberof CMsgGCHAccountVacStatusChange
         * @instance
         */
        CMsgGCHAccountVacStatusChange.prototype.is_banned_future = false;
    
        /**
         * Creates a new CMsgGCHAccountVacStatusChange instance using the specified properties.
         * @function create
         * @memberof CMsgGCHAccountVacStatusChange
         * @static
         * @param {ICMsgGCHAccountVacStatusChange=} [properties] Properties to set
         * @returns {CMsgGCHAccountVacStatusChange} CMsgGCHAccountVacStatusChange instance
         */
        CMsgGCHAccountVacStatusChange.create = function create(properties) {
            return new CMsgGCHAccountVacStatusChange(properties);
        };
    
        /**
         * Encodes the specified CMsgGCHAccountVacStatusChange message. Does not implicitly {@link CMsgGCHAccountVacStatusChange.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCHAccountVacStatusChange
         * @static
         * @param {ICMsgGCHAccountVacStatusChange} message CMsgGCHAccountVacStatusChange message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHAccountVacStatusChange.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steam_id);
            if (message.app_id != null && message.hasOwnProperty("app_id"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.app_id);
            if (message.rtime_vacban_starts != null && message.hasOwnProperty("rtime_vacban_starts"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.rtime_vacban_starts);
            if (message.is_banned_now != null && message.hasOwnProperty("is_banned_now"))
                writer.uint32(/* id 4, wireType 0 =*/32).bool(message.is_banned_now);
            if (message.is_banned_future != null && message.hasOwnProperty("is_banned_future"))
                writer.uint32(/* id 5, wireType 0 =*/40).bool(message.is_banned_future);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCHAccountVacStatusChange message, length delimited. Does not implicitly {@link CMsgGCHAccountVacStatusChange.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCHAccountVacStatusChange
         * @static
         * @param {ICMsgGCHAccountVacStatusChange} message CMsgGCHAccountVacStatusChange message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHAccountVacStatusChange.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCHAccountVacStatusChange message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCHAccountVacStatusChange
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCHAccountVacStatusChange} CMsgGCHAccountVacStatusChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHAccountVacStatusChange.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCHAccountVacStatusChange();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steam_id = reader.fixed64();
                    break;
                case 2:
                    message.app_id = reader.uint32();
                    break;
                case 3:
                    message.rtime_vacban_starts = reader.uint32();
                    break;
                case 4:
                    message.is_banned_now = reader.bool();
                    break;
                case 5:
                    message.is_banned_future = reader.bool();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCHAccountVacStatusChange message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCHAccountVacStatusChange
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCHAccountVacStatusChange} CMsgGCHAccountVacStatusChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHAccountVacStatusChange.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCHAccountVacStatusChange message.
         * @function verify
         * @memberof CMsgGCHAccountVacStatusChange
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCHAccountVacStatusChange.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                if (!$util.isInteger(message.steam_id) && !(message.steam_id && $util.isInteger(message.steam_id.low) && $util.isInteger(message.steam_id.high)))
                    return "steam_id: integer|Long expected";
            if (message.app_id != null && message.hasOwnProperty("app_id"))
                if (!$util.isInteger(message.app_id))
                    return "app_id: integer expected";
            if (message.rtime_vacban_starts != null && message.hasOwnProperty("rtime_vacban_starts"))
                if (!$util.isInteger(message.rtime_vacban_starts))
                    return "rtime_vacban_starts: integer expected";
            if (message.is_banned_now != null && message.hasOwnProperty("is_banned_now"))
                if (typeof message.is_banned_now !== "boolean")
                    return "is_banned_now: boolean expected";
            if (message.is_banned_future != null && message.hasOwnProperty("is_banned_future"))
                if (typeof message.is_banned_future !== "boolean")
                    return "is_banned_future: boolean expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCHAccountVacStatusChange message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCHAccountVacStatusChange
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCHAccountVacStatusChange} CMsgGCHAccountVacStatusChange
         */
        CMsgGCHAccountVacStatusChange.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCHAccountVacStatusChange)
                return object;
            var message = new $root.CMsgGCHAccountVacStatusChange();
            if (object.steam_id != null)
                if ($util.Long)
                    (message.steam_id = $util.Long.fromValue(object.steam_id)).unsigned = false;
                else if (typeof object.steam_id === "string")
                    message.steam_id = parseInt(object.steam_id, 10);
                else if (typeof object.steam_id === "number")
                    message.steam_id = object.steam_id;
                else if (typeof object.steam_id === "object")
                    message.steam_id = new $util.LongBits(object.steam_id.low >>> 0, object.steam_id.high >>> 0).toNumber();
            if (object.app_id != null)
                message.app_id = object.app_id >>> 0;
            if (object.rtime_vacban_starts != null)
                message.rtime_vacban_starts = object.rtime_vacban_starts >>> 0;
            if (object.is_banned_now != null)
                message.is_banned_now = Boolean(object.is_banned_now);
            if (object.is_banned_future != null)
                message.is_banned_future = Boolean(object.is_banned_future);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCHAccountVacStatusChange message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCHAccountVacStatusChange
         * @static
         * @param {CMsgGCHAccountVacStatusChange} message CMsgGCHAccountVacStatusChange
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCHAccountVacStatusChange.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steam_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steam_id = options.longs === String ? "0" : 0;
                object.app_id = 0;
                object.rtime_vacban_starts = 0;
                object.is_banned_now = false;
                object.is_banned_future = false;
            }
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                if (typeof message.steam_id === "number")
                    object.steam_id = options.longs === String ? String(message.steam_id) : message.steam_id;
                else
                    object.steam_id = options.longs === String ? $util.Long.prototype.toString.call(message.steam_id) : options.longs === Number ? new $util.LongBits(message.steam_id.low >>> 0, message.steam_id.high >>> 0).toNumber() : message.steam_id;
            if (message.app_id != null && message.hasOwnProperty("app_id"))
                object.app_id = message.app_id;
            if (message.rtime_vacban_starts != null && message.hasOwnProperty("rtime_vacban_starts"))
                object.rtime_vacban_starts = message.rtime_vacban_starts;
            if (message.is_banned_now != null && message.hasOwnProperty("is_banned_now"))
                object.is_banned_now = message.is_banned_now;
            if (message.is_banned_future != null && message.hasOwnProperty("is_banned_future"))
                object.is_banned_future = message.is_banned_future;
            return object;
        };
    
        /**
         * Converts this CMsgGCHAccountVacStatusChange to JSON.
         * @function toJSON
         * @memberof CMsgGCHAccountVacStatusChange
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCHAccountVacStatusChange.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCHAccountVacStatusChange;
    })();
    
    $root.CMsgGCHAccountTradeBanStatusChange = (function() {
    
        /**
         * Properties of a CMsgGCHAccountTradeBanStatusChange.
         * @exports ICMsgGCHAccountTradeBanStatusChange
         * @interface ICMsgGCHAccountTradeBanStatusChange
         * @property {number|Long|null} [steamid] CMsgGCHAccountTradeBanStatusChange steamid
         * @property {number|null} [appid] CMsgGCHAccountTradeBanStatusChange appid
         * @property {boolean|null} [is_banned] CMsgGCHAccountTradeBanStatusChange is_banned
         * @property {number|null} [time_banned_until] CMsgGCHAccountTradeBanStatusChange time_banned_until
         */
    
        /**
         * Constructs a new CMsgGCHAccountTradeBanStatusChange.
         * @exports CMsgGCHAccountTradeBanStatusChange
         * @classdesc Represents a CMsgGCHAccountTradeBanStatusChange.
         * @implements ICMsgGCHAccountTradeBanStatusChange
         * @constructor
         * @param {ICMsgGCHAccountTradeBanStatusChange=} [properties] Properties to set
         */
        function CMsgGCHAccountTradeBanStatusChange(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCHAccountTradeBanStatusChange steamid.
         * @member {number|Long} steamid
         * @memberof CMsgGCHAccountTradeBanStatusChange
         * @instance
         */
        CMsgGCHAccountTradeBanStatusChange.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCHAccountTradeBanStatusChange appid.
         * @member {number} appid
         * @memberof CMsgGCHAccountTradeBanStatusChange
         * @instance
         */
        CMsgGCHAccountTradeBanStatusChange.prototype.appid = 0;
    
        /**
         * CMsgGCHAccountTradeBanStatusChange is_banned.
         * @member {boolean} is_banned
         * @memberof CMsgGCHAccountTradeBanStatusChange
         * @instance
         */
        CMsgGCHAccountTradeBanStatusChange.prototype.is_banned = false;
    
        /**
         * CMsgGCHAccountTradeBanStatusChange time_banned_until.
         * @member {number} time_banned_until
         * @memberof CMsgGCHAccountTradeBanStatusChange
         * @instance
         */
        CMsgGCHAccountTradeBanStatusChange.prototype.time_banned_until = 0;
    
        /**
         * Creates a new CMsgGCHAccountTradeBanStatusChange instance using the specified properties.
         * @function create
         * @memberof CMsgGCHAccountTradeBanStatusChange
         * @static
         * @param {ICMsgGCHAccountTradeBanStatusChange=} [properties] Properties to set
         * @returns {CMsgGCHAccountTradeBanStatusChange} CMsgGCHAccountTradeBanStatusChange instance
         */
        CMsgGCHAccountTradeBanStatusChange.create = function create(properties) {
            return new CMsgGCHAccountTradeBanStatusChange(properties);
        };
    
        /**
         * Encodes the specified CMsgGCHAccountTradeBanStatusChange message. Does not implicitly {@link CMsgGCHAccountTradeBanStatusChange.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCHAccountTradeBanStatusChange
         * @static
         * @param {ICMsgGCHAccountTradeBanStatusChange} message CMsgGCHAccountTradeBanStatusChange message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHAccountTradeBanStatusChange.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            if (message.appid != null && message.hasOwnProperty("appid"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.appid);
            if (message.is_banned != null && message.hasOwnProperty("is_banned"))
                writer.uint32(/* id 3, wireType 0 =*/24).bool(message.is_banned);
            if (message.time_banned_until != null && message.hasOwnProperty("time_banned_until"))
                writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.time_banned_until);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCHAccountTradeBanStatusChange message, length delimited. Does not implicitly {@link CMsgGCHAccountTradeBanStatusChange.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCHAccountTradeBanStatusChange
         * @static
         * @param {ICMsgGCHAccountTradeBanStatusChange} message CMsgGCHAccountTradeBanStatusChange message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHAccountTradeBanStatusChange.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCHAccountTradeBanStatusChange message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCHAccountTradeBanStatusChange
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCHAccountTradeBanStatusChange} CMsgGCHAccountTradeBanStatusChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHAccountTradeBanStatusChange.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCHAccountTradeBanStatusChange();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                case 2:
                    message.appid = reader.uint32();
                    break;
                case 3:
                    message.is_banned = reader.bool();
                    break;
                case 4:
                    message.time_banned_until = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCHAccountTradeBanStatusChange message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCHAccountTradeBanStatusChange
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCHAccountTradeBanStatusChange} CMsgGCHAccountTradeBanStatusChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHAccountTradeBanStatusChange.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCHAccountTradeBanStatusChange message.
         * @function verify
         * @memberof CMsgGCHAccountTradeBanStatusChange
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCHAccountTradeBanStatusChange.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            if (message.appid != null && message.hasOwnProperty("appid"))
                if (!$util.isInteger(message.appid))
                    return "appid: integer expected";
            if (message.is_banned != null && message.hasOwnProperty("is_banned"))
                if (typeof message.is_banned !== "boolean")
                    return "is_banned: boolean expected";
            if (message.time_banned_until != null && message.hasOwnProperty("time_banned_until"))
                if (!$util.isInteger(message.time_banned_until))
                    return "time_banned_until: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCHAccountTradeBanStatusChange message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCHAccountTradeBanStatusChange
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCHAccountTradeBanStatusChange} CMsgGCHAccountTradeBanStatusChange
         */
        CMsgGCHAccountTradeBanStatusChange.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCHAccountTradeBanStatusChange)
                return object;
            var message = new $root.CMsgGCHAccountTradeBanStatusChange();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            if (object.appid != null)
                message.appid = object.appid >>> 0;
            if (object.is_banned != null)
                message.is_banned = Boolean(object.is_banned);
            if (object.time_banned_until != null)
                message.time_banned_until = object.time_banned_until >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCHAccountTradeBanStatusChange message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCHAccountTradeBanStatusChange
         * @static
         * @param {CMsgGCHAccountTradeBanStatusChange} message CMsgGCHAccountTradeBanStatusChange
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCHAccountTradeBanStatusChange.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
                object.appid = 0;
                object.is_banned = false;
                object.time_banned_until = 0;
            }
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            if (message.appid != null && message.hasOwnProperty("appid"))
                object.appid = message.appid;
            if (message.is_banned != null && message.hasOwnProperty("is_banned"))
                object.is_banned = message.is_banned;
            if (message.time_banned_until != null && message.hasOwnProperty("time_banned_until"))
                object.time_banned_until = message.time_banned_until;
            return object;
        };
    
        /**
         * Converts this CMsgGCHAccountTradeBanStatusChange to JSON.
         * @function toJSON
         * @memberof CMsgGCHAccountTradeBanStatusChange
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCHAccountTradeBanStatusChange.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCHAccountTradeBanStatusChange;
    })();
    
    $root.CMsgGCHAccountLockStatusChange = (function() {
    
        /**
         * Properties of a CMsgGCHAccountLockStatusChange.
         * @exports ICMsgGCHAccountLockStatusChange
         * @interface ICMsgGCHAccountLockStatusChange
         * @property {number|Long|null} [steamid] CMsgGCHAccountLockStatusChange steamid
         * @property {number|null} [appid] CMsgGCHAccountLockStatusChange appid
         * @property {boolean|null} [is_locked] CMsgGCHAccountLockStatusChange is_locked
         */
    
        /**
         * Constructs a new CMsgGCHAccountLockStatusChange.
         * @exports CMsgGCHAccountLockStatusChange
         * @classdesc Represents a CMsgGCHAccountLockStatusChange.
         * @implements ICMsgGCHAccountLockStatusChange
         * @constructor
         * @param {ICMsgGCHAccountLockStatusChange=} [properties] Properties to set
         */
        function CMsgGCHAccountLockStatusChange(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCHAccountLockStatusChange steamid.
         * @member {number|Long} steamid
         * @memberof CMsgGCHAccountLockStatusChange
         * @instance
         */
        CMsgGCHAccountLockStatusChange.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCHAccountLockStatusChange appid.
         * @member {number} appid
         * @memberof CMsgGCHAccountLockStatusChange
         * @instance
         */
        CMsgGCHAccountLockStatusChange.prototype.appid = 0;
    
        /**
         * CMsgGCHAccountLockStatusChange is_locked.
         * @member {boolean} is_locked
         * @memberof CMsgGCHAccountLockStatusChange
         * @instance
         */
        CMsgGCHAccountLockStatusChange.prototype.is_locked = false;
    
        /**
         * Creates a new CMsgGCHAccountLockStatusChange instance using the specified properties.
         * @function create
         * @memberof CMsgGCHAccountLockStatusChange
         * @static
         * @param {ICMsgGCHAccountLockStatusChange=} [properties] Properties to set
         * @returns {CMsgGCHAccountLockStatusChange} CMsgGCHAccountLockStatusChange instance
         */
        CMsgGCHAccountLockStatusChange.create = function create(properties) {
            return new CMsgGCHAccountLockStatusChange(properties);
        };
    
        /**
         * Encodes the specified CMsgGCHAccountLockStatusChange message. Does not implicitly {@link CMsgGCHAccountLockStatusChange.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCHAccountLockStatusChange
         * @static
         * @param {ICMsgGCHAccountLockStatusChange} message CMsgGCHAccountLockStatusChange message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHAccountLockStatusChange.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            if (message.appid != null && message.hasOwnProperty("appid"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.appid);
            if (message.is_locked != null && message.hasOwnProperty("is_locked"))
                writer.uint32(/* id 3, wireType 0 =*/24).bool(message.is_locked);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCHAccountLockStatusChange message, length delimited. Does not implicitly {@link CMsgGCHAccountLockStatusChange.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCHAccountLockStatusChange
         * @static
         * @param {ICMsgGCHAccountLockStatusChange} message CMsgGCHAccountLockStatusChange message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHAccountLockStatusChange.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCHAccountLockStatusChange message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCHAccountLockStatusChange
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCHAccountLockStatusChange} CMsgGCHAccountLockStatusChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHAccountLockStatusChange.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCHAccountLockStatusChange();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                case 2:
                    message.appid = reader.uint32();
                    break;
                case 3:
                    message.is_locked = reader.bool();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCHAccountLockStatusChange message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCHAccountLockStatusChange
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCHAccountLockStatusChange} CMsgGCHAccountLockStatusChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHAccountLockStatusChange.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCHAccountLockStatusChange message.
         * @function verify
         * @memberof CMsgGCHAccountLockStatusChange
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCHAccountLockStatusChange.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            if (message.appid != null && message.hasOwnProperty("appid"))
                if (!$util.isInteger(message.appid))
                    return "appid: integer expected";
            if (message.is_locked != null && message.hasOwnProperty("is_locked"))
                if (typeof message.is_locked !== "boolean")
                    return "is_locked: boolean expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCHAccountLockStatusChange message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCHAccountLockStatusChange
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCHAccountLockStatusChange} CMsgGCHAccountLockStatusChange
         */
        CMsgGCHAccountLockStatusChange.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCHAccountLockStatusChange)
                return object;
            var message = new $root.CMsgGCHAccountLockStatusChange();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            if (object.appid != null)
                message.appid = object.appid >>> 0;
            if (object.is_locked != null)
                message.is_locked = Boolean(object.is_locked);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCHAccountLockStatusChange message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCHAccountLockStatusChange
         * @static
         * @param {CMsgGCHAccountLockStatusChange} message CMsgGCHAccountLockStatusChange
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCHAccountLockStatusChange.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
                object.appid = 0;
                object.is_locked = false;
            }
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            if (message.appid != null && message.hasOwnProperty("appid"))
                object.appid = message.appid;
            if (message.is_locked != null && message.hasOwnProperty("is_locked"))
                object.is_locked = message.is_locked;
            return object;
        };
    
        /**
         * Converts this CMsgGCHAccountLockStatusChange to JSON.
         * @function toJSON
         * @memberof CMsgGCHAccountLockStatusChange
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCHAccountLockStatusChange.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCHAccountLockStatusChange;
    })();
    
    $root.CMsgGCHVacVerificationChange = (function() {
    
        /**
         * Properties of a CMsgGCHVacVerificationChange.
         * @exports ICMsgGCHVacVerificationChange
         * @interface ICMsgGCHVacVerificationChange
         * @property {number|Long|null} [steamid] CMsgGCHVacVerificationChange steamid
         * @property {number|null} [appid] CMsgGCHVacVerificationChange appid
         * @property {boolean|null} [is_verified] CMsgGCHVacVerificationChange is_verified
         */
    
        /**
         * Constructs a new CMsgGCHVacVerificationChange.
         * @exports CMsgGCHVacVerificationChange
         * @classdesc Represents a CMsgGCHVacVerificationChange.
         * @implements ICMsgGCHVacVerificationChange
         * @constructor
         * @param {ICMsgGCHVacVerificationChange=} [properties] Properties to set
         */
        function CMsgGCHVacVerificationChange(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCHVacVerificationChange steamid.
         * @member {number|Long} steamid
         * @memberof CMsgGCHVacVerificationChange
         * @instance
         */
        CMsgGCHVacVerificationChange.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCHVacVerificationChange appid.
         * @member {number} appid
         * @memberof CMsgGCHVacVerificationChange
         * @instance
         */
        CMsgGCHVacVerificationChange.prototype.appid = 0;
    
        /**
         * CMsgGCHVacVerificationChange is_verified.
         * @member {boolean} is_verified
         * @memberof CMsgGCHVacVerificationChange
         * @instance
         */
        CMsgGCHVacVerificationChange.prototype.is_verified = false;
    
        /**
         * Creates a new CMsgGCHVacVerificationChange instance using the specified properties.
         * @function create
         * @memberof CMsgGCHVacVerificationChange
         * @static
         * @param {ICMsgGCHVacVerificationChange=} [properties] Properties to set
         * @returns {CMsgGCHVacVerificationChange} CMsgGCHVacVerificationChange instance
         */
        CMsgGCHVacVerificationChange.create = function create(properties) {
            return new CMsgGCHVacVerificationChange(properties);
        };
    
        /**
         * Encodes the specified CMsgGCHVacVerificationChange message. Does not implicitly {@link CMsgGCHVacVerificationChange.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCHVacVerificationChange
         * @static
         * @param {ICMsgGCHVacVerificationChange} message CMsgGCHVacVerificationChange message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHVacVerificationChange.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            if (message.appid != null && message.hasOwnProperty("appid"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.appid);
            if (message.is_verified != null && message.hasOwnProperty("is_verified"))
                writer.uint32(/* id 3, wireType 0 =*/24).bool(message.is_verified);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCHVacVerificationChange message, length delimited. Does not implicitly {@link CMsgGCHVacVerificationChange.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCHVacVerificationChange
         * @static
         * @param {ICMsgGCHVacVerificationChange} message CMsgGCHVacVerificationChange message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHVacVerificationChange.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCHVacVerificationChange message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCHVacVerificationChange
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCHVacVerificationChange} CMsgGCHVacVerificationChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHVacVerificationChange.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCHVacVerificationChange();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                case 2:
                    message.appid = reader.uint32();
                    break;
                case 3:
                    message.is_verified = reader.bool();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCHVacVerificationChange message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCHVacVerificationChange
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCHVacVerificationChange} CMsgGCHVacVerificationChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHVacVerificationChange.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCHVacVerificationChange message.
         * @function verify
         * @memberof CMsgGCHVacVerificationChange
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCHVacVerificationChange.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            if (message.appid != null && message.hasOwnProperty("appid"))
                if (!$util.isInteger(message.appid))
                    return "appid: integer expected";
            if (message.is_verified != null && message.hasOwnProperty("is_verified"))
                if (typeof message.is_verified !== "boolean")
                    return "is_verified: boolean expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCHVacVerificationChange message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCHVacVerificationChange
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCHVacVerificationChange} CMsgGCHVacVerificationChange
         */
        CMsgGCHVacVerificationChange.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCHVacVerificationChange)
                return object;
            var message = new $root.CMsgGCHVacVerificationChange();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            if (object.appid != null)
                message.appid = object.appid >>> 0;
            if (object.is_verified != null)
                message.is_verified = Boolean(object.is_verified);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCHVacVerificationChange message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCHVacVerificationChange
         * @static
         * @param {CMsgGCHVacVerificationChange} message CMsgGCHVacVerificationChange
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCHVacVerificationChange.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
                object.appid = 0;
                object.is_verified = false;
            }
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            if (message.appid != null && message.hasOwnProperty("appid"))
                object.appid = message.appid;
            if (message.is_verified != null && message.hasOwnProperty("is_verified"))
                object.is_verified = message.is_verified;
            return object;
        };
    
        /**
         * Converts this CMsgGCHVacVerificationChange to JSON.
         * @function toJSON
         * @memberof CMsgGCHVacVerificationChange
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCHVacVerificationChange.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCHVacVerificationChange;
    })();
    
    $root.CMsgGCHAccountPhoneNumberChange = (function() {
    
        /**
         * Properties of a CMsgGCHAccountPhoneNumberChange.
         * @exports ICMsgGCHAccountPhoneNumberChange
         * @interface ICMsgGCHAccountPhoneNumberChange
         * @property {number|Long|null} [steamid] CMsgGCHAccountPhoneNumberChange steamid
         * @property {number|null} [appid] CMsgGCHAccountPhoneNumberChange appid
         * @property {number|Long|null} [phone_id] CMsgGCHAccountPhoneNumberChange phone_id
         * @property {boolean|null} [is_verified] CMsgGCHAccountPhoneNumberChange is_verified
         * @property {boolean|null} [is_identifying] CMsgGCHAccountPhoneNumberChange is_identifying
         */
    
        /**
         * Constructs a new CMsgGCHAccountPhoneNumberChange.
         * @exports CMsgGCHAccountPhoneNumberChange
         * @classdesc Represents a CMsgGCHAccountPhoneNumberChange.
         * @implements ICMsgGCHAccountPhoneNumberChange
         * @constructor
         * @param {ICMsgGCHAccountPhoneNumberChange=} [properties] Properties to set
         */
        function CMsgGCHAccountPhoneNumberChange(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCHAccountPhoneNumberChange steamid.
         * @member {number|Long} steamid
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @instance
         */
        CMsgGCHAccountPhoneNumberChange.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCHAccountPhoneNumberChange appid.
         * @member {number} appid
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @instance
         */
        CMsgGCHAccountPhoneNumberChange.prototype.appid = 0;
    
        /**
         * CMsgGCHAccountPhoneNumberChange phone_id.
         * @member {number|Long} phone_id
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @instance
         */
        CMsgGCHAccountPhoneNumberChange.prototype.phone_id = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
        /**
         * CMsgGCHAccountPhoneNumberChange is_verified.
         * @member {boolean} is_verified
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @instance
         */
        CMsgGCHAccountPhoneNumberChange.prototype.is_verified = false;
    
        /**
         * CMsgGCHAccountPhoneNumberChange is_identifying.
         * @member {boolean} is_identifying
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @instance
         */
        CMsgGCHAccountPhoneNumberChange.prototype.is_identifying = false;
    
        /**
         * Creates a new CMsgGCHAccountPhoneNumberChange instance using the specified properties.
         * @function create
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @static
         * @param {ICMsgGCHAccountPhoneNumberChange=} [properties] Properties to set
         * @returns {CMsgGCHAccountPhoneNumberChange} CMsgGCHAccountPhoneNumberChange instance
         */
        CMsgGCHAccountPhoneNumberChange.create = function create(properties) {
            return new CMsgGCHAccountPhoneNumberChange(properties);
        };
    
        /**
         * Encodes the specified CMsgGCHAccountPhoneNumberChange message. Does not implicitly {@link CMsgGCHAccountPhoneNumberChange.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @static
         * @param {ICMsgGCHAccountPhoneNumberChange} message CMsgGCHAccountPhoneNumberChange message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHAccountPhoneNumberChange.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            if (message.appid != null && message.hasOwnProperty("appid"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.appid);
            if (message.phone_id != null && message.hasOwnProperty("phone_id"))
                writer.uint32(/* id 3, wireType 0 =*/24).uint64(message.phone_id);
            if (message.is_verified != null && message.hasOwnProperty("is_verified"))
                writer.uint32(/* id 4, wireType 0 =*/32).bool(message.is_verified);
            if (message.is_identifying != null && message.hasOwnProperty("is_identifying"))
                writer.uint32(/* id 5, wireType 0 =*/40).bool(message.is_identifying);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCHAccountPhoneNumberChange message, length delimited. Does not implicitly {@link CMsgGCHAccountPhoneNumberChange.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @static
         * @param {ICMsgGCHAccountPhoneNumberChange} message CMsgGCHAccountPhoneNumberChange message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHAccountPhoneNumberChange.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCHAccountPhoneNumberChange message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCHAccountPhoneNumberChange} CMsgGCHAccountPhoneNumberChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHAccountPhoneNumberChange.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCHAccountPhoneNumberChange();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                case 2:
                    message.appid = reader.uint32();
                    break;
                case 3:
                    message.phone_id = reader.uint64();
                    break;
                case 4:
                    message.is_verified = reader.bool();
                    break;
                case 5:
                    message.is_identifying = reader.bool();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCHAccountPhoneNumberChange message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCHAccountPhoneNumberChange} CMsgGCHAccountPhoneNumberChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHAccountPhoneNumberChange.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCHAccountPhoneNumberChange message.
         * @function verify
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCHAccountPhoneNumberChange.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            if (message.appid != null && message.hasOwnProperty("appid"))
                if (!$util.isInteger(message.appid))
                    return "appid: integer expected";
            if (message.phone_id != null && message.hasOwnProperty("phone_id"))
                if (!$util.isInteger(message.phone_id) && !(message.phone_id && $util.isInteger(message.phone_id.low) && $util.isInteger(message.phone_id.high)))
                    return "phone_id: integer|Long expected";
            if (message.is_verified != null && message.hasOwnProperty("is_verified"))
                if (typeof message.is_verified !== "boolean")
                    return "is_verified: boolean expected";
            if (message.is_identifying != null && message.hasOwnProperty("is_identifying"))
                if (typeof message.is_identifying !== "boolean")
                    return "is_identifying: boolean expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCHAccountPhoneNumberChange message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCHAccountPhoneNumberChange} CMsgGCHAccountPhoneNumberChange
         */
        CMsgGCHAccountPhoneNumberChange.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCHAccountPhoneNumberChange)
                return object;
            var message = new $root.CMsgGCHAccountPhoneNumberChange();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            if (object.appid != null)
                message.appid = object.appid >>> 0;
            if (object.phone_id != null)
                if ($util.Long)
                    (message.phone_id = $util.Long.fromValue(object.phone_id)).unsigned = true;
                else if (typeof object.phone_id === "string")
                    message.phone_id = parseInt(object.phone_id, 10);
                else if (typeof object.phone_id === "number")
                    message.phone_id = object.phone_id;
                else if (typeof object.phone_id === "object")
                    message.phone_id = new $util.LongBits(object.phone_id.low >>> 0, object.phone_id.high >>> 0).toNumber(true);
            if (object.is_verified != null)
                message.is_verified = Boolean(object.is_verified);
            if (object.is_identifying != null)
                message.is_identifying = Boolean(object.is_identifying);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCHAccountPhoneNumberChange message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @static
         * @param {CMsgGCHAccountPhoneNumberChange} message CMsgGCHAccountPhoneNumberChange
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCHAccountPhoneNumberChange.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
                object.appid = 0;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, true);
                    object.phone_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.phone_id = options.longs === String ? "0" : 0;
                object.is_verified = false;
                object.is_identifying = false;
            }
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            if (message.appid != null && message.hasOwnProperty("appid"))
                object.appid = message.appid;
            if (message.phone_id != null && message.hasOwnProperty("phone_id"))
                if (typeof message.phone_id === "number")
                    object.phone_id = options.longs === String ? String(message.phone_id) : message.phone_id;
                else
                    object.phone_id = options.longs === String ? $util.Long.prototype.toString.call(message.phone_id) : options.longs === Number ? new $util.LongBits(message.phone_id.low >>> 0, message.phone_id.high >>> 0).toNumber(true) : message.phone_id;
            if (message.is_verified != null && message.hasOwnProperty("is_verified"))
                object.is_verified = message.is_verified;
            if (message.is_identifying != null && message.hasOwnProperty("is_identifying"))
                object.is_identifying = message.is_identifying;
            return object;
        };
    
        /**
         * Converts this CMsgGCHAccountPhoneNumberChange to JSON.
         * @function toJSON
         * @memberof CMsgGCHAccountPhoneNumberChange
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCHAccountPhoneNumberChange.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCHAccountPhoneNumberChange;
    })();
    
    $root.CMsgGCHAccountTwoFactorChange = (function() {
    
        /**
         * Properties of a CMsgGCHAccountTwoFactorChange.
         * @exports ICMsgGCHAccountTwoFactorChange
         * @interface ICMsgGCHAccountTwoFactorChange
         * @property {number|Long|null} [steamid] CMsgGCHAccountTwoFactorChange steamid
         * @property {number|null} [appid] CMsgGCHAccountTwoFactorChange appid
         * @property {boolean|null} [twofactor_enabled] CMsgGCHAccountTwoFactorChange twofactor_enabled
         */
    
        /**
         * Constructs a new CMsgGCHAccountTwoFactorChange.
         * @exports CMsgGCHAccountTwoFactorChange
         * @classdesc Represents a CMsgGCHAccountTwoFactorChange.
         * @implements ICMsgGCHAccountTwoFactorChange
         * @constructor
         * @param {ICMsgGCHAccountTwoFactorChange=} [properties] Properties to set
         */
        function CMsgGCHAccountTwoFactorChange(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCHAccountTwoFactorChange steamid.
         * @member {number|Long} steamid
         * @memberof CMsgGCHAccountTwoFactorChange
         * @instance
         */
        CMsgGCHAccountTwoFactorChange.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCHAccountTwoFactorChange appid.
         * @member {number} appid
         * @memberof CMsgGCHAccountTwoFactorChange
         * @instance
         */
        CMsgGCHAccountTwoFactorChange.prototype.appid = 0;
    
        /**
         * CMsgGCHAccountTwoFactorChange twofactor_enabled.
         * @member {boolean} twofactor_enabled
         * @memberof CMsgGCHAccountTwoFactorChange
         * @instance
         */
        CMsgGCHAccountTwoFactorChange.prototype.twofactor_enabled = false;
    
        /**
         * Creates a new CMsgGCHAccountTwoFactorChange instance using the specified properties.
         * @function create
         * @memberof CMsgGCHAccountTwoFactorChange
         * @static
         * @param {ICMsgGCHAccountTwoFactorChange=} [properties] Properties to set
         * @returns {CMsgGCHAccountTwoFactorChange} CMsgGCHAccountTwoFactorChange instance
         */
        CMsgGCHAccountTwoFactorChange.create = function create(properties) {
            return new CMsgGCHAccountTwoFactorChange(properties);
        };
    
        /**
         * Encodes the specified CMsgGCHAccountTwoFactorChange message. Does not implicitly {@link CMsgGCHAccountTwoFactorChange.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCHAccountTwoFactorChange
         * @static
         * @param {ICMsgGCHAccountTwoFactorChange} message CMsgGCHAccountTwoFactorChange message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHAccountTwoFactorChange.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            if (message.appid != null && message.hasOwnProperty("appid"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.appid);
            if (message.twofactor_enabled != null && message.hasOwnProperty("twofactor_enabled"))
                writer.uint32(/* id 3, wireType 0 =*/24).bool(message.twofactor_enabled);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCHAccountTwoFactorChange message, length delimited. Does not implicitly {@link CMsgGCHAccountTwoFactorChange.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCHAccountTwoFactorChange
         * @static
         * @param {ICMsgGCHAccountTwoFactorChange} message CMsgGCHAccountTwoFactorChange message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHAccountTwoFactorChange.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCHAccountTwoFactorChange message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCHAccountTwoFactorChange
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCHAccountTwoFactorChange} CMsgGCHAccountTwoFactorChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHAccountTwoFactorChange.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCHAccountTwoFactorChange();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                case 2:
                    message.appid = reader.uint32();
                    break;
                case 3:
                    message.twofactor_enabled = reader.bool();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCHAccountTwoFactorChange message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCHAccountTwoFactorChange
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCHAccountTwoFactorChange} CMsgGCHAccountTwoFactorChange
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHAccountTwoFactorChange.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCHAccountTwoFactorChange message.
         * @function verify
         * @memberof CMsgGCHAccountTwoFactorChange
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCHAccountTwoFactorChange.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            if (message.appid != null && message.hasOwnProperty("appid"))
                if (!$util.isInteger(message.appid))
                    return "appid: integer expected";
            if (message.twofactor_enabled != null && message.hasOwnProperty("twofactor_enabled"))
                if (typeof message.twofactor_enabled !== "boolean")
                    return "twofactor_enabled: boolean expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCHAccountTwoFactorChange message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCHAccountTwoFactorChange
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCHAccountTwoFactorChange} CMsgGCHAccountTwoFactorChange
         */
        CMsgGCHAccountTwoFactorChange.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCHAccountTwoFactorChange)
                return object;
            var message = new $root.CMsgGCHAccountTwoFactorChange();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            if (object.appid != null)
                message.appid = object.appid >>> 0;
            if (object.twofactor_enabled != null)
                message.twofactor_enabled = Boolean(object.twofactor_enabled);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCHAccountTwoFactorChange message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCHAccountTwoFactorChange
         * @static
         * @param {CMsgGCHAccountTwoFactorChange} message CMsgGCHAccountTwoFactorChange
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCHAccountTwoFactorChange.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
                object.appid = 0;
                object.twofactor_enabled = false;
            }
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            if (message.appid != null && message.hasOwnProperty("appid"))
                object.appid = message.appid;
            if (message.twofactor_enabled != null && message.hasOwnProperty("twofactor_enabled"))
                object.twofactor_enabled = message.twofactor_enabled;
            return object;
        };
    
        /**
         * Converts this CMsgGCHAccountTwoFactorChange to JSON.
         * @function toJSON
         * @memberof CMsgGCHAccountTwoFactorChange
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCHAccountTwoFactorChange.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCHAccountTwoFactorChange;
    })();
    
    $root.CMsgGCGetPartnerAccountLink = (function() {
    
        /**
         * Properties of a CMsgGCGetPartnerAccountLink.
         * @exports ICMsgGCGetPartnerAccountLink
         * @interface ICMsgGCGetPartnerAccountLink
         * @property {number|Long|null} [steamid] CMsgGCGetPartnerAccountLink steamid
         */
    
        /**
         * Constructs a new CMsgGCGetPartnerAccountLink.
         * @exports CMsgGCGetPartnerAccountLink
         * @classdesc Represents a CMsgGCGetPartnerAccountLink.
         * @implements ICMsgGCGetPartnerAccountLink
         * @constructor
         * @param {ICMsgGCGetPartnerAccountLink=} [properties] Properties to set
         */
        function CMsgGCGetPartnerAccountLink(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCGetPartnerAccountLink steamid.
         * @member {number|Long} steamid
         * @memberof CMsgGCGetPartnerAccountLink
         * @instance
         */
        CMsgGCGetPartnerAccountLink.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * Creates a new CMsgGCGetPartnerAccountLink instance using the specified properties.
         * @function create
         * @memberof CMsgGCGetPartnerAccountLink
         * @static
         * @param {ICMsgGCGetPartnerAccountLink=} [properties] Properties to set
         * @returns {CMsgGCGetPartnerAccountLink} CMsgGCGetPartnerAccountLink instance
         */
        CMsgGCGetPartnerAccountLink.create = function create(properties) {
            return new CMsgGCGetPartnerAccountLink(properties);
        };
    
        /**
         * Encodes the specified CMsgGCGetPartnerAccountLink message. Does not implicitly {@link CMsgGCGetPartnerAccountLink.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCGetPartnerAccountLink
         * @static
         * @param {ICMsgGCGetPartnerAccountLink} message CMsgGCGetPartnerAccountLink message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetPartnerAccountLink.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCGetPartnerAccountLink message, length delimited. Does not implicitly {@link CMsgGCGetPartnerAccountLink.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCGetPartnerAccountLink
         * @static
         * @param {ICMsgGCGetPartnerAccountLink} message CMsgGCGetPartnerAccountLink message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetPartnerAccountLink.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCGetPartnerAccountLink message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCGetPartnerAccountLink
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCGetPartnerAccountLink} CMsgGCGetPartnerAccountLink
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetPartnerAccountLink.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCGetPartnerAccountLink();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCGetPartnerAccountLink message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCGetPartnerAccountLink
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCGetPartnerAccountLink} CMsgGCGetPartnerAccountLink
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetPartnerAccountLink.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCGetPartnerAccountLink message.
         * @function verify
         * @memberof CMsgGCGetPartnerAccountLink
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCGetPartnerAccountLink.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCGetPartnerAccountLink message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCGetPartnerAccountLink
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCGetPartnerAccountLink} CMsgGCGetPartnerAccountLink
         */
        CMsgGCGetPartnerAccountLink.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCGetPartnerAccountLink)
                return object;
            var message = new $root.CMsgGCGetPartnerAccountLink();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCGetPartnerAccountLink message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCGetPartnerAccountLink
         * @static
         * @param {CMsgGCGetPartnerAccountLink} message CMsgGCGetPartnerAccountLink
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCGetPartnerAccountLink.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            return object;
        };
    
        /**
         * Converts this CMsgGCGetPartnerAccountLink to JSON.
         * @function toJSON
         * @memberof CMsgGCGetPartnerAccountLink
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCGetPartnerAccountLink.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCGetPartnerAccountLink;
    })();
    
    $root.CMsgGCGetPartnerAccountLink_Response = (function() {
    
        /**
         * Properties of a CMsgGCGetPartnerAccountLink_Response.
         * @exports ICMsgGCGetPartnerAccountLink_Response
         * @interface ICMsgGCGetPartnerAccountLink_Response
         * @property {number|null} [pwid] CMsgGCGetPartnerAccountLink_Response pwid
         * @property {number|null} [nexonid] CMsgGCGetPartnerAccountLink_Response nexonid
         */
    
        /**
         * Constructs a new CMsgGCGetPartnerAccountLink_Response.
         * @exports CMsgGCGetPartnerAccountLink_Response
         * @classdesc Represents a CMsgGCGetPartnerAccountLink_Response.
         * @implements ICMsgGCGetPartnerAccountLink_Response
         * @constructor
         * @param {ICMsgGCGetPartnerAccountLink_Response=} [properties] Properties to set
         */
        function CMsgGCGetPartnerAccountLink_Response(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCGetPartnerAccountLink_Response pwid.
         * @member {number} pwid
         * @memberof CMsgGCGetPartnerAccountLink_Response
         * @instance
         */
        CMsgGCGetPartnerAccountLink_Response.prototype.pwid = 0;
    
        /**
         * CMsgGCGetPartnerAccountLink_Response nexonid.
         * @member {number} nexonid
         * @memberof CMsgGCGetPartnerAccountLink_Response
         * @instance
         */
        CMsgGCGetPartnerAccountLink_Response.prototype.nexonid = 0;
    
        /**
         * Creates a new CMsgGCGetPartnerAccountLink_Response instance using the specified properties.
         * @function create
         * @memberof CMsgGCGetPartnerAccountLink_Response
         * @static
         * @param {ICMsgGCGetPartnerAccountLink_Response=} [properties] Properties to set
         * @returns {CMsgGCGetPartnerAccountLink_Response} CMsgGCGetPartnerAccountLink_Response instance
         */
        CMsgGCGetPartnerAccountLink_Response.create = function create(properties) {
            return new CMsgGCGetPartnerAccountLink_Response(properties);
        };
    
        /**
         * Encodes the specified CMsgGCGetPartnerAccountLink_Response message. Does not implicitly {@link CMsgGCGetPartnerAccountLink_Response.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCGetPartnerAccountLink_Response
         * @static
         * @param {ICMsgGCGetPartnerAccountLink_Response} message CMsgGCGetPartnerAccountLink_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetPartnerAccountLink_Response.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.pwid != null && message.hasOwnProperty("pwid"))
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.pwid);
            if (message.nexonid != null && message.hasOwnProperty("nexonid"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.nexonid);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCGetPartnerAccountLink_Response message, length delimited. Does not implicitly {@link CMsgGCGetPartnerAccountLink_Response.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCGetPartnerAccountLink_Response
         * @static
         * @param {ICMsgGCGetPartnerAccountLink_Response} message CMsgGCGetPartnerAccountLink_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCGetPartnerAccountLink_Response.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCGetPartnerAccountLink_Response message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCGetPartnerAccountLink_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCGetPartnerAccountLink_Response} CMsgGCGetPartnerAccountLink_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetPartnerAccountLink_Response.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCGetPartnerAccountLink_Response();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.pwid = reader.uint32();
                    break;
                case 2:
                    message.nexonid = reader.uint32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCGetPartnerAccountLink_Response message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCGetPartnerAccountLink_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCGetPartnerAccountLink_Response} CMsgGCGetPartnerAccountLink_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCGetPartnerAccountLink_Response.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCGetPartnerAccountLink_Response message.
         * @function verify
         * @memberof CMsgGCGetPartnerAccountLink_Response
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCGetPartnerAccountLink_Response.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.pwid != null && message.hasOwnProperty("pwid"))
                if (!$util.isInteger(message.pwid))
                    return "pwid: integer expected";
            if (message.nexonid != null && message.hasOwnProperty("nexonid"))
                if (!$util.isInteger(message.nexonid))
                    return "nexonid: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCGetPartnerAccountLink_Response message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCGetPartnerAccountLink_Response
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCGetPartnerAccountLink_Response} CMsgGCGetPartnerAccountLink_Response
         */
        CMsgGCGetPartnerAccountLink_Response.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCGetPartnerAccountLink_Response)
                return object;
            var message = new $root.CMsgGCGetPartnerAccountLink_Response();
            if (object.pwid != null)
                message.pwid = object.pwid >>> 0;
            if (object.nexonid != null)
                message.nexonid = object.nexonid >>> 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCGetPartnerAccountLink_Response message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCGetPartnerAccountLink_Response
         * @static
         * @param {CMsgGCGetPartnerAccountLink_Response} message CMsgGCGetPartnerAccountLink_Response
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCGetPartnerAccountLink_Response.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.pwid = 0;
                object.nexonid = 0;
            }
            if (message.pwid != null && message.hasOwnProperty("pwid"))
                object.pwid = message.pwid;
            if (message.nexonid != null && message.hasOwnProperty("nexonid"))
                object.nexonid = message.nexonid;
            return object;
        };
    
        /**
         * Converts this CMsgGCGetPartnerAccountLink_Response to JSON.
         * @function toJSON
         * @memberof CMsgGCGetPartnerAccountLink_Response
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCGetPartnerAccountLink_Response.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCGetPartnerAccountLink_Response;
    })();
    
    $root.CMsgGCRoutingInfo = (function() {
    
        /**
         * Properties of a CMsgGCRoutingInfo.
         * @exports ICMsgGCRoutingInfo
         * @interface ICMsgGCRoutingInfo
         * @property {Array.<number>|null} [dir_index] CMsgGCRoutingInfo dir_index
         * @property {CMsgGCRoutingInfo.RoutingMethod|null} [method] CMsgGCRoutingInfo method
         * @property {CMsgGCRoutingInfo.RoutingMethod|null} [fallback] CMsgGCRoutingInfo fallback
         * @property {number|null} [protobuf_field] CMsgGCRoutingInfo protobuf_field
         * @property {string|null} [webapi_param] CMsgGCRoutingInfo webapi_param
         */
    
        /**
         * Constructs a new CMsgGCRoutingInfo.
         * @exports CMsgGCRoutingInfo
         * @classdesc Represents a CMsgGCRoutingInfo.
         * @implements ICMsgGCRoutingInfo
         * @constructor
         * @param {ICMsgGCRoutingInfo=} [properties] Properties to set
         */
        function CMsgGCRoutingInfo(properties) {
            this.dir_index = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCRoutingInfo dir_index.
         * @member {Array.<number>} dir_index
         * @memberof CMsgGCRoutingInfo
         * @instance
         */
        CMsgGCRoutingInfo.prototype.dir_index = $util.emptyArray;
    
        /**
         * CMsgGCRoutingInfo method.
         * @member {CMsgGCRoutingInfo.RoutingMethod} method
         * @memberof CMsgGCRoutingInfo
         * @instance
         */
        CMsgGCRoutingInfo.prototype.method = 0;
    
        /**
         * CMsgGCRoutingInfo fallback.
         * @member {CMsgGCRoutingInfo.RoutingMethod} fallback
         * @memberof CMsgGCRoutingInfo
         * @instance
         */
        CMsgGCRoutingInfo.prototype.fallback = 1;
    
        /**
         * CMsgGCRoutingInfo protobuf_field.
         * @member {number} protobuf_field
         * @memberof CMsgGCRoutingInfo
         * @instance
         */
        CMsgGCRoutingInfo.prototype.protobuf_field = 0;
    
        /**
         * CMsgGCRoutingInfo webapi_param.
         * @member {string} webapi_param
         * @memberof CMsgGCRoutingInfo
         * @instance
         */
        CMsgGCRoutingInfo.prototype.webapi_param = "";
    
        /**
         * Creates a new CMsgGCRoutingInfo instance using the specified properties.
         * @function create
         * @memberof CMsgGCRoutingInfo
         * @static
         * @param {ICMsgGCRoutingInfo=} [properties] Properties to set
         * @returns {CMsgGCRoutingInfo} CMsgGCRoutingInfo instance
         */
        CMsgGCRoutingInfo.create = function create(properties) {
            return new CMsgGCRoutingInfo(properties);
        };
    
        /**
         * Encodes the specified CMsgGCRoutingInfo message. Does not implicitly {@link CMsgGCRoutingInfo.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCRoutingInfo
         * @static
         * @param {ICMsgGCRoutingInfo} message CMsgGCRoutingInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCRoutingInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.dir_index != null && message.dir_index.length)
                for (var i = 0; i < message.dir_index.length; ++i)
                    writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.dir_index[i]);
            if (message.method != null && message.hasOwnProperty("method"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.method);
            if (message.fallback != null && message.hasOwnProperty("fallback"))
                writer.uint32(/* id 3, wireType 0 =*/24).int32(message.fallback);
            if (message.protobuf_field != null && message.hasOwnProperty("protobuf_field"))
                writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.protobuf_field);
            if (message.webapi_param != null && message.hasOwnProperty("webapi_param"))
                writer.uint32(/* id 5, wireType 2 =*/42).string(message.webapi_param);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCRoutingInfo message, length delimited. Does not implicitly {@link CMsgGCRoutingInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCRoutingInfo
         * @static
         * @param {ICMsgGCRoutingInfo} message CMsgGCRoutingInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCRoutingInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCRoutingInfo message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCRoutingInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCRoutingInfo} CMsgGCRoutingInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCRoutingInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCRoutingInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.dir_index && message.dir_index.length))
                        message.dir_index = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.dir_index.push(reader.uint32());
                    } else
                        message.dir_index.push(reader.uint32());
                    break;
                case 2:
                    message.method = reader.int32();
                    break;
                case 3:
                    message.fallback = reader.int32();
                    break;
                case 4:
                    message.protobuf_field = reader.uint32();
                    break;
                case 5:
                    message.webapi_param = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCRoutingInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCRoutingInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCRoutingInfo} CMsgGCRoutingInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCRoutingInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCRoutingInfo message.
         * @function verify
         * @memberof CMsgGCRoutingInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCRoutingInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.dir_index != null && message.hasOwnProperty("dir_index")) {
                if (!Array.isArray(message.dir_index))
                    return "dir_index: array expected";
                for (var i = 0; i < message.dir_index.length; ++i)
                    if (!$util.isInteger(message.dir_index[i]))
                        return "dir_index: integer[] expected";
            }
            if (message.method != null && message.hasOwnProperty("method"))
                switch (message.method) {
                default:
                    return "method: enum value expected";
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                    break;
                }
            if (message.fallback != null && message.hasOwnProperty("fallback"))
                switch (message.fallback) {
                default:
                    return "fallback: enum value expected";
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                    break;
                }
            if (message.protobuf_field != null && message.hasOwnProperty("protobuf_field"))
                if (!$util.isInteger(message.protobuf_field))
                    return "protobuf_field: integer expected";
            if (message.webapi_param != null && message.hasOwnProperty("webapi_param"))
                if (!$util.isString(message.webapi_param))
                    return "webapi_param: string expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCRoutingInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCRoutingInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCRoutingInfo} CMsgGCRoutingInfo
         */
        CMsgGCRoutingInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCRoutingInfo)
                return object;
            var message = new $root.CMsgGCRoutingInfo();
            if (object.dir_index) {
                if (!Array.isArray(object.dir_index))
                    throw TypeError(".CMsgGCRoutingInfo.dir_index: array expected");
                message.dir_index = [];
                for (var i = 0; i < object.dir_index.length; ++i)
                    message.dir_index[i] = object.dir_index[i] >>> 0;
            }
            switch (object.method) {
            case "RANDOM":
            case 0:
                message.method = 0;
                break;
            case "DISCARD":
            case 1:
                message.method = 1;
                break;
            case "CLIENT_STEAMID":
            case 2:
                message.method = 2;
                break;
            case "PROTOBUF_FIELD_UINT64":
            case 3:
                message.method = 3;
                break;
            case "WEBAPI_PARAM_UINT64":
            case 4:
                message.method = 4;
                break;
            }
            switch (object.fallback) {
            case "RANDOM":
            case 0:
                message.fallback = 0;
                break;
            case "DISCARD":
            case 1:
                message.fallback = 1;
                break;
            case "CLIENT_STEAMID":
            case 2:
                message.fallback = 2;
                break;
            case "PROTOBUF_FIELD_UINT64":
            case 3:
                message.fallback = 3;
                break;
            case "WEBAPI_PARAM_UINT64":
            case 4:
                message.fallback = 4;
                break;
            }
            if (object.protobuf_field != null)
                message.protobuf_field = object.protobuf_field >>> 0;
            if (object.webapi_param != null)
                message.webapi_param = String(object.webapi_param);
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCRoutingInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCRoutingInfo
         * @static
         * @param {CMsgGCRoutingInfo} message CMsgGCRoutingInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCRoutingInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.dir_index = [];
            if (options.defaults) {
                object.method = options.enums === String ? "RANDOM" : 0;
                object.fallback = options.enums === String ? "DISCARD" : 1;
                object.protobuf_field = 0;
                object.webapi_param = "";
            }
            if (message.dir_index && message.dir_index.length) {
                object.dir_index = [];
                for (var j = 0; j < message.dir_index.length; ++j)
                    object.dir_index[j] = message.dir_index[j];
            }
            if (message.method != null && message.hasOwnProperty("method"))
                object.method = options.enums === String ? $root.CMsgGCRoutingInfo.RoutingMethod[message.method] : message.method;
            if (message.fallback != null && message.hasOwnProperty("fallback"))
                object.fallback = options.enums === String ? $root.CMsgGCRoutingInfo.RoutingMethod[message.fallback] : message.fallback;
            if (message.protobuf_field != null && message.hasOwnProperty("protobuf_field"))
                object.protobuf_field = message.protobuf_field;
            if (message.webapi_param != null && message.hasOwnProperty("webapi_param"))
                object.webapi_param = message.webapi_param;
            return object;
        };
    
        /**
         * Converts this CMsgGCRoutingInfo to JSON.
         * @function toJSON
         * @memberof CMsgGCRoutingInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCRoutingInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        /**
         * RoutingMethod enum.
         * @name CMsgGCRoutingInfo.RoutingMethod
         * @enum {string}
         * @property {number} RANDOM=0 RANDOM value
         * @property {number} DISCARD=1 DISCARD value
         * @property {number} CLIENT_STEAMID=2 CLIENT_STEAMID value
         * @property {number} PROTOBUF_FIELD_UINT64=3 PROTOBUF_FIELD_UINT64 value
         * @property {number} WEBAPI_PARAM_UINT64=4 WEBAPI_PARAM_UINT64 value
         */
        CMsgGCRoutingInfo.RoutingMethod = (function() {
            var valuesById = {}, values = Object.create(valuesById);
            values[valuesById[0] = "RANDOM"] = 0;
            values[valuesById[1] = "DISCARD"] = 1;
            values[valuesById[2] = "CLIENT_STEAMID"] = 2;
            values[valuesById[3] = "PROTOBUF_FIELD_UINT64"] = 3;
            values[valuesById[4] = "WEBAPI_PARAM_UINT64"] = 4;
            return values;
        })();
    
        return CMsgGCRoutingInfo;
    })();
    
    $root.CMsgGCMsgMasterSetWebAPIRouting = (function() {
    
        /**
         * Properties of a CMsgGCMsgMasterSetWebAPIRouting.
         * @exports ICMsgGCMsgMasterSetWebAPIRouting
         * @interface ICMsgGCMsgMasterSetWebAPIRouting
         * @property {Array.<CMsgGCMsgMasterSetWebAPIRouting.IEntry>|null} [entries] CMsgGCMsgMasterSetWebAPIRouting entries
         */
    
        /**
         * Constructs a new CMsgGCMsgMasterSetWebAPIRouting.
         * @exports CMsgGCMsgMasterSetWebAPIRouting
         * @classdesc Represents a CMsgGCMsgMasterSetWebAPIRouting.
         * @implements ICMsgGCMsgMasterSetWebAPIRouting
         * @constructor
         * @param {ICMsgGCMsgMasterSetWebAPIRouting=} [properties] Properties to set
         */
        function CMsgGCMsgMasterSetWebAPIRouting(properties) {
            this.entries = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCMsgMasterSetWebAPIRouting entries.
         * @member {Array.<CMsgGCMsgMasterSetWebAPIRouting.IEntry>} entries
         * @memberof CMsgGCMsgMasterSetWebAPIRouting
         * @instance
         */
        CMsgGCMsgMasterSetWebAPIRouting.prototype.entries = $util.emptyArray;
    
        /**
         * Creates a new CMsgGCMsgMasterSetWebAPIRouting instance using the specified properties.
         * @function create
         * @memberof CMsgGCMsgMasterSetWebAPIRouting
         * @static
         * @param {ICMsgGCMsgMasterSetWebAPIRouting=} [properties] Properties to set
         * @returns {CMsgGCMsgMasterSetWebAPIRouting} CMsgGCMsgMasterSetWebAPIRouting instance
         */
        CMsgGCMsgMasterSetWebAPIRouting.create = function create(properties) {
            return new CMsgGCMsgMasterSetWebAPIRouting(properties);
        };
    
        /**
         * Encodes the specified CMsgGCMsgMasterSetWebAPIRouting message. Does not implicitly {@link CMsgGCMsgMasterSetWebAPIRouting.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCMsgMasterSetWebAPIRouting
         * @static
         * @param {ICMsgGCMsgMasterSetWebAPIRouting} message CMsgGCMsgMasterSetWebAPIRouting message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgMasterSetWebAPIRouting.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.entries != null && message.entries.length)
                for (var i = 0; i < message.entries.length; ++i)
                    $root.CMsgGCMsgMasterSetWebAPIRouting.Entry.encode(message.entries[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCMsgMasterSetWebAPIRouting message, length delimited. Does not implicitly {@link CMsgGCMsgMasterSetWebAPIRouting.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCMsgMasterSetWebAPIRouting
         * @static
         * @param {ICMsgGCMsgMasterSetWebAPIRouting} message CMsgGCMsgMasterSetWebAPIRouting message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgMasterSetWebAPIRouting.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCMsgMasterSetWebAPIRouting message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCMsgMasterSetWebAPIRouting
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCMsgMasterSetWebAPIRouting} CMsgGCMsgMasterSetWebAPIRouting
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgMasterSetWebAPIRouting.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCMsgMasterSetWebAPIRouting();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.entries && message.entries.length))
                        message.entries = [];
                    message.entries.push($root.CMsgGCMsgMasterSetWebAPIRouting.Entry.decode(reader, reader.uint32()));
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCMsgMasterSetWebAPIRouting message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCMsgMasterSetWebAPIRouting
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCMsgMasterSetWebAPIRouting} CMsgGCMsgMasterSetWebAPIRouting
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgMasterSetWebAPIRouting.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCMsgMasterSetWebAPIRouting message.
         * @function verify
         * @memberof CMsgGCMsgMasterSetWebAPIRouting
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCMsgMasterSetWebAPIRouting.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.entries != null && message.hasOwnProperty("entries")) {
                if (!Array.isArray(message.entries))
                    return "entries: array expected";
                for (var i = 0; i < message.entries.length; ++i) {
                    var error = $root.CMsgGCMsgMasterSetWebAPIRouting.Entry.verify(message.entries[i]);
                    if (error)
                        return "entries." + error;
                }
            }
            return null;
        };
    
        /**
         * Creates a CMsgGCMsgMasterSetWebAPIRouting message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCMsgMasterSetWebAPIRouting
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCMsgMasterSetWebAPIRouting} CMsgGCMsgMasterSetWebAPIRouting
         */
        CMsgGCMsgMasterSetWebAPIRouting.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCMsgMasterSetWebAPIRouting)
                return object;
            var message = new $root.CMsgGCMsgMasterSetWebAPIRouting();
            if (object.entries) {
                if (!Array.isArray(object.entries))
                    throw TypeError(".CMsgGCMsgMasterSetWebAPIRouting.entries: array expected");
                message.entries = [];
                for (var i = 0; i < object.entries.length; ++i) {
                    if (typeof object.entries[i] !== "object")
                        throw TypeError(".CMsgGCMsgMasterSetWebAPIRouting.entries: object expected");
                    message.entries[i] = $root.CMsgGCMsgMasterSetWebAPIRouting.Entry.fromObject(object.entries[i]);
                }
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCMsgMasterSetWebAPIRouting message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCMsgMasterSetWebAPIRouting
         * @static
         * @param {CMsgGCMsgMasterSetWebAPIRouting} message CMsgGCMsgMasterSetWebAPIRouting
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCMsgMasterSetWebAPIRouting.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.entries = [];
            if (message.entries && message.entries.length) {
                object.entries = [];
                for (var j = 0; j < message.entries.length; ++j)
                    object.entries[j] = $root.CMsgGCMsgMasterSetWebAPIRouting.Entry.toObject(message.entries[j], options);
            }
            return object;
        };
    
        /**
         * Converts this CMsgGCMsgMasterSetWebAPIRouting to JSON.
         * @function toJSON
         * @memberof CMsgGCMsgMasterSetWebAPIRouting
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCMsgMasterSetWebAPIRouting.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgGCMsgMasterSetWebAPIRouting.Entry = (function() {
    
            /**
             * Properties of an Entry.
             * @memberof CMsgGCMsgMasterSetWebAPIRouting
             * @interface IEntry
             * @property {string|null} [interface_name] Entry interface_name
             * @property {string|null} [method_name] Entry method_name
             * @property {ICMsgGCRoutingInfo|null} [routing] Entry routing
             */
    
            /**
             * Constructs a new Entry.
             * @memberof CMsgGCMsgMasterSetWebAPIRouting
             * @classdesc Represents an Entry.
             * @implements IEntry
             * @constructor
             * @param {CMsgGCMsgMasterSetWebAPIRouting.IEntry=} [properties] Properties to set
             */
            function Entry(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * Entry interface_name.
             * @member {string} interface_name
             * @memberof CMsgGCMsgMasterSetWebAPIRouting.Entry
             * @instance
             */
            Entry.prototype.interface_name = "";
    
            /**
             * Entry method_name.
             * @member {string} method_name
             * @memberof CMsgGCMsgMasterSetWebAPIRouting.Entry
             * @instance
             */
            Entry.prototype.method_name = "";
    
            /**
             * Entry routing.
             * @member {ICMsgGCRoutingInfo|null|undefined} routing
             * @memberof CMsgGCMsgMasterSetWebAPIRouting.Entry
             * @instance
             */
            Entry.prototype.routing = null;
    
            /**
             * Creates a new Entry instance using the specified properties.
             * @function create
             * @memberof CMsgGCMsgMasterSetWebAPIRouting.Entry
             * @static
             * @param {CMsgGCMsgMasterSetWebAPIRouting.IEntry=} [properties] Properties to set
             * @returns {CMsgGCMsgMasterSetWebAPIRouting.Entry} Entry instance
             */
            Entry.create = function create(properties) {
                return new Entry(properties);
            };
    
            /**
             * Encodes the specified Entry message. Does not implicitly {@link CMsgGCMsgMasterSetWebAPIRouting.Entry.verify|verify} messages.
             * @function encode
             * @memberof CMsgGCMsgMasterSetWebAPIRouting.Entry
             * @static
             * @param {CMsgGCMsgMasterSetWebAPIRouting.IEntry} message Entry message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Entry.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.interface_name != null && message.hasOwnProperty("interface_name"))
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.interface_name);
                if (message.method_name != null && message.hasOwnProperty("method_name"))
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.method_name);
                if (message.routing != null && message.hasOwnProperty("routing"))
                    $root.CMsgGCRoutingInfo.encode(message.routing, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
                return writer;
            };
    
            /**
             * Encodes the specified Entry message, length delimited. Does not implicitly {@link CMsgGCMsgMasterSetWebAPIRouting.Entry.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgGCMsgMasterSetWebAPIRouting.Entry
             * @static
             * @param {CMsgGCMsgMasterSetWebAPIRouting.IEntry} message Entry message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Entry.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes an Entry message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgGCMsgMasterSetWebAPIRouting.Entry
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgGCMsgMasterSetWebAPIRouting.Entry} Entry
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Entry.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCMsgMasterSetWebAPIRouting.Entry();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.interface_name = reader.string();
                        break;
                    case 2:
                        message.method_name = reader.string();
                        break;
                    case 3:
                        message.routing = $root.CMsgGCRoutingInfo.decode(reader, reader.uint32());
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes an Entry message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgGCMsgMasterSetWebAPIRouting.Entry
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgGCMsgMasterSetWebAPIRouting.Entry} Entry
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Entry.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies an Entry message.
             * @function verify
             * @memberof CMsgGCMsgMasterSetWebAPIRouting.Entry
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            Entry.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.interface_name != null && message.hasOwnProperty("interface_name"))
                    if (!$util.isString(message.interface_name))
                        return "interface_name: string expected";
                if (message.method_name != null && message.hasOwnProperty("method_name"))
                    if (!$util.isString(message.method_name))
                        return "method_name: string expected";
                if (message.routing != null && message.hasOwnProperty("routing")) {
                    var error = $root.CMsgGCRoutingInfo.verify(message.routing);
                    if (error)
                        return "routing." + error;
                }
                return null;
            };
    
            /**
             * Creates an Entry message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgGCMsgMasterSetWebAPIRouting.Entry
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgGCMsgMasterSetWebAPIRouting.Entry} Entry
             */
            Entry.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgGCMsgMasterSetWebAPIRouting.Entry)
                    return object;
                var message = new $root.CMsgGCMsgMasterSetWebAPIRouting.Entry();
                if (object.interface_name != null)
                    message.interface_name = String(object.interface_name);
                if (object.method_name != null)
                    message.method_name = String(object.method_name);
                if (object.routing != null) {
                    if (typeof object.routing !== "object")
                        throw TypeError(".CMsgGCMsgMasterSetWebAPIRouting.Entry.routing: object expected");
                    message.routing = $root.CMsgGCRoutingInfo.fromObject(object.routing);
                }
                return message;
            };
    
            /**
             * Creates a plain object from an Entry message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgGCMsgMasterSetWebAPIRouting.Entry
             * @static
             * @param {CMsgGCMsgMasterSetWebAPIRouting.Entry} message Entry
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            Entry.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.interface_name = "";
                    object.method_name = "";
                    object.routing = null;
                }
                if (message.interface_name != null && message.hasOwnProperty("interface_name"))
                    object.interface_name = message.interface_name;
                if (message.method_name != null && message.hasOwnProperty("method_name"))
                    object.method_name = message.method_name;
                if (message.routing != null && message.hasOwnProperty("routing"))
                    object.routing = $root.CMsgGCRoutingInfo.toObject(message.routing, options);
                return object;
            };
    
            /**
             * Converts this Entry to JSON.
             * @function toJSON
             * @memberof CMsgGCMsgMasterSetWebAPIRouting.Entry
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            Entry.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return Entry;
        })();
    
        return CMsgGCMsgMasterSetWebAPIRouting;
    })();
    
    $root.CMsgGCMsgMasterSetClientMsgRouting = (function() {
    
        /**
         * Properties of a CMsgGCMsgMasterSetClientMsgRouting.
         * @exports ICMsgGCMsgMasterSetClientMsgRouting
         * @interface ICMsgGCMsgMasterSetClientMsgRouting
         * @property {Array.<CMsgGCMsgMasterSetClientMsgRouting.IEntry>|null} [entries] CMsgGCMsgMasterSetClientMsgRouting entries
         */
    
        /**
         * Constructs a new CMsgGCMsgMasterSetClientMsgRouting.
         * @exports CMsgGCMsgMasterSetClientMsgRouting
         * @classdesc Represents a CMsgGCMsgMasterSetClientMsgRouting.
         * @implements ICMsgGCMsgMasterSetClientMsgRouting
         * @constructor
         * @param {ICMsgGCMsgMasterSetClientMsgRouting=} [properties] Properties to set
         */
        function CMsgGCMsgMasterSetClientMsgRouting(properties) {
            this.entries = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCMsgMasterSetClientMsgRouting entries.
         * @member {Array.<CMsgGCMsgMasterSetClientMsgRouting.IEntry>} entries
         * @memberof CMsgGCMsgMasterSetClientMsgRouting
         * @instance
         */
        CMsgGCMsgMasterSetClientMsgRouting.prototype.entries = $util.emptyArray;
    
        /**
         * Creates a new CMsgGCMsgMasterSetClientMsgRouting instance using the specified properties.
         * @function create
         * @memberof CMsgGCMsgMasterSetClientMsgRouting
         * @static
         * @param {ICMsgGCMsgMasterSetClientMsgRouting=} [properties] Properties to set
         * @returns {CMsgGCMsgMasterSetClientMsgRouting} CMsgGCMsgMasterSetClientMsgRouting instance
         */
        CMsgGCMsgMasterSetClientMsgRouting.create = function create(properties) {
            return new CMsgGCMsgMasterSetClientMsgRouting(properties);
        };
    
        /**
         * Encodes the specified CMsgGCMsgMasterSetClientMsgRouting message. Does not implicitly {@link CMsgGCMsgMasterSetClientMsgRouting.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCMsgMasterSetClientMsgRouting
         * @static
         * @param {ICMsgGCMsgMasterSetClientMsgRouting} message CMsgGCMsgMasterSetClientMsgRouting message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgMasterSetClientMsgRouting.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.entries != null && message.entries.length)
                for (var i = 0; i < message.entries.length; ++i)
                    $root.CMsgGCMsgMasterSetClientMsgRouting.Entry.encode(message.entries[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCMsgMasterSetClientMsgRouting message, length delimited. Does not implicitly {@link CMsgGCMsgMasterSetClientMsgRouting.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCMsgMasterSetClientMsgRouting
         * @static
         * @param {ICMsgGCMsgMasterSetClientMsgRouting} message CMsgGCMsgMasterSetClientMsgRouting message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgMasterSetClientMsgRouting.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCMsgMasterSetClientMsgRouting message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCMsgMasterSetClientMsgRouting
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCMsgMasterSetClientMsgRouting} CMsgGCMsgMasterSetClientMsgRouting
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgMasterSetClientMsgRouting.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCMsgMasterSetClientMsgRouting();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.entries && message.entries.length))
                        message.entries = [];
                    message.entries.push($root.CMsgGCMsgMasterSetClientMsgRouting.Entry.decode(reader, reader.uint32()));
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCMsgMasterSetClientMsgRouting message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCMsgMasterSetClientMsgRouting
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCMsgMasterSetClientMsgRouting} CMsgGCMsgMasterSetClientMsgRouting
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgMasterSetClientMsgRouting.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCMsgMasterSetClientMsgRouting message.
         * @function verify
         * @memberof CMsgGCMsgMasterSetClientMsgRouting
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCMsgMasterSetClientMsgRouting.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.entries != null && message.hasOwnProperty("entries")) {
                if (!Array.isArray(message.entries))
                    return "entries: array expected";
                for (var i = 0; i < message.entries.length; ++i) {
                    var error = $root.CMsgGCMsgMasterSetClientMsgRouting.Entry.verify(message.entries[i]);
                    if (error)
                        return "entries." + error;
                }
            }
            return null;
        };
    
        /**
         * Creates a CMsgGCMsgMasterSetClientMsgRouting message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCMsgMasterSetClientMsgRouting
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCMsgMasterSetClientMsgRouting} CMsgGCMsgMasterSetClientMsgRouting
         */
        CMsgGCMsgMasterSetClientMsgRouting.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCMsgMasterSetClientMsgRouting)
                return object;
            var message = new $root.CMsgGCMsgMasterSetClientMsgRouting();
            if (object.entries) {
                if (!Array.isArray(object.entries))
                    throw TypeError(".CMsgGCMsgMasterSetClientMsgRouting.entries: array expected");
                message.entries = [];
                for (var i = 0; i < object.entries.length; ++i) {
                    if (typeof object.entries[i] !== "object")
                        throw TypeError(".CMsgGCMsgMasterSetClientMsgRouting.entries: object expected");
                    message.entries[i] = $root.CMsgGCMsgMasterSetClientMsgRouting.Entry.fromObject(object.entries[i]);
                }
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCMsgMasterSetClientMsgRouting message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCMsgMasterSetClientMsgRouting
         * @static
         * @param {CMsgGCMsgMasterSetClientMsgRouting} message CMsgGCMsgMasterSetClientMsgRouting
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCMsgMasterSetClientMsgRouting.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.entries = [];
            if (message.entries && message.entries.length) {
                object.entries = [];
                for (var j = 0; j < message.entries.length; ++j)
                    object.entries[j] = $root.CMsgGCMsgMasterSetClientMsgRouting.Entry.toObject(message.entries[j], options);
            }
            return object;
        };
    
        /**
         * Converts this CMsgGCMsgMasterSetClientMsgRouting to JSON.
         * @function toJSON
         * @memberof CMsgGCMsgMasterSetClientMsgRouting
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCMsgMasterSetClientMsgRouting.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgGCMsgMasterSetClientMsgRouting.Entry = (function() {
    
            /**
             * Properties of an Entry.
             * @memberof CMsgGCMsgMasterSetClientMsgRouting
             * @interface IEntry
             * @property {number|null} [msg_type] Entry msg_type
             * @property {ICMsgGCRoutingInfo|null} [routing] Entry routing
             */
    
            /**
             * Constructs a new Entry.
             * @memberof CMsgGCMsgMasterSetClientMsgRouting
             * @classdesc Represents an Entry.
             * @implements IEntry
             * @constructor
             * @param {CMsgGCMsgMasterSetClientMsgRouting.IEntry=} [properties] Properties to set
             */
            function Entry(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * Entry msg_type.
             * @member {number} msg_type
             * @memberof CMsgGCMsgMasterSetClientMsgRouting.Entry
             * @instance
             */
            Entry.prototype.msg_type = 0;
    
            /**
             * Entry routing.
             * @member {ICMsgGCRoutingInfo|null|undefined} routing
             * @memberof CMsgGCMsgMasterSetClientMsgRouting.Entry
             * @instance
             */
            Entry.prototype.routing = null;
    
            /**
             * Creates a new Entry instance using the specified properties.
             * @function create
             * @memberof CMsgGCMsgMasterSetClientMsgRouting.Entry
             * @static
             * @param {CMsgGCMsgMasterSetClientMsgRouting.IEntry=} [properties] Properties to set
             * @returns {CMsgGCMsgMasterSetClientMsgRouting.Entry} Entry instance
             */
            Entry.create = function create(properties) {
                return new Entry(properties);
            };
    
            /**
             * Encodes the specified Entry message. Does not implicitly {@link CMsgGCMsgMasterSetClientMsgRouting.Entry.verify|verify} messages.
             * @function encode
             * @memberof CMsgGCMsgMasterSetClientMsgRouting.Entry
             * @static
             * @param {CMsgGCMsgMasterSetClientMsgRouting.IEntry} message Entry message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Entry.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.msg_type != null && message.hasOwnProperty("msg_type"))
                    writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.msg_type);
                if (message.routing != null && message.hasOwnProperty("routing"))
                    $root.CMsgGCRoutingInfo.encode(message.routing, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
                return writer;
            };
    
            /**
             * Encodes the specified Entry message, length delimited. Does not implicitly {@link CMsgGCMsgMasterSetClientMsgRouting.Entry.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgGCMsgMasterSetClientMsgRouting.Entry
             * @static
             * @param {CMsgGCMsgMasterSetClientMsgRouting.IEntry} message Entry message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            Entry.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes an Entry message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgGCMsgMasterSetClientMsgRouting.Entry
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgGCMsgMasterSetClientMsgRouting.Entry} Entry
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Entry.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCMsgMasterSetClientMsgRouting.Entry();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.msg_type = reader.uint32();
                        break;
                    case 2:
                        message.routing = $root.CMsgGCRoutingInfo.decode(reader, reader.uint32());
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes an Entry message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgGCMsgMasterSetClientMsgRouting.Entry
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgGCMsgMasterSetClientMsgRouting.Entry} Entry
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            Entry.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies an Entry message.
             * @function verify
             * @memberof CMsgGCMsgMasterSetClientMsgRouting.Entry
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            Entry.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.msg_type != null && message.hasOwnProperty("msg_type"))
                    if (!$util.isInteger(message.msg_type))
                        return "msg_type: integer expected";
                if (message.routing != null && message.hasOwnProperty("routing")) {
                    var error = $root.CMsgGCRoutingInfo.verify(message.routing);
                    if (error)
                        return "routing." + error;
                }
                return null;
            };
    
            /**
             * Creates an Entry message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgGCMsgMasterSetClientMsgRouting.Entry
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgGCMsgMasterSetClientMsgRouting.Entry} Entry
             */
            Entry.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgGCMsgMasterSetClientMsgRouting.Entry)
                    return object;
                var message = new $root.CMsgGCMsgMasterSetClientMsgRouting.Entry();
                if (object.msg_type != null)
                    message.msg_type = object.msg_type >>> 0;
                if (object.routing != null) {
                    if (typeof object.routing !== "object")
                        throw TypeError(".CMsgGCMsgMasterSetClientMsgRouting.Entry.routing: object expected");
                    message.routing = $root.CMsgGCRoutingInfo.fromObject(object.routing);
                }
                return message;
            };
    
            /**
             * Creates a plain object from an Entry message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgGCMsgMasterSetClientMsgRouting.Entry
             * @static
             * @param {CMsgGCMsgMasterSetClientMsgRouting.Entry} message Entry
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            Entry.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.msg_type = 0;
                    object.routing = null;
                }
                if (message.msg_type != null && message.hasOwnProperty("msg_type"))
                    object.msg_type = message.msg_type;
                if (message.routing != null && message.hasOwnProperty("routing"))
                    object.routing = $root.CMsgGCRoutingInfo.toObject(message.routing, options);
                return object;
            };
    
            /**
             * Converts this Entry to JSON.
             * @function toJSON
             * @memberof CMsgGCMsgMasterSetClientMsgRouting.Entry
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            Entry.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return Entry;
        })();
    
        return CMsgGCMsgMasterSetClientMsgRouting;
    })();
    
    $root.CMsgGCMsgMasterSetWebAPIRouting_Response = (function() {
    
        /**
         * Properties of a CMsgGCMsgMasterSetWebAPIRouting_Response.
         * @exports ICMsgGCMsgMasterSetWebAPIRouting_Response
         * @interface ICMsgGCMsgMasterSetWebAPIRouting_Response
         * @property {number|null} [eresult] CMsgGCMsgMasterSetWebAPIRouting_Response eresult
         */
    
        /**
         * Constructs a new CMsgGCMsgMasterSetWebAPIRouting_Response.
         * @exports CMsgGCMsgMasterSetWebAPIRouting_Response
         * @classdesc Represents a CMsgGCMsgMasterSetWebAPIRouting_Response.
         * @implements ICMsgGCMsgMasterSetWebAPIRouting_Response
         * @constructor
         * @param {ICMsgGCMsgMasterSetWebAPIRouting_Response=} [properties] Properties to set
         */
        function CMsgGCMsgMasterSetWebAPIRouting_Response(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCMsgMasterSetWebAPIRouting_Response eresult.
         * @member {number} eresult
         * @memberof CMsgGCMsgMasterSetWebAPIRouting_Response
         * @instance
         */
        CMsgGCMsgMasterSetWebAPIRouting_Response.prototype.eresult = 2;
    
        /**
         * Creates a new CMsgGCMsgMasterSetWebAPIRouting_Response instance using the specified properties.
         * @function create
         * @memberof CMsgGCMsgMasterSetWebAPIRouting_Response
         * @static
         * @param {ICMsgGCMsgMasterSetWebAPIRouting_Response=} [properties] Properties to set
         * @returns {CMsgGCMsgMasterSetWebAPIRouting_Response} CMsgGCMsgMasterSetWebAPIRouting_Response instance
         */
        CMsgGCMsgMasterSetWebAPIRouting_Response.create = function create(properties) {
            return new CMsgGCMsgMasterSetWebAPIRouting_Response(properties);
        };
    
        /**
         * Encodes the specified CMsgGCMsgMasterSetWebAPIRouting_Response message. Does not implicitly {@link CMsgGCMsgMasterSetWebAPIRouting_Response.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCMsgMasterSetWebAPIRouting_Response
         * @static
         * @param {ICMsgGCMsgMasterSetWebAPIRouting_Response} message CMsgGCMsgMasterSetWebAPIRouting_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgMasterSetWebAPIRouting_Response.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.eresult);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCMsgMasterSetWebAPIRouting_Response message, length delimited. Does not implicitly {@link CMsgGCMsgMasterSetWebAPIRouting_Response.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCMsgMasterSetWebAPIRouting_Response
         * @static
         * @param {ICMsgGCMsgMasterSetWebAPIRouting_Response} message CMsgGCMsgMasterSetWebAPIRouting_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgMasterSetWebAPIRouting_Response.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCMsgMasterSetWebAPIRouting_Response message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCMsgMasterSetWebAPIRouting_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCMsgMasterSetWebAPIRouting_Response} CMsgGCMsgMasterSetWebAPIRouting_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgMasterSetWebAPIRouting_Response.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCMsgMasterSetWebAPIRouting_Response();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.eresult = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCMsgMasterSetWebAPIRouting_Response message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCMsgMasterSetWebAPIRouting_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCMsgMasterSetWebAPIRouting_Response} CMsgGCMsgMasterSetWebAPIRouting_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgMasterSetWebAPIRouting_Response.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCMsgMasterSetWebAPIRouting_Response message.
         * @function verify
         * @memberof CMsgGCMsgMasterSetWebAPIRouting_Response
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCMsgMasterSetWebAPIRouting_Response.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                if (!$util.isInteger(message.eresult))
                    return "eresult: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCMsgMasterSetWebAPIRouting_Response message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCMsgMasterSetWebAPIRouting_Response
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCMsgMasterSetWebAPIRouting_Response} CMsgGCMsgMasterSetWebAPIRouting_Response
         */
        CMsgGCMsgMasterSetWebAPIRouting_Response.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCMsgMasterSetWebAPIRouting_Response)
                return object;
            var message = new $root.CMsgGCMsgMasterSetWebAPIRouting_Response();
            if (object.eresult != null)
                message.eresult = object.eresult | 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCMsgMasterSetWebAPIRouting_Response message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCMsgMasterSetWebAPIRouting_Response
         * @static
         * @param {CMsgGCMsgMasterSetWebAPIRouting_Response} message CMsgGCMsgMasterSetWebAPIRouting_Response
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCMsgMasterSetWebAPIRouting_Response.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.eresult = 2;
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                object.eresult = message.eresult;
            return object;
        };
    
        /**
         * Converts this CMsgGCMsgMasterSetWebAPIRouting_Response to JSON.
         * @function toJSON
         * @memberof CMsgGCMsgMasterSetWebAPIRouting_Response
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCMsgMasterSetWebAPIRouting_Response.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCMsgMasterSetWebAPIRouting_Response;
    })();
    
    $root.CMsgGCMsgMasterSetClientMsgRouting_Response = (function() {
    
        /**
         * Properties of a CMsgGCMsgMasterSetClientMsgRouting_Response.
         * @exports ICMsgGCMsgMasterSetClientMsgRouting_Response
         * @interface ICMsgGCMsgMasterSetClientMsgRouting_Response
         * @property {number|null} [eresult] CMsgGCMsgMasterSetClientMsgRouting_Response eresult
         */
    
        /**
         * Constructs a new CMsgGCMsgMasterSetClientMsgRouting_Response.
         * @exports CMsgGCMsgMasterSetClientMsgRouting_Response
         * @classdesc Represents a CMsgGCMsgMasterSetClientMsgRouting_Response.
         * @implements ICMsgGCMsgMasterSetClientMsgRouting_Response
         * @constructor
         * @param {ICMsgGCMsgMasterSetClientMsgRouting_Response=} [properties] Properties to set
         */
        function CMsgGCMsgMasterSetClientMsgRouting_Response(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCMsgMasterSetClientMsgRouting_Response eresult.
         * @member {number} eresult
         * @memberof CMsgGCMsgMasterSetClientMsgRouting_Response
         * @instance
         */
        CMsgGCMsgMasterSetClientMsgRouting_Response.prototype.eresult = 2;
    
        /**
         * Creates a new CMsgGCMsgMasterSetClientMsgRouting_Response instance using the specified properties.
         * @function create
         * @memberof CMsgGCMsgMasterSetClientMsgRouting_Response
         * @static
         * @param {ICMsgGCMsgMasterSetClientMsgRouting_Response=} [properties] Properties to set
         * @returns {CMsgGCMsgMasterSetClientMsgRouting_Response} CMsgGCMsgMasterSetClientMsgRouting_Response instance
         */
        CMsgGCMsgMasterSetClientMsgRouting_Response.create = function create(properties) {
            return new CMsgGCMsgMasterSetClientMsgRouting_Response(properties);
        };
    
        /**
         * Encodes the specified CMsgGCMsgMasterSetClientMsgRouting_Response message. Does not implicitly {@link CMsgGCMsgMasterSetClientMsgRouting_Response.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCMsgMasterSetClientMsgRouting_Response
         * @static
         * @param {ICMsgGCMsgMasterSetClientMsgRouting_Response} message CMsgGCMsgMasterSetClientMsgRouting_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgMasterSetClientMsgRouting_Response.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.eresult);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCMsgMasterSetClientMsgRouting_Response message, length delimited. Does not implicitly {@link CMsgGCMsgMasterSetClientMsgRouting_Response.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCMsgMasterSetClientMsgRouting_Response
         * @static
         * @param {ICMsgGCMsgMasterSetClientMsgRouting_Response} message CMsgGCMsgMasterSetClientMsgRouting_Response message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgMasterSetClientMsgRouting_Response.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCMsgMasterSetClientMsgRouting_Response message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCMsgMasterSetClientMsgRouting_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCMsgMasterSetClientMsgRouting_Response} CMsgGCMsgMasterSetClientMsgRouting_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgMasterSetClientMsgRouting_Response.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCMsgMasterSetClientMsgRouting_Response();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.eresult = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCMsgMasterSetClientMsgRouting_Response message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCMsgMasterSetClientMsgRouting_Response
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCMsgMasterSetClientMsgRouting_Response} CMsgGCMsgMasterSetClientMsgRouting_Response
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgMasterSetClientMsgRouting_Response.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCMsgMasterSetClientMsgRouting_Response message.
         * @function verify
         * @memberof CMsgGCMsgMasterSetClientMsgRouting_Response
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCMsgMasterSetClientMsgRouting_Response.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                if (!$util.isInteger(message.eresult))
                    return "eresult: integer expected";
            return null;
        };
    
        /**
         * Creates a CMsgGCMsgMasterSetClientMsgRouting_Response message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCMsgMasterSetClientMsgRouting_Response
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCMsgMasterSetClientMsgRouting_Response} CMsgGCMsgMasterSetClientMsgRouting_Response
         */
        CMsgGCMsgMasterSetClientMsgRouting_Response.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCMsgMasterSetClientMsgRouting_Response)
                return object;
            var message = new $root.CMsgGCMsgMasterSetClientMsgRouting_Response();
            if (object.eresult != null)
                message.eresult = object.eresult | 0;
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCMsgMasterSetClientMsgRouting_Response message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCMsgMasterSetClientMsgRouting_Response
         * @static
         * @param {CMsgGCMsgMasterSetClientMsgRouting_Response} message CMsgGCMsgMasterSetClientMsgRouting_Response
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCMsgMasterSetClientMsgRouting_Response.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults)
                object.eresult = 2;
            if (message.eresult != null && message.hasOwnProperty("eresult"))
                object.eresult = message.eresult;
            return object;
        };
    
        /**
         * Converts this CMsgGCMsgMasterSetClientMsgRouting_Response to JSON.
         * @function toJSON
         * @memberof CMsgGCMsgMasterSetClientMsgRouting_Response
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCMsgMasterSetClientMsgRouting_Response.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        return CMsgGCMsgMasterSetClientMsgRouting_Response;
    })();
    
    $root.CMsgGCMsgSetOptions = (function() {
    
        /**
         * Properties of a CMsgGCMsgSetOptions.
         * @exports ICMsgGCMsgSetOptions
         * @interface ICMsgGCMsgSetOptions
         * @property {Array.<CMsgGCMsgSetOptions.Option>|null} [options] CMsgGCMsgSetOptions options
         * @property {Array.<CMsgGCMsgSetOptions.IMessageRange>|null} [client_msg_ranges] CMsgGCMsgSetOptions client_msg_ranges
         * @property {CMsgGCMsgSetOptions.GCSQLVersion|null} [gcsql_version] CMsgGCMsgSetOptions gcsql_version
         */
    
        /**
         * Constructs a new CMsgGCMsgSetOptions.
         * @exports CMsgGCMsgSetOptions
         * @classdesc Represents a CMsgGCMsgSetOptions.
         * @implements ICMsgGCMsgSetOptions
         * @constructor
         * @param {ICMsgGCMsgSetOptions=} [properties] Properties to set
         */
        function CMsgGCMsgSetOptions(properties) {
            this.options = [];
            this.client_msg_ranges = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCMsgSetOptions options.
         * @member {Array.<CMsgGCMsgSetOptions.Option>} options
         * @memberof CMsgGCMsgSetOptions
         * @instance
         */
        CMsgGCMsgSetOptions.prototype.options = $util.emptyArray;
    
        /**
         * CMsgGCMsgSetOptions client_msg_ranges.
         * @member {Array.<CMsgGCMsgSetOptions.IMessageRange>} client_msg_ranges
         * @memberof CMsgGCMsgSetOptions
         * @instance
         */
        CMsgGCMsgSetOptions.prototype.client_msg_ranges = $util.emptyArray;
    
        /**
         * CMsgGCMsgSetOptions gcsql_version.
         * @member {CMsgGCMsgSetOptions.GCSQLVersion} gcsql_version
         * @memberof CMsgGCMsgSetOptions
         * @instance
         */
        CMsgGCMsgSetOptions.prototype.gcsql_version = 1;
    
        /**
         * Creates a new CMsgGCMsgSetOptions instance using the specified properties.
         * @function create
         * @memberof CMsgGCMsgSetOptions
         * @static
         * @param {ICMsgGCMsgSetOptions=} [properties] Properties to set
         * @returns {CMsgGCMsgSetOptions} CMsgGCMsgSetOptions instance
         */
        CMsgGCMsgSetOptions.create = function create(properties) {
            return new CMsgGCMsgSetOptions(properties);
        };
    
        /**
         * Encodes the specified CMsgGCMsgSetOptions message. Does not implicitly {@link CMsgGCMsgSetOptions.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCMsgSetOptions
         * @static
         * @param {ICMsgGCMsgSetOptions} message CMsgGCMsgSetOptions message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgSetOptions.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.options != null && message.options.length)
                for (var i = 0; i < message.options.length; ++i)
                    writer.uint32(/* id 1, wireType 0 =*/8).int32(message.options[i]);
            if (message.client_msg_ranges != null && message.client_msg_ranges.length)
                for (var i = 0; i < message.client_msg_ranges.length; ++i)
                    $root.CMsgGCMsgSetOptions.MessageRange.encode(message.client_msg_ranges[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
            if (message.gcsql_version != null && message.hasOwnProperty("gcsql_version"))
                writer.uint32(/* id 3, wireType 0 =*/24).int32(message.gcsql_version);
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCMsgSetOptions message, length delimited. Does not implicitly {@link CMsgGCMsgSetOptions.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCMsgSetOptions
         * @static
         * @param {ICMsgGCMsgSetOptions} message CMsgGCMsgSetOptions message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCMsgSetOptions.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCMsgSetOptions message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCMsgSetOptions
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCMsgSetOptions} CMsgGCMsgSetOptions
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgSetOptions.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCMsgSetOptions();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.options && message.options.length))
                        message.options = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.options.push(reader.int32());
                    } else
                        message.options.push(reader.int32());
                    break;
                case 2:
                    if (!(message.client_msg_ranges && message.client_msg_ranges.length))
                        message.client_msg_ranges = [];
                    message.client_msg_ranges.push($root.CMsgGCMsgSetOptions.MessageRange.decode(reader, reader.uint32()));
                    break;
                case 3:
                    message.gcsql_version = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCMsgSetOptions message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCMsgSetOptions
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCMsgSetOptions} CMsgGCMsgSetOptions
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCMsgSetOptions.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCMsgSetOptions message.
         * @function verify
         * @memberof CMsgGCMsgSetOptions
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCMsgSetOptions.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.options != null && message.hasOwnProperty("options")) {
                if (!Array.isArray(message.options))
                    return "options: array expected";
                for (var i = 0; i < message.options.length; ++i)
                    switch (message.options[i]) {
                    default:
                        return "options: enum value[] expected";
                    case 0:
                    case 1:
                    case 2:
                    case 3:
                        break;
                    }
            }
            if (message.client_msg_ranges != null && message.hasOwnProperty("client_msg_ranges")) {
                if (!Array.isArray(message.client_msg_ranges))
                    return "client_msg_ranges: array expected";
                for (var i = 0; i < message.client_msg_ranges.length; ++i) {
                    var error = $root.CMsgGCMsgSetOptions.MessageRange.verify(message.client_msg_ranges[i]);
                    if (error)
                        return "client_msg_ranges." + error;
                }
            }
            if (message.gcsql_version != null && message.hasOwnProperty("gcsql_version"))
                switch (message.gcsql_version) {
                default:
                    return "gcsql_version: enum value expected";
                case 1:
                case 2:
                    break;
                }
            return null;
        };
    
        /**
         * Creates a CMsgGCMsgSetOptions message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCMsgSetOptions
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCMsgSetOptions} CMsgGCMsgSetOptions
         */
        CMsgGCMsgSetOptions.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCMsgSetOptions)
                return object;
            var message = new $root.CMsgGCMsgSetOptions();
            if (object.options) {
                if (!Array.isArray(object.options))
                    throw TypeError(".CMsgGCMsgSetOptions.options: array expected");
                message.options = [];
                for (var i = 0; i < object.options.length; ++i)
                    switch (object.options[i]) {
                    default:
                    case "NOTIFY_USER_SESSIONS":
                    case 0:
                        message.options[i] = 0;
                        break;
                    case "NOTIFY_SERVER_SESSIONS":
                    case 1:
                        message.options[i] = 1;
                        break;
                    case "NOTIFY_ACHIEVEMENTS":
                    case 2:
                        message.options[i] = 2;
                        break;
                    case "NOTIFY_VAC_ACTION":
                    case 3:
                        message.options[i] = 3;
                        break;
                    }
            }
            if (object.client_msg_ranges) {
                if (!Array.isArray(object.client_msg_ranges))
                    throw TypeError(".CMsgGCMsgSetOptions.client_msg_ranges: array expected");
                message.client_msg_ranges = [];
                for (var i = 0; i < object.client_msg_ranges.length; ++i) {
                    if (typeof object.client_msg_ranges[i] !== "object")
                        throw TypeError(".CMsgGCMsgSetOptions.client_msg_ranges: object expected");
                    message.client_msg_ranges[i] = $root.CMsgGCMsgSetOptions.MessageRange.fromObject(object.client_msg_ranges[i]);
                }
            }
            switch (object.gcsql_version) {
            case "GCSQL_VERSION_BASELINE":
            case 1:
                message.gcsql_version = 1;
                break;
            case "GCSQL_VERSION_BOOLTYPE":
            case 2:
                message.gcsql_version = 2;
                break;
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCMsgSetOptions message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCMsgSetOptions
         * @static
         * @param {CMsgGCMsgSetOptions} message CMsgGCMsgSetOptions
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCMsgSetOptions.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults) {
                object.options = [];
                object.client_msg_ranges = [];
            }
            if (options.defaults)
                object.gcsql_version = options.enums === String ? "GCSQL_VERSION_BASELINE" : 1;
            if (message.options && message.options.length) {
                object.options = [];
                for (var j = 0; j < message.options.length; ++j)
                    object.options[j] = options.enums === String ? $root.CMsgGCMsgSetOptions.Option[message.options[j]] : message.options[j];
            }
            if (message.client_msg_ranges && message.client_msg_ranges.length) {
                object.client_msg_ranges = [];
                for (var j = 0; j < message.client_msg_ranges.length; ++j)
                    object.client_msg_ranges[j] = $root.CMsgGCMsgSetOptions.MessageRange.toObject(message.client_msg_ranges[j], options);
            }
            if (message.gcsql_version != null && message.hasOwnProperty("gcsql_version"))
                object.gcsql_version = options.enums === String ? $root.CMsgGCMsgSetOptions.GCSQLVersion[message.gcsql_version] : message.gcsql_version;
            return object;
        };
    
        /**
         * Converts this CMsgGCMsgSetOptions to JSON.
         * @function toJSON
         * @memberof CMsgGCMsgSetOptions
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCMsgSetOptions.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgGCMsgSetOptions.MessageRange = (function() {
    
            /**
             * Properties of a MessageRange.
             * @memberof CMsgGCMsgSetOptions
             * @interface IMessageRange
             * @property {number} low MessageRange low
             * @property {number} high MessageRange high
             */
    
            /**
             * Constructs a new MessageRange.
             * @memberof CMsgGCMsgSetOptions
             * @classdesc Represents a MessageRange.
             * @implements IMessageRange
             * @constructor
             * @param {CMsgGCMsgSetOptions.IMessageRange=} [properties] Properties to set
             */
            function MessageRange(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * MessageRange low.
             * @member {number} low
             * @memberof CMsgGCMsgSetOptions.MessageRange
             * @instance
             */
            MessageRange.prototype.low = 0;
    
            /**
             * MessageRange high.
             * @member {number} high
             * @memberof CMsgGCMsgSetOptions.MessageRange
             * @instance
             */
            MessageRange.prototype.high = 0;
    
            /**
             * Creates a new MessageRange instance using the specified properties.
             * @function create
             * @memberof CMsgGCMsgSetOptions.MessageRange
             * @static
             * @param {CMsgGCMsgSetOptions.IMessageRange=} [properties] Properties to set
             * @returns {CMsgGCMsgSetOptions.MessageRange} MessageRange instance
             */
            MessageRange.create = function create(properties) {
                return new MessageRange(properties);
            };
    
            /**
             * Encodes the specified MessageRange message. Does not implicitly {@link CMsgGCMsgSetOptions.MessageRange.verify|verify} messages.
             * @function encode
             * @memberof CMsgGCMsgSetOptions.MessageRange
             * @static
             * @param {CMsgGCMsgSetOptions.IMessageRange} message MessageRange message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MessageRange.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.low);
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.high);
                return writer;
            };
    
            /**
             * Encodes the specified MessageRange message, length delimited. Does not implicitly {@link CMsgGCMsgSetOptions.MessageRange.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgGCMsgSetOptions.MessageRange
             * @static
             * @param {CMsgGCMsgSetOptions.IMessageRange} message MessageRange message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MessageRange.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a MessageRange message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgGCMsgSetOptions.MessageRange
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgGCMsgSetOptions.MessageRange} MessageRange
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MessageRange.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCMsgSetOptions.MessageRange();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.low = reader.uint32();
                        break;
                    case 2:
                        message.high = reader.uint32();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                if (!message.hasOwnProperty("low"))
                    throw $util.ProtocolError("missing required 'low'", { instance: message });
                if (!message.hasOwnProperty("high"))
                    throw $util.ProtocolError("missing required 'high'", { instance: message });
                return message;
            };
    
            /**
             * Decodes a MessageRange message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgGCMsgSetOptions.MessageRange
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgGCMsgSetOptions.MessageRange} MessageRange
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MessageRange.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a MessageRange message.
             * @function verify
             * @memberof CMsgGCMsgSetOptions.MessageRange
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            MessageRange.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (!$util.isInteger(message.low))
                    return "low: integer expected";
                if (!$util.isInteger(message.high))
                    return "high: integer expected";
                return null;
            };
    
            /**
             * Creates a MessageRange message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgGCMsgSetOptions.MessageRange
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgGCMsgSetOptions.MessageRange} MessageRange
             */
            MessageRange.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgGCMsgSetOptions.MessageRange)
                    return object;
                var message = new $root.CMsgGCMsgSetOptions.MessageRange();
                if (object.low != null)
                    message.low = object.low >>> 0;
                if (object.high != null)
                    message.high = object.high >>> 0;
                return message;
            };
    
            /**
             * Creates a plain object from a MessageRange message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgGCMsgSetOptions.MessageRange
             * @static
             * @param {CMsgGCMsgSetOptions.MessageRange} message MessageRange
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            MessageRange.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.low = 0;
                    object.high = 0;
                }
                if (message.low != null && message.hasOwnProperty("low"))
                    object.low = message.low;
                if (message.high != null && message.hasOwnProperty("high"))
                    object.high = message.high;
                return object;
            };
    
            /**
             * Converts this MessageRange to JSON.
             * @function toJSON
             * @memberof CMsgGCMsgSetOptions.MessageRange
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            MessageRange.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return MessageRange;
        })();
    
        /**
         * Option enum.
         * @name CMsgGCMsgSetOptions.Option
         * @enum {string}
         * @property {number} NOTIFY_USER_SESSIONS=0 NOTIFY_USER_SESSIONS value
         * @property {number} NOTIFY_SERVER_SESSIONS=1 NOTIFY_SERVER_SESSIONS value
         * @property {number} NOTIFY_ACHIEVEMENTS=2 NOTIFY_ACHIEVEMENTS value
         * @property {number} NOTIFY_VAC_ACTION=3 NOTIFY_VAC_ACTION value
         */
        CMsgGCMsgSetOptions.Option = (function() {
            var valuesById = {}, values = Object.create(valuesById);
            values[valuesById[0] = "NOTIFY_USER_SESSIONS"] = 0;
            values[valuesById[1] = "NOTIFY_SERVER_SESSIONS"] = 1;
            values[valuesById[2] = "NOTIFY_ACHIEVEMENTS"] = 2;
            values[valuesById[3] = "NOTIFY_VAC_ACTION"] = 3;
            return values;
        })();
    
        /**
         * GCSQLVersion enum.
         * @name CMsgGCMsgSetOptions.GCSQLVersion
         * @enum {string}
         * @property {number} GCSQL_VERSION_BASELINE=1 GCSQL_VERSION_BASELINE value
         * @property {number} GCSQL_VERSION_BOOLTYPE=2 GCSQL_VERSION_BOOLTYPE value
         */
        CMsgGCMsgSetOptions.GCSQLVersion = (function() {
            var valuesById = {}, values = Object.create(valuesById);
            values[valuesById[1] = "GCSQL_VERSION_BASELINE"] = 1;
            values[valuesById[2] = "GCSQL_VERSION_BOOLTYPE"] = 2;
            return values;
        })();
    
        return CMsgGCMsgSetOptions;
    })();
    
    $root.CMsgGCHUpdateSession = (function() {
    
        /**
         * Properties of a CMsgGCHUpdateSession.
         * @exports ICMsgGCHUpdateSession
         * @interface ICMsgGCHUpdateSession
         * @property {number|Long|null} [steam_id] CMsgGCHUpdateSession steam_id
         * @property {number|null} [app_id] CMsgGCHUpdateSession app_id
         * @property {boolean|null} [online] CMsgGCHUpdateSession online
         * @property {number|Long|null} [server_steam_id] CMsgGCHUpdateSession server_steam_id
         * @property {number|null} [server_addr] CMsgGCHUpdateSession server_addr
         * @property {number|null} [server_port] CMsgGCHUpdateSession server_port
         * @property {number|null} [os_type] CMsgGCHUpdateSession os_type
         * @property {number|null} [client_addr] CMsgGCHUpdateSession client_addr
         * @property {Array.<CMsgGCHUpdateSession.IExtraField>|null} [extra_fields] CMsgGCHUpdateSession extra_fields
         */
    
        /**
         * Constructs a new CMsgGCHUpdateSession.
         * @exports CMsgGCHUpdateSession
         * @classdesc Represents a CMsgGCHUpdateSession.
         * @implements ICMsgGCHUpdateSession
         * @constructor
         * @param {ICMsgGCHUpdateSession=} [properties] Properties to set
         */
        function CMsgGCHUpdateSession(properties) {
            this.extra_fields = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgGCHUpdateSession steam_id.
         * @member {number|Long} steam_id
         * @memberof CMsgGCHUpdateSession
         * @instance
         */
        CMsgGCHUpdateSession.prototype.steam_id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCHUpdateSession app_id.
         * @member {number} app_id
         * @memberof CMsgGCHUpdateSession
         * @instance
         */
        CMsgGCHUpdateSession.prototype.app_id = 0;
    
        /**
         * CMsgGCHUpdateSession online.
         * @member {boolean} online
         * @memberof CMsgGCHUpdateSession
         * @instance
         */
        CMsgGCHUpdateSession.prototype.online = false;
    
        /**
         * CMsgGCHUpdateSession server_steam_id.
         * @member {number|Long} server_steam_id
         * @memberof CMsgGCHUpdateSession
         * @instance
         */
        CMsgGCHUpdateSession.prototype.server_steam_id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgGCHUpdateSession server_addr.
         * @member {number} server_addr
         * @memberof CMsgGCHUpdateSession
         * @instance
         */
        CMsgGCHUpdateSession.prototype.server_addr = 0;
    
        /**
         * CMsgGCHUpdateSession server_port.
         * @member {number} server_port
         * @memberof CMsgGCHUpdateSession
         * @instance
         */
        CMsgGCHUpdateSession.prototype.server_port = 0;
    
        /**
         * CMsgGCHUpdateSession os_type.
         * @member {number} os_type
         * @memberof CMsgGCHUpdateSession
         * @instance
         */
        CMsgGCHUpdateSession.prototype.os_type = 0;
    
        /**
         * CMsgGCHUpdateSession client_addr.
         * @member {number} client_addr
         * @memberof CMsgGCHUpdateSession
         * @instance
         */
        CMsgGCHUpdateSession.prototype.client_addr = 0;
    
        /**
         * CMsgGCHUpdateSession extra_fields.
         * @member {Array.<CMsgGCHUpdateSession.IExtraField>} extra_fields
         * @memberof CMsgGCHUpdateSession
         * @instance
         */
        CMsgGCHUpdateSession.prototype.extra_fields = $util.emptyArray;
    
        /**
         * Creates a new CMsgGCHUpdateSession instance using the specified properties.
         * @function create
         * @memberof CMsgGCHUpdateSession
         * @static
         * @param {ICMsgGCHUpdateSession=} [properties] Properties to set
         * @returns {CMsgGCHUpdateSession} CMsgGCHUpdateSession instance
         */
        CMsgGCHUpdateSession.create = function create(properties) {
            return new CMsgGCHUpdateSession(properties);
        };
    
        /**
         * Encodes the specified CMsgGCHUpdateSession message. Does not implicitly {@link CMsgGCHUpdateSession.verify|verify} messages.
         * @function encode
         * @memberof CMsgGCHUpdateSession
         * @static
         * @param {ICMsgGCHUpdateSession} message CMsgGCHUpdateSession message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHUpdateSession.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steam_id);
            if (message.app_id != null && message.hasOwnProperty("app_id"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.app_id);
            if (message.online != null && message.hasOwnProperty("online"))
                writer.uint32(/* id 3, wireType 0 =*/24).bool(message.online);
            if (message.server_steam_id != null && message.hasOwnProperty("server_steam_id"))
                writer.uint32(/* id 4, wireType 1 =*/33).fixed64(message.server_steam_id);
            if (message.server_addr != null && message.hasOwnProperty("server_addr"))
                writer.uint32(/* id 5, wireType 0 =*/40).uint32(message.server_addr);
            if (message.server_port != null && message.hasOwnProperty("server_port"))
                writer.uint32(/* id 6, wireType 0 =*/48).uint32(message.server_port);
            if (message.os_type != null && message.hasOwnProperty("os_type"))
                writer.uint32(/* id 7, wireType 0 =*/56).uint32(message.os_type);
            if (message.client_addr != null && message.hasOwnProperty("client_addr"))
                writer.uint32(/* id 8, wireType 0 =*/64).uint32(message.client_addr);
            if (message.extra_fields != null && message.extra_fields.length)
                for (var i = 0; i < message.extra_fields.length; ++i)
                    $root.CMsgGCHUpdateSession.ExtraField.encode(message.extra_fields[i], writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CMsgGCHUpdateSession message, length delimited. Does not implicitly {@link CMsgGCHUpdateSession.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgGCHUpdateSession
         * @static
         * @param {ICMsgGCHUpdateSession} message CMsgGCHUpdateSession message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgGCHUpdateSession.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgGCHUpdateSession message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgGCHUpdateSession
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgGCHUpdateSession} CMsgGCHUpdateSession
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHUpdateSession.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCHUpdateSession();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steam_id = reader.fixed64();
                    break;
                case 2:
                    message.app_id = reader.uint32();
                    break;
                case 3:
                    message.online = reader.bool();
                    break;
                case 4:
                    message.server_steam_id = reader.fixed64();
                    break;
                case 5:
                    message.server_addr = reader.uint32();
                    break;
                case 6:
                    message.server_port = reader.uint32();
                    break;
                case 7:
                    message.os_type = reader.uint32();
                    break;
                case 8:
                    message.client_addr = reader.uint32();
                    break;
                case 9:
                    if (!(message.extra_fields && message.extra_fields.length))
                        message.extra_fields = [];
                    message.extra_fields.push($root.CMsgGCHUpdateSession.ExtraField.decode(reader, reader.uint32()));
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgGCHUpdateSession message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgGCHUpdateSession
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgGCHUpdateSession} CMsgGCHUpdateSession
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgGCHUpdateSession.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgGCHUpdateSession message.
         * @function verify
         * @memberof CMsgGCHUpdateSession
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgGCHUpdateSession.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                if (!$util.isInteger(message.steam_id) && !(message.steam_id && $util.isInteger(message.steam_id.low) && $util.isInteger(message.steam_id.high)))
                    return "steam_id: integer|Long expected";
            if (message.app_id != null && message.hasOwnProperty("app_id"))
                if (!$util.isInteger(message.app_id))
                    return "app_id: integer expected";
            if (message.online != null && message.hasOwnProperty("online"))
                if (typeof message.online !== "boolean")
                    return "online: boolean expected";
            if (message.server_steam_id != null && message.hasOwnProperty("server_steam_id"))
                if (!$util.isInteger(message.server_steam_id) && !(message.server_steam_id && $util.isInteger(message.server_steam_id.low) && $util.isInteger(message.server_steam_id.high)))
                    return "server_steam_id: integer|Long expected";
            if (message.server_addr != null && message.hasOwnProperty("server_addr"))
                if (!$util.isInteger(message.server_addr))
                    return "server_addr: integer expected";
            if (message.server_port != null && message.hasOwnProperty("server_port"))
                if (!$util.isInteger(message.server_port))
                    return "server_port: integer expected";
            if (message.os_type != null && message.hasOwnProperty("os_type"))
                if (!$util.isInteger(message.os_type))
                    return "os_type: integer expected";
            if (message.client_addr != null && message.hasOwnProperty("client_addr"))
                if (!$util.isInteger(message.client_addr))
                    return "client_addr: integer expected";
            if (message.extra_fields != null && message.hasOwnProperty("extra_fields")) {
                if (!Array.isArray(message.extra_fields))
                    return "extra_fields: array expected";
                for (var i = 0; i < message.extra_fields.length; ++i) {
                    var error = $root.CMsgGCHUpdateSession.ExtraField.verify(message.extra_fields[i]);
                    if (error)
                        return "extra_fields." + error;
                }
            }
            return null;
        };
    
        /**
         * Creates a CMsgGCHUpdateSession message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgGCHUpdateSession
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgGCHUpdateSession} CMsgGCHUpdateSession
         */
        CMsgGCHUpdateSession.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgGCHUpdateSession)
                return object;
            var message = new $root.CMsgGCHUpdateSession();
            if (object.steam_id != null)
                if ($util.Long)
                    (message.steam_id = $util.Long.fromValue(object.steam_id)).unsigned = false;
                else if (typeof object.steam_id === "string")
                    message.steam_id = parseInt(object.steam_id, 10);
                else if (typeof object.steam_id === "number")
                    message.steam_id = object.steam_id;
                else if (typeof object.steam_id === "object")
                    message.steam_id = new $util.LongBits(object.steam_id.low >>> 0, object.steam_id.high >>> 0).toNumber();
            if (object.app_id != null)
                message.app_id = object.app_id >>> 0;
            if (object.online != null)
                message.online = Boolean(object.online);
            if (object.server_steam_id != null)
                if ($util.Long)
                    (message.server_steam_id = $util.Long.fromValue(object.server_steam_id)).unsigned = false;
                else if (typeof object.server_steam_id === "string")
                    message.server_steam_id = parseInt(object.server_steam_id, 10);
                else if (typeof object.server_steam_id === "number")
                    message.server_steam_id = object.server_steam_id;
                else if (typeof object.server_steam_id === "object")
                    message.server_steam_id = new $util.LongBits(object.server_steam_id.low >>> 0, object.server_steam_id.high >>> 0).toNumber();
            if (object.server_addr != null)
                message.server_addr = object.server_addr >>> 0;
            if (object.server_port != null)
                message.server_port = object.server_port >>> 0;
            if (object.os_type != null)
                message.os_type = object.os_type >>> 0;
            if (object.client_addr != null)
                message.client_addr = object.client_addr >>> 0;
            if (object.extra_fields) {
                if (!Array.isArray(object.extra_fields))
                    throw TypeError(".CMsgGCHUpdateSession.extra_fields: array expected");
                message.extra_fields = [];
                for (var i = 0; i < object.extra_fields.length; ++i) {
                    if (typeof object.extra_fields[i] !== "object")
                        throw TypeError(".CMsgGCHUpdateSession.extra_fields: object expected");
                    message.extra_fields[i] = $root.CMsgGCHUpdateSession.ExtraField.fromObject(object.extra_fields[i]);
                }
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgGCHUpdateSession message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgGCHUpdateSession
         * @static
         * @param {CMsgGCHUpdateSession} message CMsgGCHUpdateSession
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgGCHUpdateSession.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.extra_fields = [];
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steam_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steam_id = options.longs === String ? "0" : 0;
                object.app_id = 0;
                object.online = false;
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.server_steam_id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.server_steam_id = options.longs === String ? "0" : 0;
                object.server_addr = 0;
                object.server_port = 0;
                object.os_type = 0;
                object.client_addr = 0;
            }
            if (message.steam_id != null && message.hasOwnProperty("steam_id"))
                if (typeof message.steam_id === "number")
                    object.steam_id = options.longs === String ? String(message.steam_id) : message.steam_id;
                else
                    object.steam_id = options.longs === String ? $util.Long.prototype.toString.call(message.steam_id) : options.longs === Number ? new $util.LongBits(message.steam_id.low >>> 0, message.steam_id.high >>> 0).toNumber() : message.steam_id;
            if (message.app_id != null && message.hasOwnProperty("app_id"))
                object.app_id = message.app_id;
            if (message.online != null && message.hasOwnProperty("online"))
                object.online = message.online;
            if (message.server_steam_id != null && message.hasOwnProperty("server_steam_id"))
                if (typeof message.server_steam_id === "number")
                    object.server_steam_id = options.longs === String ? String(message.server_steam_id) : message.server_steam_id;
                else
                    object.server_steam_id = options.longs === String ? $util.Long.prototype.toString.call(message.server_steam_id) : options.longs === Number ? new $util.LongBits(message.server_steam_id.low >>> 0, message.server_steam_id.high >>> 0).toNumber() : message.server_steam_id;
            if (message.server_addr != null && message.hasOwnProperty("server_addr"))
                object.server_addr = message.server_addr;
            if (message.server_port != null && message.hasOwnProperty("server_port"))
                object.server_port = message.server_port;
            if (message.os_type != null && message.hasOwnProperty("os_type"))
                object.os_type = message.os_type;
            if (message.client_addr != null && message.hasOwnProperty("client_addr"))
                object.client_addr = message.client_addr;
            if (message.extra_fields && message.extra_fields.length) {
                object.extra_fields = [];
                for (var j = 0; j < message.extra_fields.length; ++j)
                    object.extra_fields[j] = $root.CMsgGCHUpdateSession.ExtraField.toObject(message.extra_fields[j], options);
            }
            return object;
        };
    
        /**
         * Converts this CMsgGCHUpdateSession to JSON.
         * @function toJSON
         * @memberof CMsgGCHUpdateSession
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgGCHUpdateSession.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgGCHUpdateSession.ExtraField = (function() {
    
            /**
             * Properties of an ExtraField.
             * @memberof CMsgGCHUpdateSession
             * @interface IExtraField
             * @property {string|null} [name] ExtraField name
             * @property {string|null} [value] ExtraField value
             */
    
            /**
             * Constructs a new ExtraField.
             * @memberof CMsgGCHUpdateSession
             * @classdesc Represents an ExtraField.
             * @implements IExtraField
             * @constructor
             * @param {CMsgGCHUpdateSession.IExtraField=} [properties] Properties to set
             */
            function ExtraField(properties) {
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * ExtraField name.
             * @member {string} name
             * @memberof CMsgGCHUpdateSession.ExtraField
             * @instance
             */
            ExtraField.prototype.name = "";
    
            /**
             * ExtraField value.
             * @member {string} value
             * @memberof CMsgGCHUpdateSession.ExtraField
             * @instance
             */
            ExtraField.prototype.value = "";
    
            /**
             * Creates a new ExtraField instance using the specified properties.
             * @function create
             * @memberof CMsgGCHUpdateSession.ExtraField
             * @static
             * @param {CMsgGCHUpdateSession.IExtraField=} [properties] Properties to set
             * @returns {CMsgGCHUpdateSession.ExtraField} ExtraField instance
             */
            ExtraField.create = function create(properties) {
                return new ExtraField(properties);
            };
    
            /**
             * Encodes the specified ExtraField message. Does not implicitly {@link CMsgGCHUpdateSession.ExtraField.verify|verify} messages.
             * @function encode
             * @memberof CMsgGCHUpdateSession.ExtraField
             * @static
             * @param {CMsgGCHUpdateSession.IExtraField} message ExtraField message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            ExtraField.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.name != null && message.hasOwnProperty("name"))
                    writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
                if (message.value != null && message.hasOwnProperty("value"))
                    writer.uint32(/* id 2, wireType 2 =*/18).string(message.value);
                return writer;
            };
    
            /**
             * Encodes the specified ExtraField message, length delimited. Does not implicitly {@link CMsgGCHUpdateSession.ExtraField.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgGCHUpdateSession.ExtraField
             * @static
             * @param {CMsgGCHUpdateSession.IExtraField} message ExtraField message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            ExtraField.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes an ExtraField message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgGCHUpdateSession.ExtraField
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgGCHUpdateSession.ExtraField} ExtraField
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            ExtraField.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgGCHUpdateSession.ExtraField();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.name = reader.string();
                        break;
                    case 2:
                        message.value = reader.string();
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes an ExtraField message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgGCHUpdateSession.ExtraField
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgGCHUpdateSession.ExtraField} ExtraField
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            ExtraField.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies an ExtraField message.
             * @function verify
             * @memberof CMsgGCHUpdateSession.ExtraField
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            ExtraField.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.name != null && message.hasOwnProperty("name"))
                    if (!$util.isString(message.name))
                        return "name: string expected";
                if (message.value != null && message.hasOwnProperty("value"))
                    if (!$util.isString(message.value))
                        return "value: string expected";
                return null;
            };
    
            /**
             * Creates an ExtraField message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgGCHUpdateSession.ExtraField
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgGCHUpdateSession.ExtraField} ExtraField
             */
            ExtraField.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgGCHUpdateSession.ExtraField)
                    return object;
                var message = new $root.CMsgGCHUpdateSession.ExtraField();
                if (object.name != null)
                    message.name = String(object.name);
                if (object.value != null)
                    message.value = String(object.value);
                return message;
            };
    
            /**
             * Creates a plain object from an ExtraField message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgGCHUpdateSession.ExtraField
             * @static
             * @param {CMsgGCHUpdateSession.ExtraField} message ExtraField
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            ExtraField.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.defaults) {
                    object.name = "";
                    object.value = "";
                }
                if (message.name != null && message.hasOwnProperty("name"))
                    object.name = message.name;
                if (message.value != null && message.hasOwnProperty("value"))
                    object.value = message.value;
                return object;
            };
    
            /**
             * Converts this ExtraField to JSON.
             * @function toJSON
             * @memberof CMsgGCHUpdateSession.ExtraField
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            ExtraField.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return ExtraField;
        })();
    
        return CMsgGCHUpdateSession;
    })();
    
    $root.CMsgNotificationOfSuspiciousActivity = (function() {
    
        /**
         * Properties of a CMsgNotificationOfSuspiciousActivity.
         * @exports ICMsgNotificationOfSuspiciousActivity
         * @interface ICMsgNotificationOfSuspiciousActivity
         * @property {number|Long|null} [steamid] CMsgNotificationOfSuspiciousActivity steamid
         * @property {number|null} [appid] CMsgNotificationOfSuspiciousActivity appid
         * @property {CMsgNotificationOfSuspiciousActivity.IMultipleGameInstances|null} [multiple_instances] CMsgNotificationOfSuspiciousActivity multiple_instances
         */
    
        /**
         * Constructs a new CMsgNotificationOfSuspiciousActivity.
         * @exports CMsgNotificationOfSuspiciousActivity
         * @classdesc Represents a CMsgNotificationOfSuspiciousActivity.
         * @implements ICMsgNotificationOfSuspiciousActivity
         * @constructor
         * @param {ICMsgNotificationOfSuspiciousActivity=} [properties] Properties to set
         */
        function CMsgNotificationOfSuspiciousActivity(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }
    
        /**
         * CMsgNotificationOfSuspiciousActivity steamid.
         * @member {number|Long} steamid
         * @memberof CMsgNotificationOfSuspiciousActivity
         * @instance
         */
        CMsgNotificationOfSuspiciousActivity.prototype.steamid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
        /**
         * CMsgNotificationOfSuspiciousActivity appid.
         * @member {number} appid
         * @memberof CMsgNotificationOfSuspiciousActivity
         * @instance
         */
        CMsgNotificationOfSuspiciousActivity.prototype.appid = 0;
    
        /**
         * CMsgNotificationOfSuspiciousActivity multiple_instances.
         * @member {CMsgNotificationOfSuspiciousActivity.IMultipleGameInstances|null|undefined} multiple_instances
         * @memberof CMsgNotificationOfSuspiciousActivity
         * @instance
         */
        CMsgNotificationOfSuspiciousActivity.prototype.multiple_instances = null;
    
        /**
         * Creates a new CMsgNotificationOfSuspiciousActivity instance using the specified properties.
         * @function create
         * @memberof CMsgNotificationOfSuspiciousActivity
         * @static
         * @param {ICMsgNotificationOfSuspiciousActivity=} [properties] Properties to set
         * @returns {CMsgNotificationOfSuspiciousActivity} CMsgNotificationOfSuspiciousActivity instance
         */
        CMsgNotificationOfSuspiciousActivity.create = function create(properties) {
            return new CMsgNotificationOfSuspiciousActivity(properties);
        };
    
        /**
         * Encodes the specified CMsgNotificationOfSuspiciousActivity message. Does not implicitly {@link CMsgNotificationOfSuspiciousActivity.verify|verify} messages.
         * @function encode
         * @memberof CMsgNotificationOfSuspiciousActivity
         * @static
         * @param {ICMsgNotificationOfSuspiciousActivity} message CMsgNotificationOfSuspiciousActivity message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgNotificationOfSuspiciousActivity.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                writer.uint32(/* id 1, wireType 1 =*/9).fixed64(message.steamid);
            if (message.appid != null && message.hasOwnProperty("appid"))
                writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.appid);
            if (message.multiple_instances != null && message.hasOwnProperty("multiple_instances"))
                $root.CMsgNotificationOfSuspiciousActivity.MultipleGameInstances.encode(message.multiple_instances, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
            return writer;
        };
    
        /**
         * Encodes the specified CMsgNotificationOfSuspiciousActivity message, length delimited. Does not implicitly {@link CMsgNotificationOfSuspiciousActivity.verify|verify} messages.
         * @function encodeDelimited
         * @memberof CMsgNotificationOfSuspiciousActivity
         * @static
         * @param {ICMsgNotificationOfSuspiciousActivity} message CMsgNotificationOfSuspiciousActivity message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CMsgNotificationOfSuspiciousActivity.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };
    
        /**
         * Decodes a CMsgNotificationOfSuspiciousActivity message from the specified reader or buffer.
         * @function decode
         * @memberof CMsgNotificationOfSuspiciousActivity
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {CMsgNotificationOfSuspiciousActivity} CMsgNotificationOfSuspiciousActivity
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgNotificationOfSuspiciousActivity.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgNotificationOfSuspiciousActivity();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.steamid = reader.fixed64();
                    break;
                case 2:
                    message.appid = reader.uint32();
                    break;
                case 3:
                    message.multiple_instances = $root.CMsgNotificationOfSuspiciousActivity.MultipleGameInstances.decode(reader, reader.uint32());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };
    
        /**
         * Decodes a CMsgNotificationOfSuspiciousActivity message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof CMsgNotificationOfSuspiciousActivity
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {CMsgNotificationOfSuspiciousActivity} CMsgNotificationOfSuspiciousActivity
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CMsgNotificationOfSuspiciousActivity.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };
    
        /**
         * Verifies a CMsgNotificationOfSuspiciousActivity message.
         * @function verify
         * @memberof CMsgNotificationOfSuspiciousActivity
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CMsgNotificationOfSuspiciousActivity.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (!$util.isInteger(message.steamid) && !(message.steamid && $util.isInteger(message.steamid.low) && $util.isInteger(message.steamid.high)))
                    return "steamid: integer|Long expected";
            if (message.appid != null && message.hasOwnProperty("appid"))
                if (!$util.isInteger(message.appid))
                    return "appid: integer expected";
            if (message.multiple_instances != null && message.hasOwnProperty("multiple_instances")) {
                var error = $root.CMsgNotificationOfSuspiciousActivity.MultipleGameInstances.verify(message.multiple_instances);
                if (error)
                    return "multiple_instances." + error;
            }
            return null;
        };
    
        /**
         * Creates a CMsgNotificationOfSuspiciousActivity message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof CMsgNotificationOfSuspiciousActivity
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {CMsgNotificationOfSuspiciousActivity} CMsgNotificationOfSuspiciousActivity
         */
        CMsgNotificationOfSuspiciousActivity.fromObject = function fromObject(object) {
            if (object instanceof $root.CMsgNotificationOfSuspiciousActivity)
                return object;
            var message = new $root.CMsgNotificationOfSuspiciousActivity();
            if (object.steamid != null)
                if ($util.Long)
                    (message.steamid = $util.Long.fromValue(object.steamid)).unsigned = false;
                else if (typeof object.steamid === "string")
                    message.steamid = parseInt(object.steamid, 10);
                else if (typeof object.steamid === "number")
                    message.steamid = object.steamid;
                else if (typeof object.steamid === "object")
                    message.steamid = new $util.LongBits(object.steamid.low >>> 0, object.steamid.high >>> 0).toNumber();
            if (object.appid != null)
                message.appid = object.appid >>> 0;
            if (object.multiple_instances != null) {
                if (typeof object.multiple_instances !== "object")
                    throw TypeError(".CMsgNotificationOfSuspiciousActivity.multiple_instances: object expected");
                message.multiple_instances = $root.CMsgNotificationOfSuspiciousActivity.MultipleGameInstances.fromObject(object.multiple_instances);
            }
            return message;
        };
    
        /**
         * Creates a plain object from a CMsgNotificationOfSuspiciousActivity message. Also converts values to other types if specified.
         * @function toObject
         * @memberof CMsgNotificationOfSuspiciousActivity
         * @static
         * @param {CMsgNotificationOfSuspiciousActivity} message CMsgNotificationOfSuspiciousActivity
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CMsgNotificationOfSuspiciousActivity.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                if ($util.Long) {
                    var long = new $util.Long(0, 0, false);
                    object.steamid = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                } else
                    object.steamid = options.longs === String ? "0" : 0;
                object.appid = 0;
                object.multiple_instances = null;
            }
            if (message.steamid != null && message.hasOwnProperty("steamid"))
                if (typeof message.steamid === "number")
                    object.steamid = options.longs === String ? String(message.steamid) : message.steamid;
                else
                    object.steamid = options.longs === String ? $util.Long.prototype.toString.call(message.steamid) : options.longs === Number ? new $util.LongBits(message.steamid.low >>> 0, message.steamid.high >>> 0).toNumber() : message.steamid;
            if (message.appid != null && message.hasOwnProperty("appid"))
                object.appid = message.appid;
            if (message.multiple_instances != null && message.hasOwnProperty("multiple_instances"))
                object.multiple_instances = $root.CMsgNotificationOfSuspiciousActivity.MultipleGameInstances.toObject(message.multiple_instances, options);
            return object;
        };
    
        /**
         * Converts this CMsgNotificationOfSuspiciousActivity to JSON.
         * @function toJSON
         * @memberof CMsgNotificationOfSuspiciousActivity
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CMsgNotificationOfSuspiciousActivity.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };
    
        CMsgNotificationOfSuspiciousActivity.MultipleGameInstances = (function() {
    
            /**
             * Properties of a MultipleGameInstances.
             * @memberof CMsgNotificationOfSuspiciousActivity
             * @interface IMultipleGameInstances
             * @property {number|null} [app_instance_count] MultipleGameInstances app_instance_count
             * @property {Array.<number|Long>|null} [other_steamids] MultipleGameInstances other_steamids
             */
    
            /**
             * Constructs a new MultipleGameInstances.
             * @memberof CMsgNotificationOfSuspiciousActivity
             * @classdesc Represents a MultipleGameInstances.
             * @implements IMultipleGameInstances
             * @constructor
             * @param {CMsgNotificationOfSuspiciousActivity.IMultipleGameInstances=} [properties] Properties to set
             */
            function MultipleGameInstances(properties) {
                this.other_steamids = [];
                if (properties)
                    for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                        if (properties[keys[i]] != null)
                            this[keys[i]] = properties[keys[i]];
            }
    
            /**
             * MultipleGameInstances app_instance_count.
             * @member {number} app_instance_count
             * @memberof CMsgNotificationOfSuspiciousActivity.MultipleGameInstances
             * @instance
             */
            MultipleGameInstances.prototype.app_instance_count = 0;
    
            /**
             * MultipleGameInstances other_steamids.
             * @member {Array.<number|Long>} other_steamids
             * @memberof CMsgNotificationOfSuspiciousActivity.MultipleGameInstances
             * @instance
             */
            MultipleGameInstances.prototype.other_steamids = $util.emptyArray;
    
            /**
             * Creates a new MultipleGameInstances instance using the specified properties.
             * @function create
             * @memberof CMsgNotificationOfSuspiciousActivity.MultipleGameInstances
             * @static
             * @param {CMsgNotificationOfSuspiciousActivity.IMultipleGameInstances=} [properties] Properties to set
             * @returns {CMsgNotificationOfSuspiciousActivity.MultipleGameInstances} MultipleGameInstances instance
             */
            MultipleGameInstances.create = function create(properties) {
                return new MultipleGameInstances(properties);
            };
    
            /**
             * Encodes the specified MultipleGameInstances message. Does not implicitly {@link CMsgNotificationOfSuspiciousActivity.MultipleGameInstances.verify|verify} messages.
             * @function encode
             * @memberof CMsgNotificationOfSuspiciousActivity.MultipleGameInstances
             * @static
             * @param {CMsgNotificationOfSuspiciousActivity.IMultipleGameInstances} message MultipleGameInstances message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MultipleGameInstances.encode = function encode(message, writer) {
                if (!writer)
                    writer = $Writer.create();
                if (message.app_instance_count != null && message.hasOwnProperty("app_instance_count"))
                    writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.app_instance_count);
                if (message.other_steamids != null && message.other_steamids.length)
                    for (var i = 0; i < message.other_steamids.length; ++i)
                        writer.uint32(/* id 2, wireType 1 =*/17).fixed64(message.other_steamids[i]);
                return writer;
            };
    
            /**
             * Encodes the specified MultipleGameInstances message, length delimited. Does not implicitly {@link CMsgNotificationOfSuspiciousActivity.MultipleGameInstances.verify|verify} messages.
             * @function encodeDelimited
             * @memberof CMsgNotificationOfSuspiciousActivity.MultipleGameInstances
             * @static
             * @param {CMsgNotificationOfSuspiciousActivity.IMultipleGameInstances} message MultipleGameInstances message or plain object to encode
             * @param {$protobuf.Writer} [writer] Writer to encode to
             * @returns {$protobuf.Writer} Writer
             */
            MultipleGameInstances.encodeDelimited = function encodeDelimited(message, writer) {
                return this.encode(message, writer).ldelim();
            };
    
            /**
             * Decodes a MultipleGameInstances message from the specified reader or buffer.
             * @function decode
             * @memberof CMsgNotificationOfSuspiciousActivity.MultipleGameInstances
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @param {number} [length] Message length if known beforehand
             * @returns {CMsgNotificationOfSuspiciousActivity.MultipleGameInstances} MultipleGameInstances
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MultipleGameInstances.decode = function decode(reader, length) {
                if (!(reader instanceof $Reader))
                    reader = $Reader.create(reader);
                var end = length === undefined ? reader.len : reader.pos + length, message = new $root.CMsgNotificationOfSuspiciousActivity.MultipleGameInstances();
                while (reader.pos < end) {
                    var tag = reader.uint32();
                    switch (tag >>> 3) {
                    case 1:
                        message.app_instance_count = reader.uint32();
                        break;
                    case 2:
                        if (!(message.other_steamids && message.other_steamids.length))
                            message.other_steamids = [];
                        if ((tag & 7) === 2) {
                            var end2 = reader.uint32() + reader.pos;
                            while (reader.pos < end2)
                                message.other_steamids.push(reader.fixed64());
                        } else
                            message.other_steamids.push(reader.fixed64());
                        break;
                    default:
                        reader.skipType(tag & 7);
                        break;
                    }
                }
                return message;
            };
    
            /**
             * Decodes a MultipleGameInstances message from the specified reader or buffer, length delimited.
             * @function decodeDelimited
             * @memberof CMsgNotificationOfSuspiciousActivity.MultipleGameInstances
             * @static
             * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
             * @returns {CMsgNotificationOfSuspiciousActivity.MultipleGameInstances} MultipleGameInstances
             * @throws {Error} If the payload is not a reader or valid buffer
             * @throws {$protobuf.util.ProtocolError} If required fields are missing
             */
            MultipleGameInstances.decodeDelimited = function decodeDelimited(reader) {
                if (!(reader instanceof $Reader))
                    reader = new $Reader(reader);
                return this.decode(reader, reader.uint32());
            };
    
            /**
             * Verifies a MultipleGameInstances message.
             * @function verify
             * @memberof CMsgNotificationOfSuspiciousActivity.MultipleGameInstances
             * @static
             * @param {Object.<string,*>} message Plain object to verify
             * @returns {string|null} `null` if valid, otherwise the reason why it is not
             */
            MultipleGameInstances.verify = function verify(message) {
                if (typeof message !== "object" || message === null)
                    return "object expected";
                if (message.app_instance_count != null && message.hasOwnProperty("app_instance_count"))
                    if (!$util.isInteger(message.app_instance_count))
                        return "app_instance_count: integer expected";
                if (message.other_steamids != null && message.hasOwnProperty("other_steamids")) {
                    if (!Array.isArray(message.other_steamids))
                        return "other_steamids: array expected";
                    for (var i = 0; i < message.other_steamids.length; ++i)
                        if (!$util.isInteger(message.other_steamids[i]) && !(message.other_steamids[i] && $util.isInteger(message.other_steamids[i].low) && $util.isInteger(message.other_steamids[i].high)))
                            return "other_steamids: integer|Long[] expected";
                }
                return null;
            };
    
            /**
             * Creates a MultipleGameInstances message from a plain object. Also converts values to their respective internal types.
             * @function fromObject
             * @memberof CMsgNotificationOfSuspiciousActivity.MultipleGameInstances
             * @static
             * @param {Object.<string,*>} object Plain object
             * @returns {CMsgNotificationOfSuspiciousActivity.MultipleGameInstances} MultipleGameInstances
             */
            MultipleGameInstances.fromObject = function fromObject(object) {
                if (object instanceof $root.CMsgNotificationOfSuspiciousActivity.MultipleGameInstances)
                    return object;
                var message = new $root.CMsgNotificationOfSuspiciousActivity.MultipleGameInstances();
                if (object.app_instance_count != null)
                    message.app_instance_count = object.app_instance_count >>> 0;
                if (object.other_steamids) {
                    if (!Array.isArray(object.other_steamids))
                        throw TypeError(".CMsgNotificationOfSuspiciousActivity.MultipleGameInstances.other_steamids: array expected");
                    message.other_steamids = [];
                    for (var i = 0; i < object.other_steamids.length; ++i)
                        if ($util.Long)
                            (message.other_steamids[i] = $util.Long.fromValue(object.other_steamids[i])).unsigned = false;
                        else if (typeof object.other_steamids[i] === "string")
                            message.other_steamids[i] = parseInt(object.other_steamids[i], 10);
                        else if (typeof object.other_steamids[i] === "number")
                            message.other_steamids[i] = object.other_steamids[i];
                        else if (typeof object.other_steamids[i] === "object")
                            message.other_steamids[i] = new $util.LongBits(object.other_steamids[i].low >>> 0, object.other_steamids[i].high >>> 0).toNumber();
                }
                return message;
            };
    
            /**
             * Creates a plain object from a MultipleGameInstances message. Also converts values to other types if specified.
             * @function toObject
             * @memberof CMsgNotificationOfSuspiciousActivity.MultipleGameInstances
             * @static
             * @param {CMsgNotificationOfSuspiciousActivity.MultipleGameInstances} message MultipleGameInstances
             * @param {$protobuf.IConversionOptions} [options] Conversion options
             * @returns {Object.<string,*>} Plain object
             */
            MultipleGameInstances.toObject = function toObject(message, options) {
                if (!options)
                    options = {};
                var object = {};
                if (options.arrays || options.defaults)
                    object.other_steamids = [];
                if (options.defaults)
                    object.app_instance_count = 0;
                if (message.app_instance_count != null && message.hasOwnProperty("app_instance_count"))
                    object.app_instance_count = message.app_instance_count;
                if (message.other_steamids && message.other_steamids.length) {
                    object.other_steamids = [];
                    for (var j = 0; j < message.other_steamids.length; ++j)
                        if (typeof message.other_steamids[j] === "number")
                            object.other_steamids[j] = options.longs === String ? String(message.other_steamids[j]) : message.other_steamids[j];
                        else
                            object.other_steamids[j] = options.longs === String ? $util.Long.prototype.toString.call(message.other_steamids[j]) : options.longs === Number ? new $util.LongBits(message.other_steamids[j].low >>> 0, message.other_steamids[j].high >>> 0).toNumber() : message.other_steamids[j];
                }
                return object;
            };
    
            /**
             * Converts this MultipleGameInstances to JSON.
             * @function toJSON
             * @memberof CMsgNotificationOfSuspiciousActivity.MultipleGameInstances
             * @instance
             * @returns {Object.<string,*>} JSON object
             */
            MultipleGameInstances.prototype.toJSON = function toJSON() {
                return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
            };
    
            return MultipleGameInstances;
        })();
    
        return CMsgNotificationOfSuspiciousActivity;
    })();
    
    $root.google = (function() {
    
        /**
         * Namespace google.
         * @exports google
         * @namespace
         */
        var google = {};
    
        google.protobuf = (function() {
    
            /**
             * Namespace protobuf.
             * @memberof google
             * @namespace
             */
            var protobuf = {};
    
            protobuf.FileDescriptorSet = (function() {
    
                /**
                 * Properties of a FileDescriptorSet.
                 * @memberof google.protobuf
                 * @interface IFileDescriptorSet
                 * @property {Array.<google.protobuf.IFileDescriptorProto>|null} [file] FileDescriptorSet file
                 */
    
                /**
                 * Constructs a new FileDescriptorSet.
                 * @memberof google.protobuf
                 * @classdesc Represents a FileDescriptorSet.
                 * @implements IFileDescriptorSet
                 * @constructor
                 * @param {google.protobuf.IFileDescriptorSet=} [properties] Properties to set
                 */
                function FileDescriptorSet(properties) {
                    this.file = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * FileDescriptorSet file.
                 * @member {Array.<google.protobuf.IFileDescriptorProto>} file
                 * @memberof google.protobuf.FileDescriptorSet
                 * @instance
                 */
                FileDescriptorSet.prototype.file = $util.emptyArray;
    
                /**
                 * Creates a new FileDescriptorSet instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.FileDescriptorSet
                 * @static
                 * @param {google.protobuf.IFileDescriptorSet=} [properties] Properties to set
                 * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet instance
                 */
                FileDescriptorSet.create = function create(properties) {
                    return new FileDescriptorSet(properties);
                };
    
                /**
                 * Encodes the specified FileDescriptorSet message. Does not implicitly {@link google.protobuf.FileDescriptorSet.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.FileDescriptorSet
                 * @static
                 * @param {google.protobuf.IFileDescriptorSet} message FileDescriptorSet message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                FileDescriptorSet.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.file != null && message.file.length)
                        for (var i = 0; i < message.file.length; ++i)
                            $root.google.protobuf.FileDescriptorProto.encode(message.file[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified FileDescriptorSet message, length delimited. Does not implicitly {@link google.protobuf.FileDescriptorSet.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.FileDescriptorSet
                 * @static
                 * @param {google.protobuf.IFileDescriptorSet} message FileDescriptorSet message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                FileDescriptorSet.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes a FileDescriptorSet message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.FileDescriptorSet
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                FileDescriptorSet.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorSet();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 1:
                            if (!(message.file && message.file.length))
                                message.file = [];
                            message.file.push($root.google.protobuf.FileDescriptorProto.decode(reader, reader.uint32()));
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes a FileDescriptorSet message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.FileDescriptorSet
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                FileDescriptorSet.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies a FileDescriptorSet message.
                 * @function verify
                 * @memberof google.protobuf.FileDescriptorSet
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                FileDescriptorSet.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.file != null && message.hasOwnProperty("file")) {
                        if (!Array.isArray(message.file))
                            return "file: array expected";
                        for (var i = 0; i < message.file.length; ++i) {
                            var error = $root.google.protobuf.FileDescriptorProto.verify(message.file[i]);
                            if (error)
                                return "file." + error;
                        }
                    }
                    return null;
                };
    
                /**
                 * Creates a FileDescriptorSet message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.FileDescriptorSet
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.FileDescriptorSet} FileDescriptorSet
                 */
                FileDescriptorSet.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.FileDescriptorSet)
                        return object;
                    var message = new $root.google.protobuf.FileDescriptorSet();
                    if (object.file) {
                        if (!Array.isArray(object.file))
                            throw TypeError(".google.protobuf.FileDescriptorSet.file: array expected");
                        message.file = [];
                        for (var i = 0; i < object.file.length; ++i) {
                            if (typeof object.file[i] !== "object")
                                throw TypeError(".google.protobuf.FileDescriptorSet.file: object expected");
                            message.file[i] = $root.google.protobuf.FileDescriptorProto.fromObject(object.file[i]);
                        }
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from a FileDescriptorSet message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.FileDescriptorSet
                 * @static
                 * @param {google.protobuf.FileDescriptorSet} message FileDescriptorSet
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                FileDescriptorSet.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults)
                        object.file = [];
                    if (message.file && message.file.length) {
                        object.file = [];
                        for (var j = 0; j < message.file.length; ++j)
                            object.file[j] = $root.google.protobuf.FileDescriptorProto.toObject(message.file[j], options);
                    }
                    return object;
                };
    
                /**
                 * Converts this FileDescriptorSet to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.FileDescriptorSet
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                FileDescriptorSet.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                return FileDescriptorSet;
            })();
    
            protobuf.FileDescriptorProto = (function() {
    
                /**
                 * Properties of a FileDescriptorProto.
                 * @memberof google.protobuf
                 * @interface IFileDescriptorProto
                 * @property {string|null} [name] FileDescriptorProto name
                 * @property {string|null} ["package"] FileDescriptorProto package
                 * @property {Array.<string>|null} [dependency] FileDescriptorProto dependency
                 * @property {Array.<google.protobuf.IDescriptorProto>|null} [message_type] FileDescriptorProto message_type
                 * @property {Array.<google.protobuf.IEnumDescriptorProto>|null} [enum_type] FileDescriptorProto enum_type
                 * @property {Array.<google.protobuf.IServiceDescriptorProto>|null} [service] FileDescriptorProto service
                 * @property {Array.<google.protobuf.IFieldDescriptorProto>|null} [extension] FileDescriptorProto extension
                 * @property {google.protobuf.IFileOptions|null} [options] FileDescriptorProto options
                 * @property {google.protobuf.ISourceCodeInfo|null} [source_code_info] FileDescriptorProto source_code_info
                 */
    
                /**
                 * Constructs a new FileDescriptorProto.
                 * @memberof google.protobuf
                 * @classdesc Represents a FileDescriptorProto.
                 * @implements IFileDescriptorProto
                 * @constructor
                 * @param {google.protobuf.IFileDescriptorProto=} [properties] Properties to set
                 */
                function FileDescriptorProto(properties) {
                    this.dependency = [];
                    this.message_type = [];
                    this.enum_type = [];
                    this.service = [];
                    this.extension = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * FileDescriptorProto name.
                 * @member {string} name
                 * @memberof google.protobuf.FileDescriptorProto
                 * @instance
                 */
                FileDescriptorProto.prototype.name = "";
    
                /**
                 * FileDescriptorProto package.
                 * @member {string} package
                 * @memberof google.protobuf.FileDescriptorProto
                 * @instance
                 */
                FileDescriptorProto.prototype["package"] = "";
    
                /**
                 * FileDescriptorProto dependency.
                 * @member {Array.<string>} dependency
                 * @memberof google.protobuf.FileDescriptorProto
                 * @instance
                 */
                FileDescriptorProto.prototype.dependency = $util.emptyArray;
    
                /**
                 * FileDescriptorProto message_type.
                 * @member {Array.<google.protobuf.IDescriptorProto>} message_type
                 * @memberof google.protobuf.FileDescriptorProto
                 * @instance
                 */
                FileDescriptorProto.prototype.message_type = $util.emptyArray;
    
                /**
                 * FileDescriptorProto enum_type.
                 * @member {Array.<google.protobuf.IEnumDescriptorProto>} enum_type
                 * @memberof google.protobuf.FileDescriptorProto
                 * @instance
                 */
                FileDescriptorProto.prototype.enum_type = $util.emptyArray;
    
                /**
                 * FileDescriptorProto service.
                 * @member {Array.<google.protobuf.IServiceDescriptorProto>} service
                 * @memberof google.protobuf.FileDescriptorProto
                 * @instance
                 */
                FileDescriptorProto.prototype.service = $util.emptyArray;
    
                /**
                 * FileDescriptorProto extension.
                 * @member {Array.<google.protobuf.IFieldDescriptorProto>} extension
                 * @memberof google.protobuf.FileDescriptorProto
                 * @instance
                 */
                FileDescriptorProto.prototype.extension = $util.emptyArray;
    
                /**
                 * FileDescriptorProto options.
                 * @member {google.protobuf.IFileOptions|null|undefined} options
                 * @memberof google.protobuf.FileDescriptorProto
                 * @instance
                 */
                FileDescriptorProto.prototype.options = null;
    
                /**
                 * FileDescriptorProto source_code_info.
                 * @member {google.protobuf.ISourceCodeInfo|null|undefined} source_code_info
                 * @memberof google.protobuf.FileDescriptorProto
                 * @instance
                 */
                FileDescriptorProto.prototype.source_code_info = null;
    
                /**
                 * Creates a new FileDescriptorProto instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.FileDescriptorProto
                 * @static
                 * @param {google.protobuf.IFileDescriptorProto=} [properties] Properties to set
                 * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto instance
                 */
                FileDescriptorProto.create = function create(properties) {
                    return new FileDescriptorProto(properties);
                };
    
                /**
                 * Encodes the specified FileDescriptorProto message. Does not implicitly {@link google.protobuf.FileDescriptorProto.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.FileDescriptorProto
                 * @static
                 * @param {google.protobuf.IFileDescriptorProto} message FileDescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                FileDescriptorProto.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.name != null && message.hasOwnProperty("name"))
                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
                    if (message["package"] != null && message.hasOwnProperty("package"))
                        writer.uint32(/* id 2, wireType 2 =*/18).string(message["package"]);
                    if (message.dependency != null && message.dependency.length)
                        for (var i = 0; i < message.dependency.length; ++i)
                            writer.uint32(/* id 3, wireType 2 =*/26).string(message.dependency[i]);
                    if (message.message_type != null && message.message_type.length)
                        for (var i = 0; i < message.message_type.length; ++i)
                            $root.google.protobuf.DescriptorProto.encode(message.message_type[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
                    if (message.enum_type != null && message.enum_type.length)
                        for (var i = 0; i < message.enum_type.length; ++i)
                            $root.google.protobuf.EnumDescriptorProto.encode(message.enum_type[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
                    if (message.service != null && message.service.length)
                        for (var i = 0; i < message.service.length; ++i)
                            $root.google.protobuf.ServiceDescriptorProto.encode(message.service[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
                    if (message.extension != null && message.extension.length)
                        for (var i = 0; i < message.extension.length; ++i)
                            $root.google.protobuf.FieldDescriptorProto.encode(message.extension[i], writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
                    if (message.options != null && message.hasOwnProperty("options"))
                        $root.google.protobuf.FileOptions.encode(message.options, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim();
                    if (message.source_code_info != null && message.hasOwnProperty("source_code_info"))
                        $root.google.protobuf.SourceCodeInfo.encode(message.source_code_info, writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified FileDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.FileDescriptorProto.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.FileDescriptorProto
                 * @static
                 * @param {google.protobuf.IFileDescriptorProto} message FileDescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                FileDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes a FileDescriptorProto message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.FileDescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                FileDescriptorProto.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileDescriptorProto();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 1:
                            message.name = reader.string();
                            break;
                        case 2:
                            message["package"] = reader.string();
                            break;
                        case 3:
                            if (!(message.dependency && message.dependency.length))
                                message.dependency = [];
                            message.dependency.push(reader.string());
                            break;
                        case 4:
                            if (!(message.message_type && message.message_type.length))
                                message.message_type = [];
                            message.message_type.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32()));
                            break;
                        case 5:
                            if (!(message.enum_type && message.enum_type.length))
                                message.enum_type = [];
                            message.enum_type.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32()));
                            break;
                        case 6:
                            if (!(message.service && message.service.length))
                                message.service = [];
                            message.service.push($root.google.protobuf.ServiceDescriptorProto.decode(reader, reader.uint32()));
                            break;
                        case 7:
                            if (!(message.extension && message.extension.length))
                                message.extension = [];
                            message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
                            break;
                        case 8:
                            message.options = $root.google.protobuf.FileOptions.decode(reader, reader.uint32());
                            break;
                        case 9:
                            message.source_code_info = $root.google.protobuf.SourceCodeInfo.decode(reader, reader.uint32());
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes a FileDescriptorProto message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.FileDescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                FileDescriptorProto.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies a FileDescriptorProto message.
                 * @function verify
                 * @memberof google.protobuf.FileDescriptorProto
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                FileDescriptorProto.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.name != null && message.hasOwnProperty("name"))
                        if (!$util.isString(message.name))
                            return "name: string expected";
                    if (message["package"] != null && message.hasOwnProperty("package"))
                        if (!$util.isString(message["package"]))
                            return "package: string expected";
                    if (message.dependency != null && message.hasOwnProperty("dependency")) {
                        if (!Array.isArray(message.dependency))
                            return "dependency: array expected";
                        for (var i = 0; i < message.dependency.length; ++i)
                            if (!$util.isString(message.dependency[i]))
                                return "dependency: string[] expected";
                    }
                    if (message.message_type != null && message.hasOwnProperty("message_type")) {
                        if (!Array.isArray(message.message_type))
                            return "message_type: array expected";
                        for (var i = 0; i < message.message_type.length; ++i) {
                            var error = $root.google.protobuf.DescriptorProto.verify(message.message_type[i]);
                            if (error)
                                return "message_type." + error;
                        }
                    }
                    if (message.enum_type != null && message.hasOwnProperty("enum_type")) {
                        if (!Array.isArray(message.enum_type))
                            return "enum_type: array expected";
                        for (var i = 0; i < message.enum_type.length; ++i) {
                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enum_type[i]);
                            if (error)
                                return "enum_type." + error;
                        }
                    }
                    if (message.service != null && message.hasOwnProperty("service")) {
                        if (!Array.isArray(message.service))
                            return "service: array expected";
                        for (var i = 0; i < message.service.length; ++i) {
                            var error = $root.google.protobuf.ServiceDescriptorProto.verify(message.service[i]);
                            if (error)
                                return "service." + error;
                        }
                    }
                    if (message.extension != null && message.hasOwnProperty("extension")) {
                        if (!Array.isArray(message.extension))
                            return "extension: array expected";
                        for (var i = 0; i < message.extension.length; ++i) {
                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]);
                            if (error)
                                return "extension." + error;
                        }
                    }
                    if (message.options != null && message.hasOwnProperty("options")) {
                        var error = $root.google.protobuf.FileOptions.verify(message.options);
                        if (error)
                            return "options." + error;
                    }
                    if (message.source_code_info != null && message.hasOwnProperty("source_code_info")) {
                        var error = $root.google.protobuf.SourceCodeInfo.verify(message.source_code_info);
                        if (error)
                            return "source_code_info." + error;
                    }
                    return null;
                };
    
                /**
                 * Creates a FileDescriptorProto message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.FileDescriptorProto
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.FileDescriptorProto} FileDescriptorProto
                 */
                FileDescriptorProto.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.FileDescriptorProto)
                        return object;
                    var message = new $root.google.protobuf.FileDescriptorProto();
                    if (object.name != null)
                        message.name = String(object.name);
                    if (object["package"] != null)
                        message["package"] = String(object["package"]);
                    if (object.dependency) {
                        if (!Array.isArray(object.dependency))
                            throw TypeError(".google.protobuf.FileDescriptorProto.dependency: array expected");
                        message.dependency = [];
                        for (var i = 0; i < object.dependency.length; ++i)
                            message.dependency[i] = String(object.dependency[i]);
                    }
                    if (object.message_type) {
                        if (!Array.isArray(object.message_type))
                            throw TypeError(".google.protobuf.FileDescriptorProto.message_type: array expected");
                        message.message_type = [];
                        for (var i = 0; i < object.message_type.length; ++i) {
                            if (typeof object.message_type[i] !== "object")
                                throw TypeError(".google.protobuf.FileDescriptorProto.message_type: object expected");
                            message.message_type[i] = $root.google.protobuf.DescriptorProto.fromObject(object.message_type[i]);
                        }
                    }
                    if (object.enum_type) {
                        if (!Array.isArray(object.enum_type))
                            throw TypeError(".google.protobuf.FileDescriptorProto.enum_type: array expected");
                        message.enum_type = [];
                        for (var i = 0; i < object.enum_type.length; ++i) {
                            if (typeof object.enum_type[i] !== "object")
                                throw TypeError(".google.protobuf.FileDescriptorProto.enum_type: object expected");
                            message.enum_type[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enum_type[i]);
                        }
                    }
                    if (object.service) {
                        if (!Array.isArray(object.service))
                            throw TypeError(".google.protobuf.FileDescriptorProto.service: array expected");
                        message.service = [];
                        for (var i = 0; i < object.service.length; ++i) {
                            if (typeof object.service[i] !== "object")
                                throw TypeError(".google.protobuf.FileDescriptorProto.service: object expected");
                            message.service[i] = $root.google.protobuf.ServiceDescriptorProto.fromObject(object.service[i]);
                        }
                    }
                    if (object.extension) {
                        if (!Array.isArray(object.extension))
                            throw TypeError(".google.protobuf.FileDescriptorProto.extension: array expected");
                        message.extension = [];
                        for (var i = 0; i < object.extension.length; ++i) {
                            if (typeof object.extension[i] !== "object")
                                throw TypeError(".google.protobuf.FileDescriptorProto.extension: object expected");
                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]);
                        }
                    }
                    if (object.options != null) {
                        if (typeof object.options !== "object")
                            throw TypeError(".google.protobuf.FileDescriptorProto.options: object expected");
                        message.options = $root.google.protobuf.FileOptions.fromObject(object.options);
                    }
                    if (object.source_code_info != null) {
                        if (typeof object.source_code_info !== "object")
                            throw TypeError(".google.protobuf.FileDescriptorProto.source_code_info: object expected");
                        message.source_code_info = $root.google.protobuf.SourceCodeInfo.fromObject(object.source_code_info);
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from a FileDescriptorProto message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.FileDescriptorProto
                 * @static
                 * @param {google.protobuf.FileDescriptorProto} message FileDescriptorProto
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                FileDescriptorProto.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults) {
                        object.dependency = [];
                        object.message_type = [];
                        object.enum_type = [];
                        object.service = [];
                        object.extension = [];
                    }
                    if (options.defaults) {
                        object.name = "";
                        object["package"] = "";
                        object.options = null;
                        object.source_code_info = null;
                    }
                    if (message.name != null && message.hasOwnProperty("name"))
                        object.name = message.name;
                    if (message["package"] != null && message.hasOwnProperty("package"))
                        object["package"] = message["package"];
                    if (message.dependency && message.dependency.length) {
                        object.dependency = [];
                        for (var j = 0; j < message.dependency.length; ++j)
                            object.dependency[j] = message.dependency[j];
                    }
                    if (message.message_type && message.message_type.length) {
                        object.message_type = [];
                        for (var j = 0; j < message.message_type.length; ++j)
                            object.message_type[j] = $root.google.protobuf.DescriptorProto.toObject(message.message_type[j], options);
                    }
                    if (message.enum_type && message.enum_type.length) {
                        object.enum_type = [];
                        for (var j = 0; j < message.enum_type.length; ++j)
                            object.enum_type[j] = $root.google.protobuf.EnumDescriptorProto.toObject(message.enum_type[j], options);
                    }
                    if (message.service && message.service.length) {
                        object.service = [];
                        for (var j = 0; j < message.service.length; ++j)
                            object.service[j] = $root.google.protobuf.ServiceDescriptorProto.toObject(message.service[j], options);
                    }
                    if (message.extension && message.extension.length) {
                        object.extension = [];
                        for (var j = 0; j < message.extension.length; ++j)
                            object.extension[j] = $root.google.protobuf.FieldDescriptorProto.toObject(message.extension[j], options);
                    }
                    if (message.options != null && message.hasOwnProperty("options"))
                        object.options = $root.google.protobuf.FileOptions.toObject(message.options, options);
                    if (message.source_code_info != null && message.hasOwnProperty("source_code_info"))
                        object.source_code_info = $root.google.protobuf.SourceCodeInfo.toObject(message.source_code_info, options);
                    return object;
                };
    
                /**
                 * Converts this FileDescriptorProto to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.FileDescriptorProto
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                FileDescriptorProto.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                return FileDescriptorProto;
            })();
    
            protobuf.DescriptorProto = (function() {
    
                /**
                 * Properties of a DescriptorProto.
                 * @memberof google.protobuf
                 * @interface IDescriptorProto
                 * @property {string|null} [name] DescriptorProto name
                 * @property {Array.<google.protobuf.IFieldDescriptorProto>|null} [field] DescriptorProto field
                 * @property {Array.<google.protobuf.IFieldDescriptorProto>|null} [extension] DescriptorProto extension
                 * @property {Array.<google.protobuf.IDescriptorProto>|null} [nested_type] DescriptorProto nested_type
                 * @property {Array.<google.protobuf.IEnumDescriptorProto>|null} [enum_type] DescriptorProto enum_type
                 * @property {Array.<google.protobuf.DescriptorProto.IExtensionRange>|null} [extension_range] DescriptorProto extension_range
                 * @property {google.protobuf.IMessageOptions|null} [options] DescriptorProto options
                 */
    
                /**
                 * Constructs a new DescriptorProto.
                 * @memberof google.protobuf
                 * @classdesc Represents a DescriptorProto.
                 * @implements IDescriptorProto
                 * @constructor
                 * @param {google.protobuf.IDescriptorProto=} [properties] Properties to set
                 */
                function DescriptorProto(properties) {
                    this.field = [];
                    this.extension = [];
                    this.nested_type = [];
                    this.enum_type = [];
                    this.extension_range = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * DescriptorProto name.
                 * @member {string} name
                 * @memberof google.protobuf.DescriptorProto
                 * @instance
                 */
                DescriptorProto.prototype.name = "";
    
                /**
                 * DescriptorProto field.
                 * @member {Array.<google.protobuf.IFieldDescriptorProto>} field
                 * @memberof google.protobuf.DescriptorProto
                 * @instance
                 */
                DescriptorProto.prototype.field = $util.emptyArray;
    
                /**
                 * DescriptorProto extension.
                 * @member {Array.<google.protobuf.IFieldDescriptorProto>} extension
                 * @memberof google.protobuf.DescriptorProto
                 * @instance
                 */
                DescriptorProto.prototype.extension = $util.emptyArray;
    
                /**
                 * DescriptorProto nested_type.
                 * @member {Array.<google.protobuf.IDescriptorProto>} nested_type
                 * @memberof google.protobuf.DescriptorProto
                 * @instance
                 */
                DescriptorProto.prototype.nested_type = $util.emptyArray;
    
                /**
                 * DescriptorProto enum_type.
                 * @member {Array.<google.protobuf.IEnumDescriptorProto>} enum_type
                 * @memberof google.protobuf.DescriptorProto
                 * @instance
                 */
                DescriptorProto.prototype.enum_type = $util.emptyArray;
    
                /**
                 * DescriptorProto extension_range.
                 * @member {Array.<google.protobuf.DescriptorProto.IExtensionRange>} extension_range
                 * @memberof google.protobuf.DescriptorProto
                 * @instance
                 */
                DescriptorProto.prototype.extension_range = $util.emptyArray;
    
                /**
                 * DescriptorProto options.
                 * @member {google.protobuf.IMessageOptions|null|undefined} options
                 * @memberof google.protobuf.DescriptorProto
                 * @instance
                 */
                DescriptorProto.prototype.options = null;
    
                /**
                 * Creates a new DescriptorProto instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.DescriptorProto
                 * @static
                 * @param {google.protobuf.IDescriptorProto=} [properties] Properties to set
                 * @returns {google.protobuf.DescriptorProto} DescriptorProto instance
                 */
                DescriptorProto.create = function create(properties) {
                    return new DescriptorProto(properties);
                };
    
                /**
                 * Encodes the specified DescriptorProto message. Does not implicitly {@link google.protobuf.DescriptorProto.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.DescriptorProto
                 * @static
                 * @param {google.protobuf.IDescriptorProto} message DescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                DescriptorProto.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.name != null && message.hasOwnProperty("name"))
                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
                    if (message.field != null && message.field.length)
                        for (var i = 0; i < message.field.length; ++i)
                            $root.google.protobuf.FieldDescriptorProto.encode(message.field[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
                    if (message.nested_type != null && message.nested_type.length)
                        for (var i = 0; i < message.nested_type.length; ++i)
                            $root.google.protobuf.DescriptorProto.encode(message.nested_type[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
                    if (message.enum_type != null && message.enum_type.length)
                        for (var i = 0; i < message.enum_type.length; ++i)
                            $root.google.protobuf.EnumDescriptorProto.encode(message.enum_type[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
                    if (message.extension_range != null && message.extension_range.length)
                        for (var i = 0; i < message.extension_range.length; ++i)
                            $root.google.protobuf.DescriptorProto.ExtensionRange.encode(message.extension_range[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
                    if (message.extension != null && message.extension.length)
                        for (var i = 0; i < message.extension.length; ++i)
                            $root.google.protobuf.FieldDescriptorProto.encode(message.extension[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
                    if (message.options != null && message.hasOwnProperty("options"))
                        $root.google.protobuf.MessageOptions.encode(message.options, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified DescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.DescriptorProto
                 * @static
                 * @param {google.protobuf.IDescriptorProto} message DescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                DescriptorProto.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes a DescriptorProto message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.DescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.DescriptorProto} DescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                DescriptorProto.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 1:
                            message.name = reader.string();
                            break;
                        case 2:
                            if (!(message.field && message.field.length))
                                message.field = [];
                            message.field.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
                            break;
                        case 6:
                            if (!(message.extension && message.extension.length))
                                message.extension = [];
                            message.extension.push($root.google.protobuf.FieldDescriptorProto.decode(reader, reader.uint32()));
                            break;
                        case 3:
                            if (!(message.nested_type && message.nested_type.length))
                                message.nested_type = [];
                            message.nested_type.push($root.google.protobuf.DescriptorProto.decode(reader, reader.uint32()));
                            break;
                        case 4:
                            if (!(message.enum_type && message.enum_type.length))
                                message.enum_type = [];
                            message.enum_type.push($root.google.protobuf.EnumDescriptorProto.decode(reader, reader.uint32()));
                            break;
                        case 5:
                            if (!(message.extension_range && message.extension_range.length))
                                message.extension_range = [];
                            message.extension_range.push($root.google.protobuf.DescriptorProto.ExtensionRange.decode(reader, reader.uint32()));
                            break;
                        case 7:
                            message.options = $root.google.protobuf.MessageOptions.decode(reader, reader.uint32());
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes a DescriptorProto message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.DescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.DescriptorProto} DescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                DescriptorProto.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies a DescriptorProto message.
                 * @function verify
                 * @memberof google.protobuf.DescriptorProto
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                DescriptorProto.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.name != null && message.hasOwnProperty("name"))
                        if (!$util.isString(message.name))
                            return "name: string expected";
                    if (message.field != null && message.hasOwnProperty("field")) {
                        if (!Array.isArray(message.field))
                            return "field: array expected";
                        for (var i = 0; i < message.field.length; ++i) {
                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.field[i]);
                            if (error)
                                return "field." + error;
                        }
                    }
                    if (message.extension != null && message.hasOwnProperty("extension")) {
                        if (!Array.isArray(message.extension))
                            return "extension: array expected";
                        for (var i = 0; i < message.extension.length; ++i) {
                            var error = $root.google.protobuf.FieldDescriptorProto.verify(message.extension[i]);
                            if (error)
                                return "extension." + error;
                        }
                    }
                    if (message.nested_type != null && message.hasOwnProperty("nested_type")) {
                        if (!Array.isArray(message.nested_type))
                            return "nested_type: array expected";
                        for (var i = 0; i < message.nested_type.length; ++i) {
                            var error = $root.google.protobuf.DescriptorProto.verify(message.nested_type[i]);
                            if (error)
                                return "nested_type." + error;
                        }
                    }
                    if (message.enum_type != null && message.hasOwnProperty("enum_type")) {
                        if (!Array.isArray(message.enum_type))
                            return "enum_type: array expected";
                        for (var i = 0; i < message.enum_type.length; ++i) {
                            var error = $root.google.protobuf.EnumDescriptorProto.verify(message.enum_type[i]);
                            if (error)
                                return "enum_type." + error;
                        }
                    }
                    if (message.extension_range != null && message.hasOwnProperty("extension_range")) {
                        if (!Array.isArray(message.extension_range))
                            return "extension_range: array expected";
                        for (var i = 0; i < message.extension_range.length; ++i) {
                            var error = $root.google.protobuf.DescriptorProto.ExtensionRange.verify(message.extension_range[i]);
                            if (error)
                                return "extension_range." + error;
                        }
                    }
                    if (message.options != null && message.hasOwnProperty("options")) {
                        var error = $root.google.protobuf.MessageOptions.verify(message.options);
                        if (error)
                            return "options." + error;
                    }
                    return null;
                };
    
                /**
                 * Creates a DescriptorProto message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.DescriptorProto
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.DescriptorProto} DescriptorProto
                 */
                DescriptorProto.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.DescriptorProto)
                        return object;
                    var message = new $root.google.protobuf.DescriptorProto();
                    if (object.name != null)
                        message.name = String(object.name);
                    if (object.field) {
                        if (!Array.isArray(object.field))
                            throw TypeError(".google.protobuf.DescriptorProto.field: array expected");
                        message.field = [];
                        for (var i = 0; i < object.field.length; ++i) {
                            if (typeof object.field[i] !== "object")
                                throw TypeError(".google.protobuf.DescriptorProto.field: object expected");
                            message.field[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.field[i]);
                        }
                    }
                    if (object.extension) {
                        if (!Array.isArray(object.extension))
                            throw TypeError(".google.protobuf.DescriptorProto.extension: array expected");
                        message.extension = [];
                        for (var i = 0; i < object.extension.length; ++i) {
                            if (typeof object.extension[i] !== "object")
                                throw TypeError(".google.protobuf.DescriptorProto.extension: object expected");
                            message.extension[i] = $root.google.protobuf.FieldDescriptorProto.fromObject(object.extension[i]);
                        }
                    }
                    if (object.nested_type) {
                        if (!Array.isArray(object.nested_type))
                            throw TypeError(".google.protobuf.DescriptorProto.nested_type: array expected");
                        message.nested_type = [];
                        for (var i = 0; i < object.nested_type.length; ++i) {
                            if (typeof object.nested_type[i] !== "object")
                                throw TypeError(".google.protobuf.DescriptorProto.nested_type: object expected");
                            message.nested_type[i] = $root.google.protobuf.DescriptorProto.fromObject(object.nested_type[i]);
                        }
                    }
                    if (object.enum_type) {
                        if (!Array.isArray(object.enum_type))
                            throw TypeError(".google.protobuf.DescriptorProto.enum_type: array expected");
                        message.enum_type = [];
                        for (var i = 0; i < object.enum_type.length; ++i) {
                            if (typeof object.enum_type[i] !== "object")
                                throw TypeError(".google.protobuf.DescriptorProto.enum_type: object expected");
                            message.enum_type[i] = $root.google.protobuf.EnumDescriptorProto.fromObject(object.enum_type[i]);
                        }
                    }
                    if (object.extension_range) {
                        if (!Array.isArray(object.extension_range))
                            throw TypeError(".google.protobuf.DescriptorProto.extension_range: array expected");
                        message.extension_range = [];
                        for (var i = 0; i < object.extension_range.length; ++i) {
                            if (typeof object.extension_range[i] !== "object")
                                throw TypeError(".google.protobuf.DescriptorProto.extension_range: object expected");
                            message.extension_range[i] = $root.google.protobuf.DescriptorProto.ExtensionRange.fromObject(object.extension_range[i]);
                        }
                    }
                    if (object.options != null) {
                        if (typeof object.options !== "object")
                            throw TypeError(".google.protobuf.DescriptorProto.options: object expected");
                        message.options = $root.google.protobuf.MessageOptions.fromObject(object.options);
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from a DescriptorProto message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.DescriptorProto
                 * @static
                 * @param {google.protobuf.DescriptorProto} message DescriptorProto
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                DescriptorProto.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults) {
                        object.field = [];
                        object.nested_type = [];
                        object.enum_type = [];
                        object.extension_range = [];
                        object.extension = [];
                    }
                    if (options.defaults) {
                        object.name = "";
                        object.options = null;
                    }
                    if (message.name != null && message.hasOwnProperty("name"))
                        object.name = message.name;
                    if (message.field && message.field.length) {
                        object.field = [];
                        for (var j = 0; j < message.field.length; ++j)
                            object.field[j] = $root.google.protobuf.FieldDescriptorProto.toObject(message.field[j], options);
                    }
                    if (message.nested_type && message.nested_type.length) {
                        object.nested_type = [];
                        for (var j = 0; j < message.nested_type.length; ++j)
                            object.nested_type[j] = $root.google.protobuf.DescriptorProto.toObject(message.nested_type[j], options);
                    }
                    if (message.enum_type && message.enum_type.length) {
                        object.enum_type = [];
                        for (var j = 0; j < message.enum_type.length; ++j)
                            object.enum_type[j] = $root.google.protobuf.EnumDescriptorProto.toObject(message.enum_type[j], options);
                    }
                    if (message.extension_range && message.extension_range.length) {
                        object.extension_range = [];
                        for (var j = 0; j < message.extension_range.length; ++j)
                            object.extension_range[j] = $root.google.protobuf.DescriptorProto.ExtensionRange.toObject(message.extension_range[j], options);
                    }
                    if (message.extension && message.extension.length) {
                        object.extension = [];
                        for (var j = 0; j < message.extension.length; ++j)
                            object.extension[j] = $root.google.protobuf.FieldDescriptorProto.toObject(message.extension[j], options);
                    }
                    if (message.options != null && message.hasOwnProperty("options"))
                        object.options = $root.google.protobuf.MessageOptions.toObject(message.options, options);
                    return object;
                };
    
                /**
                 * Converts this DescriptorProto to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.DescriptorProto
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                DescriptorProto.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                DescriptorProto.ExtensionRange = (function() {
    
                    /**
                     * Properties of an ExtensionRange.
                     * @memberof google.protobuf.DescriptorProto
                     * @interface IExtensionRange
                     * @property {number|null} [start] ExtensionRange start
                     * @property {number|null} [end] ExtensionRange end
                     */
    
                    /**
                     * Constructs a new ExtensionRange.
                     * @memberof google.protobuf.DescriptorProto
                     * @classdesc Represents an ExtensionRange.
                     * @implements IExtensionRange
                     * @constructor
                     * @param {google.protobuf.DescriptorProto.IExtensionRange=} [properties] Properties to set
                     */
                    function ExtensionRange(properties) {
                        if (properties)
                            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                                if (properties[keys[i]] != null)
                                    this[keys[i]] = properties[keys[i]];
                    }
    
                    /**
                     * ExtensionRange start.
                     * @member {number} start
                     * @memberof google.protobuf.DescriptorProto.ExtensionRange
                     * @instance
                     */
                    ExtensionRange.prototype.start = 0;
    
                    /**
                     * ExtensionRange end.
                     * @member {number} end
                     * @memberof google.protobuf.DescriptorProto.ExtensionRange
                     * @instance
                     */
                    ExtensionRange.prototype.end = 0;
    
                    /**
                     * Creates a new ExtensionRange instance using the specified properties.
                     * @function create
                     * @memberof google.protobuf.DescriptorProto.ExtensionRange
                     * @static
                     * @param {google.protobuf.DescriptorProto.IExtensionRange=} [properties] Properties to set
                     * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange instance
                     */
                    ExtensionRange.create = function create(properties) {
                        return new ExtensionRange(properties);
                    };
    
                    /**
                     * Encodes the specified ExtensionRange message. Does not implicitly {@link google.protobuf.DescriptorProto.ExtensionRange.verify|verify} messages.
                     * @function encode
                     * @memberof google.protobuf.DescriptorProto.ExtensionRange
                     * @static
                     * @param {google.protobuf.DescriptorProto.IExtensionRange} message ExtensionRange message or plain object to encode
                     * @param {$protobuf.Writer} [writer] Writer to encode to
                     * @returns {$protobuf.Writer} Writer
                     */
                    ExtensionRange.encode = function encode(message, writer) {
                        if (!writer)
                            writer = $Writer.create();
                        if (message.start != null && message.hasOwnProperty("start"))
                            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.start);
                        if (message.end != null && message.hasOwnProperty("end"))
                            writer.uint32(/* id 2, wireType 0 =*/16).int32(message.end);
                        return writer;
                    };
    
                    /**
                     * Encodes the specified ExtensionRange message, length delimited. Does not implicitly {@link google.protobuf.DescriptorProto.ExtensionRange.verify|verify} messages.
                     * @function encodeDelimited
                     * @memberof google.protobuf.DescriptorProto.ExtensionRange
                     * @static
                     * @param {google.protobuf.DescriptorProto.IExtensionRange} message ExtensionRange message or plain object to encode
                     * @param {$protobuf.Writer} [writer] Writer to encode to
                     * @returns {$protobuf.Writer} Writer
                     */
                    ExtensionRange.encodeDelimited = function encodeDelimited(message, writer) {
                        return this.encode(message, writer).ldelim();
                    };
    
                    /**
                     * Decodes an ExtensionRange message from the specified reader or buffer.
                     * @function decode
                     * @memberof google.protobuf.DescriptorProto.ExtensionRange
                     * @static
                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                     * @param {number} [length] Message length if known beforehand
                     * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    ExtensionRange.decode = function decode(reader, length) {
                        if (!(reader instanceof $Reader))
                            reader = $Reader.create(reader);
                        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.DescriptorProto.ExtensionRange();
                        while (reader.pos < end) {
                            var tag = reader.uint32();
                            switch (tag >>> 3) {
                            case 1:
                                message.start = reader.int32();
                                break;
                            case 2:
                                message.end = reader.int32();
                                break;
                            default:
                                reader.skipType(tag & 7);
                                break;
                            }
                        }
                        return message;
                    };
    
                    /**
                     * Decodes an ExtensionRange message from the specified reader or buffer, length delimited.
                     * @function decodeDelimited
                     * @memberof google.protobuf.DescriptorProto.ExtensionRange
                     * @static
                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                     * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    ExtensionRange.decodeDelimited = function decodeDelimited(reader) {
                        if (!(reader instanceof $Reader))
                            reader = new $Reader(reader);
                        return this.decode(reader, reader.uint32());
                    };
    
                    /**
                     * Verifies an ExtensionRange message.
                     * @function verify
                     * @memberof google.protobuf.DescriptorProto.ExtensionRange
                     * @static
                     * @param {Object.<string,*>} message Plain object to verify
                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
                     */
                    ExtensionRange.verify = function verify(message) {
                        if (typeof message !== "object" || message === null)
                            return "object expected";
                        if (message.start != null && message.hasOwnProperty("start"))
                            if (!$util.isInteger(message.start))
                                return "start: integer expected";
                        if (message.end != null && message.hasOwnProperty("end"))
                            if (!$util.isInteger(message.end))
                                return "end: integer expected";
                        return null;
                    };
    
                    /**
                     * Creates an ExtensionRange message from a plain object. Also converts values to their respective internal types.
                     * @function fromObject
                     * @memberof google.protobuf.DescriptorProto.ExtensionRange
                     * @static
                     * @param {Object.<string,*>} object Plain object
                     * @returns {google.protobuf.DescriptorProto.ExtensionRange} ExtensionRange
                     */
                    ExtensionRange.fromObject = function fromObject(object) {
                        if (object instanceof $root.google.protobuf.DescriptorProto.ExtensionRange)
                            return object;
                        var message = new $root.google.protobuf.DescriptorProto.ExtensionRange();
                        if (object.start != null)
                            message.start = object.start | 0;
                        if (object.end != null)
                            message.end = object.end | 0;
                        return message;
                    };
    
                    /**
                     * Creates a plain object from an ExtensionRange message. Also converts values to other types if specified.
                     * @function toObject
                     * @memberof google.protobuf.DescriptorProto.ExtensionRange
                     * @static
                     * @param {google.protobuf.DescriptorProto.ExtensionRange} message ExtensionRange
                     * @param {$protobuf.IConversionOptions} [options] Conversion options
                     * @returns {Object.<string,*>} Plain object
                     */
                    ExtensionRange.toObject = function toObject(message, options) {
                        if (!options)
                            options = {};
                        var object = {};
                        if (options.defaults) {
                            object.start = 0;
                            object.end = 0;
                        }
                        if (message.start != null && message.hasOwnProperty("start"))
                            object.start = message.start;
                        if (message.end != null && message.hasOwnProperty("end"))
                            object.end = message.end;
                        return object;
                    };
    
                    /**
                     * Converts this ExtensionRange to JSON.
                     * @function toJSON
                     * @memberof google.protobuf.DescriptorProto.ExtensionRange
                     * @instance
                     * @returns {Object.<string,*>} JSON object
                     */
                    ExtensionRange.prototype.toJSON = function toJSON() {
                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                    };
    
                    return ExtensionRange;
                })();
    
                return DescriptorProto;
            })();
    
            protobuf.FieldDescriptorProto = (function() {
    
                /**
                 * Properties of a FieldDescriptorProto.
                 * @memberof google.protobuf
                 * @interface IFieldDescriptorProto
                 * @property {string|null} [name] FieldDescriptorProto name
                 * @property {number|null} [number] FieldDescriptorProto number
                 * @property {google.protobuf.FieldDescriptorProto.Label|null} [label] FieldDescriptorProto label
                 * @property {google.protobuf.FieldDescriptorProto.Type|null} [type] FieldDescriptorProto type
                 * @property {string|null} [type_name] FieldDescriptorProto type_name
                 * @property {string|null} [extendee] FieldDescriptorProto extendee
                 * @property {string|null} [default_value] FieldDescriptorProto default_value
                 * @property {google.protobuf.IFieldOptions|null} [options] FieldDescriptorProto options
                 */
    
                /**
                 * Constructs a new FieldDescriptorProto.
                 * @memberof google.protobuf
                 * @classdesc Represents a FieldDescriptorProto.
                 * @implements IFieldDescriptorProto
                 * @constructor
                 * @param {google.protobuf.IFieldDescriptorProto=} [properties] Properties to set
                 */
                function FieldDescriptorProto(properties) {
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * FieldDescriptorProto name.
                 * @member {string} name
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @instance
                 */
                FieldDescriptorProto.prototype.name = "";
    
                /**
                 * FieldDescriptorProto number.
                 * @member {number} number
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @instance
                 */
                FieldDescriptorProto.prototype.number = 0;
    
                /**
                 * FieldDescriptorProto label.
                 * @member {google.protobuf.FieldDescriptorProto.Label} label
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @instance
                 */
                FieldDescriptorProto.prototype.label = 1;
    
                /**
                 * FieldDescriptorProto type.
                 * @member {google.protobuf.FieldDescriptorProto.Type} type
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @instance
                 */
                FieldDescriptorProto.prototype.type = 1;
    
                /**
                 * FieldDescriptorProto type_name.
                 * @member {string} type_name
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @instance
                 */
                FieldDescriptorProto.prototype.type_name = "";
    
                /**
                 * FieldDescriptorProto extendee.
                 * @member {string} extendee
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @instance
                 */
                FieldDescriptorProto.prototype.extendee = "";
    
                /**
                 * FieldDescriptorProto default_value.
                 * @member {string} default_value
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @instance
                 */
                FieldDescriptorProto.prototype.default_value = "";
    
                /**
                 * FieldDescriptorProto options.
                 * @member {google.protobuf.IFieldOptions|null|undefined} options
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @instance
                 */
                FieldDescriptorProto.prototype.options = null;
    
                /**
                 * Creates a new FieldDescriptorProto instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @static
                 * @param {google.protobuf.IFieldDescriptorProto=} [properties] Properties to set
                 * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto instance
                 */
                FieldDescriptorProto.create = function create(properties) {
                    return new FieldDescriptorProto(properties);
                };
    
                /**
                 * Encodes the specified FieldDescriptorProto message. Does not implicitly {@link google.protobuf.FieldDescriptorProto.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @static
                 * @param {google.protobuf.IFieldDescriptorProto} message FieldDescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                FieldDescriptorProto.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.name != null && message.hasOwnProperty("name"))
                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
                    if (message.extendee != null && message.hasOwnProperty("extendee"))
                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.extendee);
                    if (message.number != null && message.hasOwnProperty("number"))
                        writer.uint32(/* id 3, wireType 0 =*/24).int32(message.number);
                    if (message.label != null && message.hasOwnProperty("label"))
                        writer.uint32(/* id 4, wireType 0 =*/32).int32(message.label);
                    if (message.type != null && message.hasOwnProperty("type"))
                        writer.uint32(/* id 5, wireType 0 =*/40).int32(message.type);
                    if (message.type_name != null && message.hasOwnProperty("type_name"))
                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.type_name);
                    if (message.default_value != null && message.hasOwnProperty("default_value"))
                        writer.uint32(/* id 7, wireType 2 =*/58).string(message.default_value);
                    if (message.options != null && message.hasOwnProperty("options"))
                        $root.google.protobuf.FieldOptions.encode(message.options, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified FieldDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.FieldDescriptorProto.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @static
                 * @param {google.protobuf.IFieldDescriptorProto} message FieldDescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                FieldDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes a FieldDescriptorProto message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                FieldDescriptorProto.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldDescriptorProto();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 1:
                            message.name = reader.string();
                            break;
                        case 3:
                            message.number = reader.int32();
                            break;
                        case 4:
                            message.label = reader.int32();
                            break;
                        case 5:
                            message.type = reader.int32();
                            break;
                        case 6:
                            message.type_name = reader.string();
                            break;
                        case 2:
                            message.extendee = reader.string();
                            break;
                        case 7:
                            message.default_value = reader.string();
                            break;
                        case 8:
                            message.options = $root.google.protobuf.FieldOptions.decode(reader, reader.uint32());
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes a FieldDescriptorProto message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                FieldDescriptorProto.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies a FieldDescriptorProto message.
                 * @function verify
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                FieldDescriptorProto.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.name != null && message.hasOwnProperty("name"))
                        if (!$util.isString(message.name))
                            return "name: string expected";
                    if (message.number != null && message.hasOwnProperty("number"))
                        if (!$util.isInteger(message.number))
                            return "number: integer expected";
                    if (message.label != null && message.hasOwnProperty("label"))
                        switch (message.label) {
                        default:
                            return "label: enum value expected";
                        case 1:
                        case 2:
                        case 3:
                            break;
                        }
                    if (message.type != null && message.hasOwnProperty("type"))
                        switch (message.type) {
                        default:
                            return "type: enum value expected";
                        case 1:
                        case 2:
                        case 3:
                        case 4:
                        case 5:
                        case 6:
                        case 7:
                        case 8:
                        case 9:
                        case 10:
                        case 11:
                        case 12:
                        case 13:
                        case 14:
                        case 15:
                        case 16:
                        case 17:
                        case 18:
                            break;
                        }
                    if (message.type_name != null && message.hasOwnProperty("type_name"))
                        if (!$util.isString(message.type_name))
                            return "type_name: string expected";
                    if (message.extendee != null && message.hasOwnProperty("extendee"))
                        if (!$util.isString(message.extendee))
                            return "extendee: string expected";
                    if (message.default_value != null && message.hasOwnProperty("default_value"))
                        if (!$util.isString(message.default_value))
                            return "default_value: string expected";
                    if (message.options != null && message.hasOwnProperty("options")) {
                        var error = $root.google.protobuf.FieldOptions.verify(message.options);
                        if (error)
                            return "options." + error;
                    }
                    return null;
                };
    
                /**
                 * Creates a FieldDescriptorProto message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.FieldDescriptorProto} FieldDescriptorProto
                 */
                FieldDescriptorProto.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.FieldDescriptorProto)
                        return object;
                    var message = new $root.google.protobuf.FieldDescriptorProto();
                    if (object.name != null)
                        message.name = String(object.name);
                    if (object.number != null)
                        message.number = object.number | 0;
                    switch (object.label) {
                    case "LABEL_OPTIONAL":
                    case 1:
                        message.label = 1;
                        break;
                    case "LABEL_REQUIRED":
                    case 2:
                        message.label = 2;
                        break;
                    case "LABEL_REPEATED":
                    case 3:
                        message.label = 3;
                        break;
                    }
                    switch (object.type) {
                    case "TYPE_DOUBLE":
                    case 1:
                        message.type = 1;
                        break;
                    case "TYPE_FLOAT":
                    case 2:
                        message.type = 2;
                        break;
                    case "TYPE_INT64":
                    case 3:
                        message.type = 3;
                        break;
                    case "TYPE_UINT64":
                    case 4:
                        message.type = 4;
                        break;
                    case "TYPE_INT32":
                    case 5:
                        message.type = 5;
                        break;
                    case "TYPE_FIXED64":
                    case 6:
                        message.type = 6;
                        break;
                    case "TYPE_FIXED32":
                    case 7:
                        message.type = 7;
                        break;
                    case "TYPE_BOOL":
                    case 8:
                        message.type = 8;
                        break;
                    case "TYPE_STRING":
                    case 9:
                        message.type = 9;
                        break;
                    case "TYPE_GROUP":
                    case 10:
                        message.type = 10;
                        break;
                    case "TYPE_MESSAGE":
                    case 11:
                        message.type = 11;
                        break;
                    case "TYPE_BYTES":
                    case 12:
                        message.type = 12;
                        break;
                    case "TYPE_UINT32":
                    case 13:
                        message.type = 13;
                        break;
                    case "TYPE_ENUM":
                    case 14:
                        message.type = 14;
                        break;
                    case "TYPE_SFIXED32":
                    case 15:
                        message.type = 15;
                        break;
                    case "TYPE_SFIXED64":
                    case 16:
                        message.type = 16;
                        break;
                    case "TYPE_SINT32":
                    case 17:
                        message.type = 17;
                        break;
                    case "TYPE_SINT64":
                    case 18:
                        message.type = 18;
                        break;
                    }
                    if (object.type_name != null)
                        message.type_name = String(object.type_name);
                    if (object.extendee != null)
                        message.extendee = String(object.extendee);
                    if (object.default_value != null)
                        message.default_value = String(object.default_value);
                    if (object.options != null) {
                        if (typeof object.options !== "object")
                            throw TypeError(".google.protobuf.FieldDescriptorProto.options: object expected");
                        message.options = $root.google.protobuf.FieldOptions.fromObject(object.options);
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from a FieldDescriptorProto message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @static
                 * @param {google.protobuf.FieldDescriptorProto} message FieldDescriptorProto
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                FieldDescriptorProto.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.defaults) {
                        object.name = "";
                        object.extendee = "";
                        object.number = 0;
                        object.label = options.enums === String ? "LABEL_OPTIONAL" : 1;
                        object.type = options.enums === String ? "TYPE_DOUBLE" : 1;
                        object.type_name = "";
                        object.default_value = "";
                        object.options = null;
                    }
                    if (message.name != null && message.hasOwnProperty("name"))
                        object.name = message.name;
                    if (message.extendee != null && message.hasOwnProperty("extendee"))
                        object.extendee = message.extendee;
                    if (message.number != null && message.hasOwnProperty("number"))
                        object.number = message.number;
                    if (message.label != null && message.hasOwnProperty("label"))
                        object.label = options.enums === String ? $root.google.protobuf.FieldDescriptorProto.Label[message.label] : message.label;
                    if (message.type != null && message.hasOwnProperty("type"))
                        object.type = options.enums === String ? $root.google.protobuf.FieldDescriptorProto.Type[message.type] : message.type;
                    if (message.type_name != null && message.hasOwnProperty("type_name"))
                        object.type_name = message.type_name;
                    if (message.default_value != null && message.hasOwnProperty("default_value"))
                        object.default_value = message.default_value;
                    if (message.options != null && message.hasOwnProperty("options"))
                        object.options = $root.google.protobuf.FieldOptions.toObject(message.options, options);
                    return object;
                };
    
                /**
                 * Converts this FieldDescriptorProto to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.FieldDescriptorProto
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                FieldDescriptorProto.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                /**
                 * Type enum.
                 * @name google.protobuf.FieldDescriptorProto.Type
                 * @enum {string}
                 * @property {number} TYPE_DOUBLE=1 TYPE_DOUBLE value
                 * @property {number} TYPE_FLOAT=2 TYPE_FLOAT value
                 * @property {number} TYPE_INT64=3 TYPE_INT64 value
                 * @property {number} TYPE_UINT64=4 TYPE_UINT64 value
                 * @property {number} TYPE_INT32=5 TYPE_INT32 value
                 * @property {number} TYPE_FIXED64=6 TYPE_FIXED64 value
                 * @property {number} TYPE_FIXED32=7 TYPE_FIXED32 value
                 * @property {number} TYPE_BOOL=8 TYPE_BOOL value
                 * @property {number} TYPE_STRING=9 TYPE_STRING value
                 * @property {number} TYPE_GROUP=10 TYPE_GROUP value
                 * @property {number} TYPE_MESSAGE=11 TYPE_MESSAGE value
                 * @property {number} TYPE_BYTES=12 TYPE_BYTES value
                 * @property {number} TYPE_UINT32=13 TYPE_UINT32 value
                 * @property {number} TYPE_ENUM=14 TYPE_ENUM value
                 * @property {number} TYPE_SFIXED32=15 TYPE_SFIXED32 value
                 * @property {number} TYPE_SFIXED64=16 TYPE_SFIXED64 value
                 * @property {number} TYPE_SINT32=17 TYPE_SINT32 value
                 * @property {number} TYPE_SINT64=18 TYPE_SINT64 value
                 */
                FieldDescriptorProto.Type = (function() {
                    var valuesById = {}, values = Object.create(valuesById);
                    values[valuesById[1] = "TYPE_DOUBLE"] = 1;
                    values[valuesById[2] = "TYPE_FLOAT"] = 2;
                    values[valuesById[3] = "TYPE_INT64"] = 3;
                    values[valuesById[4] = "TYPE_UINT64"] = 4;
                    values[valuesById[5] = "TYPE_INT32"] = 5;
                    values[valuesById[6] = "TYPE_FIXED64"] = 6;
                    values[valuesById[7] = "TYPE_FIXED32"] = 7;
                    values[valuesById[8] = "TYPE_BOOL"] = 8;
                    values[valuesById[9] = "TYPE_STRING"] = 9;
                    values[valuesById[10] = "TYPE_GROUP"] = 10;
                    values[valuesById[11] = "TYPE_MESSAGE"] = 11;
                    values[valuesById[12] = "TYPE_BYTES"] = 12;
                    values[valuesById[13] = "TYPE_UINT32"] = 13;
                    values[valuesById[14] = "TYPE_ENUM"] = 14;
                    values[valuesById[15] = "TYPE_SFIXED32"] = 15;
                    values[valuesById[16] = "TYPE_SFIXED64"] = 16;
                    values[valuesById[17] = "TYPE_SINT32"] = 17;
                    values[valuesById[18] = "TYPE_SINT64"] = 18;
                    return values;
                })();
    
                /**
                 * Label enum.
                 * @name google.protobuf.FieldDescriptorProto.Label
                 * @enum {string}
                 * @property {number} LABEL_OPTIONAL=1 LABEL_OPTIONAL value
                 * @property {number} LABEL_REQUIRED=2 LABEL_REQUIRED value
                 * @property {number} LABEL_REPEATED=3 LABEL_REPEATED value
                 */
                FieldDescriptorProto.Label = (function() {
                    var valuesById = {}, values = Object.create(valuesById);
                    values[valuesById[1] = "LABEL_OPTIONAL"] = 1;
                    values[valuesById[2] = "LABEL_REQUIRED"] = 2;
                    values[valuesById[3] = "LABEL_REPEATED"] = 3;
                    return values;
                })();
    
                return FieldDescriptorProto;
            })();
    
            protobuf.EnumDescriptorProto = (function() {
    
                /**
                 * Properties of an EnumDescriptorProto.
                 * @memberof google.protobuf
                 * @interface IEnumDescriptorProto
                 * @property {string|null} [name] EnumDescriptorProto name
                 * @property {Array.<google.protobuf.IEnumValueDescriptorProto>|null} [value] EnumDescriptorProto value
                 * @property {google.protobuf.IEnumOptions|null} [options] EnumDescriptorProto options
                 */
    
                /**
                 * Constructs a new EnumDescriptorProto.
                 * @memberof google.protobuf
                 * @classdesc Represents an EnumDescriptorProto.
                 * @implements IEnumDescriptorProto
                 * @constructor
                 * @param {google.protobuf.IEnumDescriptorProto=} [properties] Properties to set
                 */
                function EnumDescriptorProto(properties) {
                    this.value = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * EnumDescriptorProto name.
                 * @member {string} name
                 * @memberof google.protobuf.EnumDescriptorProto
                 * @instance
                 */
                EnumDescriptorProto.prototype.name = "";
    
                /**
                 * EnumDescriptorProto value.
                 * @member {Array.<google.protobuf.IEnumValueDescriptorProto>} value
                 * @memberof google.protobuf.EnumDescriptorProto
                 * @instance
                 */
                EnumDescriptorProto.prototype.value = $util.emptyArray;
    
                /**
                 * EnumDescriptorProto options.
                 * @member {google.protobuf.IEnumOptions|null|undefined} options
                 * @memberof google.protobuf.EnumDescriptorProto
                 * @instance
                 */
                EnumDescriptorProto.prototype.options = null;
    
                /**
                 * Creates a new EnumDescriptorProto instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.EnumDescriptorProto
                 * @static
                 * @param {google.protobuf.IEnumDescriptorProto=} [properties] Properties to set
                 * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto instance
                 */
                EnumDescriptorProto.create = function create(properties) {
                    return new EnumDescriptorProto(properties);
                };
    
                /**
                 * Encodes the specified EnumDescriptorProto message. Does not implicitly {@link google.protobuf.EnumDescriptorProto.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.EnumDescriptorProto
                 * @static
                 * @param {google.protobuf.IEnumDescriptorProto} message EnumDescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                EnumDescriptorProto.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.name != null && message.hasOwnProperty("name"))
                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
                    if (message.value != null && message.value.length)
                        for (var i = 0; i < message.value.length; ++i)
                            $root.google.protobuf.EnumValueDescriptorProto.encode(message.value[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
                    if (message.options != null && message.hasOwnProperty("options"))
                        $root.google.protobuf.EnumOptions.encode(message.options, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified EnumDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.EnumDescriptorProto.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.EnumDescriptorProto
                 * @static
                 * @param {google.protobuf.IEnumDescriptorProto} message EnumDescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                EnumDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes an EnumDescriptorProto message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.EnumDescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                EnumDescriptorProto.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumDescriptorProto();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 1:
                            message.name = reader.string();
                            break;
                        case 2:
                            if (!(message.value && message.value.length))
                                message.value = [];
                            message.value.push($root.google.protobuf.EnumValueDescriptorProto.decode(reader, reader.uint32()));
                            break;
                        case 3:
                            message.options = $root.google.protobuf.EnumOptions.decode(reader, reader.uint32());
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes an EnumDescriptorProto message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.EnumDescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                EnumDescriptorProto.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies an EnumDescriptorProto message.
                 * @function verify
                 * @memberof google.protobuf.EnumDescriptorProto
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                EnumDescriptorProto.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.name != null && message.hasOwnProperty("name"))
                        if (!$util.isString(message.name))
                            return "name: string expected";
                    if (message.value != null && message.hasOwnProperty("value")) {
                        if (!Array.isArray(message.value))
                            return "value: array expected";
                        for (var i = 0; i < message.value.length; ++i) {
                            var error = $root.google.protobuf.EnumValueDescriptorProto.verify(message.value[i]);
                            if (error)
                                return "value." + error;
                        }
                    }
                    if (message.options != null && message.hasOwnProperty("options")) {
                        var error = $root.google.protobuf.EnumOptions.verify(message.options);
                        if (error)
                            return "options." + error;
                    }
                    return null;
                };
    
                /**
                 * Creates an EnumDescriptorProto message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.EnumDescriptorProto
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.EnumDescriptorProto} EnumDescriptorProto
                 */
                EnumDescriptorProto.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.EnumDescriptorProto)
                        return object;
                    var message = new $root.google.protobuf.EnumDescriptorProto();
                    if (object.name != null)
                        message.name = String(object.name);
                    if (object.value) {
                        if (!Array.isArray(object.value))
                            throw TypeError(".google.protobuf.EnumDescriptorProto.value: array expected");
                        message.value = [];
                        for (var i = 0; i < object.value.length; ++i) {
                            if (typeof object.value[i] !== "object")
                                throw TypeError(".google.protobuf.EnumDescriptorProto.value: object expected");
                            message.value[i] = $root.google.protobuf.EnumValueDescriptorProto.fromObject(object.value[i]);
                        }
                    }
                    if (object.options != null) {
                        if (typeof object.options !== "object")
                            throw TypeError(".google.protobuf.EnumDescriptorProto.options: object expected");
                        message.options = $root.google.protobuf.EnumOptions.fromObject(object.options);
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from an EnumDescriptorProto message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.EnumDescriptorProto
                 * @static
                 * @param {google.protobuf.EnumDescriptorProto} message EnumDescriptorProto
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                EnumDescriptorProto.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults)
                        object.value = [];
                    if (options.defaults) {
                        object.name = "";
                        object.options = null;
                    }
                    if (message.name != null && message.hasOwnProperty("name"))
                        object.name = message.name;
                    if (message.value && message.value.length) {
                        object.value = [];
                        for (var j = 0; j < message.value.length; ++j)
                            object.value[j] = $root.google.protobuf.EnumValueDescriptorProto.toObject(message.value[j], options);
                    }
                    if (message.options != null && message.hasOwnProperty("options"))
                        object.options = $root.google.protobuf.EnumOptions.toObject(message.options, options);
                    return object;
                };
    
                /**
                 * Converts this EnumDescriptorProto to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.EnumDescriptorProto
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                EnumDescriptorProto.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                return EnumDescriptorProto;
            })();
    
            protobuf.EnumValueDescriptorProto = (function() {
    
                /**
                 * Properties of an EnumValueDescriptorProto.
                 * @memberof google.protobuf
                 * @interface IEnumValueDescriptorProto
                 * @property {string|null} [name] EnumValueDescriptorProto name
                 * @property {number|null} [number] EnumValueDescriptorProto number
                 * @property {google.protobuf.IEnumValueOptions|null} [options] EnumValueDescriptorProto options
                 */
    
                /**
                 * Constructs a new EnumValueDescriptorProto.
                 * @memberof google.protobuf
                 * @classdesc Represents an EnumValueDescriptorProto.
                 * @implements IEnumValueDescriptorProto
                 * @constructor
                 * @param {google.protobuf.IEnumValueDescriptorProto=} [properties] Properties to set
                 */
                function EnumValueDescriptorProto(properties) {
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * EnumValueDescriptorProto name.
                 * @member {string} name
                 * @memberof google.protobuf.EnumValueDescriptorProto
                 * @instance
                 */
                EnumValueDescriptorProto.prototype.name = "";
    
                /**
                 * EnumValueDescriptorProto number.
                 * @member {number} number
                 * @memberof google.protobuf.EnumValueDescriptorProto
                 * @instance
                 */
                EnumValueDescriptorProto.prototype.number = 0;
    
                /**
                 * EnumValueDescriptorProto options.
                 * @member {google.protobuf.IEnumValueOptions|null|undefined} options
                 * @memberof google.protobuf.EnumValueDescriptorProto
                 * @instance
                 */
                EnumValueDescriptorProto.prototype.options = null;
    
                /**
                 * Creates a new EnumValueDescriptorProto instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.EnumValueDescriptorProto
                 * @static
                 * @param {google.protobuf.IEnumValueDescriptorProto=} [properties] Properties to set
                 * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto instance
                 */
                EnumValueDescriptorProto.create = function create(properties) {
                    return new EnumValueDescriptorProto(properties);
                };
    
                /**
                 * Encodes the specified EnumValueDescriptorProto message. Does not implicitly {@link google.protobuf.EnumValueDescriptorProto.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.EnumValueDescriptorProto
                 * @static
                 * @param {google.protobuf.IEnumValueDescriptorProto} message EnumValueDescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                EnumValueDescriptorProto.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.name != null && message.hasOwnProperty("name"))
                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
                    if (message.number != null && message.hasOwnProperty("number"))
                        writer.uint32(/* id 2, wireType 0 =*/16).int32(message.number);
                    if (message.options != null && message.hasOwnProperty("options"))
                        $root.google.protobuf.EnumValueOptions.encode(message.options, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified EnumValueDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.EnumValueDescriptorProto.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.EnumValueDescriptorProto
                 * @static
                 * @param {google.protobuf.IEnumValueDescriptorProto} message EnumValueDescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                EnumValueDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes an EnumValueDescriptorProto message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.EnumValueDescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                EnumValueDescriptorProto.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueDescriptorProto();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 1:
                            message.name = reader.string();
                            break;
                        case 2:
                            message.number = reader.int32();
                            break;
                        case 3:
                            message.options = $root.google.protobuf.EnumValueOptions.decode(reader, reader.uint32());
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes an EnumValueDescriptorProto message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.EnumValueDescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                EnumValueDescriptorProto.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies an EnumValueDescriptorProto message.
                 * @function verify
                 * @memberof google.protobuf.EnumValueDescriptorProto
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                EnumValueDescriptorProto.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.name != null && message.hasOwnProperty("name"))
                        if (!$util.isString(message.name))
                            return "name: string expected";
                    if (message.number != null && message.hasOwnProperty("number"))
                        if (!$util.isInteger(message.number))
                            return "number: integer expected";
                    if (message.options != null && message.hasOwnProperty("options")) {
                        var error = $root.google.protobuf.EnumValueOptions.verify(message.options);
                        if (error)
                            return "options." + error;
                    }
                    return null;
                };
    
                /**
                 * Creates an EnumValueDescriptorProto message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.EnumValueDescriptorProto
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.EnumValueDescriptorProto} EnumValueDescriptorProto
                 */
                EnumValueDescriptorProto.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.EnumValueDescriptorProto)
                        return object;
                    var message = new $root.google.protobuf.EnumValueDescriptorProto();
                    if (object.name != null)
                        message.name = String(object.name);
                    if (object.number != null)
                        message.number = object.number | 0;
                    if (object.options != null) {
                        if (typeof object.options !== "object")
                            throw TypeError(".google.protobuf.EnumValueDescriptorProto.options: object expected");
                        message.options = $root.google.protobuf.EnumValueOptions.fromObject(object.options);
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from an EnumValueDescriptorProto message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.EnumValueDescriptorProto
                 * @static
                 * @param {google.protobuf.EnumValueDescriptorProto} message EnumValueDescriptorProto
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                EnumValueDescriptorProto.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.defaults) {
                        object.name = "";
                        object.number = 0;
                        object.options = null;
                    }
                    if (message.name != null && message.hasOwnProperty("name"))
                        object.name = message.name;
                    if (message.number != null && message.hasOwnProperty("number"))
                        object.number = message.number;
                    if (message.options != null && message.hasOwnProperty("options"))
                        object.options = $root.google.protobuf.EnumValueOptions.toObject(message.options, options);
                    return object;
                };
    
                /**
                 * Converts this EnumValueDescriptorProto to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.EnumValueDescriptorProto
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                EnumValueDescriptorProto.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                return EnumValueDescriptorProto;
            })();
    
            protobuf.ServiceDescriptorProto = (function() {
    
                /**
                 * Properties of a ServiceDescriptorProto.
                 * @memberof google.protobuf
                 * @interface IServiceDescriptorProto
                 * @property {string|null} [name] ServiceDescriptorProto name
                 * @property {Array.<google.protobuf.IMethodDescriptorProto>|null} [method] ServiceDescriptorProto method
                 * @property {google.protobuf.IServiceOptions|null} [options] ServiceDescriptorProto options
                 */
    
                /**
                 * Constructs a new ServiceDescriptorProto.
                 * @memberof google.protobuf
                 * @classdesc Represents a ServiceDescriptorProto.
                 * @implements IServiceDescriptorProto
                 * @constructor
                 * @param {google.protobuf.IServiceDescriptorProto=} [properties] Properties to set
                 */
                function ServiceDescriptorProto(properties) {
                    this.method = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * ServiceDescriptorProto name.
                 * @member {string} name
                 * @memberof google.protobuf.ServiceDescriptorProto
                 * @instance
                 */
                ServiceDescriptorProto.prototype.name = "";
    
                /**
                 * ServiceDescriptorProto method.
                 * @member {Array.<google.protobuf.IMethodDescriptorProto>} method
                 * @memberof google.protobuf.ServiceDescriptorProto
                 * @instance
                 */
                ServiceDescriptorProto.prototype.method = $util.emptyArray;
    
                /**
                 * ServiceDescriptorProto options.
                 * @member {google.protobuf.IServiceOptions|null|undefined} options
                 * @memberof google.protobuf.ServiceDescriptorProto
                 * @instance
                 */
                ServiceDescriptorProto.prototype.options = null;
    
                /**
                 * Creates a new ServiceDescriptorProto instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.ServiceDescriptorProto
                 * @static
                 * @param {google.protobuf.IServiceDescriptorProto=} [properties] Properties to set
                 * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto instance
                 */
                ServiceDescriptorProto.create = function create(properties) {
                    return new ServiceDescriptorProto(properties);
                };
    
                /**
                 * Encodes the specified ServiceDescriptorProto message. Does not implicitly {@link google.protobuf.ServiceDescriptorProto.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.ServiceDescriptorProto
                 * @static
                 * @param {google.protobuf.IServiceDescriptorProto} message ServiceDescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                ServiceDescriptorProto.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.name != null && message.hasOwnProperty("name"))
                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
                    if (message.method != null && message.method.length)
                        for (var i = 0; i < message.method.length; ++i)
                            $root.google.protobuf.MethodDescriptorProto.encode(message.method[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
                    if (message.options != null && message.hasOwnProperty("options"))
                        $root.google.protobuf.ServiceOptions.encode(message.options, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified ServiceDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.ServiceDescriptorProto.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.ServiceDescriptorProto
                 * @static
                 * @param {google.protobuf.IServiceDescriptorProto} message ServiceDescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                ServiceDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes a ServiceDescriptorProto message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.ServiceDescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                ServiceDescriptorProto.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceDescriptorProto();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 1:
                            message.name = reader.string();
                            break;
                        case 2:
                            if (!(message.method && message.method.length))
                                message.method = [];
                            message.method.push($root.google.protobuf.MethodDescriptorProto.decode(reader, reader.uint32()));
                            break;
                        case 3:
                            message.options = $root.google.protobuf.ServiceOptions.decode(reader, reader.uint32());
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes a ServiceDescriptorProto message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.ServiceDescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                ServiceDescriptorProto.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies a ServiceDescriptorProto message.
                 * @function verify
                 * @memberof google.protobuf.ServiceDescriptorProto
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                ServiceDescriptorProto.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.name != null && message.hasOwnProperty("name"))
                        if (!$util.isString(message.name))
                            return "name: string expected";
                    if (message.method != null && message.hasOwnProperty("method")) {
                        if (!Array.isArray(message.method))
                            return "method: array expected";
                        for (var i = 0; i < message.method.length; ++i) {
                            var error = $root.google.protobuf.MethodDescriptorProto.verify(message.method[i]);
                            if (error)
                                return "method." + error;
                        }
                    }
                    if (message.options != null && message.hasOwnProperty("options")) {
                        var error = $root.google.protobuf.ServiceOptions.verify(message.options);
                        if (error)
                            return "options." + error;
                    }
                    return null;
                };
    
                /**
                 * Creates a ServiceDescriptorProto message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.ServiceDescriptorProto
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.ServiceDescriptorProto} ServiceDescriptorProto
                 */
                ServiceDescriptorProto.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.ServiceDescriptorProto)
                        return object;
                    var message = new $root.google.protobuf.ServiceDescriptorProto();
                    if (object.name != null)
                        message.name = String(object.name);
                    if (object.method) {
                        if (!Array.isArray(object.method))
                            throw TypeError(".google.protobuf.ServiceDescriptorProto.method: array expected");
                        message.method = [];
                        for (var i = 0; i < object.method.length; ++i) {
                            if (typeof object.method[i] !== "object")
                                throw TypeError(".google.protobuf.ServiceDescriptorProto.method: object expected");
                            message.method[i] = $root.google.protobuf.MethodDescriptorProto.fromObject(object.method[i]);
                        }
                    }
                    if (object.options != null) {
                        if (typeof object.options !== "object")
                            throw TypeError(".google.protobuf.ServiceDescriptorProto.options: object expected");
                        message.options = $root.google.protobuf.ServiceOptions.fromObject(object.options);
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from a ServiceDescriptorProto message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.ServiceDescriptorProto
                 * @static
                 * @param {google.protobuf.ServiceDescriptorProto} message ServiceDescriptorProto
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                ServiceDescriptorProto.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults)
                        object.method = [];
                    if (options.defaults) {
                        object.name = "";
                        object.options = null;
                    }
                    if (message.name != null && message.hasOwnProperty("name"))
                        object.name = message.name;
                    if (message.method && message.method.length) {
                        object.method = [];
                        for (var j = 0; j < message.method.length; ++j)
                            object.method[j] = $root.google.protobuf.MethodDescriptorProto.toObject(message.method[j], options);
                    }
                    if (message.options != null && message.hasOwnProperty("options"))
                        object.options = $root.google.protobuf.ServiceOptions.toObject(message.options, options);
                    return object;
                };
    
                /**
                 * Converts this ServiceDescriptorProto to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.ServiceDescriptorProto
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                ServiceDescriptorProto.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                return ServiceDescriptorProto;
            })();
    
            protobuf.MethodDescriptorProto = (function() {
    
                /**
                 * Properties of a MethodDescriptorProto.
                 * @memberof google.protobuf
                 * @interface IMethodDescriptorProto
                 * @property {string|null} [name] MethodDescriptorProto name
                 * @property {string|null} [input_type] MethodDescriptorProto input_type
                 * @property {string|null} [output_type] MethodDescriptorProto output_type
                 * @property {google.protobuf.IMethodOptions|null} [options] MethodDescriptorProto options
                 */
    
                /**
                 * Constructs a new MethodDescriptorProto.
                 * @memberof google.protobuf
                 * @classdesc Represents a MethodDescriptorProto.
                 * @implements IMethodDescriptorProto
                 * @constructor
                 * @param {google.protobuf.IMethodDescriptorProto=} [properties] Properties to set
                 */
                function MethodDescriptorProto(properties) {
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * MethodDescriptorProto name.
                 * @member {string} name
                 * @memberof google.protobuf.MethodDescriptorProto
                 * @instance
                 */
                MethodDescriptorProto.prototype.name = "";
    
                /**
                 * MethodDescriptorProto input_type.
                 * @member {string} input_type
                 * @memberof google.protobuf.MethodDescriptorProto
                 * @instance
                 */
                MethodDescriptorProto.prototype.input_type = "";
    
                /**
                 * MethodDescriptorProto output_type.
                 * @member {string} output_type
                 * @memberof google.protobuf.MethodDescriptorProto
                 * @instance
                 */
                MethodDescriptorProto.prototype.output_type = "";
    
                /**
                 * MethodDescriptorProto options.
                 * @member {google.protobuf.IMethodOptions|null|undefined} options
                 * @memberof google.protobuf.MethodDescriptorProto
                 * @instance
                 */
                MethodDescriptorProto.prototype.options = null;
    
                /**
                 * Creates a new MethodDescriptorProto instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.MethodDescriptorProto
                 * @static
                 * @param {google.protobuf.IMethodDescriptorProto=} [properties] Properties to set
                 * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto instance
                 */
                MethodDescriptorProto.create = function create(properties) {
                    return new MethodDescriptorProto(properties);
                };
    
                /**
                 * Encodes the specified MethodDescriptorProto message. Does not implicitly {@link google.protobuf.MethodDescriptorProto.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.MethodDescriptorProto
                 * @static
                 * @param {google.protobuf.IMethodDescriptorProto} message MethodDescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                MethodDescriptorProto.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.name != null && message.hasOwnProperty("name"))
                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
                    if (message.input_type != null && message.hasOwnProperty("input_type"))
                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.input_type);
                    if (message.output_type != null && message.hasOwnProperty("output_type"))
                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.output_type);
                    if (message.options != null && message.hasOwnProperty("options"))
                        $root.google.protobuf.MethodOptions.encode(message.options, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified MethodDescriptorProto message, length delimited. Does not implicitly {@link google.protobuf.MethodDescriptorProto.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.MethodDescriptorProto
                 * @static
                 * @param {google.protobuf.IMethodDescriptorProto} message MethodDescriptorProto message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                MethodDescriptorProto.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes a MethodDescriptorProto message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.MethodDescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                MethodDescriptorProto.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodDescriptorProto();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 1:
                            message.name = reader.string();
                            break;
                        case 2:
                            message.input_type = reader.string();
                            break;
                        case 3:
                            message.output_type = reader.string();
                            break;
                        case 4:
                            message.options = $root.google.protobuf.MethodOptions.decode(reader, reader.uint32());
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes a MethodDescriptorProto message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.MethodDescriptorProto
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                MethodDescriptorProto.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies a MethodDescriptorProto message.
                 * @function verify
                 * @memberof google.protobuf.MethodDescriptorProto
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                MethodDescriptorProto.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.name != null && message.hasOwnProperty("name"))
                        if (!$util.isString(message.name))
                            return "name: string expected";
                    if (message.input_type != null && message.hasOwnProperty("input_type"))
                        if (!$util.isString(message.input_type))
                            return "input_type: string expected";
                    if (message.output_type != null && message.hasOwnProperty("output_type"))
                        if (!$util.isString(message.output_type))
                            return "output_type: string expected";
                    if (message.options != null && message.hasOwnProperty("options")) {
                        var error = $root.google.protobuf.MethodOptions.verify(message.options);
                        if (error)
                            return "options." + error;
                    }
                    return null;
                };
    
                /**
                 * Creates a MethodDescriptorProto message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.MethodDescriptorProto
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.MethodDescriptorProto} MethodDescriptorProto
                 */
                MethodDescriptorProto.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.MethodDescriptorProto)
                        return object;
                    var message = new $root.google.protobuf.MethodDescriptorProto();
                    if (object.name != null)
                        message.name = String(object.name);
                    if (object.input_type != null)
                        message.input_type = String(object.input_type);
                    if (object.output_type != null)
                        message.output_type = String(object.output_type);
                    if (object.options != null) {
                        if (typeof object.options !== "object")
                            throw TypeError(".google.protobuf.MethodDescriptorProto.options: object expected");
                        message.options = $root.google.protobuf.MethodOptions.fromObject(object.options);
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from a MethodDescriptorProto message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.MethodDescriptorProto
                 * @static
                 * @param {google.protobuf.MethodDescriptorProto} message MethodDescriptorProto
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                MethodDescriptorProto.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.defaults) {
                        object.name = "";
                        object.input_type = "";
                        object.output_type = "";
                        object.options = null;
                    }
                    if (message.name != null && message.hasOwnProperty("name"))
                        object.name = message.name;
                    if (message.input_type != null && message.hasOwnProperty("input_type"))
                        object.input_type = message.input_type;
                    if (message.output_type != null && message.hasOwnProperty("output_type"))
                        object.output_type = message.output_type;
                    if (message.options != null && message.hasOwnProperty("options"))
                        object.options = $root.google.protobuf.MethodOptions.toObject(message.options, options);
                    return object;
                };
    
                /**
                 * Converts this MethodDescriptorProto to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.MethodDescriptorProto
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                MethodDescriptorProto.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                return MethodDescriptorProto;
            })();
    
            protobuf.FileOptions = (function() {
    
                /**
                 * Properties of a FileOptions.
                 * @memberof google.protobuf
                 * @interface IFileOptions
                 * @property {string|null} [java_package] FileOptions java_package
                 * @property {string|null} [java_outer_classname] FileOptions java_outer_classname
                 * @property {boolean|null} [java_multiple_files] FileOptions java_multiple_files
                 * @property {boolean|null} [java_generate_equals_and_hash] FileOptions java_generate_equals_and_hash
                 * @property {google.protobuf.FileOptions.OptimizeMode|null} [optimize_for] FileOptions optimize_for
                 * @property {boolean|null} [cc_generic_services] FileOptions cc_generic_services
                 * @property {boolean|null} [java_generic_services] FileOptions java_generic_services
                 * @property {boolean|null} [py_generic_services] FileOptions py_generic_services
                 * @property {Array.<google.protobuf.IUninterpretedOption>|null} [uninterpreted_option] FileOptions uninterpreted_option
                 */
    
                /**
                 * Constructs a new FileOptions.
                 * @memberof google.protobuf
                 * @classdesc Represents a FileOptions.
                 * @implements IFileOptions
                 * @constructor
                 * @param {google.protobuf.IFileOptions=} [properties] Properties to set
                 */
                function FileOptions(properties) {
                    this.uninterpreted_option = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * FileOptions java_package.
                 * @member {string} java_package
                 * @memberof google.protobuf.FileOptions
                 * @instance
                 */
                FileOptions.prototype.java_package = "";
    
                /**
                 * FileOptions java_outer_classname.
                 * @member {string} java_outer_classname
                 * @memberof google.protobuf.FileOptions
                 * @instance
                 */
                FileOptions.prototype.java_outer_classname = "";
    
                /**
                 * FileOptions java_multiple_files.
                 * @member {boolean} java_multiple_files
                 * @memberof google.protobuf.FileOptions
                 * @instance
                 */
                FileOptions.prototype.java_multiple_files = false;
    
                /**
                 * FileOptions java_generate_equals_and_hash.
                 * @member {boolean} java_generate_equals_and_hash
                 * @memberof google.protobuf.FileOptions
                 * @instance
                 */
                FileOptions.prototype.java_generate_equals_and_hash = false;
    
                /**
                 * FileOptions optimize_for.
                 * @member {google.protobuf.FileOptions.OptimizeMode} optimize_for
                 * @memberof google.protobuf.FileOptions
                 * @instance
                 */
                FileOptions.prototype.optimize_for = 1;
    
                /**
                 * FileOptions cc_generic_services.
                 * @member {boolean} cc_generic_services
                 * @memberof google.protobuf.FileOptions
                 * @instance
                 */
                FileOptions.prototype.cc_generic_services = false;
    
                /**
                 * FileOptions java_generic_services.
                 * @member {boolean} java_generic_services
                 * @memberof google.protobuf.FileOptions
                 * @instance
                 */
                FileOptions.prototype.java_generic_services = false;
    
                /**
                 * FileOptions py_generic_services.
                 * @member {boolean} py_generic_services
                 * @memberof google.protobuf.FileOptions
                 * @instance
                 */
                FileOptions.prototype.py_generic_services = false;
    
                /**
                 * FileOptions uninterpreted_option.
                 * @member {Array.<google.protobuf.IUninterpretedOption>} uninterpreted_option
                 * @memberof google.protobuf.FileOptions
                 * @instance
                 */
                FileOptions.prototype.uninterpreted_option = $util.emptyArray;
    
                /**
                 * Creates a new FileOptions instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.FileOptions
                 * @static
                 * @param {google.protobuf.IFileOptions=} [properties] Properties to set
                 * @returns {google.protobuf.FileOptions} FileOptions instance
                 */
                FileOptions.create = function create(properties) {
                    return new FileOptions(properties);
                };
    
                /**
                 * Encodes the specified FileOptions message. Does not implicitly {@link google.protobuf.FileOptions.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.FileOptions
                 * @static
                 * @param {google.protobuf.IFileOptions} message FileOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                FileOptions.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.java_package != null && message.hasOwnProperty("java_package"))
                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.java_package);
                    if (message.java_outer_classname != null && message.hasOwnProperty("java_outer_classname"))
                        writer.uint32(/* id 8, wireType 2 =*/66).string(message.java_outer_classname);
                    if (message.optimize_for != null && message.hasOwnProperty("optimize_for"))
                        writer.uint32(/* id 9, wireType 0 =*/72).int32(message.optimize_for);
                    if (message.java_multiple_files != null && message.hasOwnProperty("java_multiple_files"))
                        writer.uint32(/* id 10, wireType 0 =*/80).bool(message.java_multiple_files);
                    if (message.cc_generic_services != null && message.hasOwnProperty("cc_generic_services"))
                        writer.uint32(/* id 16, wireType 0 =*/128).bool(message.cc_generic_services);
                    if (message.java_generic_services != null && message.hasOwnProperty("java_generic_services"))
                        writer.uint32(/* id 17, wireType 0 =*/136).bool(message.java_generic_services);
                    if (message.py_generic_services != null && message.hasOwnProperty("py_generic_services"))
                        writer.uint32(/* id 18, wireType 0 =*/144).bool(message.py_generic_services);
                    if (message.java_generate_equals_and_hash != null && message.hasOwnProperty("java_generate_equals_and_hash"))
                        writer.uint32(/* id 20, wireType 0 =*/160).bool(message.java_generate_equals_and_hash);
                    if (message.uninterpreted_option != null && message.uninterpreted_option.length)
                        for (var i = 0; i < message.uninterpreted_option.length; ++i)
                            $root.google.protobuf.UninterpretedOption.encode(message.uninterpreted_option[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified FileOptions message, length delimited. Does not implicitly {@link google.protobuf.FileOptions.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.FileOptions
                 * @static
                 * @param {google.protobuf.IFileOptions} message FileOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                FileOptions.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes a FileOptions message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.FileOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.FileOptions} FileOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                FileOptions.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FileOptions();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 1:
                            message.java_package = reader.string();
                            break;
                        case 8:
                            message.java_outer_classname = reader.string();
                            break;
                        case 10:
                            message.java_multiple_files = reader.bool();
                            break;
                        case 20:
                            message.java_generate_equals_and_hash = reader.bool();
                            break;
                        case 9:
                            message.optimize_for = reader.int32();
                            break;
                        case 16:
                            message.cc_generic_services = reader.bool();
                            break;
                        case 17:
                            message.java_generic_services = reader.bool();
                            break;
                        case 18:
                            message.py_generic_services = reader.bool();
                            break;
                        case 999:
                            if (!(message.uninterpreted_option && message.uninterpreted_option.length))
                                message.uninterpreted_option = [];
                            message.uninterpreted_option.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes a FileOptions message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.FileOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.FileOptions} FileOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                FileOptions.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies a FileOptions message.
                 * @function verify
                 * @memberof google.protobuf.FileOptions
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                FileOptions.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.java_package != null && message.hasOwnProperty("java_package"))
                        if (!$util.isString(message.java_package))
                            return "java_package: string expected";
                    if (message.java_outer_classname != null && message.hasOwnProperty("java_outer_classname"))
                        if (!$util.isString(message.java_outer_classname))
                            return "java_outer_classname: string expected";
                    if (message.java_multiple_files != null && message.hasOwnProperty("java_multiple_files"))
                        if (typeof message.java_multiple_files !== "boolean")
                            return "java_multiple_files: boolean expected";
                    if (message.java_generate_equals_and_hash != null && message.hasOwnProperty("java_generate_equals_and_hash"))
                        if (typeof message.java_generate_equals_and_hash !== "boolean")
                            return "java_generate_equals_and_hash: boolean expected";
                    if (message.optimize_for != null && message.hasOwnProperty("optimize_for"))
                        switch (message.optimize_for) {
                        default:
                            return "optimize_for: enum value expected";
                        case 1:
                        case 2:
                        case 3:
                            break;
                        }
                    if (message.cc_generic_services != null && message.hasOwnProperty("cc_generic_services"))
                        if (typeof message.cc_generic_services !== "boolean")
                            return "cc_generic_services: boolean expected";
                    if (message.java_generic_services != null && message.hasOwnProperty("java_generic_services"))
                        if (typeof message.java_generic_services !== "boolean")
                            return "java_generic_services: boolean expected";
                    if (message.py_generic_services != null && message.hasOwnProperty("py_generic_services"))
                        if (typeof message.py_generic_services !== "boolean")
                            return "py_generic_services: boolean expected";
                    if (message.uninterpreted_option != null && message.hasOwnProperty("uninterpreted_option")) {
                        if (!Array.isArray(message.uninterpreted_option))
                            return "uninterpreted_option: array expected";
                        for (var i = 0; i < message.uninterpreted_option.length; ++i) {
                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpreted_option[i]);
                            if (error)
                                return "uninterpreted_option." + error;
                        }
                    }
                    return null;
                };
    
                /**
                 * Creates a FileOptions message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.FileOptions
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.FileOptions} FileOptions
                 */
                FileOptions.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.FileOptions)
                        return object;
                    var message = new $root.google.protobuf.FileOptions();
                    if (object.java_package != null)
                        message.java_package = String(object.java_package);
                    if (object.java_outer_classname != null)
                        message.java_outer_classname = String(object.java_outer_classname);
                    if (object.java_multiple_files != null)
                        message.java_multiple_files = Boolean(object.java_multiple_files);
                    if (object.java_generate_equals_and_hash != null)
                        message.java_generate_equals_and_hash = Boolean(object.java_generate_equals_and_hash);
                    switch (object.optimize_for) {
                    case "SPEED":
                    case 1:
                        message.optimize_for = 1;
                        break;
                    case "CODE_SIZE":
                    case 2:
                        message.optimize_for = 2;
                        break;
                    case "LITE_RUNTIME":
                    case 3:
                        message.optimize_for = 3;
                        break;
                    }
                    if (object.cc_generic_services != null)
                        message.cc_generic_services = Boolean(object.cc_generic_services);
                    if (object.java_generic_services != null)
                        message.java_generic_services = Boolean(object.java_generic_services);
                    if (object.py_generic_services != null)
                        message.py_generic_services = Boolean(object.py_generic_services);
                    if (object.uninterpreted_option) {
                        if (!Array.isArray(object.uninterpreted_option))
                            throw TypeError(".google.protobuf.FileOptions.uninterpreted_option: array expected");
                        message.uninterpreted_option = [];
                        for (var i = 0; i < object.uninterpreted_option.length; ++i) {
                            if (typeof object.uninterpreted_option[i] !== "object")
                                throw TypeError(".google.protobuf.FileOptions.uninterpreted_option: object expected");
                            message.uninterpreted_option[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpreted_option[i]);
                        }
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from a FileOptions message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.FileOptions
                 * @static
                 * @param {google.protobuf.FileOptions} message FileOptions
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                FileOptions.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults)
                        object.uninterpreted_option = [];
                    if (options.defaults) {
                        object.java_package = "";
                        object.java_outer_classname = "";
                        object.optimize_for = options.enums === String ? "SPEED" : 1;
                        object.java_multiple_files = false;
                        object.cc_generic_services = false;
                        object.java_generic_services = false;
                        object.py_generic_services = false;
                        object.java_generate_equals_and_hash = false;
                    }
                    if (message.java_package != null && message.hasOwnProperty("java_package"))
                        object.java_package = message.java_package;
                    if (message.java_outer_classname != null && message.hasOwnProperty("java_outer_classname"))
                        object.java_outer_classname = message.java_outer_classname;
                    if (message.optimize_for != null && message.hasOwnProperty("optimize_for"))
                        object.optimize_for = options.enums === String ? $root.google.protobuf.FileOptions.OptimizeMode[message.optimize_for] : message.optimize_for;
                    if (message.java_multiple_files != null && message.hasOwnProperty("java_multiple_files"))
                        object.java_multiple_files = message.java_multiple_files;
                    if (message.cc_generic_services != null && message.hasOwnProperty("cc_generic_services"))
                        object.cc_generic_services = message.cc_generic_services;
                    if (message.java_generic_services != null && message.hasOwnProperty("java_generic_services"))
                        object.java_generic_services = message.java_generic_services;
                    if (message.py_generic_services != null && message.hasOwnProperty("py_generic_services"))
                        object.py_generic_services = message.py_generic_services;
                    if (message.java_generate_equals_and_hash != null && message.hasOwnProperty("java_generate_equals_and_hash"))
                        object.java_generate_equals_and_hash = message.java_generate_equals_and_hash;
                    if (message.uninterpreted_option && message.uninterpreted_option.length) {
                        object.uninterpreted_option = [];
                        for (var j = 0; j < message.uninterpreted_option.length; ++j)
                            object.uninterpreted_option[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpreted_option[j], options);
                    }
                    return object;
                };
    
                /**
                 * Converts this FileOptions to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.FileOptions
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                FileOptions.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                /**
                 * OptimizeMode enum.
                 * @name google.protobuf.FileOptions.OptimizeMode
                 * @enum {string}
                 * @property {number} SPEED=1 SPEED value
                 * @property {number} CODE_SIZE=2 CODE_SIZE value
                 * @property {number} LITE_RUNTIME=3 LITE_RUNTIME value
                 */
                FileOptions.OptimizeMode = (function() {
                    var valuesById = {}, values = Object.create(valuesById);
                    values[valuesById[1] = "SPEED"] = 1;
                    values[valuesById[2] = "CODE_SIZE"] = 2;
                    values[valuesById[3] = "LITE_RUNTIME"] = 3;
                    return values;
                })();
    
                return FileOptions;
            })();
    
            protobuf.MessageOptions = (function() {
    
                /**
                 * Properties of a MessageOptions.
                 * @memberof google.protobuf
                 * @interface IMessageOptions
                 * @property {boolean|null} [message_set_wire_format] MessageOptions message_set_wire_format
                 * @property {boolean|null} [no_standard_descriptor_accessor] MessageOptions no_standard_descriptor_accessor
                 * @property {Array.<google.protobuf.IUninterpretedOption>|null} [uninterpreted_option] MessageOptions uninterpreted_option
                 * @property {number|null} [".msgpool_soft_limit"] MessageOptions .msgpool_soft_limit
                 * @property {number|null} [".msgpool_hard_limit"] MessageOptions .msgpool_hard_limit
                 */
    
                /**
                 * Constructs a new MessageOptions.
                 * @memberof google.protobuf
                 * @classdesc Represents a MessageOptions.
                 * @implements IMessageOptions
                 * @constructor
                 * @param {google.protobuf.IMessageOptions=} [properties] Properties to set
                 */
                function MessageOptions(properties) {
                    this.uninterpreted_option = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * MessageOptions message_set_wire_format.
                 * @member {boolean} message_set_wire_format
                 * @memberof google.protobuf.MessageOptions
                 * @instance
                 */
                MessageOptions.prototype.message_set_wire_format = false;
    
                /**
                 * MessageOptions no_standard_descriptor_accessor.
                 * @member {boolean} no_standard_descriptor_accessor
                 * @memberof google.protobuf.MessageOptions
                 * @instance
                 */
                MessageOptions.prototype.no_standard_descriptor_accessor = false;
    
                /**
                 * MessageOptions uninterpreted_option.
                 * @member {Array.<google.protobuf.IUninterpretedOption>} uninterpreted_option
                 * @memberof google.protobuf.MessageOptions
                 * @instance
                 */
                MessageOptions.prototype.uninterpreted_option = $util.emptyArray;
    
                /**
                 * MessageOptions .msgpool_soft_limit.
                 * @member {number} .msgpool_soft_limit
                 * @memberof google.protobuf.MessageOptions
                 * @instance
                 */
                MessageOptions.prototype[".msgpool_soft_limit"] = 32;
    
                /**
                 * MessageOptions .msgpool_hard_limit.
                 * @member {number} .msgpool_hard_limit
                 * @memberof google.protobuf.MessageOptions
                 * @instance
                 */
                MessageOptions.prototype[".msgpool_hard_limit"] = 384;
    
                /**
                 * Creates a new MessageOptions instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.MessageOptions
                 * @static
                 * @param {google.protobuf.IMessageOptions=} [properties] Properties to set
                 * @returns {google.protobuf.MessageOptions} MessageOptions instance
                 */
                MessageOptions.create = function create(properties) {
                    return new MessageOptions(properties);
                };
    
                /**
                 * Encodes the specified MessageOptions message. Does not implicitly {@link google.protobuf.MessageOptions.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.MessageOptions
                 * @static
                 * @param {google.protobuf.IMessageOptions} message MessageOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                MessageOptions.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.message_set_wire_format != null && message.hasOwnProperty("message_set_wire_format"))
                        writer.uint32(/* id 1, wireType 0 =*/8).bool(message.message_set_wire_format);
                    if (message.no_standard_descriptor_accessor != null && message.hasOwnProperty("no_standard_descriptor_accessor"))
                        writer.uint32(/* id 2, wireType 0 =*/16).bool(message.no_standard_descriptor_accessor);
                    if (message.uninterpreted_option != null && message.uninterpreted_option.length)
                        for (var i = 0; i < message.uninterpreted_option.length; ++i)
                            $root.google.protobuf.UninterpretedOption.encode(message.uninterpreted_option[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim();
                    if (message[".msgpool_soft_limit"] != null && message.hasOwnProperty(".msgpool_soft_limit"))
                        writer.uint32(/* id 60000, wireType 0 =*/480000).int32(message[".msgpool_soft_limit"]);
                    if (message[".msgpool_hard_limit"] != null && message.hasOwnProperty(".msgpool_hard_limit"))
                        writer.uint32(/* id 60001, wireType 0 =*/480008).int32(message[".msgpool_hard_limit"]);
                    return writer;
                };
    
                /**
                 * Encodes the specified MessageOptions message, length delimited. Does not implicitly {@link google.protobuf.MessageOptions.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.MessageOptions
                 * @static
                 * @param {google.protobuf.IMessageOptions} message MessageOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                MessageOptions.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes a MessageOptions message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.MessageOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.MessageOptions} MessageOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                MessageOptions.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MessageOptions();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 1:
                            message.message_set_wire_format = reader.bool();
                            break;
                        case 2:
                            message.no_standard_descriptor_accessor = reader.bool();
                            break;
                        case 999:
                            if (!(message.uninterpreted_option && message.uninterpreted_option.length))
                                message.uninterpreted_option = [];
                            message.uninterpreted_option.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
                            break;
                        case 60000:
                            message[".msgpool_soft_limit"] = reader.int32();
                            break;
                        case 60001:
                            message[".msgpool_hard_limit"] = reader.int32();
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes a MessageOptions message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.MessageOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.MessageOptions} MessageOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                MessageOptions.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies a MessageOptions message.
                 * @function verify
                 * @memberof google.protobuf.MessageOptions
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                MessageOptions.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.message_set_wire_format != null && message.hasOwnProperty("message_set_wire_format"))
                        if (typeof message.message_set_wire_format !== "boolean")
                            return "message_set_wire_format: boolean expected";
                    if (message.no_standard_descriptor_accessor != null && message.hasOwnProperty("no_standard_descriptor_accessor"))
                        if (typeof message.no_standard_descriptor_accessor !== "boolean")
                            return "no_standard_descriptor_accessor: boolean expected";
                    if (message.uninterpreted_option != null && message.hasOwnProperty("uninterpreted_option")) {
                        if (!Array.isArray(message.uninterpreted_option))
                            return "uninterpreted_option: array expected";
                        for (var i = 0; i < message.uninterpreted_option.length; ++i) {
                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpreted_option[i]);
                            if (error)
                                return "uninterpreted_option." + error;
                        }
                    }
                    if (message[".msgpool_soft_limit"] != null && message.hasOwnProperty(".msgpool_soft_limit"))
                        if (!$util.isInteger(message[".msgpool_soft_limit"]))
                            return ".msgpool_soft_limit: integer expected";
                    if (message[".msgpool_hard_limit"] != null && message.hasOwnProperty(".msgpool_hard_limit"))
                        if (!$util.isInteger(message[".msgpool_hard_limit"]))
                            return ".msgpool_hard_limit: integer expected";
                    return null;
                };
    
                /**
                 * Creates a MessageOptions message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.MessageOptions
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.MessageOptions} MessageOptions
                 */
                MessageOptions.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.MessageOptions)
                        return object;
                    var message = new $root.google.protobuf.MessageOptions();
                    if (object.message_set_wire_format != null)
                        message.message_set_wire_format = Boolean(object.message_set_wire_format);
                    if (object.no_standard_descriptor_accessor != null)
                        message.no_standard_descriptor_accessor = Boolean(object.no_standard_descriptor_accessor);
                    if (object.uninterpreted_option) {
                        if (!Array.isArray(object.uninterpreted_option))
                            throw TypeError(".google.protobuf.MessageOptions.uninterpreted_option: array expected");
                        message.uninterpreted_option = [];
                        for (var i = 0; i < object.uninterpreted_option.length; ++i) {
                            if (typeof object.uninterpreted_option[i] !== "object")
                                throw TypeError(".google.protobuf.MessageOptions.uninterpreted_option: object expected");
                            message.uninterpreted_option[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpreted_option[i]);
                        }
                    }
                    if (object[".msgpool_soft_limit"] != null)
                        message[".msgpool_soft_limit"] = object[".msgpool_soft_limit"] | 0;
                    if (object[".msgpool_hard_limit"] != null)
                        message[".msgpool_hard_limit"] = object[".msgpool_hard_limit"] | 0;
                    return message;
                };
    
                /**
                 * Creates a plain object from a MessageOptions message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.MessageOptions
                 * @static
                 * @param {google.protobuf.MessageOptions} message MessageOptions
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                MessageOptions.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults)
                        object.uninterpreted_option = [];
                    if (options.defaults) {
                        object.message_set_wire_format = false;
                        object.no_standard_descriptor_accessor = false;
                        object[".msgpool_soft_limit"] = 32;
                        object[".msgpool_hard_limit"] = 384;
                    }
                    if (message.message_set_wire_format != null && message.hasOwnProperty("message_set_wire_format"))
                        object.message_set_wire_format = message.message_set_wire_format;
                    if (message.no_standard_descriptor_accessor != null && message.hasOwnProperty("no_standard_descriptor_accessor"))
                        object.no_standard_descriptor_accessor = message.no_standard_descriptor_accessor;
                    if (message.uninterpreted_option && message.uninterpreted_option.length) {
                        object.uninterpreted_option = [];
                        for (var j = 0; j < message.uninterpreted_option.length; ++j)
                            object.uninterpreted_option[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpreted_option[j], options);
                    }
                    if (message[".msgpool_soft_limit"] != null && message.hasOwnProperty(".msgpool_soft_limit"))
                        object[".msgpool_soft_limit"] = message[".msgpool_soft_limit"];
                    if (message[".msgpool_hard_limit"] != null && message.hasOwnProperty(".msgpool_hard_limit"))
                        object[".msgpool_hard_limit"] = message[".msgpool_hard_limit"];
                    return object;
                };
    
                /**
                 * Converts this MessageOptions to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.MessageOptions
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                MessageOptions.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                return MessageOptions;
            })();
    
            protobuf.FieldOptions = (function() {
    
                /**
                 * Properties of a FieldOptions.
                 * @memberof google.protobuf
                 * @interface IFieldOptions
                 * @property {google.protobuf.FieldOptions.CType|null} [ctype] FieldOptions ctype
                 * @property {boolean|null} [packed] FieldOptions packed
                 * @property {boolean|null} [deprecated] FieldOptions deprecated
                 * @property {string|null} [experimental_map_key] FieldOptions experimental_map_key
                 * @property {Array.<google.protobuf.IUninterpretedOption>|null} [uninterpreted_option] FieldOptions uninterpreted_option
                 * @property {boolean|null} [".key_field"] FieldOptions .key_field
                 */
    
                /**
                 * Constructs a new FieldOptions.
                 * @memberof google.protobuf
                 * @classdesc Represents a FieldOptions.
                 * @implements IFieldOptions
                 * @constructor
                 * @param {google.protobuf.IFieldOptions=} [properties] Properties to set
                 */
                function FieldOptions(properties) {
                    this.uninterpreted_option = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * FieldOptions ctype.
                 * @member {google.protobuf.FieldOptions.CType} ctype
                 * @memberof google.protobuf.FieldOptions
                 * @instance
                 */
                FieldOptions.prototype.ctype = 0;
    
                /**
                 * FieldOptions packed.
                 * @member {boolean} packed
                 * @memberof google.protobuf.FieldOptions
                 * @instance
                 */
                FieldOptions.prototype.packed = false;
    
                /**
                 * FieldOptions deprecated.
                 * @member {boolean} deprecated
                 * @memberof google.protobuf.FieldOptions
                 * @instance
                 */
                FieldOptions.prototype.deprecated = false;
    
                /**
                 * FieldOptions experimental_map_key.
                 * @member {string} experimental_map_key
                 * @memberof google.protobuf.FieldOptions
                 * @instance
                 */
                FieldOptions.prototype.experimental_map_key = "";
    
                /**
                 * FieldOptions uninterpreted_option.
                 * @member {Array.<google.protobuf.IUninterpretedOption>} uninterpreted_option
                 * @memberof google.protobuf.FieldOptions
                 * @instance
                 */
                FieldOptions.prototype.uninterpreted_option = $util.emptyArray;
    
                /**
                 * FieldOptions .key_field.
                 * @member {boolean} .key_field
                 * @memberof google.protobuf.FieldOptions
                 * @instance
                 */
                FieldOptions.prototype[".key_field"] = false;
    
                /**
                 * Creates a new FieldOptions instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.FieldOptions
                 * @static
                 * @param {google.protobuf.IFieldOptions=} [properties] Properties to set
                 * @returns {google.protobuf.FieldOptions} FieldOptions instance
                 */
                FieldOptions.create = function create(properties) {
                    return new FieldOptions(properties);
                };
    
                /**
                 * Encodes the specified FieldOptions message. Does not implicitly {@link google.protobuf.FieldOptions.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.FieldOptions
                 * @static
                 * @param {google.protobuf.IFieldOptions} message FieldOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                FieldOptions.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.ctype != null && message.hasOwnProperty("ctype"))
                        writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ctype);
                    if (message.packed != null && message.hasOwnProperty("packed"))
                        writer.uint32(/* id 2, wireType 0 =*/16).bool(message.packed);
                    if (message.deprecated != null && message.hasOwnProperty("deprecated"))
                        writer.uint32(/* id 3, wireType 0 =*/24).bool(message.deprecated);
                    if (message.experimental_map_key != null && message.hasOwnProperty("experimental_map_key"))
                        writer.uint32(/* id 9, wireType 2 =*/74).string(message.experimental_map_key);
                    if (message.uninterpreted_option != null && message.uninterpreted_option.length)
                        for (var i = 0; i < message.uninterpreted_option.length; ++i)
                            $root.google.protobuf.UninterpretedOption.encode(message.uninterpreted_option[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim();
                    if (message[".key_field"] != null && message.hasOwnProperty(".key_field"))
                        writer.uint32(/* id 60000, wireType 0 =*/480000).bool(message[".key_field"]);
                    return writer;
                };
    
                /**
                 * Encodes the specified FieldOptions message, length delimited. Does not implicitly {@link google.protobuf.FieldOptions.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.FieldOptions
                 * @static
                 * @param {google.protobuf.IFieldOptions} message FieldOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                FieldOptions.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes a FieldOptions message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.FieldOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.FieldOptions} FieldOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                FieldOptions.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.FieldOptions();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 1:
                            message.ctype = reader.int32();
                            break;
                        case 2:
                            message.packed = reader.bool();
                            break;
                        case 3:
                            message.deprecated = reader.bool();
                            break;
                        case 9:
                            message.experimental_map_key = reader.string();
                            break;
                        case 999:
                            if (!(message.uninterpreted_option && message.uninterpreted_option.length))
                                message.uninterpreted_option = [];
                            message.uninterpreted_option.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
                            break;
                        case 60000:
                            message[".key_field"] = reader.bool();
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes a FieldOptions message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.FieldOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.FieldOptions} FieldOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                FieldOptions.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies a FieldOptions message.
                 * @function verify
                 * @memberof google.protobuf.FieldOptions
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                FieldOptions.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.ctype != null && message.hasOwnProperty("ctype"))
                        switch (message.ctype) {
                        default:
                            return "ctype: enum value expected";
                        case 0:
                        case 1:
                        case 2:
                            break;
                        }
                    if (message.packed != null && message.hasOwnProperty("packed"))
                        if (typeof message.packed !== "boolean")
                            return "packed: boolean expected";
                    if (message.deprecated != null && message.hasOwnProperty("deprecated"))
                        if (typeof message.deprecated !== "boolean")
                            return "deprecated: boolean expected";
                    if (message.experimental_map_key != null && message.hasOwnProperty("experimental_map_key"))
                        if (!$util.isString(message.experimental_map_key))
                            return "experimental_map_key: string expected";
                    if (message.uninterpreted_option != null && message.hasOwnProperty("uninterpreted_option")) {
                        if (!Array.isArray(message.uninterpreted_option))
                            return "uninterpreted_option: array expected";
                        for (var i = 0; i < message.uninterpreted_option.length; ++i) {
                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpreted_option[i]);
                            if (error)
                                return "uninterpreted_option." + error;
                        }
                    }
                    if (message[".key_field"] != null && message.hasOwnProperty(".key_field"))
                        if (typeof message[".key_field"] !== "boolean")
                            return ".key_field: boolean expected";
                    return null;
                };
    
                /**
                 * Creates a FieldOptions message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.FieldOptions
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.FieldOptions} FieldOptions
                 */
                FieldOptions.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.FieldOptions)
                        return object;
                    var message = new $root.google.protobuf.FieldOptions();
                    switch (object.ctype) {
                    case "STRING":
                    case 0:
                        message.ctype = 0;
                        break;
                    case "CORD":
                    case 1:
                        message.ctype = 1;
                        break;
                    case "STRING_PIECE":
                    case 2:
                        message.ctype = 2;
                        break;
                    }
                    if (object.packed != null)
                        message.packed = Boolean(object.packed);
                    if (object.deprecated != null)
                        message.deprecated = Boolean(object.deprecated);
                    if (object.experimental_map_key != null)
                        message.experimental_map_key = String(object.experimental_map_key);
                    if (object.uninterpreted_option) {
                        if (!Array.isArray(object.uninterpreted_option))
                            throw TypeError(".google.protobuf.FieldOptions.uninterpreted_option: array expected");
                        message.uninterpreted_option = [];
                        for (var i = 0; i < object.uninterpreted_option.length; ++i) {
                            if (typeof object.uninterpreted_option[i] !== "object")
                                throw TypeError(".google.protobuf.FieldOptions.uninterpreted_option: object expected");
                            message.uninterpreted_option[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpreted_option[i]);
                        }
                    }
                    if (object[".key_field"] != null)
                        message[".key_field"] = Boolean(object[".key_field"]);
                    return message;
                };
    
                /**
                 * Creates a plain object from a FieldOptions message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.FieldOptions
                 * @static
                 * @param {google.protobuf.FieldOptions} message FieldOptions
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                FieldOptions.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults)
                        object.uninterpreted_option = [];
                    if (options.defaults) {
                        object.ctype = options.enums === String ? "STRING" : 0;
                        object.packed = false;
                        object.deprecated = false;
                        object.experimental_map_key = "";
                        object[".key_field"] = false;
                    }
                    if (message.ctype != null && message.hasOwnProperty("ctype"))
                        object.ctype = options.enums === String ? $root.google.protobuf.FieldOptions.CType[message.ctype] : message.ctype;
                    if (message.packed != null && message.hasOwnProperty("packed"))
                        object.packed = message.packed;
                    if (message.deprecated != null && message.hasOwnProperty("deprecated"))
                        object.deprecated = message.deprecated;
                    if (message.experimental_map_key != null && message.hasOwnProperty("experimental_map_key"))
                        object.experimental_map_key = message.experimental_map_key;
                    if (message.uninterpreted_option && message.uninterpreted_option.length) {
                        object.uninterpreted_option = [];
                        for (var j = 0; j < message.uninterpreted_option.length; ++j)
                            object.uninterpreted_option[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpreted_option[j], options);
                    }
                    if (message[".key_field"] != null && message.hasOwnProperty(".key_field"))
                        object[".key_field"] = message[".key_field"];
                    return object;
                };
    
                /**
                 * Converts this FieldOptions to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.FieldOptions
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                FieldOptions.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                /**
                 * CType enum.
                 * @name google.protobuf.FieldOptions.CType
                 * @enum {string}
                 * @property {number} STRING=0 STRING value
                 * @property {number} CORD=1 CORD value
                 * @property {number} STRING_PIECE=2 STRING_PIECE value
                 */
                FieldOptions.CType = (function() {
                    var valuesById = {}, values = Object.create(valuesById);
                    values[valuesById[0] = "STRING"] = 0;
                    values[valuesById[1] = "CORD"] = 1;
                    values[valuesById[2] = "STRING_PIECE"] = 2;
                    return values;
                })();
    
                return FieldOptions;
            })();
    
            protobuf.EnumOptions = (function() {
    
                /**
                 * Properties of an EnumOptions.
                 * @memberof google.protobuf
                 * @interface IEnumOptions
                 * @property {Array.<google.protobuf.IUninterpretedOption>|null} [uninterpreted_option] EnumOptions uninterpreted_option
                 */
    
                /**
                 * Constructs a new EnumOptions.
                 * @memberof google.protobuf
                 * @classdesc Represents an EnumOptions.
                 * @implements IEnumOptions
                 * @constructor
                 * @param {google.protobuf.IEnumOptions=} [properties] Properties to set
                 */
                function EnumOptions(properties) {
                    this.uninterpreted_option = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * EnumOptions uninterpreted_option.
                 * @member {Array.<google.protobuf.IUninterpretedOption>} uninterpreted_option
                 * @memberof google.protobuf.EnumOptions
                 * @instance
                 */
                EnumOptions.prototype.uninterpreted_option = $util.emptyArray;
    
                /**
                 * Creates a new EnumOptions instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.EnumOptions
                 * @static
                 * @param {google.protobuf.IEnumOptions=} [properties] Properties to set
                 * @returns {google.protobuf.EnumOptions} EnumOptions instance
                 */
                EnumOptions.create = function create(properties) {
                    return new EnumOptions(properties);
                };
    
                /**
                 * Encodes the specified EnumOptions message. Does not implicitly {@link google.protobuf.EnumOptions.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.EnumOptions
                 * @static
                 * @param {google.protobuf.IEnumOptions} message EnumOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                EnumOptions.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.uninterpreted_option != null && message.uninterpreted_option.length)
                        for (var i = 0; i < message.uninterpreted_option.length; ++i)
                            $root.google.protobuf.UninterpretedOption.encode(message.uninterpreted_option[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified EnumOptions message, length delimited. Does not implicitly {@link google.protobuf.EnumOptions.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.EnumOptions
                 * @static
                 * @param {google.protobuf.IEnumOptions} message EnumOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                EnumOptions.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes an EnumOptions message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.EnumOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.EnumOptions} EnumOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                EnumOptions.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumOptions();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 999:
                            if (!(message.uninterpreted_option && message.uninterpreted_option.length))
                                message.uninterpreted_option = [];
                            message.uninterpreted_option.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes an EnumOptions message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.EnumOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.EnumOptions} EnumOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                EnumOptions.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies an EnumOptions message.
                 * @function verify
                 * @memberof google.protobuf.EnumOptions
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                EnumOptions.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.uninterpreted_option != null && message.hasOwnProperty("uninterpreted_option")) {
                        if (!Array.isArray(message.uninterpreted_option))
                            return "uninterpreted_option: array expected";
                        for (var i = 0; i < message.uninterpreted_option.length; ++i) {
                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpreted_option[i]);
                            if (error)
                                return "uninterpreted_option." + error;
                        }
                    }
                    return null;
                };
    
                /**
                 * Creates an EnumOptions message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.EnumOptions
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.EnumOptions} EnumOptions
                 */
                EnumOptions.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.EnumOptions)
                        return object;
                    var message = new $root.google.protobuf.EnumOptions();
                    if (object.uninterpreted_option) {
                        if (!Array.isArray(object.uninterpreted_option))
                            throw TypeError(".google.protobuf.EnumOptions.uninterpreted_option: array expected");
                        message.uninterpreted_option = [];
                        for (var i = 0; i < object.uninterpreted_option.length; ++i) {
                            if (typeof object.uninterpreted_option[i] !== "object")
                                throw TypeError(".google.protobuf.EnumOptions.uninterpreted_option: object expected");
                            message.uninterpreted_option[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpreted_option[i]);
                        }
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from an EnumOptions message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.EnumOptions
                 * @static
                 * @param {google.protobuf.EnumOptions} message EnumOptions
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                EnumOptions.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults)
                        object.uninterpreted_option = [];
                    if (message.uninterpreted_option && message.uninterpreted_option.length) {
                        object.uninterpreted_option = [];
                        for (var j = 0; j < message.uninterpreted_option.length; ++j)
                            object.uninterpreted_option[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpreted_option[j], options);
                    }
                    return object;
                };
    
                /**
                 * Converts this EnumOptions to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.EnumOptions
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                EnumOptions.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                return EnumOptions;
            })();
    
            protobuf.EnumValueOptions = (function() {
    
                /**
                 * Properties of an EnumValueOptions.
                 * @memberof google.protobuf
                 * @interface IEnumValueOptions
                 * @property {Array.<google.protobuf.IUninterpretedOption>|null} [uninterpreted_option] EnumValueOptions uninterpreted_option
                 */
    
                /**
                 * Constructs a new EnumValueOptions.
                 * @memberof google.protobuf
                 * @classdesc Represents an EnumValueOptions.
                 * @implements IEnumValueOptions
                 * @constructor
                 * @param {google.protobuf.IEnumValueOptions=} [properties] Properties to set
                 */
                function EnumValueOptions(properties) {
                    this.uninterpreted_option = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * EnumValueOptions uninterpreted_option.
                 * @member {Array.<google.protobuf.IUninterpretedOption>} uninterpreted_option
                 * @memberof google.protobuf.EnumValueOptions
                 * @instance
                 */
                EnumValueOptions.prototype.uninterpreted_option = $util.emptyArray;
    
                /**
                 * Creates a new EnumValueOptions instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.EnumValueOptions
                 * @static
                 * @param {google.protobuf.IEnumValueOptions=} [properties] Properties to set
                 * @returns {google.protobuf.EnumValueOptions} EnumValueOptions instance
                 */
                EnumValueOptions.create = function create(properties) {
                    return new EnumValueOptions(properties);
                };
    
                /**
                 * Encodes the specified EnumValueOptions message. Does not implicitly {@link google.protobuf.EnumValueOptions.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.EnumValueOptions
                 * @static
                 * @param {google.protobuf.IEnumValueOptions} message EnumValueOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                EnumValueOptions.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.uninterpreted_option != null && message.uninterpreted_option.length)
                        for (var i = 0; i < message.uninterpreted_option.length; ++i)
                            $root.google.protobuf.UninterpretedOption.encode(message.uninterpreted_option[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified EnumValueOptions message, length delimited. Does not implicitly {@link google.protobuf.EnumValueOptions.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.EnumValueOptions
                 * @static
                 * @param {google.protobuf.IEnumValueOptions} message EnumValueOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                EnumValueOptions.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes an EnumValueOptions message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.EnumValueOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.EnumValueOptions} EnumValueOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                EnumValueOptions.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.EnumValueOptions();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 999:
                            if (!(message.uninterpreted_option && message.uninterpreted_option.length))
                                message.uninterpreted_option = [];
                            message.uninterpreted_option.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes an EnumValueOptions message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.EnumValueOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.EnumValueOptions} EnumValueOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                EnumValueOptions.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies an EnumValueOptions message.
                 * @function verify
                 * @memberof google.protobuf.EnumValueOptions
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                EnumValueOptions.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.uninterpreted_option != null && message.hasOwnProperty("uninterpreted_option")) {
                        if (!Array.isArray(message.uninterpreted_option))
                            return "uninterpreted_option: array expected";
                        for (var i = 0; i < message.uninterpreted_option.length; ++i) {
                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpreted_option[i]);
                            if (error)
                                return "uninterpreted_option." + error;
                        }
                    }
                    return null;
                };
    
                /**
                 * Creates an EnumValueOptions message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.EnumValueOptions
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.EnumValueOptions} EnumValueOptions
                 */
                EnumValueOptions.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.EnumValueOptions)
                        return object;
                    var message = new $root.google.protobuf.EnumValueOptions();
                    if (object.uninterpreted_option) {
                        if (!Array.isArray(object.uninterpreted_option))
                            throw TypeError(".google.protobuf.EnumValueOptions.uninterpreted_option: array expected");
                        message.uninterpreted_option = [];
                        for (var i = 0; i < object.uninterpreted_option.length; ++i) {
                            if (typeof object.uninterpreted_option[i] !== "object")
                                throw TypeError(".google.protobuf.EnumValueOptions.uninterpreted_option: object expected");
                            message.uninterpreted_option[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpreted_option[i]);
                        }
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from an EnumValueOptions message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.EnumValueOptions
                 * @static
                 * @param {google.protobuf.EnumValueOptions} message EnumValueOptions
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                EnumValueOptions.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults)
                        object.uninterpreted_option = [];
                    if (message.uninterpreted_option && message.uninterpreted_option.length) {
                        object.uninterpreted_option = [];
                        for (var j = 0; j < message.uninterpreted_option.length; ++j)
                            object.uninterpreted_option[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpreted_option[j], options);
                    }
                    return object;
                };
    
                /**
                 * Converts this EnumValueOptions to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.EnumValueOptions
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                EnumValueOptions.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                return EnumValueOptions;
            })();
    
            protobuf.ServiceOptions = (function() {
    
                /**
                 * Properties of a ServiceOptions.
                 * @memberof google.protobuf
                 * @interface IServiceOptions
                 * @property {Array.<google.protobuf.IUninterpretedOption>|null} [uninterpreted_option] ServiceOptions uninterpreted_option
                 */
    
                /**
                 * Constructs a new ServiceOptions.
                 * @memberof google.protobuf
                 * @classdesc Represents a ServiceOptions.
                 * @implements IServiceOptions
                 * @constructor
                 * @param {google.protobuf.IServiceOptions=} [properties] Properties to set
                 */
                function ServiceOptions(properties) {
                    this.uninterpreted_option = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * ServiceOptions uninterpreted_option.
                 * @member {Array.<google.protobuf.IUninterpretedOption>} uninterpreted_option
                 * @memberof google.protobuf.ServiceOptions
                 * @instance
                 */
                ServiceOptions.prototype.uninterpreted_option = $util.emptyArray;
    
                /**
                 * Creates a new ServiceOptions instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.ServiceOptions
                 * @static
                 * @param {google.protobuf.IServiceOptions=} [properties] Properties to set
                 * @returns {google.protobuf.ServiceOptions} ServiceOptions instance
                 */
                ServiceOptions.create = function create(properties) {
                    return new ServiceOptions(properties);
                };
    
                /**
                 * Encodes the specified ServiceOptions message. Does not implicitly {@link google.protobuf.ServiceOptions.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.ServiceOptions
                 * @static
                 * @param {google.protobuf.IServiceOptions} message ServiceOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                ServiceOptions.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.uninterpreted_option != null && message.uninterpreted_option.length)
                        for (var i = 0; i < message.uninterpreted_option.length; ++i)
                            $root.google.protobuf.UninterpretedOption.encode(message.uninterpreted_option[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified ServiceOptions message, length delimited. Does not implicitly {@link google.protobuf.ServiceOptions.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.ServiceOptions
                 * @static
                 * @param {google.protobuf.IServiceOptions} message ServiceOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                ServiceOptions.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes a ServiceOptions message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.ServiceOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.ServiceOptions} ServiceOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                ServiceOptions.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.ServiceOptions();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 999:
                            if (!(message.uninterpreted_option && message.uninterpreted_option.length))
                                message.uninterpreted_option = [];
                            message.uninterpreted_option.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes a ServiceOptions message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.ServiceOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.ServiceOptions} ServiceOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                ServiceOptions.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies a ServiceOptions message.
                 * @function verify
                 * @memberof google.protobuf.ServiceOptions
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                ServiceOptions.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.uninterpreted_option != null && message.hasOwnProperty("uninterpreted_option")) {
                        if (!Array.isArray(message.uninterpreted_option))
                            return "uninterpreted_option: array expected";
                        for (var i = 0; i < message.uninterpreted_option.length; ++i) {
                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpreted_option[i]);
                            if (error)
                                return "uninterpreted_option." + error;
                        }
                    }
                    return null;
                };
    
                /**
                 * Creates a ServiceOptions message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.ServiceOptions
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.ServiceOptions} ServiceOptions
                 */
                ServiceOptions.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.ServiceOptions)
                        return object;
                    var message = new $root.google.protobuf.ServiceOptions();
                    if (object.uninterpreted_option) {
                        if (!Array.isArray(object.uninterpreted_option))
                            throw TypeError(".google.protobuf.ServiceOptions.uninterpreted_option: array expected");
                        message.uninterpreted_option = [];
                        for (var i = 0; i < object.uninterpreted_option.length; ++i) {
                            if (typeof object.uninterpreted_option[i] !== "object")
                                throw TypeError(".google.protobuf.ServiceOptions.uninterpreted_option: object expected");
                            message.uninterpreted_option[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpreted_option[i]);
                        }
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from a ServiceOptions message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.ServiceOptions
                 * @static
                 * @param {google.protobuf.ServiceOptions} message ServiceOptions
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                ServiceOptions.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults)
                        object.uninterpreted_option = [];
                    if (message.uninterpreted_option && message.uninterpreted_option.length) {
                        object.uninterpreted_option = [];
                        for (var j = 0; j < message.uninterpreted_option.length; ++j)
                            object.uninterpreted_option[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpreted_option[j], options);
                    }
                    return object;
                };
    
                /**
                 * Converts this ServiceOptions to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.ServiceOptions
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                ServiceOptions.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                return ServiceOptions;
            })();
    
            protobuf.MethodOptions = (function() {
    
                /**
                 * Properties of a MethodOptions.
                 * @memberof google.protobuf
                 * @interface IMethodOptions
                 * @property {Array.<google.protobuf.IUninterpretedOption>|null} [uninterpreted_option] MethodOptions uninterpreted_option
                 */
    
                /**
                 * Constructs a new MethodOptions.
                 * @memberof google.protobuf
                 * @classdesc Represents a MethodOptions.
                 * @implements IMethodOptions
                 * @constructor
                 * @param {google.protobuf.IMethodOptions=} [properties] Properties to set
                 */
                function MethodOptions(properties) {
                    this.uninterpreted_option = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * MethodOptions uninterpreted_option.
                 * @member {Array.<google.protobuf.IUninterpretedOption>} uninterpreted_option
                 * @memberof google.protobuf.MethodOptions
                 * @instance
                 */
                MethodOptions.prototype.uninterpreted_option = $util.emptyArray;
    
                /**
                 * Creates a new MethodOptions instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.MethodOptions
                 * @static
                 * @param {google.protobuf.IMethodOptions=} [properties] Properties to set
                 * @returns {google.protobuf.MethodOptions} MethodOptions instance
                 */
                MethodOptions.create = function create(properties) {
                    return new MethodOptions(properties);
                };
    
                /**
                 * Encodes the specified MethodOptions message. Does not implicitly {@link google.protobuf.MethodOptions.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.MethodOptions
                 * @static
                 * @param {google.protobuf.IMethodOptions} message MethodOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                MethodOptions.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.uninterpreted_option != null && message.uninterpreted_option.length)
                        for (var i = 0; i < message.uninterpreted_option.length; ++i)
                            $root.google.protobuf.UninterpretedOption.encode(message.uninterpreted_option[i], writer.uint32(/* id 999, wireType 2 =*/7994).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified MethodOptions message, length delimited. Does not implicitly {@link google.protobuf.MethodOptions.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.MethodOptions
                 * @static
                 * @param {google.protobuf.IMethodOptions} message MethodOptions message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                MethodOptions.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes a MethodOptions message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.MethodOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.MethodOptions} MethodOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                MethodOptions.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.MethodOptions();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 999:
                            if (!(message.uninterpreted_option && message.uninterpreted_option.length))
                                message.uninterpreted_option = [];
                            message.uninterpreted_option.push($root.google.protobuf.UninterpretedOption.decode(reader, reader.uint32()));
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes a MethodOptions message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.MethodOptions
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.MethodOptions} MethodOptions
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                MethodOptions.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies a MethodOptions message.
                 * @function verify
                 * @memberof google.protobuf.MethodOptions
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                MethodOptions.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.uninterpreted_option != null && message.hasOwnProperty("uninterpreted_option")) {
                        if (!Array.isArray(message.uninterpreted_option))
                            return "uninterpreted_option: array expected";
                        for (var i = 0; i < message.uninterpreted_option.length; ++i) {
                            var error = $root.google.protobuf.UninterpretedOption.verify(message.uninterpreted_option[i]);
                            if (error)
                                return "uninterpreted_option." + error;
                        }
                    }
                    return null;
                };
    
                /**
                 * Creates a MethodOptions message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.MethodOptions
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.MethodOptions} MethodOptions
                 */
                MethodOptions.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.MethodOptions)
                        return object;
                    var message = new $root.google.protobuf.MethodOptions();
                    if (object.uninterpreted_option) {
                        if (!Array.isArray(object.uninterpreted_option))
                            throw TypeError(".google.protobuf.MethodOptions.uninterpreted_option: array expected");
                        message.uninterpreted_option = [];
                        for (var i = 0; i < object.uninterpreted_option.length; ++i) {
                            if (typeof object.uninterpreted_option[i] !== "object")
                                throw TypeError(".google.protobuf.MethodOptions.uninterpreted_option: object expected");
                            message.uninterpreted_option[i] = $root.google.protobuf.UninterpretedOption.fromObject(object.uninterpreted_option[i]);
                        }
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from a MethodOptions message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.MethodOptions
                 * @static
                 * @param {google.protobuf.MethodOptions} message MethodOptions
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                MethodOptions.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults)
                        object.uninterpreted_option = [];
                    if (message.uninterpreted_option && message.uninterpreted_option.length) {
                        object.uninterpreted_option = [];
                        for (var j = 0; j < message.uninterpreted_option.length; ++j)
                            object.uninterpreted_option[j] = $root.google.protobuf.UninterpretedOption.toObject(message.uninterpreted_option[j], options);
                    }
                    return object;
                };
    
                /**
                 * Converts this MethodOptions to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.MethodOptions
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                MethodOptions.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                return MethodOptions;
            })();
    
            protobuf.UninterpretedOption = (function() {
    
                /**
                 * Properties of an UninterpretedOption.
                 * @memberof google.protobuf
                 * @interface IUninterpretedOption
                 * @property {Array.<google.protobuf.UninterpretedOption.INamePart>|null} [name] UninterpretedOption name
                 * @property {string|null} [identifier_value] UninterpretedOption identifier_value
                 * @property {number|Long|null} [positive_int_value] UninterpretedOption positive_int_value
                 * @property {number|Long|null} [negative_int_value] UninterpretedOption negative_int_value
                 * @property {number|null} [double_value] UninterpretedOption double_value
                 * @property {Uint8Array|null} [string_value] UninterpretedOption string_value
                 * @property {string|null} [aggregate_value] UninterpretedOption aggregate_value
                 */
    
                /**
                 * Constructs a new UninterpretedOption.
                 * @memberof google.protobuf
                 * @classdesc Represents an UninterpretedOption.
                 * @implements IUninterpretedOption
                 * @constructor
                 * @param {google.protobuf.IUninterpretedOption=} [properties] Properties to set
                 */
                function UninterpretedOption(properties) {
                    this.name = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * UninterpretedOption name.
                 * @member {Array.<google.protobuf.UninterpretedOption.INamePart>} name
                 * @memberof google.protobuf.UninterpretedOption
                 * @instance
                 */
                UninterpretedOption.prototype.name = $util.emptyArray;
    
                /**
                 * UninterpretedOption identifier_value.
                 * @member {string} identifier_value
                 * @memberof google.protobuf.UninterpretedOption
                 * @instance
                 */
                UninterpretedOption.prototype.identifier_value = "";
    
                /**
                 * UninterpretedOption positive_int_value.
                 * @member {number|Long} positive_int_value
                 * @memberof google.protobuf.UninterpretedOption
                 * @instance
                 */
                UninterpretedOption.prototype.positive_int_value = $util.Long ? $util.Long.fromBits(0,0,true) : 0;
    
                /**
                 * UninterpretedOption negative_int_value.
                 * @member {number|Long} negative_int_value
                 * @memberof google.protobuf.UninterpretedOption
                 * @instance
                 */
                UninterpretedOption.prototype.negative_int_value = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
    
                /**
                 * UninterpretedOption double_value.
                 * @member {number} double_value
                 * @memberof google.protobuf.UninterpretedOption
                 * @instance
                 */
                UninterpretedOption.prototype.double_value = 0;
    
                /**
                 * UninterpretedOption string_value.
                 * @member {Uint8Array} string_value
                 * @memberof google.protobuf.UninterpretedOption
                 * @instance
                 */
                UninterpretedOption.prototype.string_value = $util.newBuffer([]);
    
                /**
                 * UninterpretedOption aggregate_value.
                 * @member {string} aggregate_value
                 * @memberof google.protobuf.UninterpretedOption
                 * @instance
                 */
                UninterpretedOption.prototype.aggregate_value = "";
    
                /**
                 * Creates a new UninterpretedOption instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.UninterpretedOption
                 * @static
                 * @param {google.protobuf.IUninterpretedOption=} [properties] Properties to set
                 * @returns {google.protobuf.UninterpretedOption} UninterpretedOption instance
                 */
                UninterpretedOption.create = function create(properties) {
                    return new UninterpretedOption(properties);
                };
    
                /**
                 * Encodes the specified UninterpretedOption message. Does not implicitly {@link google.protobuf.UninterpretedOption.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.UninterpretedOption
                 * @static
                 * @param {google.protobuf.IUninterpretedOption} message UninterpretedOption message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                UninterpretedOption.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.name != null && message.name.length)
                        for (var i = 0; i < message.name.length; ++i)
                            $root.google.protobuf.UninterpretedOption.NamePart.encode(message.name[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
                    if (message.identifier_value != null && message.hasOwnProperty("identifier_value"))
                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.identifier_value);
                    if (message.positive_int_value != null && message.hasOwnProperty("positive_int_value"))
                        writer.uint32(/* id 4, wireType 0 =*/32).uint64(message.positive_int_value);
                    if (message.negative_int_value != null && message.hasOwnProperty("negative_int_value"))
                        writer.uint32(/* id 5, wireType 0 =*/40).int64(message.negative_int_value);
                    if (message.double_value != null && message.hasOwnProperty("double_value"))
                        writer.uint32(/* id 6, wireType 1 =*/49).double(message.double_value);
                    if (message.string_value != null && message.hasOwnProperty("string_value"))
                        writer.uint32(/* id 7, wireType 2 =*/58).bytes(message.string_value);
                    if (message.aggregate_value != null && message.hasOwnProperty("aggregate_value"))
                        writer.uint32(/* id 8, wireType 2 =*/66).string(message.aggregate_value);
                    return writer;
                };
    
                /**
                 * Encodes the specified UninterpretedOption message, length delimited. Does not implicitly {@link google.protobuf.UninterpretedOption.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.UninterpretedOption
                 * @static
                 * @param {google.protobuf.IUninterpretedOption} message UninterpretedOption message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                UninterpretedOption.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes an UninterpretedOption message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.UninterpretedOption
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.UninterpretedOption} UninterpretedOption
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                UninterpretedOption.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 2:
                            if (!(message.name && message.name.length))
                                message.name = [];
                            message.name.push($root.google.protobuf.UninterpretedOption.NamePart.decode(reader, reader.uint32()));
                            break;
                        case 3:
                            message.identifier_value = reader.string();
                            break;
                        case 4:
                            message.positive_int_value = reader.uint64();
                            break;
                        case 5:
                            message.negative_int_value = reader.int64();
                            break;
                        case 6:
                            message.double_value = reader.double();
                            break;
                        case 7:
                            message.string_value = reader.bytes();
                            break;
                        case 8:
                            message.aggregate_value = reader.string();
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes an UninterpretedOption message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.UninterpretedOption
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.UninterpretedOption} UninterpretedOption
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                UninterpretedOption.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies an UninterpretedOption message.
                 * @function verify
                 * @memberof google.protobuf.UninterpretedOption
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                UninterpretedOption.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.name != null && message.hasOwnProperty("name")) {
                        if (!Array.isArray(message.name))
                            return "name: array expected";
                        for (var i = 0; i < message.name.length; ++i) {
                            var error = $root.google.protobuf.UninterpretedOption.NamePart.verify(message.name[i]);
                            if (error)
                                return "name." + error;
                        }
                    }
                    if (message.identifier_value != null && message.hasOwnProperty("identifier_value"))
                        if (!$util.isString(message.identifier_value))
                            return "identifier_value: string expected";
                    if (message.positive_int_value != null && message.hasOwnProperty("positive_int_value"))
                        if (!$util.isInteger(message.positive_int_value) && !(message.positive_int_value && $util.isInteger(message.positive_int_value.low) && $util.isInteger(message.positive_int_value.high)))
                            return "positive_int_value: integer|Long expected";
                    if (message.negative_int_value != null && message.hasOwnProperty("negative_int_value"))
                        if (!$util.isInteger(message.negative_int_value) && !(message.negative_int_value && $util.isInteger(message.negative_int_value.low) && $util.isInteger(message.negative_int_value.high)))
                            return "negative_int_value: integer|Long expected";
                    if (message.double_value != null && message.hasOwnProperty("double_value"))
                        if (typeof message.double_value !== "number")
                            return "double_value: number expected";
                    if (message.string_value != null && message.hasOwnProperty("string_value"))
                        if (!(message.string_value && typeof message.string_value.length === "number" || $util.isString(message.string_value)))
                            return "string_value: buffer expected";
                    if (message.aggregate_value != null && message.hasOwnProperty("aggregate_value"))
                        if (!$util.isString(message.aggregate_value))
                            return "aggregate_value: string expected";
                    return null;
                };
    
                /**
                 * Creates an UninterpretedOption message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.UninterpretedOption
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.UninterpretedOption} UninterpretedOption
                 */
                UninterpretedOption.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.UninterpretedOption)
                        return object;
                    var message = new $root.google.protobuf.UninterpretedOption();
                    if (object.name) {
                        if (!Array.isArray(object.name))
                            throw TypeError(".google.protobuf.UninterpretedOption.name: array expected");
                        message.name = [];
                        for (var i = 0; i < object.name.length; ++i) {
                            if (typeof object.name[i] !== "object")
                                throw TypeError(".google.protobuf.UninterpretedOption.name: object expected");
                            message.name[i] = $root.google.protobuf.UninterpretedOption.NamePart.fromObject(object.name[i]);
                        }
                    }
                    if (object.identifier_value != null)
                        message.identifier_value = String(object.identifier_value);
                    if (object.positive_int_value != null)
                        if ($util.Long)
                            (message.positive_int_value = $util.Long.fromValue(object.positive_int_value)).unsigned = true;
                        else if (typeof object.positive_int_value === "string")
                            message.positive_int_value = parseInt(object.positive_int_value, 10);
                        else if (typeof object.positive_int_value === "number")
                            message.positive_int_value = object.positive_int_value;
                        else if (typeof object.positive_int_value === "object")
                            message.positive_int_value = new $util.LongBits(object.positive_int_value.low >>> 0, object.positive_int_value.high >>> 0).toNumber(true);
                    if (object.negative_int_value != null)
                        if ($util.Long)
                            (message.negative_int_value = $util.Long.fromValue(object.negative_int_value)).unsigned = false;
                        else if (typeof object.negative_int_value === "string")
                            message.negative_int_value = parseInt(object.negative_int_value, 10);
                        else if (typeof object.negative_int_value === "number")
                            message.negative_int_value = object.negative_int_value;
                        else if (typeof object.negative_int_value === "object")
                            message.negative_int_value = new $util.LongBits(object.negative_int_value.low >>> 0, object.negative_int_value.high >>> 0).toNumber();
                    if (object.double_value != null)
                        message.double_value = Number(object.double_value);
                    if (object.string_value != null)
                        if (typeof object.string_value === "string")
                            $util.base64.decode(object.string_value, message.string_value = $util.newBuffer($util.base64.length(object.string_value)), 0);
                        else if (object.string_value.length)
                            message.string_value = object.string_value;
                    if (object.aggregate_value != null)
                        message.aggregate_value = String(object.aggregate_value);
                    return message;
                };
    
                /**
                 * Creates a plain object from an UninterpretedOption message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.UninterpretedOption
                 * @static
                 * @param {google.protobuf.UninterpretedOption} message UninterpretedOption
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                UninterpretedOption.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults)
                        object.name = [];
                    if (options.defaults) {
                        object.identifier_value = "";
                        if ($util.Long) {
                            var long = new $util.Long(0, 0, true);
                            object.positive_int_value = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                        } else
                            object.positive_int_value = options.longs === String ? "0" : 0;
                        if ($util.Long) {
                            var long = new $util.Long(0, 0, false);
                            object.negative_int_value = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
                        } else
                            object.negative_int_value = options.longs === String ? "0" : 0;
                        object.double_value = 0;
                        if (options.bytes === String)
                            object.string_value = "";
                        else {
                            object.string_value = [];
                            if (options.bytes !== Array)
                                object.string_value = $util.newBuffer(object.string_value);
                        }
                        object.aggregate_value = "";
                    }
                    if (message.name && message.name.length) {
                        object.name = [];
                        for (var j = 0; j < message.name.length; ++j)
                            object.name[j] = $root.google.protobuf.UninterpretedOption.NamePart.toObject(message.name[j], options);
                    }
                    if (message.identifier_value != null && message.hasOwnProperty("identifier_value"))
                        object.identifier_value = message.identifier_value;
                    if (message.positive_int_value != null && message.hasOwnProperty("positive_int_value"))
                        if (typeof message.positive_int_value === "number")
                            object.positive_int_value = options.longs === String ? String(message.positive_int_value) : message.positive_int_value;
                        else
                            object.positive_int_value = options.longs === String ? $util.Long.prototype.toString.call(message.positive_int_value) : options.longs === Number ? new $util.LongBits(message.positive_int_value.low >>> 0, message.positive_int_value.high >>> 0).toNumber(true) : message.positive_int_value;
                    if (message.negative_int_value != null && message.hasOwnProperty("negative_int_value"))
                        if (typeof message.negative_int_value === "number")
                            object.negative_int_value = options.longs === String ? String(message.negative_int_value) : message.negative_int_value;
                        else
                            object.negative_int_value = options.longs === String ? $util.Long.prototype.toString.call(message.negative_int_value) : options.longs === Number ? new $util.LongBits(message.negative_int_value.low >>> 0, message.negative_int_value.high >>> 0).toNumber() : message.negative_int_value;
                    if (message.double_value != null && message.hasOwnProperty("double_value"))
                        object.double_value = options.json && !isFinite(message.double_value) ? String(message.double_value) : message.double_value;
                    if (message.string_value != null && message.hasOwnProperty("string_value"))
                        object.string_value = options.bytes === String ? $util.base64.encode(message.string_value, 0, message.string_value.length) : options.bytes === Array ? Array.prototype.slice.call(message.string_value) : message.string_value;
                    if (message.aggregate_value != null && message.hasOwnProperty("aggregate_value"))
                        object.aggregate_value = message.aggregate_value;
                    return object;
                };
    
                /**
                 * Converts this UninterpretedOption to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.UninterpretedOption
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                UninterpretedOption.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                UninterpretedOption.NamePart = (function() {
    
                    /**
                     * Properties of a NamePart.
                     * @memberof google.protobuf.UninterpretedOption
                     * @interface INamePart
                     * @property {string} name_part NamePart name_part
                     * @property {boolean} is_extension NamePart is_extension
                     */
    
                    /**
                     * Constructs a new NamePart.
                     * @memberof google.protobuf.UninterpretedOption
                     * @classdesc Represents a NamePart.
                     * @implements INamePart
                     * @constructor
                     * @param {google.protobuf.UninterpretedOption.INamePart=} [properties] Properties to set
                     */
                    function NamePart(properties) {
                        if (properties)
                            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                                if (properties[keys[i]] != null)
                                    this[keys[i]] = properties[keys[i]];
                    }
    
                    /**
                     * NamePart name_part.
                     * @member {string} name_part
                     * @memberof google.protobuf.UninterpretedOption.NamePart
                     * @instance
                     */
                    NamePart.prototype.name_part = "";
    
                    /**
                     * NamePart is_extension.
                     * @member {boolean} is_extension
                     * @memberof google.protobuf.UninterpretedOption.NamePart
                     * @instance
                     */
                    NamePart.prototype.is_extension = false;
    
                    /**
                     * Creates a new NamePart instance using the specified properties.
                     * @function create
                     * @memberof google.protobuf.UninterpretedOption.NamePart
                     * @static
                     * @param {google.protobuf.UninterpretedOption.INamePart=} [properties] Properties to set
                     * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart instance
                     */
                    NamePart.create = function create(properties) {
                        return new NamePart(properties);
                    };
    
                    /**
                     * Encodes the specified NamePart message. Does not implicitly {@link google.protobuf.UninterpretedOption.NamePart.verify|verify} messages.
                     * @function encode
                     * @memberof google.protobuf.UninterpretedOption.NamePart
                     * @static
                     * @param {google.protobuf.UninterpretedOption.INamePart} message NamePart message or plain object to encode
                     * @param {$protobuf.Writer} [writer] Writer to encode to
                     * @returns {$protobuf.Writer} Writer
                     */
                    NamePart.encode = function encode(message, writer) {
                        if (!writer)
                            writer = $Writer.create();
                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.name_part);
                        writer.uint32(/* id 2, wireType 0 =*/16).bool(message.is_extension);
                        return writer;
                    };
    
                    /**
                     * Encodes the specified NamePart message, length delimited. Does not implicitly {@link google.protobuf.UninterpretedOption.NamePart.verify|verify} messages.
                     * @function encodeDelimited
                     * @memberof google.protobuf.UninterpretedOption.NamePart
                     * @static
                     * @param {google.protobuf.UninterpretedOption.INamePart} message NamePart message or plain object to encode
                     * @param {$protobuf.Writer} [writer] Writer to encode to
                     * @returns {$protobuf.Writer} Writer
                     */
                    NamePart.encodeDelimited = function encodeDelimited(message, writer) {
                        return this.encode(message, writer).ldelim();
                    };
    
                    /**
                     * Decodes a NamePart message from the specified reader or buffer.
                     * @function decode
                     * @memberof google.protobuf.UninterpretedOption.NamePart
                     * @static
                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                     * @param {number} [length] Message length if known beforehand
                     * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    NamePart.decode = function decode(reader, length) {
                        if (!(reader instanceof $Reader))
                            reader = $Reader.create(reader);
                        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.UninterpretedOption.NamePart();
                        while (reader.pos < end) {
                            var tag = reader.uint32();
                            switch (tag >>> 3) {
                            case 1:
                                message.name_part = reader.string();
                                break;
                            case 2:
                                message.is_extension = reader.bool();
                                break;
                            default:
                                reader.skipType(tag & 7);
                                break;
                            }
                        }
                        if (!message.hasOwnProperty("name_part"))
                            throw $util.ProtocolError("missing required 'name_part'", { instance: message });
                        if (!message.hasOwnProperty("is_extension"))
                            throw $util.ProtocolError("missing required 'is_extension'", { instance: message });
                        return message;
                    };
    
                    /**
                     * Decodes a NamePart message from the specified reader or buffer, length delimited.
                     * @function decodeDelimited
                     * @memberof google.protobuf.UninterpretedOption.NamePart
                     * @static
                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                     * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    NamePart.decodeDelimited = function decodeDelimited(reader) {
                        if (!(reader instanceof $Reader))
                            reader = new $Reader(reader);
                        return this.decode(reader, reader.uint32());
                    };
    
                    /**
                     * Verifies a NamePart message.
                     * @function verify
                     * @memberof google.protobuf.UninterpretedOption.NamePart
                     * @static
                     * @param {Object.<string,*>} message Plain object to verify
                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
                     */
                    NamePart.verify = function verify(message) {
                        if (typeof message !== "object" || message === null)
                            return "object expected";
                        if (!$util.isString(message.name_part))
                            return "name_part: string expected";
                        if (typeof message.is_extension !== "boolean")
                            return "is_extension: boolean expected";
                        return null;
                    };
    
                    /**
                     * Creates a NamePart message from a plain object. Also converts values to their respective internal types.
                     * @function fromObject
                     * @memberof google.protobuf.UninterpretedOption.NamePart
                     * @static
                     * @param {Object.<string,*>} object Plain object
                     * @returns {google.protobuf.UninterpretedOption.NamePart} NamePart
                     */
                    NamePart.fromObject = function fromObject(object) {
                        if (object instanceof $root.google.protobuf.UninterpretedOption.NamePart)
                            return object;
                        var message = new $root.google.protobuf.UninterpretedOption.NamePart();
                        if (object.name_part != null)
                            message.name_part = String(object.name_part);
                        if (object.is_extension != null)
                            message.is_extension = Boolean(object.is_extension);
                        return message;
                    };
    
                    /**
                     * Creates a plain object from a NamePart message. Also converts values to other types if specified.
                     * @function toObject
                     * @memberof google.protobuf.UninterpretedOption.NamePart
                     * @static
                     * @param {google.protobuf.UninterpretedOption.NamePart} message NamePart
                     * @param {$protobuf.IConversionOptions} [options] Conversion options
                     * @returns {Object.<string,*>} Plain object
                     */
                    NamePart.toObject = function toObject(message, options) {
                        if (!options)
                            options = {};
                        var object = {};
                        if (options.defaults) {
                            object.name_part = "";
                            object.is_extension = false;
                        }
                        if (message.name_part != null && message.hasOwnProperty("name_part"))
                            object.name_part = message.name_part;
                        if (message.is_extension != null && message.hasOwnProperty("is_extension"))
                            object.is_extension = message.is_extension;
                        return object;
                    };
    
                    /**
                     * Converts this NamePart to JSON.
                     * @function toJSON
                     * @memberof google.protobuf.UninterpretedOption.NamePart
                     * @instance
                     * @returns {Object.<string,*>} JSON object
                     */
                    NamePart.prototype.toJSON = function toJSON() {
                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                    };
    
                    return NamePart;
                })();
    
                return UninterpretedOption;
            })();
    
            protobuf.SourceCodeInfo = (function() {
    
                /**
                 * Properties of a SourceCodeInfo.
                 * @memberof google.protobuf
                 * @interface ISourceCodeInfo
                 * @property {Array.<google.protobuf.SourceCodeInfo.ILocation>|null} [location] SourceCodeInfo location
                 */
    
                /**
                 * Constructs a new SourceCodeInfo.
                 * @memberof google.protobuf
                 * @classdesc Represents a SourceCodeInfo.
                 * @implements ISourceCodeInfo
                 * @constructor
                 * @param {google.protobuf.ISourceCodeInfo=} [properties] Properties to set
                 */
                function SourceCodeInfo(properties) {
                    this.location = [];
                    if (properties)
                        for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                            if (properties[keys[i]] != null)
                                this[keys[i]] = properties[keys[i]];
                }
    
                /**
                 * SourceCodeInfo location.
                 * @member {Array.<google.protobuf.SourceCodeInfo.ILocation>} location
                 * @memberof google.protobuf.SourceCodeInfo
                 * @instance
                 */
                SourceCodeInfo.prototype.location = $util.emptyArray;
    
                /**
                 * Creates a new SourceCodeInfo instance using the specified properties.
                 * @function create
                 * @memberof google.protobuf.SourceCodeInfo
                 * @static
                 * @param {google.protobuf.ISourceCodeInfo=} [properties] Properties to set
                 * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo instance
                 */
                SourceCodeInfo.create = function create(properties) {
                    return new SourceCodeInfo(properties);
                };
    
                /**
                 * Encodes the specified SourceCodeInfo message. Does not implicitly {@link google.protobuf.SourceCodeInfo.verify|verify} messages.
                 * @function encode
                 * @memberof google.protobuf.SourceCodeInfo
                 * @static
                 * @param {google.protobuf.ISourceCodeInfo} message SourceCodeInfo message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                SourceCodeInfo.encode = function encode(message, writer) {
                    if (!writer)
                        writer = $Writer.create();
                    if (message.location != null && message.location.length)
                        for (var i = 0; i < message.location.length; ++i)
                            $root.google.protobuf.SourceCodeInfo.Location.encode(message.location[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
                    return writer;
                };
    
                /**
                 * Encodes the specified SourceCodeInfo message, length delimited. Does not implicitly {@link google.protobuf.SourceCodeInfo.verify|verify} messages.
                 * @function encodeDelimited
                 * @memberof google.protobuf.SourceCodeInfo
                 * @static
                 * @param {google.protobuf.ISourceCodeInfo} message SourceCodeInfo message or plain object to encode
                 * @param {$protobuf.Writer} [writer] Writer to encode to
                 * @returns {$protobuf.Writer} Writer
                 */
                SourceCodeInfo.encodeDelimited = function encodeDelimited(message, writer) {
                    return this.encode(message, writer).ldelim();
                };
    
                /**
                 * Decodes a SourceCodeInfo message from the specified reader or buffer.
                 * @function decode
                 * @memberof google.protobuf.SourceCodeInfo
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @param {number} [length] Message length if known beforehand
                 * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                SourceCodeInfo.decode = function decode(reader, length) {
                    if (!(reader instanceof $Reader))
                        reader = $Reader.create(reader);
                    var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo();
                    while (reader.pos < end) {
                        var tag = reader.uint32();
                        switch (tag >>> 3) {
                        case 1:
                            if (!(message.location && message.location.length))
                                message.location = [];
                            message.location.push($root.google.protobuf.SourceCodeInfo.Location.decode(reader, reader.uint32()));
                            break;
                        default:
                            reader.skipType(tag & 7);
                            break;
                        }
                    }
                    return message;
                };
    
                /**
                 * Decodes a SourceCodeInfo message from the specified reader or buffer, length delimited.
                 * @function decodeDelimited
                 * @memberof google.protobuf.SourceCodeInfo
                 * @static
                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                 * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo
                 * @throws {Error} If the payload is not a reader or valid buffer
                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
                 */
                SourceCodeInfo.decodeDelimited = function decodeDelimited(reader) {
                    if (!(reader instanceof $Reader))
                        reader = new $Reader(reader);
                    return this.decode(reader, reader.uint32());
                };
    
                /**
                 * Verifies a SourceCodeInfo message.
                 * @function verify
                 * @memberof google.protobuf.SourceCodeInfo
                 * @static
                 * @param {Object.<string,*>} message Plain object to verify
                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
                 */
                SourceCodeInfo.verify = function verify(message) {
                    if (typeof message !== "object" || message === null)
                        return "object expected";
                    if (message.location != null && message.hasOwnProperty("location")) {
                        if (!Array.isArray(message.location))
                            return "location: array expected";
                        for (var i = 0; i < message.location.length; ++i) {
                            var error = $root.google.protobuf.SourceCodeInfo.Location.verify(message.location[i]);
                            if (error)
                                return "location." + error;
                        }
                    }
                    return null;
                };
    
                /**
                 * Creates a SourceCodeInfo message from a plain object. Also converts values to their respective internal types.
                 * @function fromObject
                 * @memberof google.protobuf.SourceCodeInfo
                 * @static
                 * @param {Object.<string,*>} object Plain object
                 * @returns {google.protobuf.SourceCodeInfo} SourceCodeInfo
                 */
                SourceCodeInfo.fromObject = function fromObject(object) {
                    if (object instanceof $root.google.protobuf.SourceCodeInfo)
                        return object;
                    var message = new $root.google.protobuf.SourceCodeInfo();
                    if (object.location) {
                        if (!Array.isArray(object.location))
                            throw TypeError(".google.protobuf.SourceCodeInfo.location: array expected");
                        message.location = [];
                        for (var i = 0; i < object.location.length; ++i) {
                            if (typeof object.location[i] !== "object")
                                throw TypeError(".google.protobuf.SourceCodeInfo.location: object expected");
                            message.location[i] = $root.google.protobuf.SourceCodeInfo.Location.fromObject(object.location[i]);
                        }
                    }
                    return message;
                };
    
                /**
                 * Creates a plain object from a SourceCodeInfo message. Also converts values to other types if specified.
                 * @function toObject
                 * @memberof google.protobuf.SourceCodeInfo
                 * @static
                 * @param {google.protobuf.SourceCodeInfo} message SourceCodeInfo
                 * @param {$protobuf.IConversionOptions} [options] Conversion options
                 * @returns {Object.<string,*>} Plain object
                 */
                SourceCodeInfo.toObject = function toObject(message, options) {
                    if (!options)
                        options = {};
                    var object = {};
                    if (options.arrays || options.defaults)
                        object.location = [];
                    if (message.location && message.location.length) {
                        object.location = [];
                        for (var j = 0; j < message.location.length; ++j)
                            object.location[j] = $root.google.protobuf.SourceCodeInfo.Location.toObject(message.location[j], options);
                    }
                    return object;
                };
    
                /**
                 * Converts this SourceCodeInfo to JSON.
                 * @function toJSON
                 * @memberof google.protobuf.SourceCodeInfo
                 * @instance
                 * @returns {Object.<string,*>} JSON object
                 */
                SourceCodeInfo.prototype.toJSON = function toJSON() {
                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                };
    
                SourceCodeInfo.Location = (function() {
    
                    /**
                     * Properties of a Location.
                     * @memberof google.protobuf.SourceCodeInfo
                     * @interface ILocation
                     * @property {Array.<number>|null} [path] Location path
                     * @property {Array.<number>|null} [span] Location span
                     */
    
                    /**
                     * Constructs a new Location.
                     * @memberof google.protobuf.SourceCodeInfo
                     * @classdesc Represents a Location.
                     * @implements ILocation
                     * @constructor
                     * @param {google.protobuf.SourceCodeInfo.ILocation=} [properties] Properties to set
                     */
                    function Location(properties) {
                        this.path = [];
                        this.span = [];
                        if (properties)
                            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                                if (properties[keys[i]] != null)
                                    this[keys[i]] = properties[keys[i]];
                    }
    
                    /**
                     * Location path.
                     * @member {Array.<number>} path
                     * @memberof google.protobuf.SourceCodeInfo.Location
                     * @instance
                     */
                    Location.prototype.path = $util.emptyArray;
    
                    /**
                     * Location span.
                     * @member {Array.<number>} span
                     * @memberof google.protobuf.SourceCodeInfo.Location
                     * @instance
                     */
                    Location.prototype.span = $util.emptyArray;
    
                    /**
                     * Creates a new Location instance using the specified properties.
                     * @function create
                     * @memberof google.protobuf.SourceCodeInfo.Location
                     * @static
                     * @param {google.protobuf.SourceCodeInfo.ILocation=} [properties] Properties to set
                     * @returns {google.protobuf.SourceCodeInfo.Location} Location instance
                     */
                    Location.create = function create(properties) {
                        return new Location(properties);
                    };
    
                    /**
                     * Encodes the specified Location message. Does not implicitly {@link google.protobuf.SourceCodeInfo.Location.verify|verify} messages.
                     * @function encode
                     * @memberof google.protobuf.SourceCodeInfo.Location
                     * @static
                     * @param {google.protobuf.SourceCodeInfo.ILocation} message Location message or plain object to encode
                     * @param {$protobuf.Writer} [writer] Writer to encode to
                     * @returns {$protobuf.Writer} Writer
                     */
                    Location.encode = function encode(message, writer) {
                        if (!writer)
                            writer = $Writer.create();
                        if (message.path != null && message.path.length) {
                            writer.uint32(/* id 1, wireType 2 =*/10).fork();
                            for (var i = 0; i < message.path.length; ++i)
                                writer.int32(message.path[i]);
                            writer.ldelim();
                        }
                        if (message.span != null && message.span.length) {
                            writer.uint32(/* id 2, wireType 2 =*/18).fork();
                            for (var i = 0; i < message.span.length; ++i)
                                writer.int32(message.span[i]);
                            writer.ldelim();
                        }
                        return writer;
                    };
    
                    /**
                     * Encodes the specified Location message, length delimited. Does not implicitly {@link google.protobuf.SourceCodeInfo.Location.verify|verify} messages.
                     * @function encodeDelimited
                     * @memberof google.protobuf.SourceCodeInfo.Location
                     * @static
                     * @param {google.protobuf.SourceCodeInfo.ILocation} message Location message or plain object to encode
                     * @param {$protobuf.Writer} [writer] Writer to encode to
                     * @returns {$protobuf.Writer} Writer
                     */
                    Location.encodeDelimited = function encodeDelimited(message, writer) {
                        return this.encode(message, writer).ldelim();
                    };
    
                    /**
                     * Decodes a Location message from the specified reader or buffer.
                     * @function decode
                     * @memberof google.protobuf.SourceCodeInfo.Location
                     * @static
                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                     * @param {number} [length] Message length if known beforehand
                     * @returns {google.protobuf.SourceCodeInfo.Location} Location
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    Location.decode = function decode(reader, length) {
                        if (!(reader instanceof $Reader))
                            reader = $Reader.create(reader);
                        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.google.protobuf.SourceCodeInfo.Location();
                        while (reader.pos < end) {
                            var tag = reader.uint32();
                            switch (tag >>> 3) {
                            case 1:
                                if (!(message.path && message.path.length))
                                    message.path = [];
                                if ((tag & 7) === 2) {
                                    var end2 = reader.uint32() + reader.pos;
                                    while (reader.pos < end2)
                                        message.path.push(reader.int32());
                                } else
                                    message.path.push(reader.int32());
                                break;
                            case 2:
                                if (!(message.span && message.span.length))
                                    message.span = [];
                                if ((tag & 7) === 2) {
                                    var end2 = reader.uint32() + reader.pos;
                                    while (reader.pos < end2)
                                        message.span.push(reader.int32());
                                } else
                                    message.span.push(reader.int32());
                                break;
                            default:
                                reader.skipType(tag & 7);
                                break;
                            }
                        }
                        return message;
                    };
    
                    /**
                     * Decodes a Location message from the specified reader or buffer, length delimited.
                     * @function decodeDelimited
                     * @memberof google.protobuf.SourceCodeInfo.Location
                     * @static
                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
                     * @returns {google.protobuf.SourceCodeInfo.Location} Location
                     * @throws {Error} If the payload is not a reader or valid buffer
                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
                     */
                    Location.decodeDelimited = function decodeDelimited(reader) {
                        if (!(reader instanceof $Reader))
                            reader = new $Reader(reader);
                        return this.decode(reader, reader.uint32());
                    };
    
                    /**
                     * Verifies a Location message.
                     * @function verify
                     * @memberof google.protobuf.SourceCodeInfo.Location
                     * @static
                     * @param {Object.<string,*>} message Plain object to verify
                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
                     */
                    Location.verify = function verify(message) {
                        if (typeof message !== "object" || message === null)
                            return "object expected";
                        if (message.path != null && message.hasOwnProperty("path")) {
                            if (!Array.isArray(message.path))
                                return "path: array expected";
                            for (var i = 0; i < message.path.length; ++i)
                                if (!$util.isInteger(message.path[i]))
                                    return "path: integer[] expected";
                        }
                        if (message.span != null && message.hasOwnProperty("span")) {
                            if (!Array.isArray(message.span))
                                return "span: array expected";
                            for (var i = 0; i < message.span.length; ++i)
                                if (!$util.isInteger(message.span[i]))
                                    return "span: integer[] expected";
                        }
                        return null;
                    };
    
                    /**
                     * Creates a Location message from a plain object. Also converts values to their respective internal types.
                     * @function fromObject
                     * @memberof google.protobuf.SourceCodeInfo.Location
                     * @static
                     * @param {Object.<string,*>} object Plain object
                     * @returns {google.protobuf.SourceCodeInfo.Location} Location
                     */
                    Location.fromObject = function fromObject(object) {
                        if (object instanceof $root.google.protobuf.SourceCodeInfo.Location)
                            return object;
                        var message = new $root.google.protobuf.SourceCodeInfo.Location();
                        if (object.path) {
                            if (!Array.isArray(object.path))
                                throw TypeError(".google.protobuf.SourceCodeInfo.Location.path: array expected");
                            message.path = [];
                            for (var i = 0; i < object.path.length; ++i)
                                message.path[i] = object.path[i] | 0;
                        }
                        if (object.span) {
                            if (!Array.isArray(object.span))
                                throw TypeError(".google.protobuf.SourceCodeInfo.Location.span: array expected");
                            message.span = [];
                            for (var i = 0; i < object.span.length; ++i)
                                message.span[i] = object.span[i] | 0;
                        }
                        return message;
                    };
    
                    /**
                     * Creates a plain object from a Location message. Also converts values to other types if specified.
                     * @function toObject
                     * @memberof google.protobuf.SourceCodeInfo.Location
                     * @static
                     * @param {google.protobuf.SourceCodeInfo.Location} message Location
                     * @param {$protobuf.IConversionOptions} [options] Conversion options
                     * @returns {Object.<string,*>} Plain object
                     */
                    Location.toObject = function toObject(message, options) {
                        if (!options)
                            options = {};
                        var object = {};
                        if (options.arrays || options.defaults) {
                            object.path = [];
                            object.span = [];
                        }
                        if (message.path && message.path.length) {
                            object.path = [];
                            for (var j = 0; j < message.path.length; ++j)
                                object.path[j] = message.path[j];
                        }
                        if (message.span && message.span.length) {
                            object.span = [];
                            for (var j = 0; j < message.span.length; ++j)
                                object.span[j] = message.span[j];
                        }
                        return object;
                    };
    
                    /**
                     * Converts this Location to JSON.
                     * @function toJSON
                     * @memberof google.protobuf.SourceCodeInfo.Location
                     * @instance
                     * @returns {Object.<string,*>} JSON object
                     */
                    Location.prototype.toJSON = function toJSON() {
                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
                    };
    
                    return Location;
                })();
    
                return SourceCodeInfo;
            })();
    
            return protobuf;
        })();
    
        return google;
    })();

    return $root;
});