// <auto-generated>
//     Generated by the protocol buffer compiler.  DO NOT EDIT!
//     source: wrapper_benchmark_messages.proto
// </auto-generated>
#pragma warning disable 1591, 0612, 3021
#region Designer generated code

using pb = global::Google.Protobuf;
using pbc = global::Google.Protobuf.Collections;
using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
namespace Google.Protobuf.Benchmarks {

  /// <summary>Holder for reflection information generated from wrapper_benchmark_messages.proto</summary>
  public static partial class WrapperBenchmarkMessagesReflection {

    #region Descriptor
    /// <summary>File descriptor for wrapper_benchmark_messages.proto</summary>
    public static pbr::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbr::FileDescriptor descriptor;

    static WrapperBenchmarkMessagesReflection() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "CiB3cmFwcGVyX2JlbmNobWFya19tZXNzYWdlcy5wcm90bxIaZ29vZ2xlLnBy",
            "b3RvYnVmLmJlbmNobWFya3MaHmdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5w",
            "cm90byLeLgoYTWFueVdyYXBwZXJGaWVsZHNNZXNzYWdlEjUKD2RvdWJsZV9m",
            "aWVsZF85NRhfIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI0",
            "Cg5kb3VibGVfZmllbGRfMRgBIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3Vi",
            "bGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfNzkYTyABKAsyHC5nb29nbGUucHJv",
            "dG9idWYuRG91YmxlVmFsdWUSMgoNaW50NjRfZmllbGRfMhgCIAEoCzIbLmdv",
            "b2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEjUKD2RvdWJsZV9maWVsZF85Nhhg",
            "IAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRIyCg1pbnQ2NF9m",
            "aWVsZF8zGAMgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUSMgoN",
            "aW50NjRfZmllbGRfNBgEIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZh",
            "bHVlEjUKD2RvdWJsZV9maWVsZF85NxhhIAEoCzIcLmdvb2dsZS5wcm90b2J1",
            "Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfNjUYQSABKAsyHC5nb29n",
            "bGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzY2GEIg",
            "ASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjQKDmRvdWJsZV9m",
            "aWVsZF83GAcgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjUK",
            "D2RvdWJsZV9maWVsZF82Mhg+IAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3Vi",
            "bGVWYWx1ZRI2ChBkb3VibGVfZmllbGRfMTE4GHYgASgLMhwuZ29vZ2xlLnBy",
            "b3RvYnVmLkRvdWJsZVZhbHVlEjYKEGRvdWJsZV9maWVsZF8xMTkYdyABKAsy",
            "HC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxk",
            "XzY3GEMgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjYKEGRv",
            "dWJsZV9maWVsZF8xMjAYeCABKAsyHC5nb29nbGUucHJvdG9idWYuRG91Ymxl",
            "VmFsdWUSNgoQZG91YmxlX2ZpZWxkXzEyMRh5IAEoCzIcLmdvb2dsZS5wcm90",
            "b2J1Zi5Eb3VibGVWYWx1ZRI2ChBkb3VibGVfZmllbGRfMTIyGHogASgLMhwu",
            "Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjYKEGRvdWJsZV9maWVsZF8x",
            "MjMYeyABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNgoQZG91",
            "YmxlX2ZpZWxkXzEyNBh8IAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVW",
            "YWx1ZRI0Cg5kb3VibGVfZmllbGRfOBgIIAEoCzIcLmdvb2dsZS5wcm90b2J1",
            "Zi5Eb3VibGVWYWx1ZRI0Cg5kb3VibGVfZmllbGRfORgJIAEoCzIcLmdvb2ds",
            "ZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfOTgYYiAB",
            "KAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2Zp",
            "ZWxkXzEwGAogASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjUK",
            "D2RvdWJsZV9maWVsZF8xMRgLIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3Vi",
            "bGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfOTkYYyABKAsyHC5nb29nbGUucHJv",
            "dG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzg0GFQgASgLMhwu",
            "Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjUKD2RvdWJsZV9maWVsZF8x",
            "NBgOIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1Cg9kb3Vi",
            "bGVfZmllbGRfNzcYTSABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFs",
            "dWUSNQoPZG91YmxlX2ZpZWxkXzE1GA8gASgLMhwuZ29vZ2xlLnByb3RvYnVm",
            "LkRvdWJsZVZhbHVlEjMKDmludDY0X2ZpZWxkXzE5GBMgASgLMhsuZ29vZ2xl",
            "LnByb3RvYnVmLkludDY0VmFsdWUSNAoPaW50NjRfZmllbGRfMTE1GHMgASgL",
            "MhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUSNgoQZG91YmxlX2ZpZWxk",
            "XzExNhh0IAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI0Cg9p",
            "bnQ2NF9maWVsZF8xMTcYdSABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRW",
            "YWx1ZRI1Cg9kb3VibGVfZmllbGRfMjAYFCABKAsyHC5nb29nbGUucHJvdG9i",
            "dWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzIxGBUgASgLMhwuZ29v",
            "Z2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjUKD3N0cmluZ19maWVsZF83MxhJ",
            "IAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI1Cg9zdHJpbmdf",
            "ZmllbGRfNzQYSiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUS",
            "NQoPZG91YmxlX2ZpZWxkXzIyGBYgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRv",
            "dWJsZVZhbHVlEjUKD2RvdWJsZV9maWVsZF82ORhFIAEoCzIcLmdvb2dsZS5w",
            "cm90b2J1Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfNzAYRiABKAsy",
            "HC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxk",
            "XzcxGEcgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjUKD2Rv",
            "dWJsZV9maWVsZF83MhhIIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVW",
            "YWx1ZRI1Cg9kb3VibGVfZmllbGRfMjUYGSABKAsyHC5nb29nbGUucHJvdG9i",
            "dWYuRG91YmxlVmFsdWUSMwoOaW50NjRfZmllbGRfMjYYGiABKAsyGy5nb29n",
            "bGUucHJvdG9idWYuSW50NjRWYWx1ZRI1Cg9kb3VibGVfZmllbGRfNjgYRCAB",
            "KAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2Zp",
            "ZWxkXzI4GBwgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjYK",
            "EGRvdWJsZV9maWVsZF8xMDYYaiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91",
            "YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzI5GB0gASgLMhwuZ29vZ2xlLnBy",
            "b3RvYnVmLkRvdWJsZVZhbHVlEjUKD2RvdWJsZV9maWVsZF8zMBgeIAEoCzIc",
            "Lmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI2ChBkb3VibGVfZmllbGRf",
            "MTAxGGUgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjYKEGRv",
            "dWJsZV9maWVsZF8xMDIYZiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91Ymxl",
            "VmFsdWUSNgoQZG91YmxlX2ZpZWxkXzEwMxhnIAEoCzIcLmdvb2dsZS5wcm90",
            "b2J1Zi5Eb3VibGVWYWx1ZRI2ChBkb3VibGVfZmllbGRfMTA0GGggASgLMhwu",
            "Z29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjYKEGRvdWJsZV9maWVsZF8x",
            "MDUYaSABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91",
            "YmxlX2ZpZWxkXzMxGB8gASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZh",
            "bHVlEjMKDmludDY0X2ZpZWxkXzMyGCAgASgLMhsuZ29vZ2xlLnByb3RvYnVm",
            "LkludDY0VmFsdWUSNQoPZG91YmxlX2ZpZWxkXzc1GEsgASgLMhwuZ29vZ2xl",
            "LnByb3RvYnVmLkRvdWJsZVZhbHVlEjcKEGRvdWJsZV9maWVsZF8xMjkYgQEg",
            "ASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEhUKDWVudW1fZmll",
            "bGRfODAYUCABKAUSFQoNZW51bV9maWVsZF84MRhRIAEoBRIzCg5pbnQ2NF9m",
            "aWVsZF84MhhSIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEhUK",
            "DWVudW1fZmllbGRfODMYUyABKAUSMwoOaW50NjRfZmllbGRfODUYVSABKAsy",
            "Gy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRIzCg5pbnQ2NF9maWVsZF84",
            "NhhWIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEjMKDmludDY0",
            "X2ZpZWxkXzg3GFcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUS",
            "NAoPaW50NjRfZmllbGRfMTI1GH0gASgLMhsuZ29vZ2xlLnByb3RvYnVmLklu",
            "dDY0VmFsdWUSMwoOaW50NjRfZmllbGRfMzcYJSABKAsyGy5nb29nbGUucHJv",
            "dG9idWYuSW50NjRWYWx1ZRI1Cg9kb3VibGVfZmllbGRfMzgYJiABKAsyHC5n",
            "b29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSMQoMaW50ZXJhY3Rpb25zGCcg",
            "ASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUSHgoWcmVwZWF0ZWRf",
            "aW50X2ZpZWxkXzEwMBhkIAMoBRI1Cg9kb3VibGVfZmllbGRfNDAYKCABKAsy",
            "HC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSMwoOaW50NjRfZmllbGRf",
            "NDEYKSABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRI0Cg9pbnQ2",
            "NF9maWVsZF8xMjYYfiABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1",
            "ZRI0Cg9pbnQ2NF9maWVsZF8xMjcYfyABKAsyGy5nb29nbGUucHJvdG9idWYu",
            "SW50NjRWYWx1ZRI3ChBkb3VibGVfZmllbGRfMTI4GIABIAEoCzIcLmdvb2ds",
            "ZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI2ChBkb3VibGVfZmllbGRfMTA5GG0g",
            "ASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjQKD2ludDY0X2Zp",
            "ZWxkXzExMBhuIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEjYK",
            "EGRvdWJsZV9maWVsZF8xMTEYbyABKAsyHC5nb29nbGUucHJvdG9idWYuRG91",
            "YmxlVmFsdWUSNAoPaW50NjRfZmllbGRfMTEyGHAgASgLMhsuZ29vZ2xlLnBy",
            "b3RvYnVmLkludDY0VmFsdWUSNgoQZG91YmxlX2ZpZWxkXzExMxhxIAEoCzIc",
            "Lmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI0Cg9pbnQ2NF9maWVsZF8x",
            "MTQYciABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRI1Cg9kb3Vi",
            "bGVfZmllbGRfNDIYKiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFs",
            "dWUSMwoOaW50NjRfZmllbGRfNDMYKyABKAsyGy5nb29nbGUucHJvdG9idWYu",
            "SW50NjRWYWx1ZRIzCg5pbnQ2NF9maWVsZF80NBgsIAEoCzIbLmdvb2dsZS5w",
            "cm90b2J1Zi5JbnQ2NFZhbHVlEjUKD2RvdWJsZV9maWVsZF80NRgtIAEoCzIc",
            "Lmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRf",
            "NDYYLiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91",
            "YmxlX2ZpZWxkXzc4GE4gASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZh",
            "bHVlEjUKD2RvdWJsZV9maWVsZF84OBhYIAEoCzIcLmdvb2dsZS5wcm90b2J1",
            "Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfNDcYLyABKAsyHC5nb29n",
            "bGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzg5GFkg",
            "ASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjUKD2RvdWJsZV9m",
            "aWVsZF80OBgwIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1",
            "Cg9kb3VibGVfZmllbGRfNDkYMSABKAsyHC5nb29nbGUucHJvdG9idWYuRG91",
            "YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzUwGDIgASgLMhwuZ29vZ2xlLnBy",
            "b3RvYnVmLkRvdWJsZVZhbHVlEjUKD2RvdWJsZV9maWVsZF85MBhaIAEoCzIc",
            "Lmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRf",
            "NTEYMyABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91",
            "YmxlX2ZpZWxkXzkxGFsgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZh",
            "bHVlEjUKD2RvdWJsZV9maWVsZF85MhhcIAEoCzIcLmdvb2dsZS5wcm90b2J1",
            "Zi5Eb3VibGVWYWx1ZRI0Cg9pbnQ2NF9maWVsZF8xMDcYayABKAsyGy5nb29n",
            "bGUucHJvdG9idWYuSW50NjRWYWx1ZRI1Cg9kb3VibGVfZmllbGRfOTMYXSAB",
            "KAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNgoQZG91YmxlX2Zp",
            "ZWxkXzEwOBhsIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1",
            "Cg9kb3VibGVfZmllbGRfNTIYNCABKAsyHC5nb29nbGUucHJvdG9idWYuRG91",
            "YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzUzGDUgASgLMhwuZ29vZ2xlLnBy",
            "b3RvYnVmLkRvdWJsZVZhbHVlEjUKD2RvdWJsZV9maWVsZF85NBheIAEoCzIc",
            "Lmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRf",
            "NTQYNiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91",
            "YmxlX2ZpZWxkXzU1GDcgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZh",
            "bHVlEjUKD2RvdWJsZV9maWVsZF81Nhg4IAEoCzIcLmdvb2dsZS5wcm90b2J1",
            "Zi5Eb3VibGVWYWx1ZRI1Cg9kb3VibGVfZmllbGRfNTcYOSABKAsyHC5nb29n",
            "bGUucHJvdG9idWYuRG91YmxlVmFsdWUSNQoPZG91YmxlX2ZpZWxkXzU4GDog",
            "ASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlEjMKDmludDY0X2Zp",
            "ZWxkXzU5GDsgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUSMwoO",
            "aW50NjRfZmllbGRfNjAYPCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRW",
            "YWx1ZSLwFQoaTWFueVByaW1pdGl2ZUZpZWxkc01lc3NhZ2USFwoPZG91Ymxl",
            "X2ZpZWxkXzk1GF8gASgBEhYKDmRvdWJsZV9maWVsZF8xGAEgASgBEhcKD2Rv",
            "dWJsZV9maWVsZF83ORhPIAEoARIVCg1pbnQ2NF9maWVsZF8yGAIgASgDEhcK",
            "D2RvdWJsZV9maWVsZF85NhhgIAEoARIVCg1pbnQ2NF9maWVsZF8zGAMgASgD",
            "EhUKDWludDY0X2ZpZWxkXzQYBCABKAMSFwoPZG91YmxlX2ZpZWxkXzk3GGEg",
            "ASgBEhcKD2RvdWJsZV9maWVsZF82NRhBIAEoARIXCg9kb3VibGVfZmllbGRf",
            "NjYYQiABKAESFgoOZG91YmxlX2ZpZWxkXzcYByABKAESFwoPZG91YmxlX2Zp",
            "ZWxkXzYyGD4gASgBEhgKEGRvdWJsZV9maWVsZF8xMTgYdiABKAESGAoQZG91",
            "YmxlX2ZpZWxkXzExORh3IAEoARIXCg9kb3VibGVfZmllbGRfNjcYQyABKAES",
            "GAoQZG91YmxlX2ZpZWxkXzEyMBh4IAEoARIYChBkb3VibGVfZmllbGRfMTIx",
            "GHkgASgBEhgKEGRvdWJsZV9maWVsZF8xMjIYeiABKAESGAoQZG91YmxlX2Zp",
            "ZWxkXzEyMxh7IAEoARIYChBkb3VibGVfZmllbGRfMTI0GHwgASgBEhYKDmRv",
            "dWJsZV9maWVsZF84GAggASgBEhYKDmRvdWJsZV9maWVsZF85GAkgASgBEhcK",
            "D2RvdWJsZV9maWVsZF85OBhiIAEoARIXCg9kb3VibGVfZmllbGRfMTAYCiAB",
            "KAESFwoPZG91YmxlX2ZpZWxkXzExGAsgASgBEhcKD2RvdWJsZV9maWVsZF85",
            "ORhjIAEoARIXCg9kb3VibGVfZmllbGRfODQYVCABKAESFwoPZG91YmxlX2Zp",
            "ZWxkXzE0GA4gASgBEhcKD2RvdWJsZV9maWVsZF83NxhNIAEoARIXCg9kb3Vi",
            "bGVfZmllbGRfMTUYDyABKAESFgoOaW50NjRfZmllbGRfMTkYEyABKAMSFwoP",
            "aW50NjRfZmllbGRfMTE1GHMgASgDEhgKEGRvdWJsZV9maWVsZF8xMTYYdCAB",
            "KAESFwoPaW50NjRfZmllbGRfMTE3GHUgASgDEhcKD2RvdWJsZV9maWVsZF8y",
            "MBgUIAEoARIXCg9kb3VibGVfZmllbGRfMjEYFSABKAESFwoPc3RyaW5nX2Zp",
            "ZWxkXzczGEkgASgJEhcKD3N0cmluZ19maWVsZF83NBhKIAEoCRIXCg9kb3Vi",
            "bGVfZmllbGRfMjIYFiABKAESFwoPZG91YmxlX2ZpZWxkXzY5GEUgASgBEhcK",
            "D2RvdWJsZV9maWVsZF83MBhGIAEoARIXCg9kb3VibGVfZmllbGRfNzEYRyAB",
            "KAESFwoPZG91YmxlX2ZpZWxkXzcyGEggASgBEhcKD2RvdWJsZV9maWVsZF8y",
            "NRgZIAEoARIWCg5pbnQ2NF9maWVsZF8yNhgaIAEoAxIXCg9kb3VibGVfZmll",
            "bGRfNjgYRCABKAESFwoPZG91YmxlX2ZpZWxkXzI4GBwgASgBEhgKEGRvdWJs",
            "ZV9maWVsZF8xMDYYaiABKAESFwoPZG91YmxlX2ZpZWxkXzI5GB0gASgBEhcK",
            "D2RvdWJsZV9maWVsZF8zMBgeIAEoARIYChBkb3VibGVfZmllbGRfMTAxGGUg",
            "ASgBEhgKEGRvdWJsZV9maWVsZF8xMDIYZiABKAESGAoQZG91YmxlX2ZpZWxk",
            "XzEwMxhnIAEoARIYChBkb3VibGVfZmllbGRfMTA0GGggASgBEhgKEGRvdWJs",
            "ZV9maWVsZF8xMDUYaSABKAESFwoPZG91YmxlX2ZpZWxkXzMxGB8gASgBEhYK",
            "DmludDY0X2ZpZWxkXzMyGCAgASgDEhcKD2RvdWJsZV9maWVsZF83NRhLIAEo",
            "ARIZChBkb3VibGVfZmllbGRfMTI5GIEBIAEoARIVCg1lbnVtX2ZpZWxkXzgw",
            "GFAgASgFEhUKDWVudW1fZmllbGRfODEYUSABKAUSFgoOaW50NjRfZmllbGRf",
            "ODIYUiABKAMSFQoNZW51bV9maWVsZF84MxhTIAEoBRIWCg5pbnQ2NF9maWVs",
            "ZF84NRhVIAEoAxIWCg5pbnQ2NF9maWVsZF84NhhWIAEoAxIWCg5pbnQ2NF9m",
            "aWVsZF84NxhXIAEoAxIXCg9pbnQ2NF9maWVsZF8xMjUYfSABKAMSFgoOaW50",
            "NjRfZmllbGRfMzcYJSABKAMSFwoPZG91YmxlX2ZpZWxkXzM4GCYgASgBEhQK",
            "DGludGVyYWN0aW9ucxgnIAEoAxIeChZyZXBlYXRlZF9pbnRfZmllbGRfMTAw",
            "GGQgAygFEhcKD2RvdWJsZV9maWVsZF80MBgoIAEoARIWCg5pbnQ2NF9maWVs",
            "ZF80MRgpIAEoAxIXCg9pbnQ2NF9maWVsZF8xMjYYfiABKAMSFwoPaW50NjRf",
            "ZmllbGRfMTI3GH8gASgDEhkKEGRvdWJsZV9maWVsZF8xMjgYgAEgASgBEhgK",
            "EGRvdWJsZV9maWVsZF8xMDkYbSABKAESFwoPaW50NjRfZmllbGRfMTEwGG4g",
            "ASgDEhgKEGRvdWJsZV9maWVsZF8xMTEYbyABKAESFwoPaW50NjRfZmllbGRf",
            "MTEyGHAgASgDEhgKEGRvdWJsZV9maWVsZF8xMTMYcSABKAESFwoPaW50NjRf",
            "ZmllbGRfMTE0GHIgASgDEhcKD2RvdWJsZV9maWVsZF80MhgqIAEoARIWCg5p",
            "bnQ2NF9maWVsZF80MxgrIAEoAxIWCg5pbnQ2NF9maWVsZF80NBgsIAEoAxIX",
            "Cg9kb3VibGVfZmllbGRfNDUYLSABKAESFwoPZG91YmxlX2ZpZWxkXzQ2GC4g",
            "ASgBEhcKD2RvdWJsZV9maWVsZF83OBhOIAEoARIXCg9kb3VibGVfZmllbGRf",
            "ODgYWCABKAESFwoPZG91YmxlX2ZpZWxkXzQ3GC8gASgBEhcKD2RvdWJsZV9m",
            "aWVsZF84ORhZIAEoARIXCg9kb3VibGVfZmllbGRfNDgYMCABKAESFwoPZG91",
            "YmxlX2ZpZWxkXzQ5GDEgASgBEhcKD2RvdWJsZV9maWVsZF81MBgyIAEoARIX",
            "Cg9kb3VibGVfZmllbGRfOTAYWiABKAESFwoPZG91YmxlX2ZpZWxkXzUxGDMg",
            "ASgBEhcKD2RvdWJsZV9maWVsZF85MRhbIAEoARIXCg9kb3VibGVfZmllbGRf",
            "OTIYXCABKAESFwoPaW50NjRfZmllbGRfMTA3GGsgASgDEhcKD2RvdWJsZV9m",
            "aWVsZF85MxhdIAEoARIYChBkb3VibGVfZmllbGRfMTA4GGwgASgBEhcKD2Rv",
            "dWJsZV9maWVsZF81Mhg0IAEoARIXCg9kb3VibGVfZmllbGRfNTMYNSABKAES",
            "FwoPZG91YmxlX2ZpZWxkXzk0GF4gASgBEhcKD2RvdWJsZV9maWVsZF81NBg2",
            "IAEoARIXCg9kb3VibGVfZmllbGRfNTUYNyABKAESFwoPZG91YmxlX2ZpZWxk",
            "XzU2GDggASgBEhcKD2RvdWJsZV9maWVsZF81Nxg5IAEoARIXCg9kb3VibGVf",
            "ZmllbGRfNTgYOiABKAESFgoOaW50NjRfZmllbGRfNTkYOyABKAMSFgoOaW50",
            "NjRfZmllbGRfNjAYPCABKANiBnByb3RvMw=="));
      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
          new pbr::FileDescriptor[] { global::Google.Protobuf.WellKnownTypes.WrappersReflection.Descriptor, },
          new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Benchmarks.ManyWrapperFieldsMessage), global::Google.Protobuf.Benchmarks.ManyWrapperFieldsMessage.Parser, new[]{ "DoubleField95", "DoubleField1", "DoubleField79", "Int64Field2", "DoubleField96", "Int64Field3", "Int64Field4", "DoubleField97", "DoubleField65", "DoubleField66", "DoubleField7", "DoubleField62", "DoubleField118", "DoubleField119", "DoubleField67", "DoubleField120", "DoubleField121", "DoubleField122", "DoubleField123", "DoubleField124", "DoubleField8", "DoubleField9", "DoubleField98", "DoubleField10", "DoubleField11", "DoubleField99", "DoubleField84", "DoubleField14", "DoubleField77", "DoubleField15", "Int64Field19", "Int64Field115", "DoubleField116", "Int64Field117", "DoubleField20", "DoubleField21", "StringField73", "StringField74", "DoubleField22", "DoubleField69", "DoubleField70", "DoubleField71", "DoubleField72", "DoubleField25", "Int64Field26", "DoubleField68", "DoubleField28", "DoubleField106", "DoubleField29", "DoubleField30", "DoubleField101", "DoubleField102", "DoubleField103", "DoubleField104", "DoubleField105", "DoubleField31", "Int64Field32", "DoubleField75", "DoubleField129", "EnumField80", "EnumField81", "Int64Field82", "EnumField83", "Int64Field85", "Int64Field86", "Int64Field87", "Int64Field125", "Int64Field37", "DoubleField38", "Interactions", "RepeatedIntField100", "DoubleField40", "Int64Field41", "Int64Field126", "Int64Field127", "DoubleField128", "DoubleField109", "Int64Field110", "DoubleField111", "Int64Field112", "DoubleField113", "Int64Field114", "DoubleField42", "Int64Field43", "Int64Field44", "DoubleField45", "DoubleField46", "DoubleField78", "DoubleField88", "DoubleField47", "DoubleField89", "DoubleField48", "DoubleField49", "DoubleField50", "DoubleField90", "DoubleField51", "DoubleField91", "DoubleField92", "Int64Field107", "DoubleField93", "DoubleField108", "DoubleField52", "DoubleField53", "DoubleField94", "DoubleField54", "DoubleField55", "DoubleField56", "DoubleField57", "DoubleField58", "Int64Field59", "Int64Field60" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.Benchmarks.ManyPrimitiveFieldsMessage), global::Google.Protobuf.Benchmarks.ManyPrimitiveFieldsMessage.Parser, new[]{ "DoubleField95", "DoubleField1", "DoubleField79", "Int64Field2", "DoubleField96", "Int64Field3", "Int64Field4", "DoubleField97", "DoubleField65", "DoubleField66", "DoubleField7", "DoubleField62", "DoubleField118", "DoubleField119", "DoubleField67", "DoubleField120", "DoubleField121", "DoubleField122", "DoubleField123", "DoubleField124", "DoubleField8", "DoubleField9", "DoubleField98", "DoubleField10", "DoubleField11", "DoubleField99", "DoubleField84", "DoubleField14", "DoubleField77", "DoubleField15", "Int64Field19", "Int64Field115", "DoubleField116", "Int64Field117", "DoubleField20", "DoubleField21", "StringField73", "StringField74", "DoubleField22", "DoubleField69", "DoubleField70", "DoubleField71", "DoubleField72", "DoubleField25", "Int64Field26", "DoubleField68", "DoubleField28", "DoubleField106", "DoubleField29", "DoubleField30", "DoubleField101", "DoubleField102", "DoubleField103", "DoubleField104", "DoubleField105", "DoubleField31", "Int64Field32", "DoubleField75", "DoubleField129", "EnumField80", "EnumField81", "Int64Field82", "EnumField83", "Int64Field85", "Int64Field86", "Int64Field87", "Int64Field125", "Int64Field37", "DoubleField38", "Interactions", "RepeatedIntField100", "DoubleField40", "Int64Field41", "Int64Field126", "Int64Field127", "DoubleField128", "DoubleField109", "Int64Field110", "DoubleField111", "Int64Field112", "DoubleField113", "Int64Field114", "DoubleField42", "Int64Field43", "Int64Field44", "DoubleField45", "DoubleField46", "DoubleField78", "DoubleField88", "DoubleField47", "DoubleField89", "DoubleField48", "DoubleField49", "DoubleField50", "DoubleField90", "DoubleField51", "DoubleField91", "DoubleField92", "Int64Field107", "DoubleField93", "DoubleField108", "DoubleField52", "DoubleField53", "DoubleField94", "DoubleField54", "DoubleField55", "DoubleField56", "DoubleField57", "DoubleField58", "Int64Field59", "Int64Field60" }, null, null, null, null)
          }));
    }
    #endregion

  }
  #region Messages
  /// <summary>
  /// a message that has a large number of wrapper fields
  /// obfuscated version of an internal message
  /// </summary>
  public sealed partial class ManyWrapperFieldsMessage : pb::IMessage<ManyWrapperFieldsMessage>, pb::IBufferMessage {
    private static readonly pb::MessageParser<ManyWrapperFieldsMessage> _parser = new pb::MessageParser<ManyWrapperFieldsMessage>(() => new ManyWrapperFieldsMessage());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ManyWrapperFieldsMessage> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.Benchmarks.WrapperBenchmarkMessagesReflection.Descriptor.MessageTypes[0]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ManyWrapperFieldsMessage() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ManyWrapperFieldsMessage(ManyWrapperFieldsMessage other) : this() {
      DoubleField95 = other.DoubleField95;
      DoubleField1 = other.DoubleField1;
      DoubleField79 = other.DoubleField79;
      Int64Field2 = other.Int64Field2;
      DoubleField96 = other.DoubleField96;
      Int64Field3 = other.Int64Field3;
      Int64Field4 = other.Int64Field4;
      DoubleField97 = other.DoubleField97;
      DoubleField65 = other.DoubleField65;
      DoubleField66 = other.DoubleField66;
      DoubleField7 = other.DoubleField7;
      DoubleField62 = other.DoubleField62;
      DoubleField118 = other.DoubleField118;
      DoubleField119 = other.DoubleField119;
      DoubleField67 = other.DoubleField67;
      DoubleField120 = other.DoubleField120;
      DoubleField121 = other.DoubleField121;
      DoubleField122 = other.DoubleField122;
      DoubleField123 = other.DoubleField123;
      DoubleField124 = other.DoubleField124;
      DoubleField8 = other.DoubleField8;
      DoubleField9 = other.DoubleField9;
      DoubleField98 = other.DoubleField98;
      DoubleField10 = other.DoubleField10;
      DoubleField11 = other.DoubleField11;
      DoubleField99 = other.DoubleField99;
      DoubleField84 = other.DoubleField84;
      DoubleField14 = other.DoubleField14;
      DoubleField77 = other.DoubleField77;
      DoubleField15 = other.DoubleField15;
      Int64Field19 = other.Int64Field19;
      Int64Field115 = other.Int64Field115;
      DoubleField116 = other.DoubleField116;
      Int64Field117 = other.Int64Field117;
      DoubleField20 = other.DoubleField20;
      DoubleField21 = other.DoubleField21;
      StringField73 = other.StringField73;
      StringField74 = other.StringField74;
      DoubleField22 = other.DoubleField22;
      DoubleField69 = other.DoubleField69;
      DoubleField70 = other.DoubleField70;
      DoubleField71 = other.DoubleField71;
      DoubleField72 = other.DoubleField72;
      DoubleField25 = other.DoubleField25;
      Int64Field26 = other.Int64Field26;
      DoubleField68 = other.DoubleField68;
      DoubleField28 = other.DoubleField28;
      DoubleField106 = other.DoubleField106;
      DoubleField29 = other.DoubleField29;
      DoubleField30 = other.DoubleField30;
      DoubleField101 = other.DoubleField101;
      DoubleField102 = other.DoubleField102;
      DoubleField103 = other.DoubleField103;
      DoubleField104 = other.DoubleField104;
      DoubleField105 = other.DoubleField105;
      DoubleField31 = other.DoubleField31;
      Int64Field32 = other.Int64Field32;
      DoubleField75 = other.DoubleField75;
      DoubleField129 = other.DoubleField129;
      enumField80_ = other.enumField80_;
      enumField81_ = other.enumField81_;
      Int64Field82 = other.Int64Field82;
      enumField83_ = other.enumField83_;
      Int64Field85 = other.Int64Field85;
      Int64Field86 = other.Int64Field86;
      Int64Field87 = other.Int64Field87;
      Int64Field125 = other.Int64Field125;
      Int64Field37 = other.Int64Field37;
      DoubleField38 = other.DoubleField38;
      Interactions = other.Interactions;
      repeatedIntField100_ = other.repeatedIntField100_.Clone();
      DoubleField40 = other.DoubleField40;
      Int64Field41 = other.Int64Field41;
      Int64Field126 = other.Int64Field126;
      Int64Field127 = other.Int64Field127;
      DoubleField128 = other.DoubleField128;
      DoubleField109 = other.DoubleField109;
      Int64Field110 = other.Int64Field110;
      DoubleField111 = other.DoubleField111;
      Int64Field112 = other.Int64Field112;
      DoubleField113 = other.DoubleField113;
      Int64Field114 = other.Int64Field114;
      DoubleField42 = other.DoubleField42;
      Int64Field43 = other.Int64Field43;
      Int64Field44 = other.Int64Field44;
      DoubleField45 = other.DoubleField45;
      DoubleField46 = other.DoubleField46;
      DoubleField78 = other.DoubleField78;
      DoubleField88 = other.DoubleField88;
      DoubleField47 = other.DoubleField47;
      DoubleField89 = other.DoubleField89;
      DoubleField48 = other.DoubleField48;
      DoubleField49 = other.DoubleField49;
      DoubleField50 = other.DoubleField50;
      DoubleField90 = other.DoubleField90;
      DoubleField51 = other.DoubleField51;
      DoubleField91 = other.DoubleField91;
      DoubleField92 = other.DoubleField92;
      Int64Field107 = other.Int64Field107;
      DoubleField93 = other.DoubleField93;
      DoubleField108 = other.DoubleField108;
      DoubleField52 = other.DoubleField52;
      DoubleField53 = other.DoubleField53;
      DoubleField94 = other.DoubleField94;
      DoubleField54 = other.DoubleField54;
      DoubleField55 = other.DoubleField55;
      DoubleField56 = other.DoubleField56;
      DoubleField57 = other.DoubleField57;
      DoubleField58 = other.DoubleField58;
      Int64Field59 = other.Int64Field59;
      Int64Field60 = other.Int64Field60;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ManyWrapperFieldsMessage Clone() {
      return new ManyWrapperFieldsMessage(this);
    }

    /// <summary>Field number for the "double_field_95" field.</summary>
    public const int DoubleField95FieldNumber = 95;
    private static readonly pb::FieldCodec<double?> _single_doubleField95_codec = pb::FieldCodec.ForStructWrapper<double>(762);
    private double? doubleField95_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField95 {
      get { return doubleField95_; }
      set {
        doubleField95_ = value;
      }
    }


    /// <summary>Field number for the "double_field_1" field.</summary>
    public const int DoubleField1FieldNumber = 1;
    private static readonly pb::FieldCodec<double?> _single_doubleField1_codec = pb::FieldCodec.ForStructWrapper<double>(10);
    private double? doubleField1_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField1 {
      get { return doubleField1_; }
      set {
        doubleField1_ = value;
      }
    }


    /// <summary>Field number for the "double_field_79" field.</summary>
    public const int DoubleField79FieldNumber = 79;
    private static readonly pb::FieldCodec<double?> _single_doubleField79_codec = pb::FieldCodec.ForStructWrapper<double>(634);
    private double? doubleField79_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField79 {
      get { return doubleField79_; }
      set {
        doubleField79_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_2" field.</summary>
    public const int Int64Field2FieldNumber = 2;
    private static readonly pb::FieldCodec<long?> _single_int64Field2_codec = pb::FieldCodec.ForStructWrapper<long>(18);
    private long? int64Field2_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field2 {
      get { return int64Field2_; }
      set {
        int64Field2_ = value;
      }
    }


    /// <summary>Field number for the "double_field_96" field.</summary>
    public const int DoubleField96FieldNumber = 96;
    private static readonly pb::FieldCodec<double?> _single_doubleField96_codec = pb::FieldCodec.ForStructWrapper<double>(770);
    private double? doubleField96_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField96 {
      get { return doubleField96_; }
      set {
        doubleField96_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_3" field.</summary>
    public const int Int64Field3FieldNumber = 3;
    private static readonly pb::FieldCodec<long?> _single_int64Field3_codec = pb::FieldCodec.ForStructWrapper<long>(26);
    private long? int64Field3_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field3 {
      get { return int64Field3_; }
      set {
        int64Field3_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_4" field.</summary>
    public const int Int64Field4FieldNumber = 4;
    private static readonly pb::FieldCodec<long?> _single_int64Field4_codec = pb::FieldCodec.ForStructWrapper<long>(34);
    private long? int64Field4_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field4 {
      get { return int64Field4_; }
      set {
        int64Field4_ = value;
      }
    }


    /// <summary>Field number for the "double_field_97" field.</summary>
    public const int DoubleField97FieldNumber = 97;
    private static readonly pb::FieldCodec<double?> _single_doubleField97_codec = pb::FieldCodec.ForStructWrapper<double>(778);
    private double? doubleField97_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField97 {
      get { return doubleField97_; }
      set {
        doubleField97_ = value;
      }
    }


    /// <summary>Field number for the "double_field_65" field.</summary>
    public const int DoubleField65FieldNumber = 65;
    private static readonly pb::FieldCodec<double?> _single_doubleField65_codec = pb::FieldCodec.ForStructWrapper<double>(522);
    private double? doubleField65_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField65 {
      get { return doubleField65_; }
      set {
        doubleField65_ = value;
      }
    }


    /// <summary>Field number for the "double_field_66" field.</summary>
    public const int DoubleField66FieldNumber = 66;
    private static readonly pb::FieldCodec<double?> _single_doubleField66_codec = pb::FieldCodec.ForStructWrapper<double>(530);
    private double? doubleField66_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField66 {
      get { return doubleField66_; }
      set {
        doubleField66_ = value;
      }
    }


    /// <summary>Field number for the "double_field_7" field.</summary>
    public const int DoubleField7FieldNumber = 7;
    private static readonly pb::FieldCodec<double?> _single_doubleField7_codec = pb::FieldCodec.ForStructWrapper<double>(58);
    private double? doubleField7_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField7 {
      get { return doubleField7_; }
      set {
        doubleField7_ = value;
      }
    }


    /// <summary>Field number for the "double_field_62" field.</summary>
    public const int DoubleField62FieldNumber = 62;
    private static readonly pb::FieldCodec<double?> _single_doubleField62_codec = pb::FieldCodec.ForStructWrapper<double>(498);
    private double? doubleField62_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField62 {
      get { return doubleField62_; }
      set {
        doubleField62_ = value;
      }
    }


    /// <summary>Field number for the "double_field_118" field.</summary>
    public const int DoubleField118FieldNumber = 118;
    private static readonly pb::FieldCodec<double?> _single_doubleField118_codec = pb::FieldCodec.ForStructWrapper<double>(946);
    private double? doubleField118_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField118 {
      get { return doubleField118_; }
      set {
        doubleField118_ = value;
      }
    }


    /// <summary>Field number for the "double_field_119" field.</summary>
    public const int DoubleField119FieldNumber = 119;
    private static readonly pb::FieldCodec<double?> _single_doubleField119_codec = pb::FieldCodec.ForStructWrapper<double>(954);
    private double? doubleField119_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField119 {
      get { return doubleField119_; }
      set {
        doubleField119_ = value;
      }
    }


    /// <summary>Field number for the "double_field_67" field.</summary>
    public const int DoubleField67FieldNumber = 67;
    private static readonly pb::FieldCodec<double?> _single_doubleField67_codec = pb::FieldCodec.ForStructWrapper<double>(538);
    private double? doubleField67_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField67 {
      get { return doubleField67_; }
      set {
        doubleField67_ = value;
      }
    }


    /// <summary>Field number for the "double_field_120" field.</summary>
    public const int DoubleField120FieldNumber = 120;
    private static readonly pb::FieldCodec<double?> _single_doubleField120_codec = pb::FieldCodec.ForStructWrapper<double>(962);
    private double? doubleField120_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField120 {
      get { return doubleField120_; }
      set {
        doubleField120_ = value;
      }
    }


    /// <summary>Field number for the "double_field_121" field.</summary>
    public const int DoubleField121FieldNumber = 121;
    private static readonly pb::FieldCodec<double?> _single_doubleField121_codec = pb::FieldCodec.ForStructWrapper<double>(970);
    private double? doubleField121_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField121 {
      get { return doubleField121_; }
      set {
        doubleField121_ = value;
      }
    }


    /// <summary>Field number for the "double_field_122" field.</summary>
    public const int DoubleField122FieldNumber = 122;
    private static readonly pb::FieldCodec<double?> _single_doubleField122_codec = pb::FieldCodec.ForStructWrapper<double>(978);
    private double? doubleField122_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField122 {
      get { return doubleField122_; }
      set {
        doubleField122_ = value;
      }
    }


    /// <summary>Field number for the "double_field_123" field.</summary>
    public const int DoubleField123FieldNumber = 123;
    private static readonly pb::FieldCodec<double?> _single_doubleField123_codec = pb::FieldCodec.ForStructWrapper<double>(986);
    private double? doubleField123_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField123 {
      get { return doubleField123_; }
      set {
        doubleField123_ = value;
      }
    }


    /// <summary>Field number for the "double_field_124" field.</summary>
    public const int DoubleField124FieldNumber = 124;
    private static readonly pb::FieldCodec<double?> _single_doubleField124_codec = pb::FieldCodec.ForStructWrapper<double>(994);
    private double? doubleField124_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField124 {
      get { return doubleField124_; }
      set {
        doubleField124_ = value;
      }
    }


    /// <summary>Field number for the "double_field_8" field.</summary>
    public const int DoubleField8FieldNumber = 8;
    private static readonly pb::FieldCodec<double?> _single_doubleField8_codec = pb::FieldCodec.ForStructWrapper<double>(66);
    private double? doubleField8_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField8 {
      get { return doubleField8_; }
      set {
        doubleField8_ = value;
      }
    }


    /// <summary>Field number for the "double_field_9" field.</summary>
    public const int DoubleField9FieldNumber = 9;
    private static readonly pb::FieldCodec<double?> _single_doubleField9_codec = pb::FieldCodec.ForStructWrapper<double>(74);
    private double? doubleField9_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField9 {
      get { return doubleField9_; }
      set {
        doubleField9_ = value;
      }
    }


    /// <summary>Field number for the "double_field_98" field.</summary>
    public const int DoubleField98FieldNumber = 98;
    private static readonly pb::FieldCodec<double?> _single_doubleField98_codec = pb::FieldCodec.ForStructWrapper<double>(786);
    private double? doubleField98_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField98 {
      get { return doubleField98_; }
      set {
        doubleField98_ = value;
      }
    }


    /// <summary>Field number for the "double_field_10" field.</summary>
    public const int DoubleField10FieldNumber = 10;
    private static readonly pb::FieldCodec<double?> _single_doubleField10_codec = pb::FieldCodec.ForStructWrapper<double>(82);
    private double? doubleField10_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField10 {
      get { return doubleField10_; }
      set {
        doubleField10_ = value;
      }
    }


    /// <summary>Field number for the "double_field_11" field.</summary>
    public const int DoubleField11FieldNumber = 11;
    private static readonly pb::FieldCodec<double?> _single_doubleField11_codec = pb::FieldCodec.ForStructWrapper<double>(90);
    private double? doubleField11_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField11 {
      get { return doubleField11_; }
      set {
        doubleField11_ = value;
      }
    }


    /// <summary>Field number for the "double_field_99" field.</summary>
    public const int DoubleField99FieldNumber = 99;
    private static readonly pb::FieldCodec<double?> _single_doubleField99_codec = pb::FieldCodec.ForStructWrapper<double>(794);
    private double? doubleField99_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField99 {
      get { return doubleField99_; }
      set {
        doubleField99_ = value;
      }
    }


    /// <summary>Field number for the "double_field_84" field.</summary>
    public const int DoubleField84FieldNumber = 84;
    private static readonly pb::FieldCodec<double?> _single_doubleField84_codec = pb::FieldCodec.ForStructWrapper<double>(674);
    private double? doubleField84_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField84 {
      get { return doubleField84_; }
      set {
        doubleField84_ = value;
      }
    }


    /// <summary>Field number for the "double_field_14" field.</summary>
    public const int DoubleField14FieldNumber = 14;
    private static readonly pb::FieldCodec<double?> _single_doubleField14_codec = pb::FieldCodec.ForStructWrapper<double>(114);
    private double? doubleField14_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField14 {
      get { return doubleField14_; }
      set {
        doubleField14_ = value;
      }
    }


    /// <summary>Field number for the "double_field_77" field.</summary>
    public const int DoubleField77FieldNumber = 77;
    private static readonly pb::FieldCodec<double?> _single_doubleField77_codec = pb::FieldCodec.ForStructWrapper<double>(618);
    private double? doubleField77_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField77 {
      get { return doubleField77_; }
      set {
        doubleField77_ = value;
      }
    }


    /// <summary>Field number for the "double_field_15" field.</summary>
    public const int DoubleField15FieldNumber = 15;
    private static readonly pb::FieldCodec<double?> _single_doubleField15_codec = pb::FieldCodec.ForStructWrapper<double>(122);
    private double? doubleField15_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField15 {
      get { return doubleField15_; }
      set {
        doubleField15_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_19" field.</summary>
    public const int Int64Field19FieldNumber = 19;
    private static readonly pb::FieldCodec<long?> _single_int64Field19_codec = pb::FieldCodec.ForStructWrapper<long>(154);
    private long? int64Field19_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field19 {
      get { return int64Field19_; }
      set {
        int64Field19_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_115" field.</summary>
    public const int Int64Field115FieldNumber = 115;
    private static readonly pb::FieldCodec<long?> _single_int64Field115_codec = pb::FieldCodec.ForStructWrapper<long>(922);
    private long? int64Field115_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field115 {
      get { return int64Field115_; }
      set {
        int64Field115_ = value;
      }
    }


    /// <summary>Field number for the "double_field_116" field.</summary>
    public const int DoubleField116FieldNumber = 116;
    private static readonly pb::FieldCodec<double?> _single_doubleField116_codec = pb::FieldCodec.ForStructWrapper<double>(930);
    private double? doubleField116_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField116 {
      get { return doubleField116_; }
      set {
        doubleField116_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_117" field.</summary>
    public const int Int64Field117FieldNumber = 117;
    private static readonly pb::FieldCodec<long?> _single_int64Field117_codec = pb::FieldCodec.ForStructWrapper<long>(938);
    private long? int64Field117_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field117 {
      get { return int64Field117_; }
      set {
        int64Field117_ = value;
      }
    }


    /// <summary>Field number for the "double_field_20" field.</summary>
    public const int DoubleField20FieldNumber = 20;
    private static readonly pb::FieldCodec<double?> _single_doubleField20_codec = pb::FieldCodec.ForStructWrapper<double>(162);
    private double? doubleField20_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField20 {
      get { return doubleField20_; }
      set {
        doubleField20_ = value;
      }
    }


    /// <summary>Field number for the "double_field_21" field.</summary>
    public const int DoubleField21FieldNumber = 21;
    private static readonly pb::FieldCodec<double?> _single_doubleField21_codec = pb::FieldCodec.ForStructWrapper<double>(170);
    private double? doubleField21_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField21 {
      get { return doubleField21_; }
      set {
        doubleField21_ = value;
      }
    }


    /// <summary>Field number for the "string_field_73" field.</summary>
    public const int StringField73FieldNumber = 73;
    private static readonly pb::FieldCodec<string> _single_stringField73_codec = pb::FieldCodec.ForClassWrapper<string>(586);
    private string stringField73_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string StringField73 {
      get { return stringField73_; }
      set {
        stringField73_ = value;
      }
    }


    /// <summary>Field number for the "string_field_74" field.</summary>
    public const int StringField74FieldNumber = 74;
    private static readonly pb::FieldCodec<string> _single_stringField74_codec = pb::FieldCodec.ForClassWrapper<string>(594);
    private string stringField74_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string StringField74 {
      get { return stringField74_; }
      set {
        stringField74_ = value;
      }
    }


    /// <summary>Field number for the "double_field_22" field.</summary>
    public const int DoubleField22FieldNumber = 22;
    private static readonly pb::FieldCodec<double?> _single_doubleField22_codec = pb::FieldCodec.ForStructWrapper<double>(178);
    private double? doubleField22_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField22 {
      get { return doubleField22_; }
      set {
        doubleField22_ = value;
      }
    }


    /// <summary>Field number for the "double_field_69" field.</summary>
    public const int DoubleField69FieldNumber = 69;
    private static readonly pb::FieldCodec<double?> _single_doubleField69_codec = pb::FieldCodec.ForStructWrapper<double>(554);
    private double? doubleField69_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField69 {
      get { return doubleField69_; }
      set {
        doubleField69_ = value;
      }
    }


    /// <summary>Field number for the "double_field_70" field.</summary>
    public const int DoubleField70FieldNumber = 70;
    private static readonly pb::FieldCodec<double?> _single_doubleField70_codec = pb::FieldCodec.ForStructWrapper<double>(562);
    private double? doubleField70_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField70 {
      get { return doubleField70_; }
      set {
        doubleField70_ = value;
      }
    }


    /// <summary>Field number for the "double_field_71" field.</summary>
    public const int DoubleField71FieldNumber = 71;
    private static readonly pb::FieldCodec<double?> _single_doubleField71_codec = pb::FieldCodec.ForStructWrapper<double>(570);
    private double? doubleField71_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField71 {
      get { return doubleField71_; }
      set {
        doubleField71_ = value;
      }
    }


    /// <summary>Field number for the "double_field_72" field.</summary>
    public const int DoubleField72FieldNumber = 72;
    private static readonly pb::FieldCodec<double?> _single_doubleField72_codec = pb::FieldCodec.ForStructWrapper<double>(578);
    private double? doubleField72_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField72 {
      get { return doubleField72_; }
      set {
        doubleField72_ = value;
      }
    }


    /// <summary>Field number for the "double_field_25" field.</summary>
    public const int DoubleField25FieldNumber = 25;
    private static readonly pb::FieldCodec<double?> _single_doubleField25_codec = pb::FieldCodec.ForStructWrapper<double>(202);
    private double? doubleField25_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField25 {
      get { return doubleField25_; }
      set {
        doubleField25_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_26" field.</summary>
    public const int Int64Field26FieldNumber = 26;
    private static readonly pb::FieldCodec<long?> _single_int64Field26_codec = pb::FieldCodec.ForStructWrapper<long>(210);
    private long? int64Field26_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field26 {
      get { return int64Field26_; }
      set {
        int64Field26_ = value;
      }
    }


    /// <summary>Field number for the "double_field_68" field.</summary>
    public const int DoubleField68FieldNumber = 68;
    private static readonly pb::FieldCodec<double?> _single_doubleField68_codec = pb::FieldCodec.ForStructWrapper<double>(546);
    private double? doubleField68_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField68 {
      get { return doubleField68_; }
      set {
        doubleField68_ = value;
      }
    }


    /// <summary>Field number for the "double_field_28" field.</summary>
    public const int DoubleField28FieldNumber = 28;
    private static readonly pb::FieldCodec<double?> _single_doubleField28_codec = pb::FieldCodec.ForStructWrapper<double>(226);
    private double? doubleField28_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField28 {
      get { return doubleField28_; }
      set {
        doubleField28_ = value;
      }
    }


    /// <summary>Field number for the "double_field_106" field.</summary>
    public const int DoubleField106FieldNumber = 106;
    private static readonly pb::FieldCodec<double?> _single_doubleField106_codec = pb::FieldCodec.ForStructWrapper<double>(850);
    private double? doubleField106_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField106 {
      get { return doubleField106_; }
      set {
        doubleField106_ = value;
      }
    }


    /// <summary>Field number for the "double_field_29" field.</summary>
    public const int DoubleField29FieldNumber = 29;
    private static readonly pb::FieldCodec<double?> _single_doubleField29_codec = pb::FieldCodec.ForStructWrapper<double>(234);
    private double? doubleField29_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField29 {
      get { return doubleField29_; }
      set {
        doubleField29_ = value;
      }
    }


    /// <summary>Field number for the "double_field_30" field.</summary>
    public const int DoubleField30FieldNumber = 30;
    private static readonly pb::FieldCodec<double?> _single_doubleField30_codec = pb::FieldCodec.ForStructWrapper<double>(242);
    private double? doubleField30_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField30 {
      get { return doubleField30_; }
      set {
        doubleField30_ = value;
      }
    }


    /// <summary>Field number for the "double_field_101" field.</summary>
    public const int DoubleField101FieldNumber = 101;
    private static readonly pb::FieldCodec<double?> _single_doubleField101_codec = pb::FieldCodec.ForStructWrapper<double>(810);
    private double? doubleField101_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField101 {
      get { return doubleField101_; }
      set {
        doubleField101_ = value;
      }
    }


    /// <summary>Field number for the "double_field_102" field.</summary>
    public const int DoubleField102FieldNumber = 102;
    private static readonly pb::FieldCodec<double?> _single_doubleField102_codec = pb::FieldCodec.ForStructWrapper<double>(818);
    private double? doubleField102_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField102 {
      get { return doubleField102_; }
      set {
        doubleField102_ = value;
      }
    }


    /// <summary>Field number for the "double_field_103" field.</summary>
    public const int DoubleField103FieldNumber = 103;
    private static readonly pb::FieldCodec<double?> _single_doubleField103_codec = pb::FieldCodec.ForStructWrapper<double>(826);
    private double? doubleField103_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField103 {
      get { return doubleField103_; }
      set {
        doubleField103_ = value;
      }
    }


    /// <summary>Field number for the "double_field_104" field.</summary>
    public const int DoubleField104FieldNumber = 104;
    private static readonly pb::FieldCodec<double?> _single_doubleField104_codec = pb::FieldCodec.ForStructWrapper<double>(834);
    private double? doubleField104_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField104 {
      get { return doubleField104_; }
      set {
        doubleField104_ = value;
      }
    }


    /// <summary>Field number for the "double_field_105" field.</summary>
    public const int DoubleField105FieldNumber = 105;
    private static readonly pb::FieldCodec<double?> _single_doubleField105_codec = pb::FieldCodec.ForStructWrapper<double>(842);
    private double? doubleField105_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField105 {
      get { return doubleField105_; }
      set {
        doubleField105_ = value;
      }
    }


    /// <summary>Field number for the "double_field_31" field.</summary>
    public const int DoubleField31FieldNumber = 31;
    private static readonly pb::FieldCodec<double?> _single_doubleField31_codec = pb::FieldCodec.ForStructWrapper<double>(250);
    private double? doubleField31_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField31 {
      get { return doubleField31_; }
      set {
        doubleField31_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_32" field.</summary>
    public const int Int64Field32FieldNumber = 32;
    private static readonly pb::FieldCodec<long?> _single_int64Field32_codec = pb::FieldCodec.ForStructWrapper<long>(258);
    private long? int64Field32_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field32 {
      get { return int64Field32_; }
      set {
        int64Field32_ = value;
      }
    }


    /// <summary>Field number for the "double_field_75" field.</summary>
    public const int DoubleField75FieldNumber = 75;
    private static readonly pb::FieldCodec<double?> _single_doubleField75_codec = pb::FieldCodec.ForStructWrapper<double>(602);
    private double? doubleField75_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField75 {
      get { return doubleField75_; }
      set {
        doubleField75_ = value;
      }
    }


    /// <summary>Field number for the "double_field_129" field.</summary>
    public const int DoubleField129FieldNumber = 129;
    private static readonly pb::FieldCodec<double?> _single_doubleField129_codec = pb::FieldCodec.ForStructWrapper<double>(1034);
    private double? doubleField129_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField129 {
      get { return doubleField129_; }
      set {
        doubleField129_ = value;
      }
    }


    /// <summary>Field number for the "enum_field_80" field.</summary>
    public const int EnumField80FieldNumber = 80;
    private int enumField80_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int EnumField80 {
      get { return enumField80_; }
      set {
        enumField80_ = value;
      }
    }

    /// <summary>Field number for the "enum_field_81" field.</summary>
    public const int EnumField81FieldNumber = 81;
    private int enumField81_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int EnumField81 {
      get { return enumField81_; }
      set {
        enumField81_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_82" field.</summary>
    public const int Int64Field82FieldNumber = 82;
    private static readonly pb::FieldCodec<long?> _single_int64Field82_codec = pb::FieldCodec.ForStructWrapper<long>(658);
    private long? int64Field82_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field82 {
      get { return int64Field82_; }
      set {
        int64Field82_ = value;
      }
    }


    /// <summary>Field number for the "enum_field_83" field.</summary>
    public const int EnumField83FieldNumber = 83;
    private int enumField83_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int EnumField83 {
      get { return enumField83_; }
      set {
        enumField83_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_85" field.</summary>
    public const int Int64Field85FieldNumber = 85;
    private static readonly pb::FieldCodec<long?> _single_int64Field85_codec = pb::FieldCodec.ForStructWrapper<long>(682);
    private long? int64Field85_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field85 {
      get { return int64Field85_; }
      set {
        int64Field85_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_86" field.</summary>
    public const int Int64Field86FieldNumber = 86;
    private static readonly pb::FieldCodec<long?> _single_int64Field86_codec = pb::FieldCodec.ForStructWrapper<long>(690);
    private long? int64Field86_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field86 {
      get { return int64Field86_; }
      set {
        int64Field86_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_87" field.</summary>
    public const int Int64Field87FieldNumber = 87;
    private static readonly pb::FieldCodec<long?> _single_int64Field87_codec = pb::FieldCodec.ForStructWrapper<long>(698);
    private long? int64Field87_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field87 {
      get { return int64Field87_; }
      set {
        int64Field87_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_125" field.</summary>
    public const int Int64Field125FieldNumber = 125;
    private static readonly pb::FieldCodec<long?> _single_int64Field125_codec = pb::FieldCodec.ForStructWrapper<long>(1002);
    private long? int64Field125_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field125 {
      get { return int64Field125_; }
      set {
        int64Field125_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_37" field.</summary>
    public const int Int64Field37FieldNumber = 37;
    private static readonly pb::FieldCodec<long?> _single_int64Field37_codec = pb::FieldCodec.ForStructWrapper<long>(298);
    private long? int64Field37_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field37 {
      get { return int64Field37_; }
      set {
        int64Field37_ = value;
      }
    }


    /// <summary>Field number for the "double_field_38" field.</summary>
    public const int DoubleField38FieldNumber = 38;
    private static readonly pb::FieldCodec<double?> _single_doubleField38_codec = pb::FieldCodec.ForStructWrapper<double>(306);
    private double? doubleField38_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField38 {
      get { return doubleField38_; }
      set {
        doubleField38_ = value;
      }
    }


    /// <summary>Field number for the "interactions" field.</summary>
    public const int InteractionsFieldNumber = 39;
    private static readonly pb::FieldCodec<long?> _single_interactions_codec = pb::FieldCodec.ForStructWrapper<long>(314);
    private long? interactions_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Interactions {
      get { return interactions_; }
      set {
        interactions_ = value;
      }
    }


    /// <summary>Field number for the "repeated_int_field_100" field.</summary>
    public const int RepeatedIntField100FieldNumber = 100;
    private static readonly pb::FieldCodec<int> _repeated_repeatedIntField100_codec
        = pb::FieldCodec.ForInt32(802);
    private readonly pbc::RepeatedField<int> repeatedIntField100_ = new pbc::RepeatedField<int>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<int> RepeatedIntField100 {
      get { return repeatedIntField100_; }
    }

    /// <summary>Field number for the "double_field_40" field.</summary>
    public const int DoubleField40FieldNumber = 40;
    private static readonly pb::FieldCodec<double?> _single_doubleField40_codec = pb::FieldCodec.ForStructWrapper<double>(322);
    private double? doubleField40_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField40 {
      get { return doubleField40_; }
      set {
        doubleField40_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_41" field.</summary>
    public const int Int64Field41FieldNumber = 41;
    private static readonly pb::FieldCodec<long?> _single_int64Field41_codec = pb::FieldCodec.ForStructWrapper<long>(330);
    private long? int64Field41_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field41 {
      get { return int64Field41_; }
      set {
        int64Field41_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_126" field.</summary>
    public const int Int64Field126FieldNumber = 126;
    private static readonly pb::FieldCodec<long?> _single_int64Field126_codec = pb::FieldCodec.ForStructWrapper<long>(1010);
    private long? int64Field126_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field126 {
      get { return int64Field126_; }
      set {
        int64Field126_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_127" field.</summary>
    public const int Int64Field127FieldNumber = 127;
    private static readonly pb::FieldCodec<long?> _single_int64Field127_codec = pb::FieldCodec.ForStructWrapper<long>(1018);
    private long? int64Field127_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field127 {
      get { return int64Field127_; }
      set {
        int64Field127_ = value;
      }
    }


    /// <summary>Field number for the "double_field_128" field.</summary>
    public const int DoubleField128FieldNumber = 128;
    private static readonly pb::FieldCodec<double?> _single_doubleField128_codec = pb::FieldCodec.ForStructWrapper<double>(1026);
    private double? doubleField128_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField128 {
      get { return doubleField128_; }
      set {
        doubleField128_ = value;
      }
    }


    /// <summary>Field number for the "double_field_109" field.</summary>
    public const int DoubleField109FieldNumber = 109;
    private static readonly pb::FieldCodec<double?> _single_doubleField109_codec = pb::FieldCodec.ForStructWrapper<double>(874);
    private double? doubleField109_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField109 {
      get { return doubleField109_; }
      set {
        doubleField109_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_110" field.</summary>
    public const int Int64Field110FieldNumber = 110;
    private static readonly pb::FieldCodec<long?> _single_int64Field110_codec = pb::FieldCodec.ForStructWrapper<long>(882);
    private long? int64Field110_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field110 {
      get { return int64Field110_; }
      set {
        int64Field110_ = value;
      }
    }


    /// <summary>Field number for the "double_field_111" field.</summary>
    public const int DoubleField111FieldNumber = 111;
    private static readonly pb::FieldCodec<double?> _single_doubleField111_codec = pb::FieldCodec.ForStructWrapper<double>(890);
    private double? doubleField111_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField111 {
      get { return doubleField111_; }
      set {
        doubleField111_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_112" field.</summary>
    public const int Int64Field112FieldNumber = 112;
    private static readonly pb::FieldCodec<long?> _single_int64Field112_codec = pb::FieldCodec.ForStructWrapper<long>(898);
    private long? int64Field112_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field112 {
      get { return int64Field112_; }
      set {
        int64Field112_ = value;
      }
    }


    /// <summary>Field number for the "double_field_113" field.</summary>
    public const int DoubleField113FieldNumber = 113;
    private static readonly pb::FieldCodec<double?> _single_doubleField113_codec = pb::FieldCodec.ForStructWrapper<double>(906);
    private double? doubleField113_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField113 {
      get { return doubleField113_; }
      set {
        doubleField113_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_114" field.</summary>
    public const int Int64Field114FieldNumber = 114;
    private static readonly pb::FieldCodec<long?> _single_int64Field114_codec = pb::FieldCodec.ForStructWrapper<long>(914);
    private long? int64Field114_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field114 {
      get { return int64Field114_; }
      set {
        int64Field114_ = value;
      }
    }


    /// <summary>Field number for the "double_field_42" field.</summary>
    public const int DoubleField42FieldNumber = 42;
    private static readonly pb::FieldCodec<double?> _single_doubleField42_codec = pb::FieldCodec.ForStructWrapper<double>(338);
    private double? doubleField42_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField42 {
      get { return doubleField42_; }
      set {
        doubleField42_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_43" field.</summary>
    public const int Int64Field43FieldNumber = 43;
    private static readonly pb::FieldCodec<long?> _single_int64Field43_codec = pb::FieldCodec.ForStructWrapper<long>(346);
    private long? int64Field43_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field43 {
      get { return int64Field43_; }
      set {
        int64Field43_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_44" field.</summary>
    public const int Int64Field44FieldNumber = 44;
    private static readonly pb::FieldCodec<long?> _single_int64Field44_codec = pb::FieldCodec.ForStructWrapper<long>(354);
    private long? int64Field44_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field44 {
      get { return int64Field44_; }
      set {
        int64Field44_ = value;
      }
    }


    /// <summary>Field number for the "double_field_45" field.</summary>
    public const int DoubleField45FieldNumber = 45;
    private static readonly pb::FieldCodec<double?> _single_doubleField45_codec = pb::FieldCodec.ForStructWrapper<double>(362);
    private double? doubleField45_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField45 {
      get { return doubleField45_; }
      set {
        doubleField45_ = value;
      }
    }


    /// <summary>Field number for the "double_field_46" field.</summary>
    public const int DoubleField46FieldNumber = 46;
    private static readonly pb::FieldCodec<double?> _single_doubleField46_codec = pb::FieldCodec.ForStructWrapper<double>(370);
    private double? doubleField46_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField46 {
      get { return doubleField46_; }
      set {
        doubleField46_ = value;
      }
    }


    /// <summary>Field number for the "double_field_78" field.</summary>
    public const int DoubleField78FieldNumber = 78;
    private static readonly pb::FieldCodec<double?> _single_doubleField78_codec = pb::FieldCodec.ForStructWrapper<double>(626);
    private double? doubleField78_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField78 {
      get { return doubleField78_; }
      set {
        doubleField78_ = value;
      }
    }


    /// <summary>Field number for the "double_field_88" field.</summary>
    public const int DoubleField88FieldNumber = 88;
    private static readonly pb::FieldCodec<double?> _single_doubleField88_codec = pb::FieldCodec.ForStructWrapper<double>(706);
    private double? doubleField88_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField88 {
      get { return doubleField88_; }
      set {
        doubleField88_ = value;
      }
    }


    /// <summary>Field number for the "double_field_47" field.</summary>
    public const int DoubleField47FieldNumber = 47;
    private static readonly pb::FieldCodec<double?> _single_doubleField47_codec = pb::FieldCodec.ForStructWrapper<double>(378);
    private double? doubleField47_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField47 {
      get { return doubleField47_; }
      set {
        doubleField47_ = value;
      }
    }


    /// <summary>Field number for the "double_field_89" field.</summary>
    public const int DoubleField89FieldNumber = 89;
    private static readonly pb::FieldCodec<double?> _single_doubleField89_codec = pb::FieldCodec.ForStructWrapper<double>(714);
    private double? doubleField89_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField89 {
      get { return doubleField89_; }
      set {
        doubleField89_ = value;
      }
    }


    /// <summary>Field number for the "double_field_48" field.</summary>
    public const int DoubleField48FieldNumber = 48;
    private static readonly pb::FieldCodec<double?> _single_doubleField48_codec = pb::FieldCodec.ForStructWrapper<double>(386);
    private double? doubleField48_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField48 {
      get { return doubleField48_; }
      set {
        doubleField48_ = value;
      }
    }


    /// <summary>Field number for the "double_field_49" field.</summary>
    public const int DoubleField49FieldNumber = 49;
    private static readonly pb::FieldCodec<double?> _single_doubleField49_codec = pb::FieldCodec.ForStructWrapper<double>(394);
    private double? doubleField49_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField49 {
      get { return doubleField49_; }
      set {
        doubleField49_ = value;
      }
    }


    /// <summary>Field number for the "double_field_50" field.</summary>
    public const int DoubleField50FieldNumber = 50;
    private static readonly pb::FieldCodec<double?> _single_doubleField50_codec = pb::FieldCodec.ForStructWrapper<double>(402);
    private double? doubleField50_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField50 {
      get { return doubleField50_; }
      set {
        doubleField50_ = value;
      }
    }


    /// <summary>Field number for the "double_field_90" field.</summary>
    public const int DoubleField90FieldNumber = 90;
    private static readonly pb::FieldCodec<double?> _single_doubleField90_codec = pb::FieldCodec.ForStructWrapper<double>(722);
    private double? doubleField90_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField90 {
      get { return doubleField90_; }
      set {
        doubleField90_ = value;
      }
    }


    /// <summary>Field number for the "double_field_51" field.</summary>
    public const int DoubleField51FieldNumber = 51;
    private static readonly pb::FieldCodec<double?> _single_doubleField51_codec = pb::FieldCodec.ForStructWrapper<double>(410);
    private double? doubleField51_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField51 {
      get { return doubleField51_; }
      set {
        doubleField51_ = value;
      }
    }


    /// <summary>Field number for the "double_field_91" field.</summary>
    public const int DoubleField91FieldNumber = 91;
    private static readonly pb::FieldCodec<double?> _single_doubleField91_codec = pb::FieldCodec.ForStructWrapper<double>(730);
    private double? doubleField91_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField91 {
      get { return doubleField91_; }
      set {
        doubleField91_ = value;
      }
    }


    /// <summary>Field number for the "double_field_92" field.</summary>
    public const int DoubleField92FieldNumber = 92;
    private static readonly pb::FieldCodec<double?> _single_doubleField92_codec = pb::FieldCodec.ForStructWrapper<double>(738);
    private double? doubleField92_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField92 {
      get { return doubleField92_; }
      set {
        doubleField92_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_107" field.</summary>
    public const int Int64Field107FieldNumber = 107;
    private static readonly pb::FieldCodec<long?> _single_int64Field107_codec = pb::FieldCodec.ForStructWrapper<long>(858);
    private long? int64Field107_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field107 {
      get { return int64Field107_; }
      set {
        int64Field107_ = value;
      }
    }


    /// <summary>Field number for the "double_field_93" field.</summary>
    public const int DoubleField93FieldNumber = 93;
    private static readonly pb::FieldCodec<double?> _single_doubleField93_codec = pb::FieldCodec.ForStructWrapper<double>(746);
    private double? doubleField93_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField93 {
      get { return doubleField93_; }
      set {
        doubleField93_ = value;
      }
    }


    /// <summary>Field number for the "double_field_108" field.</summary>
    public const int DoubleField108FieldNumber = 108;
    private static readonly pb::FieldCodec<double?> _single_doubleField108_codec = pb::FieldCodec.ForStructWrapper<double>(866);
    private double? doubleField108_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField108 {
      get { return doubleField108_; }
      set {
        doubleField108_ = value;
      }
    }


    /// <summary>Field number for the "double_field_52" field.</summary>
    public const int DoubleField52FieldNumber = 52;
    private static readonly pb::FieldCodec<double?> _single_doubleField52_codec = pb::FieldCodec.ForStructWrapper<double>(418);
    private double? doubleField52_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField52 {
      get { return doubleField52_; }
      set {
        doubleField52_ = value;
      }
    }


    /// <summary>Field number for the "double_field_53" field.</summary>
    public const int DoubleField53FieldNumber = 53;
    private static readonly pb::FieldCodec<double?> _single_doubleField53_codec = pb::FieldCodec.ForStructWrapper<double>(426);
    private double? doubleField53_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField53 {
      get { return doubleField53_; }
      set {
        doubleField53_ = value;
      }
    }


    /// <summary>Field number for the "double_field_94" field.</summary>
    public const int DoubleField94FieldNumber = 94;
    private static readonly pb::FieldCodec<double?> _single_doubleField94_codec = pb::FieldCodec.ForStructWrapper<double>(754);
    private double? doubleField94_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField94 {
      get { return doubleField94_; }
      set {
        doubleField94_ = value;
      }
    }


    /// <summary>Field number for the "double_field_54" field.</summary>
    public const int DoubleField54FieldNumber = 54;
    private static readonly pb::FieldCodec<double?> _single_doubleField54_codec = pb::FieldCodec.ForStructWrapper<double>(434);
    private double? doubleField54_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField54 {
      get { return doubleField54_; }
      set {
        doubleField54_ = value;
      }
    }


    /// <summary>Field number for the "double_field_55" field.</summary>
    public const int DoubleField55FieldNumber = 55;
    private static readonly pb::FieldCodec<double?> _single_doubleField55_codec = pb::FieldCodec.ForStructWrapper<double>(442);
    private double? doubleField55_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField55 {
      get { return doubleField55_; }
      set {
        doubleField55_ = value;
      }
    }


    /// <summary>Field number for the "double_field_56" field.</summary>
    public const int DoubleField56FieldNumber = 56;
    private static readonly pb::FieldCodec<double?> _single_doubleField56_codec = pb::FieldCodec.ForStructWrapper<double>(450);
    private double? doubleField56_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField56 {
      get { return doubleField56_; }
      set {
        doubleField56_ = value;
      }
    }


    /// <summary>Field number for the "double_field_57" field.</summary>
    public const int DoubleField57FieldNumber = 57;
    private static readonly pb::FieldCodec<double?> _single_doubleField57_codec = pb::FieldCodec.ForStructWrapper<double>(458);
    private double? doubleField57_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField57 {
      get { return doubleField57_; }
      set {
        doubleField57_ = value;
      }
    }


    /// <summary>Field number for the "double_field_58" field.</summary>
    public const int DoubleField58FieldNumber = 58;
    private static readonly pb::FieldCodec<double?> _single_doubleField58_codec = pb::FieldCodec.ForStructWrapper<double>(466);
    private double? doubleField58_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double? DoubleField58 {
      get { return doubleField58_; }
      set {
        doubleField58_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_59" field.</summary>
    public const int Int64Field59FieldNumber = 59;
    private static readonly pb::FieldCodec<long?> _single_int64Field59_codec = pb::FieldCodec.ForStructWrapper<long>(474);
    private long? int64Field59_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field59 {
      get { return int64Field59_; }
      set {
        int64Field59_ = value;
      }
    }


    /// <summary>Field number for the "int64_field_60" field.</summary>
    public const int Int64Field60FieldNumber = 60;
    private static readonly pb::FieldCodec<long?> _single_int64Field60_codec = pb::FieldCodec.ForStructWrapper<long>(482);
    private long? int64Field60_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long? Int64Field60 {
      get { return int64Field60_; }
      set {
        int64Field60_ = value;
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ManyWrapperFieldsMessage);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ManyWrapperFieldsMessage other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField95, other.DoubleField95)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField1, other.DoubleField1)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField79, other.DoubleField79)) return false;
      if (Int64Field2 != other.Int64Field2) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField96, other.DoubleField96)) return false;
      if (Int64Field3 != other.Int64Field3) return false;
      if (Int64Field4 != other.Int64Field4) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField97, other.DoubleField97)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField65, other.DoubleField65)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField66, other.DoubleField66)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField7, other.DoubleField7)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField62, other.DoubleField62)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField118, other.DoubleField118)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField119, other.DoubleField119)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField67, other.DoubleField67)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField120, other.DoubleField120)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField121, other.DoubleField121)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField122, other.DoubleField122)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField123, other.DoubleField123)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField124, other.DoubleField124)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField8, other.DoubleField8)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField9, other.DoubleField9)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField98, other.DoubleField98)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField10, other.DoubleField10)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField11, other.DoubleField11)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField99, other.DoubleField99)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField84, other.DoubleField84)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField14, other.DoubleField14)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField77, other.DoubleField77)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField15, other.DoubleField15)) return false;
      if (Int64Field19 != other.Int64Field19) return false;
      if (Int64Field115 != other.Int64Field115) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField116, other.DoubleField116)) return false;
      if (Int64Field117 != other.Int64Field117) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField20, other.DoubleField20)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField21, other.DoubleField21)) return false;
      if (StringField73 != other.StringField73) return false;
      if (StringField74 != other.StringField74) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField22, other.DoubleField22)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField69, other.DoubleField69)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField70, other.DoubleField70)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField71, other.DoubleField71)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField72, other.DoubleField72)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField25, other.DoubleField25)) return false;
      if (Int64Field26 != other.Int64Field26) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField68, other.DoubleField68)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField28, other.DoubleField28)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField106, other.DoubleField106)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField29, other.DoubleField29)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField30, other.DoubleField30)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField101, other.DoubleField101)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField102, other.DoubleField102)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField103, other.DoubleField103)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField104, other.DoubleField104)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField105, other.DoubleField105)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField31, other.DoubleField31)) return false;
      if (Int64Field32 != other.Int64Field32) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField75, other.DoubleField75)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField129, other.DoubleField129)) return false;
      if (EnumField80 != other.EnumField80) return false;
      if (EnumField81 != other.EnumField81) return false;
      if (Int64Field82 != other.Int64Field82) return false;
      if (EnumField83 != other.EnumField83) return false;
      if (Int64Field85 != other.Int64Field85) return false;
      if (Int64Field86 != other.Int64Field86) return false;
      if (Int64Field87 != other.Int64Field87) return false;
      if (Int64Field125 != other.Int64Field125) return false;
      if (Int64Field37 != other.Int64Field37) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField38, other.DoubleField38)) return false;
      if (Interactions != other.Interactions) return false;
      if(!repeatedIntField100_.Equals(other.repeatedIntField100_)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField40, other.DoubleField40)) return false;
      if (Int64Field41 != other.Int64Field41) return false;
      if (Int64Field126 != other.Int64Field126) return false;
      if (Int64Field127 != other.Int64Field127) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField128, other.DoubleField128)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField109, other.DoubleField109)) return false;
      if (Int64Field110 != other.Int64Field110) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField111, other.DoubleField111)) return false;
      if (Int64Field112 != other.Int64Field112) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField113, other.DoubleField113)) return false;
      if (Int64Field114 != other.Int64Field114) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField42, other.DoubleField42)) return false;
      if (Int64Field43 != other.Int64Field43) return false;
      if (Int64Field44 != other.Int64Field44) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField45, other.DoubleField45)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField46, other.DoubleField46)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField78, other.DoubleField78)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField88, other.DoubleField88)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField47, other.DoubleField47)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField89, other.DoubleField89)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField48, other.DoubleField48)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField49, other.DoubleField49)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField50, other.DoubleField50)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField90, other.DoubleField90)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField51, other.DoubleField51)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField91, other.DoubleField91)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField92, other.DoubleField92)) return false;
      if (Int64Field107 != other.Int64Field107) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField93, other.DoubleField93)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField108, other.DoubleField108)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField52, other.DoubleField52)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField53, other.DoubleField53)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField94, other.DoubleField94)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField54, other.DoubleField54)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField55, other.DoubleField55)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField56, other.DoubleField56)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField57, other.DoubleField57)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.Equals(DoubleField58, other.DoubleField58)) return false;
      if (Int64Field59 != other.Int64Field59) return false;
      if (Int64Field60 != other.Int64Field60) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (doubleField95_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField95);
      if (doubleField1_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField1);
      if (doubleField79_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField79);
      if (int64Field2_ != null) hash ^= Int64Field2.GetHashCode();
      if (doubleField96_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField96);
      if (int64Field3_ != null) hash ^= Int64Field3.GetHashCode();
      if (int64Field4_ != null) hash ^= Int64Field4.GetHashCode();
      if (doubleField97_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField97);
      if (doubleField65_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField65);
      if (doubleField66_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField66);
      if (doubleField7_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField7);
      if (doubleField62_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField62);
      if (doubleField118_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField118);
      if (doubleField119_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField119);
      if (doubleField67_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField67);
      if (doubleField120_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField120);
      if (doubleField121_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField121);
      if (doubleField122_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField122);
      if (doubleField123_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField123);
      if (doubleField124_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField124);
      if (doubleField8_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField8);
      if (doubleField9_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField9);
      if (doubleField98_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField98);
      if (doubleField10_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField10);
      if (doubleField11_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField11);
      if (doubleField99_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField99);
      if (doubleField84_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField84);
      if (doubleField14_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField14);
      if (doubleField77_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField77);
      if (doubleField15_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField15);
      if (int64Field19_ != null) hash ^= Int64Field19.GetHashCode();
      if (int64Field115_ != null) hash ^= Int64Field115.GetHashCode();
      if (doubleField116_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField116);
      if (int64Field117_ != null) hash ^= Int64Field117.GetHashCode();
      if (doubleField20_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField20);
      if (doubleField21_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField21);
      if (stringField73_ != null) hash ^= StringField73.GetHashCode();
      if (stringField74_ != null) hash ^= StringField74.GetHashCode();
      if (doubleField22_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField22);
      if (doubleField69_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField69);
      if (doubleField70_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField70);
      if (doubleField71_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField71);
      if (doubleField72_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField72);
      if (doubleField25_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField25);
      if (int64Field26_ != null) hash ^= Int64Field26.GetHashCode();
      if (doubleField68_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField68);
      if (doubleField28_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField28);
      if (doubleField106_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField106);
      if (doubleField29_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField29);
      if (doubleField30_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField30);
      if (doubleField101_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField101);
      if (doubleField102_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField102);
      if (doubleField103_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField103);
      if (doubleField104_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField104);
      if (doubleField105_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField105);
      if (doubleField31_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField31);
      if (int64Field32_ != null) hash ^= Int64Field32.GetHashCode();
      if (doubleField75_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField75);
      if (doubleField129_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField129);
      if (EnumField80 != 0) hash ^= EnumField80.GetHashCode();
      if (EnumField81 != 0) hash ^= EnumField81.GetHashCode();
      if (int64Field82_ != null) hash ^= Int64Field82.GetHashCode();
      if (EnumField83 != 0) hash ^= EnumField83.GetHashCode();
      if (int64Field85_ != null) hash ^= Int64Field85.GetHashCode();
      if (int64Field86_ != null) hash ^= Int64Field86.GetHashCode();
      if (int64Field87_ != null) hash ^= Int64Field87.GetHashCode();
      if (int64Field125_ != null) hash ^= Int64Field125.GetHashCode();
      if (int64Field37_ != null) hash ^= Int64Field37.GetHashCode();
      if (doubleField38_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField38);
      if (interactions_ != null) hash ^= Interactions.GetHashCode();
      hash ^= repeatedIntField100_.GetHashCode();
      if (doubleField40_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField40);
      if (int64Field41_ != null) hash ^= Int64Field41.GetHashCode();
      if (int64Field126_ != null) hash ^= Int64Field126.GetHashCode();
      if (int64Field127_ != null) hash ^= Int64Field127.GetHashCode();
      if (doubleField128_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField128);
      if (doubleField109_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField109);
      if (int64Field110_ != null) hash ^= Int64Field110.GetHashCode();
      if (doubleField111_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField111);
      if (int64Field112_ != null) hash ^= Int64Field112.GetHashCode();
      if (doubleField113_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField113);
      if (int64Field114_ != null) hash ^= Int64Field114.GetHashCode();
      if (doubleField42_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField42);
      if (int64Field43_ != null) hash ^= Int64Field43.GetHashCode();
      if (int64Field44_ != null) hash ^= Int64Field44.GetHashCode();
      if (doubleField45_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField45);
      if (doubleField46_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField46);
      if (doubleField78_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField78);
      if (doubleField88_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField88);
      if (doubleField47_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField47);
      if (doubleField89_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField89);
      if (doubleField48_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField48);
      if (doubleField49_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField49);
      if (doubleField50_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField50);
      if (doubleField90_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField90);
      if (doubleField51_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField51);
      if (doubleField91_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField91);
      if (doubleField92_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField92);
      if (int64Field107_ != null) hash ^= Int64Field107.GetHashCode();
      if (doubleField93_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField93);
      if (doubleField108_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField108);
      if (doubleField52_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField52);
      if (doubleField53_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField53);
      if (doubleField94_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField94);
      if (doubleField54_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField54);
      if (doubleField55_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField55);
      if (doubleField56_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField56);
      if (doubleField57_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField57);
      if (doubleField58_ != null) hash ^= pbc::ProtobufEqualityComparers.BitwiseNullableDoubleEqualityComparer.GetHashCode(DoubleField58);
      if (int64Field59_ != null) hash ^= Int64Field59.GetHashCode();
      if (int64Field60_ != null) hash ^= Int64Field60.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (doubleField1_ != null) {
        _single_doubleField1_codec.WriteTagAndValue(output, DoubleField1);
      }
      if (int64Field2_ != null) {
        _single_int64Field2_codec.WriteTagAndValue(output, Int64Field2);
      }
      if (int64Field3_ != null) {
        _single_int64Field3_codec.WriteTagAndValue(output, Int64Field3);
      }
      if (int64Field4_ != null) {
        _single_int64Field4_codec.WriteTagAndValue(output, Int64Field4);
      }
      if (doubleField7_ != null) {
        _single_doubleField7_codec.WriteTagAndValue(output, DoubleField7);
      }
      if (doubleField8_ != null) {
        _single_doubleField8_codec.WriteTagAndValue(output, DoubleField8);
      }
      if (doubleField9_ != null) {
        _single_doubleField9_codec.WriteTagAndValue(output, DoubleField9);
      }
      if (doubleField10_ != null) {
        _single_doubleField10_codec.WriteTagAndValue(output, DoubleField10);
      }
      if (doubleField11_ != null) {
        _single_doubleField11_codec.WriteTagAndValue(output, DoubleField11);
      }
      if (doubleField14_ != null) {
        _single_doubleField14_codec.WriteTagAndValue(output, DoubleField14);
      }
      if (doubleField15_ != null) {
        _single_doubleField15_codec.WriteTagAndValue(output, DoubleField15);
      }
      if (int64Field19_ != null) {
        _single_int64Field19_codec.WriteTagAndValue(output, Int64Field19);
      }
      if (doubleField20_ != null) {
        _single_doubleField20_codec.WriteTagAndValue(output, DoubleField20);
      }
      if (doubleField21_ != null) {
        _single_doubleField21_codec.WriteTagAndValue(output, DoubleField21);
      }
      if (doubleField22_ != null) {
        _single_doubleField22_codec.WriteTagAndValue(output, DoubleField22);
      }
      if (doubleField25_ != null) {
        _single_doubleField25_codec.WriteTagAndValue(output, DoubleField25);
      }
      if (int64Field26_ != null) {
        _single_int64Field26_codec.WriteTagAndValue(output, Int64Field26);
      }
      if (doubleField28_ != null) {
        _single_doubleField28_codec.WriteTagAndValue(output, DoubleField28);
      }
      if (doubleField29_ != null) {
        _single_doubleField29_codec.WriteTagAndValue(output, DoubleField29);
      }
      if (doubleField30_ != null) {
        _single_doubleField30_codec.WriteTagAndValue(output, DoubleField30);
      }
      if (doubleField31_ != null) {
        _single_doubleField31_codec.WriteTagAndValue(output, DoubleField31);
      }
      if (int64Field32_ != null) {
        _single_int64Field32_codec.WriteTagAndValue(output, Int64Field32);
      }
      if (int64Field37_ != null) {
        _single_int64Field37_codec.WriteTagAndValue(output, Int64Field37);
      }
      if (doubleField38_ != null) {
        _single_doubleField38_codec.WriteTagAndValue(output, DoubleField38);
      }
      if (interactions_ != null) {
        _single_interactions_codec.WriteTagAndValue(output, Interactions);
      }
      if (doubleField40_ != null) {
        _single_doubleField40_codec.WriteTagAndValue(output, DoubleField40);
      }
      if (int64Field41_ != null) {
        _single_int64Field41_codec.WriteTagAndValue(output, Int64Field41);
      }
      if (doubleField42_ != null) {
        _single_doubleField42_codec.WriteTagAndValue(output, DoubleField42);
      }
      if (int64Field43_ != null) {
        _single_int64Field43_codec.WriteTagAndValue(output, Int64Field43);
      }
      if (int64Field44_ != null) {
        _single_int64Field44_codec.WriteTagAndValue(output, Int64Field44);
      }
      if (doubleField45_ != null) {
        _single_doubleField45_codec.WriteTagAndValue(output, DoubleField45);
      }
      if (doubleField46_ != null) {
        _single_doubleField46_codec.WriteTagAndValue(output, DoubleField46);
      }
      if (doubleField47_ != null) {
        _single_doubleField47_codec.WriteTagAndValue(output, DoubleField47);
      }
      if (doubleField48_ != null) {
        _single_doubleField48_codec.WriteTagAndValue(output, DoubleField48);
      }
      if (doubleField49_ != null) {
        _single_doubleField49_codec.WriteTagAndValue(output, DoubleField49);
      }
      if (doubleField50_ != null) {
        _single_doubleField50_codec.WriteTagAndValue(output, DoubleField50);
      }
      if (doubleField51_ != null) {
        _single_doubleField51_codec.WriteTagAndValue(output, DoubleField51);
      }
      if (doubleField52_ != null) {
        _single_doubleField52_codec.WriteTagAndValue(output, DoubleField52);
      }
      if (doubleField53_ != null) {
        _single_doubleField53_codec.WriteTagAndValue(output, DoubleField53);
      }
      if (doubleField54_ != null) {
        _single_doubleField54_codec.WriteTagAndValue(output, DoubleField54);
      }
      if (doubleField55_ != null) {
        _single_doubleField55_codec.WriteTagAndValue(output, DoubleField55);
      }
      if (doubleField56_ != null) {
        _single_doubleField56_codec.WriteTagAndValue(output, DoubleField56);
      }
      if (doubleField57_ != null) {
        _single_doubleField57_codec.WriteTagAndValue(output, DoubleField57);
      }
      if (doubleField58_ != null) {
        _single_doubleField58_codec.WriteTagAndValue(output, DoubleField58);
      }
      if (int64Field59_ != null) {
        _single_int64Field59_codec.WriteTagAndValue(output, Int64Field59);
      }
      if (int64Field60_ != null) {
        _single_int64Field60_codec.WriteTagAndValue(output, Int64Field60);
      }
      if (doubleField62_ != null) {
        _single_doubleField62_codec.WriteTagAndValue(output, DoubleField62);
      }
      if (doubleField65_ != null) {
        _single_doubleField65_codec.WriteTagAndValue(output, DoubleField65);
      }
      if (doubleField66_ != null) {
        _single_doubleField66_codec.WriteTagAndValue(output, DoubleField66);
      }
      if (doubleField67_ != null) {
        _single_doubleField67_codec.WriteTagAndValue(output, DoubleField67);
      }
      if (doubleField68_ != null) {
        _single_doubleField68_codec.WriteTagAndValue(output, DoubleField68);
      }
      if (doubleField69_ != null) {
        _single_doubleField69_codec.WriteTagAndValue(output, DoubleField69);
      }
      if (doubleField70_ != null) {
        _single_doubleField70_codec.WriteTagAndValue(output, DoubleField70);
      }
      if (doubleField71_ != null) {
        _single_doubleField71_codec.WriteTagAndValue(output, DoubleField71);
      }
      if (doubleField72_ != null) {
        _single_doubleField72_codec.WriteTagAndValue(output, DoubleField72);
      }
      if (stringField73_ != null) {
        _single_stringField73_codec.WriteTagAndValue(output, StringField73);
      }
      if (stringField74_ != null) {
        _single_stringField74_codec.WriteTagAndValue(output, StringField74);
      }
      if (doubleField75_ != null) {
        _single_doubleField75_codec.WriteTagAndValue(output, DoubleField75);
      }
      if (doubleField77_ != null) {
        _single_doubleField77_codec.WriteTagAndValue(output, DoubleField77);
      }
      if (doubleField78_ != null) {
        _single_doubleField78_codec.WriteTagAndValue(output, DoubleField78);
      }
      if (doubleField79_ != null) {
        _single_doubleField79_codec.WriteTagAndValue(output, DoubleField79);
      }
      if (EnumField80 != 0) {
        output.WriteRawTag(128, 5);
        output.WriteInt32(EnumField80);
      }
      if (EnumField81 != 0) {
        output.WriteRawTag(136, 5);
        output.WriteInt32(EnumField81);
      }
      if (int64Field82_ != null) {
        _single_int64Field82_codec.WriteTagAndValue(output, Int64Field82);
      }
      if (EnumField83 != 0) {
        output.WriteRawTag(152, 5);
        output.WriteInt32(EnumField83);
      }
      if (doubleField84_ != null) {
        _single_doubleField84_codec.WriteTagAndValue(output, DoubleField84);
      }
      if (int64Field85_ != null) {
        _single_int64Field85_codec.WriteTagAndValue(output, Int64Field85);
      }
      if (int64Field86_ != null) {
        _single_int64Field86_codec.WriteTagAndValue(output, Int64Field86);
      }
      if (int64Field87_ != null) {
        _single_int64Field87_codec.WriteTagAndValue(output, Int64Field87);
      }
      if (doubleField88_ != null) {
        _single_doubleField88_codec.WriteTagAndValue(output, DoubleField88);
      }
      if (doubleField89_ != null) {
        _single_doubleField89_codec.WriteTagAndValue(output, DoubleField89);
      }
      if (doubleField90_ != null) {
        _single_doubleField90_codec.WriteTagAndValue(output, DoubleField90);
      }
      if (doubleField91_ != null) {
        _single_doubleField91_codec.WriteTagAndValue(output, DoubleField91);
      }
      if (doubleField92_ != null) {
        _single_doubleField92_codec.WriteTagAndValue(output, DoubleField92);
      }
      if (doubleField93_ != null) {
        _single_doubleField93_codec.WriteTagAndValue(output, DoubleField93);
      }
      if (doubleField94_ != null) {
        _single_doubleField94_codec.WriteTagAndValue(output, DoubleField94);
      }
      if (doubleField95_ != null) {
        _single_doubleField95_codec.WriteTagAndValue(output, DoubleField95);
      }
      if (doubleField96_ != null) {
        _single_doubleField96_codec.WriteTagAndValue(output, DoubleField96);
      }
      if (doubleField97_ != null) {
        _single_doubleField97_codec.WriteTagAndValue(output, DoubleField97);
      }
      if (doubleField98_ != null) {
        _single_doubleField98_codec.WriteTagAndValue(output, DoubleField98);
      }
      if (doubleField99_ != null) {
        _single_doubleField99_codec.WriteTagAndValue(output, DoubleField99);
      }
      repeatedIntField100_.WriteTo(output, _repeated_repeatedIntField100_codec);
      if (doubleField101_ != null) {
        _single_doubleField101_codec.WriteTagAndValue(output, DoubleField101);
      }
      if (doubleField102_ != null) {
        _single_doubleField102_codec.WriteTagAndValue(output, DoubleField102);
      }
      if (doubleField103_ != null) {
        _single_doubleField103_codec.WriteTagAndValue(output, DoubleField103);
      }
      if (doubleField104_ != null) {
        _single_doubleField104_codec.WriteTagAndValue(output, DoubleField104);
      }
      if (doubleField105_ != null) {
        _single_doubleField105_codec.WriteTagAndValue(output, DoubleField105);
      }
      if (doubleField106_ != null) {
        _single_doubleField106_codec.WriteTagAndValue(output, DoubleField106);
      }
      if (int64Field107_ != null) {
        _single_int64Field107_codec.WriteTagAndValue(output, Int64Field107);
      }
      if (doubleField108_ != null) {
        _single_doubleField108_codec.WriteTagAndValue(output, DoubleField108);
      }
      if (doubleField109_ != null) {
        _single_doubleField109_codec.WriteTagAndValue(output, DoubleField109);
      }
      if (int64Field110_ != null) {
        _single_int64Field110_codec.WriteTagAndValue(output, Int64Field110);
      }
      if (doubleField111_ != null) {
        _single_doubleField111_codec.WriteTagAndValue(output, DoubleField111);
      }
      if (int64Field112_ != null) {
        _single_int64Field112_codec.WriteTagAndValue(output, Int64Field112);
      }
      if (doubleField113_ != null) {
        _single_doubleField113_codec.WriteTagAndValue(output, DoubleField113);
      }
      if (int64Field114_ != null) {
        _single_int64Field114_codec.WriteTagAndValue(output, Int64Field114);
      }
      if (int64Field115_ != null) {
        _single_int64Field115_codec.WriteTagAndValue(output, Int64Field115);
      }
      if (doubleField116_ != null) {
        _single_doubleField116_codec.WriteTagAndValue(output, DoubleField116);
      }
      if (int64Field117_ != null) {
        _single_int64Field117_codec.WriteTagAndValue(output, Int64Field117);
      }
      if (doubleField118_ != null) {
        _single_doubleField118_codec.WriteTagAndValue(output, DoubleField118);
      }
      if (doubleField119_ != null) {
        _single_doubleField119_codec.WriteTagAndValue(output, DoubleField119);
      }
      if (doubleField120_ != null) {
        _single_doubleField120_codec.WriteTagAndValue(output, DoubleField120);
      }
      if (doubleField121_ != null) {
        _single_doubleField121_codec.WriteTagAndValue(output, DoubleField121);
      }
      if (doubleField122_ != null) {
        _single_doubleField122_codec.WriteTagAndValue(output, DoubleField122);
      }
      if (doubleField123_ != null) {
        _single_doubleField123_codec.WriteTagAndValue(output, DoubleField123);
      }
      if (doubleField124_ != null) {
        _single_doubleField124_codec.WriteTagAndValue(output, DoubleField124);
      }
      if (int64Field125_ != null) {
        _single_int64Field125_codec.WriteTagAndValue(output, Int64Field125);
      }
      if (int64Field126_ != null) {
        _single_int64Field126_codec.WriteTagAndValue(output, Int64Field126);
      }
      if (int64Field127_ != null) {
        _single_int64Field127_codec.WriteTagAndValue(output, Int64Field127);
      }
      if (doubleField128_ != null) {
        _single_doubleField128_codec.WriteTagAndValue(output, DoubleField128);
      }
      if (doubleField129_ != null) {
        _single_doubleField129_codec.WriteTagAndValue(output, DoubleField129);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (doubleField95_ != null) {
        size += _single_doubleField95_codec.CalculateSizeWithTag(DoubleField95);
      }
      if (doubleField1_ != null) {
        size += _single_doubleField1_codec.CalculateSizeWithTag(DoubleField1);
      }
      if (doubleField79_ != null) {
        size += _single_doubleField79_codec.CalculateSizeWithTag(DoubleField79);
      }
      if (int64Field2_ != null) {
        size += _single_int64Field2_codec.CalculateSizeWithTag(Int64Field2);
      }
      if (doubleField96_ != null) {
        size += _single_doubleField96_codec.CalculateSizeWithTag(DoubleField96);
      }
      if (int64Field3_ != null) {
        size += _single_int64Field3_codec.CalculateSizeWithTag(Int64Field3);
      }
      if (int64Field4_ != null) {
        size += _single_int64Field4_codec.CalculateSizeWithTag(Int64Field4);
      }
      if (doubleField97_ != null) {
        size += _single_doubleField97_codec.CalculateSizeWithTag(DoubleField97);
      }
      if (doubleField65_ != null) {
        size += _single_doubleField65_codec.CalculateSizeWithTag(DoubleField65);
      }
      if (doubleField66_ != null) {
        size += _single_doubleField66_codec.CalculateSizeWithTag(DoubleField66);
      }
      if (doubleField7_ != null) {
        size += _single_doubleField7_codec.CalculateSizeWithTag(DoubleField7);
      }
      if (doubleField62_ != null) {
        size += _single_doubleField62_codec.CalculateSizeWithTag(DoubleField62);
      }
      if (doubleField118_ != null) {
        size += _single_doubleField118_codec.CalculateSizeWithTag(DoubleField118);
      }
      if (doubleField119_ != null) {
        size += _single_doubleField119_codec.CalculateSizeWithTag(DoubleField119);
      }
      if (doubleField67_ != null) {
        size += _single_doubleField67_codec.CalculateSizeWithTag(DoubleField67);
      }
      if (doubleField120_ != null) {
        size += _single_doubleField120_codec.CalculateSizeWithTag(DoubleField120);
      }
      if (doubleField121_ != null) {
        size += _single_doubleField121_codec.CalculateSizeWithTag(DoubleField121);
      }
      if (doubleField122_ != null) {
        size += _single_doubleField122_codec.CalculateSizeWithTag(DoubleField122);
      }
      if (doubleField123_ != null) {
        size += _single_doubleField123_codec.CalculateSizeWithTag(DoubleField123);
      }
      if (doubleField124_ != null) {
        size += _single_doubleField124_codec.CalculateSizeWithTag(DoubleField124);
      }
      if (doubleField8_ != null) {
        size += _single_doubleField8_codec.CalculateSizeWithTag(DoubleField8);
      }
      if (doubleField9_ != null) {
        size += _single_doubleField9_codec.CalculateSizeWithTag(DoubleField9);
      }
      if (doubleField98_ != null) {
        size += _single_doubleField98_codec.CalculateSizeWithTag(DoubleField98);
      }
      if (doubleField10_ != null) {
        size += _single_doubleField10_codec.CalculateSizeWithTag(DoubleField10);
      }
      if (doubleField11_ != null) {
        size += _single_doubleField11_codec.CalculateSizeWithTag(DoubleField11);
      }
      if (doubleField99_ != null) {
        size += _single_doubleField99_codec.CalculateSizeWithTag(DoubleField99);
      }
      if (doubleField84_ != null) {
        size += _single_doubleField84_codec.CalculateSizeWithTag(DoubleField84);
      }
      if (doubleField14_ != null) {
        size += _single_doubleField14_codec.CalculateSizeWithTag(DoubleField14);
      }
      if (doubleField77_ != null) {
        size += _single_doubleField77_codec.CalculateSizeWithTag(DoubleField77);
      }
      if (doubleField15_ != null) {
        size += _single_doubleField15_codec.CalculateSizeWithTag(DoubleField15);
      }
      if (int64Field19_ != null) {
        size += _single_int64Field19_codec.CalculateSizeWithTag(Int64Field19);
      }
      if (int64Field115_ != null) {
        size += _single_int64Field115_codec.CalculateSizeWithTag(Int64Field115);
      }
      if (doubleField116_ != null) {
        size += _single_doubleField116_codec.CalculateSizeWithTag(DoubleField116);
      }
      if (int64Field117_ != null) {
        size += _single_int64Field117_codec.CalculateSizeWithTag(Int64Field117);
      }
      if (doubleField20_ != null) {
        size += _single_doubleField20_codec.CalculateSizeWithTag(DoubleField20);
      }
      if (doubleField21_ != null) {
        size += _single_doubleField21_codec.CalculateSizeWithTag(DoubleField21);
      }
      if (stringField73_ != null) {
        size += _single_stringField73_codec.CalculateSizeWithTag(StringField73);
      }
      if (stringField74_ != null) {
        size += _single_stringField74_codec.CalculateSizeWithTag(StringField74);
      }
      if (doubleField22_ != null) {
        size += _single_doubleField22_codec.CalculateSizeWithTag(DoubleField22);
      }
      if (doubleField69_ != null) {
        size += _single_doubleField69_codec.CalculateSizeWithTag(DoubleField69);
      }
      if (doubleField70_ != null) {
        size += _single_doubleField70_codec.CalculateSizeWithTag(DoubleField70);
      }
      if (doubleField71_ != null) {
        size += _single_doubleField71_codec.CalculateSizeWithTag(DoubleField71);
      }
      if (doubleField72_ != null) {
        size += _single_doubleField72_codec.CalculateSizeWithTag(DoubleField72);
      }
      if (doubleField25_ != null) {
        size += _single_doubleField25_codec.CalculateSizeWithTag(DoubleField25);
      }
      if (int64Field26_ != null) {
        size += _single_int64Field26_codec.CalculateSizeWithTag(Int64Field26);
      }
      if (doubleField68_ != null) {
        size += _single_doubleField68_codec.CalculateSizeWithTag(DoubleField68);
      }
      if (doubleField28_ != null) {
        size += _single_doubleField28_codec.CalculateSizeWithTag(DoubleField28);
      }
      if (doubleField106_ != null) {
        size += _single_doubleField106_codec.CalculateSizeWithTag(DoubleField106);
      }
      if (doubleField29_ != null) {
        size += _single_doubleField29_codec.CalculateSizeWithTag(DoubleField29);
      }
      if (doubleField30_ != null) {
        size += _single_doubleField30_codec.CalculateSizeWithTag(DoubleField30);
      }
      if (doubleField101_ != null) {
        size += _single_doubleField101_codec.CalculateSizeWithTag(DoubleField101);
      }
      if (doubleField102_ != null) {
        size += _single_doubleField102_codec.CalculateSizeWithTag(DoubleField102);
      }
      if (doubleField103_ != null) {
        size += _single_doubleField103_codec.CalculateSizeWithTag(DoubleField103);
      }
      if (doubleField104_ != null) {
        size += _single_doubleField104_codec.CalculateSizeWithTag(DoubleField104);
      }
      if (doubleField105_ != null) {
        size += _single_doubleField105_codec.CalculateSizeWithTag(DoubleField105);
      }
      if (doubleField31_ != null) {
        size += _single_doubleField31_codec.CalculateSizeWithTag(DoubleField31);
      }
      if (int64Field32_ != null) {
        size += _single_int64Field32_codec.CalculateSizeWithTag(Int64Field32);
      }
      if (doubleField75_ != null) {
        size += _single_doubleField75_codec.CalculateSizeWithTag(DoubleField75);
      }
      if (doubleField129_ != null) {
        size += _single_doubleField129_codec.CalculateSizeWithTag(DoubleField129);
      }
      if (EnumField80 != 0) {
        size += 2 + pb::CodedOutputStream.ComputeInt32Size(EnumField80);
      }
      if (EnumField81 != 0) {
        size += 2 + pb::CodedOutputStream.ComputeInt32Size(EnumField81);
      }
      if (int64Field82_ != null) {
        size += _single_int64Field82_codec.CalculateSizeWithTag(Int64Field82);
      }
      if (EnumField83 != 0) {
        size += 2 + pb::CodedOutputStream.ComputeInt32Size(EnumField83);
      }
      if (int64Field85_ != null) {
        size += _single_int64Field85_codec.CalculateSizeWithTag(Int64Field85);
      }
      if (int64Field86_ != null) {
        size += _single_int64Field86_codec.CalculateSizeWithTag(Int64Field86);
      }
      if (int64Field87_ != null) {
        size += _single_int64Field87_codec.CalculateSizeWithTag(Int64Field87);
      }
      if (int64Field125_ != null) {
        size += _single_int64Field125_codec.CalculateSizeWithTag(Int64Field125);
      }
      if (int64Field37_ != null) {
        size += _single_int64Field37_codec.CalculateSizeWithTag(Int64Field37);
      }
      if (doubleField38_ != null) {
        size += _single_doubleField38_codec.CalculateSizeWithTag(DoubleField38);
      }
      if (interactions_ != null) {
        size += _single_interactions_codec.CalculateSizeWithTag(Interactions);
      }
      size += repeatedIntField100_.CalculateSize(_repeated_repeatedIntField100_codec);
      if (doubleField40_ != null) {
        size += _single_doubleField40_codec.CalculateSizeWithTag(DoubleField40);
      }
      if (int64Field41_ != null) {
        size += _single_int64Field41_codec.CalculateSizeWithTag(Int64Field41);
      }
      if (int64Field126_ != null) {
        size += _single_int64Field126_codec.CalculateSizeWithTag(Int64Field126);
      }
      if (int64Field127_ != null) {
        size += _single_int64Field127_codec.CalculateSizeWithTag(Int64Field127);
      }
      if (doubleField128_ != null) {
        size += _single_doubleField128_codec.CalculateSizeWithTag(DoubleField128);
      }
      if (doubleField109_ != null) {
        size += _single_doubleField109_codec.CalculateSizeWithTag(DoubleField109);
      }
      if (int64Field110_ != null) {
        size += _single_int64Field110_codec.CalculateSizeWithTag(Int64Field110);
      }
      if (doubleField111_ != null) {
        size += _single_doubleField111_codec.CalculateSizeWithTag(DoubleField111);
      }
      if (int64Field112_ != null) {
        size += _single_int64Field112_codec.CalculateSizeWithTag(Int64Field112);
      }
      if (doubleField113_ != null) {
        size += _single_doubleField113_codec.CalculateSizeWithTag(DoubleField113);
      }
      if (int64Field114_ != null) {
        size += _single_int64Field114_codec.CalculateSizeWithTag(Int64Field114);
      }
      if (doubleField42_ != null) {
        size += _single_doubleField42_codec.CalculateSizeWithTag(DoubleField42);
      }
      if (int64Field43_ != null) {
        size += _single_int64Field43_codec.CalculateSizeWithTag(Int64Field43);
      }
      if (int64Field44_ != null) {
        size += _single_int64Field44_codec.CalculateSizeWithTag(Int64Field44);
      }
      if (doubleField45_ != null) {
        size += _single_doubleField45_codec.CalculateSizeWithTag(DoubleField45);
      }
      if (doubleField46_ != null) {
        size += _single_doubleField46_codec.CalculateSizeWithTag(DoubleField46);
      }
      if (doubleField78_ != null) {
        size += _single_doubleField78_codec.CalculateSizeWithTag(DoubleField78);
      }
      if (doubleField88_ != null) {
        size += _single_doubleField88_codec.CalculateSizeWithTag(DoubleField88);
      }
      if (doubleField47_ != null) {
        size += _single_doubleField47_codec.CalculateSizeWithTag(DoubleField47);
      }
      if (doubleField89_ != null) {
        size += _single_doubleField89_codec.CalculateSizeWithTag(DoubleField89);
      }
      if (doubleField48_ != null) {
        size += _single_doubleField48_codec.CalculateSizeWithTag(DoubleField48);
      }
      if (doubleField49_ != null) {
        size += _single_doubleField49_codec.CalculateSizeWithTag(DoubleField49);
      }
      if (doubleField50_ != null) {
        size += _single_doubleField50_codec.CalculateSizeWithTag(DoubleField50);
      }
      if (doubleField90_ != null) {
        size += _single_doubleField90_codec.CalculateSizeWithTag(DoubleField90);
      }
      if (doubleField51_ != null) {
        size += _single_doubleField51_codec.CalculateSizeWithTag(DoubleField51);
      }
      if (doubleField91_ != null) {
        size += _single_doubleField91_codec.CalculateSizeWithTag(DoubleField91);
      }
      if (doubleField92_ != null) {
        size += _single_doubleField92_codec.CalculateSizeWithTag(DoubleField92);
      }
      if (int64Field107_ != null) {
        size += _single_int64Field107_codec.CalculateSizeWithTag(Int64Field107);
      }
      if (doubleField93_ != null) {
        size += _single_doubleField93_codec.CalculateSizeWithTag(DoubleField93);
      }
      if (doubleField108_ != null) {
        size += _single_doubleField108_codec.CalculateSizeWithTag(DoubleField108);
      }
      if (doubleField52_ != null) {
        size += _single_doubleField52_codec.CalculateSizeWithTag(DoubleField52);
      }
      if (doubleField53_ != null) {
        size += _single_doubleField53_codec.CalculateSizeWithTag(DoubleField53);
      }
      if (doubleField94_ != null) {
        size += _single_doubleField94_codec.CalculateSizeWithTag(DoubleField94);
      }
      if (doubleField54_ != null) {
        size += _single_doubleField54_codec.CalculateSizeWithTag(DoubleField54);
      }
      if (doubleField55_ != null) {
        size += _single_doubleField55_codec.CalculateSizeWithTag(DoubleField55);
      }
      if (doubleField56_ != null) {
        size += _single_doubleField56_codec.CalculateSizeWithTag(DoubleField56);
      }
      if (doubleField57_ != null) {
        size += _single_doubleField57_codec.CalculateSizeWithTag(DoubleField57);
      }
      if (doubleField58_ != null) {
        size += _single_doubleField58_codec.CalculateSizeWithTag(DoubleField58);
      }
      if (int64Field59_ != null) {
        size += _single_int64Field59_codec.CalculateSizeWithTag(Int64Field59);
      }
      if (int64Field60_ != null) {
        size += _single_int64Field60_codec.CalculateSizeWithTag(Int64Field60);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ManyWrapperFieldsMessage other) {
      if (other == null) {
        return;
      }
      if (other.doubleField95_ != null) {
        if (doubleField95_ == null || other.DoubleField95 != 0D) {
          DoubleField95 = other.DoubleField95;
        }
      }
      if (other.doubleField1_ != null) {
        if (doubleField1_ == null || other.DoubleField1 != 0D) {
          DoubleField1 = other.DoubleField1;
        }
      }
      if (other.doubleField79_ != null) {
        if (doubleField79_ == null || other.DoubleField79 != 0D) {
          DoubleField79 = other.DoubleField79;
        }
      }
      if (other.int64Field2_ != null) {
        if (int64Field2_ == null || other.Int64Field2 != 0L) {
          Int64Field2 = other.Int64Field2;
        }
      }
      if (other.doubleField96_ != null) {
        if (doubleField96_ == null || other.DoubleField96 != 0D) {
          DoubleField96 = other.DoubleField96;
        }
      }
      if (other.int64Field3_ != null) {
        if (int64Field3_ == null || other.Int64Field3 != 0L) {
          Int64Field3 = other.Int64Field3;
        }
      }
      if (other.int64Field4_ != null) {
        if (int64Field4_ == null || other.Int64Field4 != 0L) {
          Int64Field4 = other.Int64Field4;
        }
      }
      if (other.doubleField97_ != null) {
        if (doubleField97_ == null || other.DoubleField97 != 0D) {
          DoubleField97 = other.DoubleField97;
        }
      }
      if (other.doubleField65_ != null) {
        if (doubleField65_ == null || other.DoubleField65 != 0D) {
          DoubleField65 = other.DoubleField65;
        }
      }
      if (other.doubleField66_ != null) {
        if (doubleField66_ == null || other.DoubleField66 != 0D) {
          DoubleField66 = other.DoubleField66;
        }
      }
      if (other.doubleField7_ != null) {
        if (doubleField7_ == null || other.DoubleField7 != 0D) {
          DoubleField7 = other.DoubleField7;
        }
      }
      if (other.doubleField62_ != null) {
        if (doubleField62_ == null || other.DoubleField62 != 0D) {
          DoubleField62 = other.DoubleField62;
        }
      }
      if (other.doubleField118_ != null) {
        if (doubleField118_ == null || other.DoubleField118 != 0D) {
          DoubleField118 = other.DoubleField118;
        }
      }
      if (other.doubleField119_ != null) {
        if (doubleField119_ == null || other.DoubleField119 != 0D) {
          DoubleField119 = other.DoubleField119;
        }
      }
      if (other.doubleField67_ != null) {
        if (doubleField67_ == null || other.DoubleField67 != 0D) {
          DoubleField67 = other.DoubleField67;
        }
      }
      if (other.doubleField120_ != null) {
        if (doubleField120_ == null || other.DoubleField120 != 0D) {
          DoubleField120 = other.DoubleField120;
        }
      }
      if (other.doubleField121_ != null) {
        if (doubleField121_ == null || other.DoubleField121 != 0D) {
          DoubleField121 = other.DoubleField121;
        }
      }
      if (other.doubleField122_ != null) {
        if (doubleField122_ == null || other.DoubleField122 != 0D) {
          DoubleField122 = other.DoubleField122;
        }
      }
      if (other.doubleField123_ != null) {
        if (doubleField123_ == null || other.DoubleField123 != 0D) {
          DoubleField123 = other.DoubleField123;
        }
      }
      if (other.doubleField124_ != null) {
        if (doubleField124_ == null || other.DoubleField124 != 0D) {
          DoubleField124 = other.DoubleField124;
        }
      }
      if (other.doubleField8_ != null) {
        if (doubleField8_ == null || other.DoubleField8 != 0D) {
          DoubleField8 = other.DoubleField8;
        }
      }
      if (other.doubleField9_ != null) {
        if (doubleField9_ == null || other.DoubleField9 != 0D) {
          DoubleField9 = other.DoubleField9;
        }
      }
      if (other.doubleField98_ != null) {
        if (doubleField98_ == null || other.DoubleField98 != 0D) {
          DoubleField98 = other.DoubleField98;
        }
      }
      if (other.doubleField10_ != null) {
        if (doubleField10_ == null || other.DoubleField10 != 0D) {
          DoubleField10 = other.DoubleField10;
        }
      }
      if (other.doubleField11_ != null) {
        if (doubleField11_ == null || other.DoubleField11 != 0D) {
          DoubleField11 = other.DoubleField11;
        }
      }
      if (other.doubleField99_ != null) {
        if (doubleField99_ == null || other.DoubleField99 != 0D) {
          DoubleField99 = other.DoubleField99;
        }
      }
      if (other.doubleField84_ != null) {
        if (doubleField84_ == null || other.DoubleField84 != 0D) {
          DoubleField84 = other.DoubleField84;
        }
      }
      if (other.doubleField14_ != null) {
        if (doubleField14_ == null || other.DoubleField14 != 0D) {
          DoubleField14 = other.DoubleField14;
        }
      }
      if (other.doubleField77_ != null) {
        if (doubleField77_ == null || other.DoubleField77 != 0D) {
          DoubleField77 = other.DoubleField77;
        }
      }
      if (other.doubleField15_ != null) {
        if (doubleField15_ == null || other.DoubleField15 != 0D) {
          DoubleField15 = other.DoubleField15;
        }
      }
      if (other.int64Field19_ != null) {
        if (int64Field19_ == null || other.Int64Field19 != 0L) {
          Int64Field19 = other.Int64Field19;
        }
      }
      if (other.int64Field115_ != null) {
        if (int64Field115_ == null || other.Int64Field115 != 0L) {
          Int64Field115 = other.Int64Field115;
        }
      }
      if (other.doubleField116_ != null) {
        if (doubleField116_ == null || other.DoubleField116 != 0D) {
          DoubleField116 = other.DoubleField116;
        }
      }
      if (other.int64Field117_ != null) {
        if (int64Field117_ == null || other.Int64Field117 != 0L) {
          Int64Field117 = other.Int64Field117;
        }
      }
      if (other.doubleField20_ != null) {
        if (doubleField20_ == null || other.DoubleField20 != 0D) {
          DoubleField20 = other.DoubleField20;
        }
      }
      if (other.doubleField21_ != null) {
        if (doubleField21_ == null || other.DoubleField21 != 0D) {
          DoubleField21 = other.DoubleField21;
        }
      }
      if (other.stringField73_ != null) {
        if (stringField73_ == null || other.StringField73 != "") {
          StringField73 = other.StringField73;
        }
      }
      if (other.stringField74_ != null) {
        if (stringField74_ == null || other.StringField74 != "") {
          StringField74 = other.StringField74;
        }
      }
      if (other.doubleField22_ != null) {
        if (doubleField22_ == null || other.DoubleField22 != 0D) {
          DoubleField22 = other.DoubleField22;
        }
      }
      if (other.doubleField69_ != null) {
        if (doubleField69_ == null || other.DoubleField69 != 0D) {
          DoubleField69 = other.DoubleField69;
        }
      }
      if (other.doubleField70_ != null) {
        if (doubleField70_ == null || other.DoubleField70 != 0D) {
          DoubleField70 = other.DoubleField70;
        }
      }
      if (other.doubleField71_ != null) {
        if (doubleField71_ == null || other.DoubleField71 != 0D) {
          DoubleField71 = other.DoubleField71;
        }
      }
      if (other.doubleField72_ != null) {
        if (doubleField72_ == null || other.DoubleField72 != 0D) {
          DoubleField72 = other.DoubleField72;
        }
      }
      if (other.doubleField25_ != null) {
        if (doubleField25_ == null || other.DoubleField25 != 0D) {
          DoubleField25 = other.DoubleField25;
        }
      }
      if (other.int64Field26_ != null) {
        if (int64Field26_ == null || other.Int64Field26 != 0L) {
          Int64Field26 = other.Int64Field26;
        }
      }
      if (other.doubleField68_ != null) {
        if (doubleField68_ == null || other.DoubleField68 != 0D) {
          DoubleField68 = other.DoubleField68;
        }
      }
      if (other.doubleField28_ != null) {
        if (doubleField28_ == null || other.DoubleField28 != 0D) {
          DoubleField28 = other.DoubleField28;
        }
      }
      if (other.doubleField106_ != null) {
        if (doubleField106_ == null || other.DoubleField106 != 0D) {
          DoubleField106 = other.DoubleField106;
        }
      }
      if (other.doubleField29_ != null) {
        if (doubleField29_ == null || other.DoubleField29 != 0D) {
          DoubleField29 = other.DoubleField29;
        }
      }
      if (other.doubleField30_ != null) {
        if (doubleField30_ == null || other.DoubleField30 != 0D) {
          DoubleField30 = other.DoubleField30;
        }
      }
      if (other.doubleField101_ != null) {
        if (doubleField101_ == null || other.DoubleField101 != 0D) {
          DoubleField101 = other.DoubleField101;
        }
      }
      if (other.doubleField102_ != null) {
        if (doubleField102_ == null || other.DoubleField102 != 0D) {
          DoubleField102 = other.DoubleField102;
        }
      }
      if (other.doubleField103_ != null) {
        if (doubleField103_ == null || other.DoubleField103 != 0D) {
          DoubleField103 = other.DoubleField103;
        }
      }
      if (other.doubleField104_ != null) {
        if (doubleField104_ == null || other.DoubleField104 != 0D) {
          DoubleField104 = other.DoubleField104;
        }
      }
      if (other.doubleField105_ != null) {
        if (doubleField105_ == null || other.DoubleField105 != 0D) {
          DoubleField105 = other.DoubleField105;
        }
      }
      if (other.doubleField31_ != null) {
        if (doubleField31_ == null || other.DoubleField31 != 0D) {
          DoubleField31 = other.DoubleField31;
        }
      }
      if (other.int64Field32_ != null) {
        if (int64Field32_ == null || other.Int64Field32 != 0L) {
          Int64Field32 = other.Int64Field32;
        }
      }
      if (other.doubleField75_ != null) {
        if (doubleField75_ == null || other.DoubleField75 != 0D) {
          DoubleField75 = other.DoubleField75;
        }
      }
      if (other.doubleField129_ != null) {
        if (doubleField129_ == null || other.DoubleField129 != 0D) {
          DoubleField129 = other.DoubleField129;
        }
      }
      if (other.EnumField80 != 0) {
        EnumField80 = other.EnumField80;
      }
      if (other.EnumField81 != 0) {
        EnumField81 = other.EnumField81;
      }
      if (other.int64Field82_ != null) {
        if (int64Field82_ == null || other.Int64Field82 != 0L) {
          Int64Field82 = other.Int64Field82;
        }
      }
      if (other.EnumField83 != 0) {
        EnumField83 = other.EnumField83;
      }
      if (other.int64Field85_ != null) {
        if (int64Field85_ == null || other.Int64Field85 != 0L) {
          Int64Field85 = other.Int64Field85;
        }
      }
      if (other.int64Field86_ != null) {
        if (int64Field86_ == null || other.Int64Field86 != 0L) {
          Int64Field86 = other.Int64Field86;
        }
      }
      if (other.int64Field87_ != null) {
        if (int64Field87_ == null || other.Int64Field87 != 0L) {
          Int64Field87 = other.Int64Field87;
        }
      }
      if (other.int64Field125_ != null) {
        if (int64Field125_ == null || other.Int64Field125 != 0L) {
          Int64Field125 = other.Int64Field125;
        }
      }
      if (other.int64Field37_ != null) {
        if (int64Field37_ == null || other.Int64Field37 != 0L) {
          Int64Field37 = other.Int64Field37;
        }
      }
      if (other.doubleField38_ != null) {
        if (doubleField38_ == null || other.DoubleField38 != 0D) {
          DoubleField38 = other.DoubleField38;
        }
      }
      if (other.interactions_ != null) {
        if (interactions_ == null || other.Interactions != 0L) {
          Interactions = other.Interactions;
        }
      }
      repeatedIntField100_.Add(other.repeatedIntField100_);
      if (other.doubleField40_ != null) {
        if (doubleField40_ == null || other.DoubleField40 != 0D) {
          DoubleField40 = other.DoubleField40;
        }
      }
      if (other.int64Field41_ != null) {
        if (int64Field41_ == null || other.Int64Field41 != 0L) {
          Int64Field41 = other.Int64Field41;
        }
      }
      if (other.int64Field126_ != null) {
        if (int64Field126_ == null || other.Int64Field126 != 0L) {
          Int64Field126 = other.Int64Field126;
        }
      }
      if (other.int64Field127_ != null) {
        if (int64Field127_ == null || other.Int64Field127 != 0L) {
          Int64Field127 = other.Int64Field127;
        }
      }
      if (other.doubleField128_ != null) {
        if (doubleField128_ == null || other.DoubleField128 != 0D) {
          DoubleField128 = other.DoubleField128;
        }
      }
      if (other.doubleField109_ != null) {
        if (doubleField109_ == null || other.DoubleField109 != 0D) {
          DoubleField109 = other.DoubleField109;
        }
      }
      if (other.int64Field110_ != null) {
        if (int64Field110_ == null || other.Int64Field110 != 0L) {
          Int64Field110 = other.Int64Field110;
        }
      }
      if (other.doubleField111_ != null) {
        if (doubleField111_ == null || other.DoubleField111 != 0D) {
          DoubleField111 = other.DoubleField111;
        }
      }
      if (other.int64Field112_ != null) {
        if (int64Field112_ == null || other.Int64Field112 != 0L) {
          Int64Field112 = other.Int64Field112;
        }
      }
      if (other.doubleField113_ != null) {
        if (doubleField113_ == null || other.DoubleField113 != 0D) {
          DoubleField113 = other.DoubleField113;
        }
      }
      if (other.int64Field114_ != null) {
        if (int64Field114_ == null || other.Int64Field114 != 0L) {
          Int64Field114 = other.Int64Field114;
        }
      }
      if (other.doubleField42_ != null) {
        if (doubleField42_ == null || other.DoubleField42 != 0D) {
          DoubleField42 = other.DoubleField42;
        }
      }
      if (other.int64Field43_ != null) {
        if (int64Field43_ == null || other.Int64Field43 != 0L) {
          Int64Field43 = other.Int64Field43;
        }
      }
      if (other.int64Field44_ != null) {
        if (int64Field44_ == null || other.Int64Field44 != 0L) {
          Int64Field44 = other.Int64Field44;
        }
      }
      if (other.doubleField45_ != null) {
        if (doubleField45_ == null || other.DoubleField45 != 0D) {
          DoubleField45 = other.DoubleField45;
        }
      }
      if (other.doubleField46_ != null) {
        if (doubleField46_ == null || other.DoubleField46 != 0D) {
          DoubleField46 = other.DoubleField46;
        }
      }
      if (other.doubleField78_ != null) {
        if (doubleField78_ == null || other.DoubleField78 != 0D) {
          DoubleField78 = other.DoubleField78;
        }
      }
      if (other.doubleField88_ != null) {
        if (doubleField88_ == null || other.DoubleField88 != 0D) {
          DoubleField88 = other.DoubleField88;
        }
      }
      if (other.doubleField47_ != null) {
        if (doubleField47_ == null || other.DoubleField47 != 0D) {
          DoubleField47 = other.DoubleField47;
        }
      }
      if (other.doubleField89_ != null) {
        if (doubleField89_ == null || other.DoubleField89 != 0D) {
          DoubleField89 = other.DoubleField89;
        }
      }
      if (other.doubleField48_ != null) {
        if (doubleField48_ == null || other.DoubleField48 != 0D) {
          DoubleField48 = other.DoubleField48;
        }
      }
      if (other.doubleField49_ != null) {
        if (doubleField49_ == null || other.DoubleField49 != 0D) {
          DoubleField49 = other.DoubleField49;
        }
      }
      if (other.doubleField50_ != null) {
        if (doubleField50_ == null || other.DoubleField50 != 0D) {
          DoubleField50 = other.DoubleField50;
        }
      }
      if (other.doubleField90_ != null) {
        if (doubleField90_ == null || other.DoubleField90 != 0D) {
          DoubleField90 = other.DoubleField90;
        }
      }
      if (other.doubleField51_ != null) {
        if (doubleField51_ == null || other.DoubleField51 != 0D) {
          DoubleField51 = other.DoubleField51;
        }
      }
      if (other.doubleField91_ != null) {
        if (doubleField91_ == null || other.DoubleField91 != 0D) {
          DoubleField91 = other.DoubleField91;
        }
      }
      if (other.doubleField92_ != null) {
        if (doubleField92_ == null || other.DoubleField92 != 0D) {
          DoubleField92 = other.DoubleField92;
        }
      }
      if (other.int64Field107_ != null) {
        if (int64Field107_ == null || other.Int64Field107 != 0L) {
          Int64Field107 = other.Int64Field107;
        }
      }
      if (other.doubleField93_ != null) {
        if (doubleField93_ == null || other.DoubleField93 != 0D) {
          DoubleField93 = other.DoubleField93;
        }
      }
      if (other.doubleField108_ != null) {
        if (doubleField108_ == null || other.DoubleField108 != 0D) {
          DoubleField108 = other.DoubleField108;
        }
      }
      if (other.doubleField52_ != null) {
        if (doubleField52_ == null || other.DoubleField52 != 0D) {
          DoubleField52 = other.DoubleField52;
        }
      }
      if (other.doubleField53_ != null) {
        if (doubleField53_ == null || other.DoubleField53 != 0D) {
          DoubleField53 = other.DoubleField53;
        }
      }
      if (other.doubleField94_ != null) {
        if (doubleField94_ == null || other.DoubleField94 != 0D) {
          DoubleField94 = other.DoubleField94;
        }
      }
      if (other.doubleField54_ != null) {
        if (doubleField54_ == null || other.DoubleField54 != 0D) {
          DoubleField54 = other.DoubleField54;
        }
      }
      if (other.doubleField55_ != null) {
        if (doubleField55_ == null || other.DoubleField55 != 0D) {
          DoubleField55 = other.DoubleField55;
        }
      }
      if (other.doubleField56_ != null) {
        if (doubleField56_ == null || other.DoubleField56 != 0D) {
          DoubleField56 = other.DoubleField56;
        }
      }
      if (other.doubleField57_ != null) {
        if (doubleField57_ == null || other.DoubleField57 != 0D) {
          DoubleField57 = other.DoubleField57;
        }
      }
      if (other.doubleField58_ != null) {
        if (doubleField58_ == null || other.DoubleField58 != 0D) {
          DoubleField58 = other.DoubleField58;
        }
      }
      if (other.int64Field59_ != null) {
        if (int64Field59_ == null || other.Int64Field59 != 0L) {
          Int64Field59 = other.Int64Field59;
        }
      }
      if (other.int64Field60_ != null) {
        if (int64Field60_ == null || other.Int64Field60 != 0L) {
          Int64Field60 = other.Int64Field60;
        }
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      input.ReadRawMessage(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            double? value = _single_doubleField1_codec.Read(ref input);
            if (doubleField1_ == null || value != 0D) {
              DoubleField1 = value;
            }
            break;
          }
          case 18: {
            long? value = _single_int64Field2_codec.Read(ref input);
            if (int64Field2_ == null || value != 0L) {
              Int64Field2 = value;
            }
            break;
          }
          case 26: {
            long? value = _single_int64Field3_codec.Read(ref input);
            if (int64Field3_ == null || value != 0L) {
              Int64Field3 = value;
            }
            break;
          }
          case 34: {
            long? value = _single_int64Field4_codec.Read(ref input);
            if (int64Field4_ == null || value != 0L) {
              Int64Field4 = value;
            }
            break;
          }
          case 58: {
            double? value = _single_doubleField7_codec.Read(ref input);
            if (doubleField7_ == null || value != 0D) {
              DoubleField7 = value;
            }
            break;
          }
          case 66: {
            double? value = _single_doubleField8_codec.Read(ref input);
            if (doubleField8_ == null || value != 0D) {
              DoubleField8 = value;
            }
            break;
          }
          case 74: {
            double? value = _single_doubleField9_codec.Read(ref input);
            if (doubleField9_ == null || value != 0D) {
              DoubleField9 = value;
            }
            break;
          }
          case 82: {
            double? value = _single_doubleField10_codec.Read(ref input);
            if (doubleField10_ == null || value != 0D) {
              DoubleField10 = value;
            }
            break;
          }
          case 90: {
            double? value = _single_doubleField11_codec.Read(ref input);
            if (doubleField11_ == null || value != 0D) {
              DoubleField11 = value;
            }
            break;
          }
          case 114: {
            double? value = _single_doubleField14_codec.Read(ref input);
            if (doubleField14_ == null || value != 0D) {
              DoubleField14 = value;
            }
            break;
          }
          case 122: {
            double? value = _single_doubleField15_codec.Read(ref input);
            if (doubleField15_ == null || value != 0D) {
              DoubleField15 = value;
            }
            break;
          }
          case 154: {
            long? value = _single_int64Field19_codec.Read(ref input);
            if (int64Field19_ == null || value != 0L) {
              Int64Field19 = value;
            }
            break;
          }
          case 162: {
            double? value = _single_doubleField20_codec.Read(ref input);
            if (doubleField20_ == null || value != 0D) {
              DoubleField20 = value;
            }
            break;
          }
          case 170: {
            double? value = _single_doubleField21_codec.Read(ref input);
            if (doubleField21_ == null || value != 0D) {
              DoubleField21 = value;
            }
            break;
          }
          case 178: {
            double? value = _single_doubleField22_codec.Read(ref input);
            if (doubleField22_ == null || value != 0D) {
              DoubleField22 = value;
            }
            break;
          }
          case 202: {
            double? value = _single_doubleField25_codec.Read(ref input);
            if (doubleField25_ == null || value != 0D) {
              DoubleField25 = value;
            }
            break;
          }
          case 210: {
            long? value = _single_int64Field26_codec.Read(ref input);
            if (int64Field26_ == null || value != 0L) {
              Int64Field26 = value;
            }
            break;
          }
          case 226: {
            double? value = _single_doubleField28_codec.Read(ref input);
            if (doubleField28_ == null || value != 0D) {
              DoubleField28 = value;
            }
            break;
          }
          case 234: {
            double? value = _single_doubleField29_codec.Read(ref input);
            if (doubleField29_ == null || value != 0D) {
              DoubleField29 = value;
            }
            break;
          }
          case 242: {
            double? value = _single_doubleField30_codec.Read(ref input);
            if (doubleField30_ == null || value != 0D) {
              DoubleField30 = value;
            }
            break;
          }
          case 250: {
            double? value = _single_doubleField31_codec.Read(ref input);
            if (doubleField31_ == null || value != 0D) {
              DoubleField31 = value;
            }
            break;
          }
          case 258: {
            long? value = _single_int64Field32_codec.Read(ref input);
            if (int64Field32_ == null || value != 0L) {
              Int64Field32 = value;
            }
            break;
          }
          case 298: {
            long? value = _single_int64Field37_codec.Read(ref input);
            if (int64Field37_ == null || value != 0L) {
              Int64Field37 = value;
            }
            break;
          }
          case 306: {
            double? value = _single_doubleField38_codec.Read(ref input);
            if (doubleField38_ == null || value != 0D) {
              DoubleField38 = value;
            }
            break;
          }
          case 314: {
            long? value = _single_interactions_codec.Read(ref input);
            if (interactions_ == null || value != 0L) {
              Interactions = value;
            }
            break;
          }
          case 322: {
            double? value = _single_doubleField40_codec.Read(ref input);
            if (doubleField40_ == null || value != 0D) {
              DoubleField40 = value;
            }
            break;
          }
          case 330: {
            long? value = _single_int64Field41_codec.Read(ref input);
            if (int64Field41_ == null || value != 0L) {
              Int64Field41 = value;
            }
            break;
          }
          case 338: {
            double? value = _single_doubleField42_codec.Read(ref input);
            if (doubleField42_ == null || value != 0D) {
              DoubleField42 = value;
            }
            break;
          }
          case 346: {
            long? value = _single_int64Field43_codec.Read(ref input);
            if (int64Field43_ == null || value != 0L) {
              Int64Field43 = value;
            }
            break;
          }
          case 354: {
            long? value = _single_int64Field44_codec.Read(ref input);
            if (int64Field44_ == null || value != 0L) {
              Int64Field44 = value;
            }
            break;
          }
          case 362: {
            double? value = _single_doubleField45_codec.Read(ref input);
            if (doubleField45_ == null || value != 0D) {
              DoubleField45 = value;
            }
            break;
          }
          case 370: {
            double? value = _single_doubleField46_codec.Read(ref input);
            if (doubleField46_ == null || value != 0D) {
              DoubleField46 = value;
            }
            break;
          }
          case 378: {
            double? value = _single_doubleField47_codec.Read(ref input);
            if (doubleField47_ == null || value != 0D) {
              DoubleField47 = value;
            }
            break;
          }
          case 386: {
            double? value = _single_doubleField48_codec.Read(ref input);
            if (doubleField48_ == null || value != 0D) {
              DoubleField48 = value;
            }
            break;
          }
          case 394: {
            double? value = _single_doubleField49_codec.Read(ref input);
            if (doubleField49_ == null || value != 0D) {
              DoubleField49 = value;
            }
            break;
          }
          case 402: {
            double? value = _single_doubleField50_codec.Read(ref input);
            if (doubleField50_ == null || value != 0D) {
              DoubleField50 = value;
            }
            break;
          }
          case 410: {
            double? value = _single_doubleField51_codec.Read(ref input);
            if (doubleField51_ == null || value != 0D) {
              DoubleField51 = value;
            }
            break;
          }
          case 418: {
            double? value = _single_doubleField52_codec.Read(ref input);
            if (doubleField52_ == null || value != 0D) {
              DoubleField52 = value;
            }
            break;
          }
          case 426: {
            double? value = _single_doubleField53_codec.Read(ref input);
            if (doubleField53_ == null || value != 0D) {
              DoubleField53 = value;
            }
            break;
          }
          case 434: {
            double? value = _single_doubleField54_codec.Read(ref input);
            if (doubleField54_ == null || value != 0D) {
              DoubleField54 = value;
            }
            break;
          }
          case 442: {
            double? value = _single_doubleField55_codec.Read(ref input);
            if (doubleField55_ == null || value != 0D) {
              DoubleField55 = value;
            }
            break;
          }
          case 450: {
            double? value = _single_doubleField56_codec.Read(ref input);
            if (doubleField56_ == null || value != 0D) {
              DoubleField56 = value;
            }
            break;
          }
          case 458: {
            double? value = _single_doubleField57_codec.Read(ref input);
            if (doubleField57_ == null || value != 0D) {
              DoubleField57 = value;
            }
            break;
          }
          case 466: {
            double? value = _single_doubleField58_codec.Read(ref input);
            if (doubleField58_ == null || value != 0D) {
              DoubleField58 = value;
            }
            break;
          }
          case 474: {
            long? value = _single_int64Field59_codec.Read(ref input);
            if (int64Field59_ == null || value != 0L) {
              Int64Field59 = value;
            }
            break;
          }
          case 482: {
            long? value = _single_int64Field60_codec.Read(ref input);
            if (int64Field60_ == null || value != 0L) {
              Int64Field60 = value;
            }
            break;
          }
          case 498: {
            double? value = _single_doubleField62_codec.Read(ref input);
            if (doubleField62_ == null || value != 0D) {
              DoubleField62 = value;
            }
            break;
          }
          case 522: {
            double? value = _single_doubleField65_codec.Read(ref input);
            if (doubleField65_ == null || value != 0D) {
              DoubleField65 = value;
            }
            break;
          }
          case 530: {
            double? value = _single_doubleField66_codec.Read(ref input);
            if (doubleField66_ == null || value != 0D) {
              DoubleField66 = value;
            }
            break;
          }
          case 538: {
            double? value = _single_doubleField67_codec.Read(ref input);
            if (doubleField67_ == null || value != 0D) {
              DoubleField67 = value;
            }
            break;
          }
          case 546: {
            double? value = _single_doubleField68_codec.Read(ref input);
            if (doubleField68_ == null || value != 0D) {
              DoubleField68 = value;
            }
            break;
          }
          case 554: {
            double? value = _single_doubleField69_codec.Read(ref input);
            if (doubleField69_ == null || value != 0D) {
              DoubleField69 = value;
            }
            break;
          }
          case 562: {
            double? value = _single_doubleField70_codec.Read(ref input);
            if (doubleField70_ == null || value != 0D) {
              DoubleField70 = value;
            }
            break;
          }
          case 570: {
            double? value = _single_doubleField71_codec.Read(ref input);
            if (doubleField71_ == null || value != 0D) {
              DoubleField71 = value;
            }
            break;
          }
          case 578: {
            double? value = _single_doubleField72_codec.Read(ref input);
            if (doubleField72_ == null || value != 0D) {
              DoubleField72 = value;
            }
            break;
          }
          case 586: {
            string value = _single_stringField73_codec.Read(ref input);
            if (stringField73_ == null || value != "") {
              StringField73 = value;
            }
            break;
          }
          case 594: {
            string value = _single_stringField74_codec.Read(ref input);
            if (stringField74_ == null || value != "") {
              StringField74 = value;
            }
            break;
          }
          case 602: {
            double? value = _single_doubleField75_codec.Read(ref input);
            if (doubleField75_ == null || value != 0D) {
              DoubleField75 = value;
            }
            break;
          }
          case 618: {
            double? value = _single_doubleField77_codec.Read(ref input);
            if (doubleField77_ == null || value != 0D) {
              DoubleField77 = value;
            }
            break;
          }
          case 626: {
            double? value = _single_doubleField78_codec.Read(ref input);
            if (doubleField78_ == null || value != 0D) {
              DoubleField78 = value;
            }
            break;
          }
          case 634: {
            double? value = _single_doubleField79_codec.Read(ref input);
            if (doubleField79_ == null || value != 0D) {
              DoubleField79 = value;
            }
            break;
          }
          case 640: {
            EnumField80 = input.ReadInt32();
            break;
          }
          case 648: {
            EnumField81 = input.ReadInt32();
            break;
          }
          case 658: {
            long? value = _single_int64Field82_codec.Read(ref input);
            if (int64Field82_ == null || value != 0L) {
              Int64Field82 = value;
            }
            break;
          }
          case 664: {
            EnumField83 = input.ReadInt32();
            break;
          }
          case 674: {
            double? value = _single_doubleField84_codec.Read(ref input);
            if (doubleField84_ == null || value != 0D) {
              DoubleField84 = value;
            }
            break;
          }
          case 682: {
            long? value = _single_int64Field85_codec.Read(ref input);
            if (int64Field85_ == null || value != 0L) {
              Int64Field85 = value;
            }
            break;
          }
          case 690: {
            long? value = _single_int64Field86_codec.Read(ref input);
            if (int64Field86_ == null || value != 0L) {
              Int64Field86 = value;
            }
            break;
          }
          case 698: {
            long? value = _single_int64Field87_codec.Read(ref input);
            if (int64Field87_ == null || value != 0L) {
              Int64Field87 = value;
            }
            break;
          }
          case 706: {
            double? value = _single_doubleField88_codec.Read(ref input);
            if (doubleField88_ == null || value != 0D) {
              DoubleField88 = value;
            }
            break;
          }
          case 714: {
            double? value = _single_doubleField89_codec.Read(ref input);
            if (doubleField89_ == null || value != 0D) {
              DoubleField89 = value;
            }
            break;
          }
          case 722: {
            double? value = _single_doubleField90_codec.Read(ref input);
            if (doubleField90_ == null || value != 0D) {
              DoubleField90 = value;
            }
            break;
          }
          case 730: {
            double? value = _single_doubleField91_codec.Read(ref input);
            if (doubleField91_ == null || value != 0D) {
              DoubleField91 = value;
            }
            break;
          }
          case 738: {
            double? value = _single_doubleField92_codec.Read(ref input);
            if (doubleField92_ == null || value != 0D) {
              DoubleField92 = value;
            }
            break;
          }
          case 746: {
            double? value = _single_doubleField93_codec.Read(ref input);
            if (doubleField93_ == null || value != 0D) {
              DoubleField93 = value;
            }
            break;
          }
          case 754: {
            double? value = _single_doubleField94_codec.Read(ref input);
            if (doubleField94_ == null || value != 0D) {
              DoubleField94 = value;
            }
            break;
          }
          case 762: {
            double? value = _single_doubleField95_codec.Read(ref input);
            if (doubleField95_ == null || value != 0D) {
              DoubleField95 = value;
            }
            break;
          }
          case 770: {
            double? value = _single_doubleField96_codec.Read(ref input);
            if (doubleField96_ == null || value != 0D) {
              DoubleField96 = value;
            }
            break;
          }
          case 778: {
            double? value = _single_doubleField97_codec.Read(ref input);
            if (doubleField97_ == null || value != 0D) {
              DoubleField97 = value;
            }
            break;
          }
          case 786: {
            double? value = _single_doubleField98_codec.Read(ref input);
            if (doubleField98_ == null || value != 0D) {
              DoubleField98 = value;
            }
            break;
          }
          case 794: {
            double? value = _single_doubleField99_codec.Read(ref input);
            if (doubleField99_ == null || value != 0D) {
              DoubleField99 = value;
            }
            break;
          }
          case 802:
          case 800: {
            repeatedIntField100_.AddEntriesFrom(ref input, _repeated_repeatedIntField100_codec);
            break;
          }
          case 810: {
            double? value = _single_doubleField101_codec.Read(ref input);
            if (doubleField101_ == null || value != 0D) {
              DoubleField101 = value;
            }
            break;
          }
          case 818: {
            double? value = _single_doubleField102_codec.Read(ref input);
            if (doubleField102_ == null || value != 0D) {
              DoubleField102 = value;
            }
            break;
          }
          case 826: {
            double? value = _single_doubleField103_codec.Read(ref input);
            if (doubleField103_ == null || value != 0D) {
              DoubleField103 = value;
            }
            break;
          }
          case 834: {
            double? value = _single_doubleField104_codec.Read(ref input);
            if (doubleField104_ == null || value != 0D) {
              DoubleField104 = value;
            }
            break;
          }
          case 842: {
            double? value = _single_doubleField105_codec.Read(ref input);
            if (doubleField105_ == null || value != 0D) {
              DoubleField105 = value;
            }
            break;
          }
          case 850: {
            double? value = _single_doubleField106_codec.Read(ref input);
            if (doubleField106_ == null || value != 0D) {
              DoubleField106 = value;
            }
            break;
          }
          case 858: {
            long? value = _single_int64Field107_codec.Read(ref input);
            if (int64Field107_ == null || value != 0L) {
              Int64Field107 = value;
            }
            break;
          }
          case 866: {
            double? value = _single_doubleField108_codec.Read(ref input);
            if (doubleField108_ == null || value != 0D) {
              DoubleField108 = value;
            }
            break;
          }
          case 874: {
            double? value = _single_doubleField109_codec.Read(ref input);
            if (doubleField109_ == null || value != 0D) {
              DoubleField109 = value;
            }
            break;
          }
          case 882: {
            long? value = _single_int64Field110_codec.Read(ref input);
            if (int64Field110_ == null || value != 0L) {
              Int64Field110 = value;
            }
            break;
          }
          case 890: {
            double? value = _single_doubleField111_codec.Read(ref input);
            if (doubleField111_ == null || value != 0D) {
              DoubleField111 = value;
            }
            break;
          }
          case 898: {
            long? value = _single_int64Field112_codec.Read(ref input);
            if (int64Field112_ == null || value != 0L) {
              Int64Field112 = value;
            }
            break;
          }
          case 906: {
            double? value = _single_doubleField113_codec.Read(ref input);
            if (doubleField113_ == null || value != 0D) {
              DoubleField113 = value;
            }
            break;
          }
          case 914: {
            long? value = _single_int64Field114_codec.Read(ref input);
            if (int64Field114_ == null || value != 0L) {
              Int64Field114 = value;
            }
            break;
          }
          case 922: {
            long? value = _single_int64Field115_codec.Read(ref input);
            if (int64Field115_ == null || value != 0L) {
              Int64Field115 = value;
            }
            break;
          }
          case 930: {
            double? value = _single_doubleField116_codec.Read(ref input);
            if (doubleField116_ == null || value != 0D) {
              DoubleField116 = value;
            }
            break;
          }
          case 938: {
            long? value = _single_int64Field117_codec.Read(ref input);
            if (int64Field117_ == null || value != 0L) {
              Int64Field117 = value;
            }
            break;
          }
          case 946: {
            double? value = _single_doubleField118_codec.Read(ref input);
            if (doubleField118_ == null || value != 0D) {
              DoubleField118 = value;
            }
            break;
          }
          case 954: {
            double? value = _single_doubleField119_codec.Read(ref input);
            if (doubleField119_ == null || value != 0D) {
              DoubleField119 = value;
            }
            break;
          }
          case 962: {
            double? value = _single_doubleField120_codec.Read(ref input);
            if (doubleField120_ == null || value != 0D) {
              DoubleField120 = value;
            }
            break;
          }
          case 970: {
            double? value = _single_doubleField121_codec.Read(ref input);
            if (doubleField121_ == null || value != 0D) {
              DoubleField121 = value;
            }
            break;
          }
          case 978: {
            double? value = _single_doubleField122_codec.Read(ref input);
            if (doubleField122_ == null || value != 0D) {
              DoubleField122 = value;
            }
            break;
          }
          case 986: {
            double? value = _single_doubleField123_codec.Read(ref input);
            if (doubleField123_ == null || value != 0D) {
              DoubleField123 = value;
            }
            break;
          }
          case 994: {
            double? value = _single_doubleField124_codec.Read(ref input);
            if (doubleField124_ == null || value != 0D) {
              DoubleField124 = value;
            }
            break;
          }
          case 1002: {
            long? value = _single_int64Field125_codec.Read(ref input);
            if (int64Field125_ == null || value != 0L) {
              Int64Field125 = value;
            }
            break;
          }
          case 1010: {
            long? value = _single_int64Field126_codec.Read(ref input);
            if (int64Field126_ == null || value != 0L) {
              Int64Field126 = value;
            }
            break;
          }
          case 1018: {
            long? value = _single_int64Field127_codec.Read(ref input);
            if (int64Field127_ == null || value != 0L) {
              Int64Field127 = value;
            }
            break;
          }
          case 1026: {
            double? value = _single_doubleField128_codec.Read(ref input);
            if (doubleField128_ == null || value != 0D) {
              DoubleField128 = value;
            }
            break;
          }
          case 1034: {
            double? value = _single_doubleField129_codec.Read(ref input);
            if (doubleField129_ == null || value != 0D) {
              DoubleField129 = value;
            }
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// same as ManyWrapperFieldsMessages, but with primitive fields
  /// for comparison.
  /// </summary>
  public sealed partial class ManyPrimitiveFieldsMessage : pb::IMessage<ManyPrimitiveFieldsMessage>, pb::IBufferMessage {
    private static readonly pb::MessageParser<ManyPrimitiveFieldsMessage> _parser = new pb::MessageParser<ManyPrimitiveFieldsMessage>(() => new ManyPrimitiveFieldsMessage());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ManyPrimitiveFieldsMessage> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Protobuf.Benchmarks.WrapperBenchmarkMessagesReflection.Descriptor.MessageTypes[1]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ManyPrimitiveFieldsMessage() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ManyPrimitiveFieldsMessage(ManyPrimitiveFieldsMessage other) : this() {
      doubleField95_ = other.doubleField95_;
      doubleField1_ = other.doubleField1_;
      doubleField79_ = other.doubleField79_;
      int64Field2_ = other.int64Field2_;
      doubleField96_ = other.doubleField96_;
      int64Field3_ = other.int64Field3_;
      int64Field4_ = other.int64Field4_;
      doubleField97_ = other.doubleField97_;
      doubleField65_ = other.doubleField65_;
      doubleField66_ = other.doubleField66_;
      doubleField7_ = other.doubleField7_;
      doubleField62_ = other.doubleField62_;
      doubleField118_ = other.doubleField118_;
      doubleField119_ = other.doubleField119_;
      doubleField67_ = other.doubleField67_;
      doubleField120_ = other.doubleField120_;
      doubleField121_ = other.doubleField121_;
      doubleField122_ = other.doubleField122_;
      doubleField123_ = other.doubleField123_;
      doubleField124_ = other.doubleField124_;
      doubleField8_ = other.doubleField8_;
      doubleField9_ = other.doubleField9_;
      doubleField98_ = other.doubleField98_;
      doubleField10_ = other.doubleField10_;
      doubleField11_ = other.doubleField11_;
      doubleField99_ = other.doubleField99_;
      doubleField84_ = other.doubleField84_;
      doubleField14_ = other.doubleField14_;
      doubleField77_ = other.doubleField77_;
      doubleField15_ = other.doubleField15_;
      int64Field19_ = other.int64Field19_;
      int64Field115_ = other.int64Field115_;
      doubleField116_ = other.doubleField116_;
      int64Field117_ = other.int64Field117_;
      doubleField20_ = other.doubleField20_;
      doubleField21_ = other.doubleField21_;
      stringField73_ = other.stringField73_;
      stringField74_ = other.stringField74_;
      doubleField22_ = other.doubleField22_;
      doubleField69_ = other.doubleField69_;
      doubleField70_ = other.doubleField70_;
      doubleField71_ = other.doubleField71_;
      doubleField72_ = other.doubleField72_;
      doubleField25_ = other.doubleField25_;
      int64Field26_ = other.int64Field26_;
      doubleField68_ = other.doubleField68_;
      doubleField28_ = other.doubleField28_;
      doubleField106_ = other.doubleField106_;
      doubleField29_ = other.doubleField29_;
      doubleField30_ = other.doubleField30_;
      doubleField101_ = other.doubleField101_;
      doubleField102_ = other.doubleField102_;
      doubleField103_ = other.doubleField103_;
      doubleField104_ = other.doubleField104_;
      doubleField105_ = other.doubleField105_;
      doubleField31_ = other.doubleField31_;
      int64Field32_ = other.int64Field32_;
      doubleField75_ = other.doubleField75_;
      doubleField129_ = other.doubleField129_;
      enumField80_ = other.enumField80_;
      enumField81_ = other.enumField81_;
      int64Field82_ = other.int64Field82_;
      enumField83_ = other.enumField83_;
      int64Field85_ = other.int64Field85_;
      int64Field86_ = other.int64Field86_;
      int64Field87_ = other.int64Field87_;
      int64Field125_ = other.int64Field125_;
      int64Field37_ = other.int64Field37_;
      doubleField38_ = other.doubleField38_;
      interactions_ = other.interactions_;
      repeatedIntField100_ = other.repeatedIntField100_.Clone();
      doubleField40_ = other.doubleField40_;
      int64Field41_ = other.int64Field41_;
      int64Field126_ = other.int64Field126_;
      int64Field127_ = other.int64Field127_;
      doubleField128_ = other.doubleField128_;
      doubleField109_ = other.doubleField109_;
      int64Field110_ = other.int64Field110_;
      doubleField111_ = other.doubleField111_;
      int64Field112_ = other.int64Field112_;
      doubleField113_ = other.doubleField113_;
      int64Field114_ = other.int64Field114_;
      doubleField42_ = other.doubleField42_;
      int64Field43_ = other.int64Field43_;
      int64Field44_ = other.int64Field44_;
      doubleField45_ = other.doubleField45_;
      doubleField46_ = other.doubleField46_;
      doubleField78_ = other.doubleField78_;
      doubleField88_ = other.doubleField88_;
      doubleField47_ = other.doubleField47_;
      doubleField89_ = other.doubleField89_;
      doubleField48_ = other.doubleField48_;
      doubleField49_ = other.doubleField49_;
      doubleField50_ = other.doubleField50_;
      doubleField90_ = other.doubleField90_;
      doubleField51_ = other.doubleField51_;
      doubleField91_ = other.doubleField91_;
      doubleField92_ = other.doubleField92_;
      int64Field107_ = other.int64Field107_;
      doubleField93_ = other.doubleField93_;
      doubleField108_ = other.doubleField108_;
      doubleField52_ = other.doubleField52_;
      doubleField53_ = other.doubleField53_;
      doubleField94_ = other.doubleField94_;
      doubleField54_ = other.doubleField54_;
      doubleField55_ = other.doubleField55_;
      doubleField56_ = other.doubleField56_;
      doubleField57_ = other.doubleField57_;
      doubleField58_ = other.doubleField58_;
      int64Field59_ = other.int64Field59_;
      int64Field60_ = other.int64Field60_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ManyPrimitiveFieldsMessage Clone() {
      return new ManyPrimitiveFieldsMessage(this);
    }

    /// <summary>Field number for the "double_field_95" field.</summary>
    public const int DoubleField95FieldNumber = 95;
    private double doubleField95_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField95 {
      get { return doubleField95_; }
      set {
        doubleField95_ = value;
      }
    }

    /// <summary>Field number for the "double_field_1" field.</summary>
    public const int DoubleField1FieldNumber = 1;
    private double doubleField1_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField1 {
      get { return doubleField1_; }
      set {
        doubleField1_ = value;
      }
    }

    /// <summary>Field number for the "double_field_79" field.</summary>
    public const int DoubleField79FieldNumber = 79;
    private double doubleField79_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField79 {
      get { return doubleField79_; }
      set {
        doubleField79_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_2" field.</summary>
    public const int Int64Field2FieldNumber = 2;
    private long int64Field2_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field2 {
      get { return int64Field2_; }
      set {
        int64Field2_ = value;
      }
    }

    /// <summary>Field number for the "double_field_96" field.</summary>
    public const int DoubleField96FieldNumber = 96;
    private double doubleField96_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField96 {
      get { return doubleField96_; }
      set {
        doubleField96_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_3" field.</summary>
    public const int Int64Field3FieldNumber = 3;
    private long int64Field3_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field3 {
      get { return int64Field3_; }
      set {
        int64Field3_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_4" field.</summary>
    public const int Int64Field4FieldNumber = 4;
    private long int64Field4_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field4 {
      get { return int64Field4_; }
      set {
        int64Field4_ = value;
      }
    }

    /// <summary>Field number for the "double_field_97" field.</summary>
    public const int DoubleField97FieldNumber = 97;
    private double doubleField97_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField97 {
      get { return doubleField97_; }
      set {
        doubleField97_ = value;
      }
    }

    /// <summary>Field number for the "double_field_65" field.</summary>
    public const int DoubleField65FieldNumber = 65;
    private double doubleField65_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField65 {
      get { return doubleField65_; }
      set {
        doubleField65_ = value;
      }
    }

    /// <summary>Field number for the "double_field_66" field.</summary>
    public const int DoubleField66FieldNumber = 66;
    private double doubleField66_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField66 {
      get { return doubleField66_; }
      set {
        doubleField66_ = value;
      }
    }

    /// <summary>Field number for the "double_field_7" field.</summary>
    public const int DoubleField7FieldNumber = 7;
    private double doubleField7_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField7 {
      get { return doubleField7_; }
      set {
        doubleField7_ = value;
      }
    }

    /// <summary>Field number for the "double_field_62" field.</summary>
    public const int DoubleField62FieldNumber = 62;
    private double doubleField62_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField62 {
      get { return doubleField62_; }
      set {
        doubleField62_ = value;
      }
    }

    /// <summary>Field number for the "double_field_118" field.</summary>
    public const int DoubleField118FieldNumber = 118;
    private double doubleField118_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField118 {
      get { return doubleField118_; }
      set {
        doubleField118_ = value;
      }
    }

    /// <summary>Field number for the "double_field_119" field.</summary>
    public const int DoubleField119FieldNumber = 119;
    private double doubleField119_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField119 {
      get { return doubleField119_; }
      set {
        doubleField119_ = value;
      }
    }

    /// <summary>Field number for the "double_field_67" field.</summary>
    public const int DoubleField67FieldNumber = 67;
    private double doubleField67_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField67 {
      get { return doubleField67_; }
      set {
        doubleField67_ = value;
      }
    }

    /// <summary>Field number for the "double_field_120" field.</summary>
    public const int DoubleField120FieldNumber = 120;
    private double doubleField120_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField120 {
      get { return doubleField120_; }
      set {
        doubleField120_ = value;
      }
    }

    /// <summary>Field number for the "double_field_121" field.</summary>
    public const int DoubleField121FieldNumber = 121;
    private double doubleField121_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField121 {
      get { return doubleField121_; }
      set {
        doubleField121_ = value;
      }
    }

    /// <summary>Field number for the "double_field_122" field.</summary>
    public const int DoubleField122FieldNumber = 122;
    private double doubleField122_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField122 {
      get { return doubleField122_; }
      set {
        doubleField122_ = value;
      }
    }

    /// <summary>Field number for the "double_field_123" field.</summary>
    public const int DoubleField123FieldNumber = 123;
    private double doubleField123_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField123 {
      get { return doubleField123_; }
      set {
        doubleField123_ = value;
      }
    }

    /// <summary>Field number for the "double_field_124" field.</summary>
    public const int DoubleField124FieldNumber = 124;
    private double doubleField124_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField124 {
      get { return doubleField124_; }
      set {
        doubleField124_ = value;
      }
    }

    /// <summary>Field number for the "double_field_8" field.</summary>
    public const int DoubleField8FieldNumber = 8;
    private double doubleField8_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField8 {
      get { return doubleField8_; }
      set {
        doubleField8_ = value;
      }
    }

    /// <summary>Field number for the "double_field_9" field.</summary>
    public const int DoubleField9FieldNumber = 9;
    private double doubleField9_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField9 {
      get { return doubleField9_; }
      set {
        doubleField9_ = value;
      }
    }

    /// <summary>Field number for the "double_field_98" field.</summary>
    public const int DoubleField98FieldNumber = 98;
    private double doubleField98_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField98 {
      get { return doubleField98_; }
      set {
        doubleField98_ = value;
      }
    }

    /// <summary>Field number for the "double_field_10" field.</summary>
    public const int DoubleField10FieldNumber = 10;
    private double doubleField10_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField10 {
      get { return doubleField10_; }
      set {
        doubleField10_ = value;
      }
    }

    /// <summary>Field number for the "double_field_11" field.</summary>
    public const int DoubleField11FieldNumber = 11;
    private double doubleField11_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField11 {
      get { return doubleField11_; }
      set {
        doubleField11_ = value;
      }
    }

    /// <summary>Field number for the "double_field_99" field.</summary>
    public const int DoubleField99FieldNumber = 99;
    private double doubleField99_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField99 {
      get { return doubleField99_; }
      set {
        doubleField99_ = value;
      }
    }

    /// <summary>Field number for the "double_field_84" field.</summary>
    public const int DoubleField84FieldNumber = 84;
    private double doubleField84_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField84 {
      get { return doubleField84_; }
      set {
        doubleField84_ = value;
      }
    }

    /// <summary>Field number for the "double_field_14" field.</summary>
    public const int DoubleField14FieldNumber = 14;
    private double doubleField14_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField14 {
      get { return doubleField14_; }
      set {
        doubleField14_ = value;
      }
    }

    /// <summary>Field number for the "double_field_77" field.</summary>
    public const int DoubleField77FieldNumber = 77;
    private double doubleField77_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField77 {
      get { return doubleField77_; }
      set {
        doubleField77_ = value;
      }
    }

    /// <summary>Field number for the "double_field_15" field.</summary>
    public const int DoubleField15FieldNumber = 15;
    private double doubleField15_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField15 {
      get { return doubleField15_; }
      set {
        doubleField15_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_19" field.</summary>
    public const int Int64Field19FieldNumber = 19;
    private long int64Field19_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field19 {
      get { return int64Field19_; }
      set {
        int64Field19_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_115" field.</summary>
    public const int Int64Field115FieldNumber = 115;
    private long int64Field115_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field115 {
      get { return int64Field115_; }
      set {
        int64Field115_ = value;
      }
    }

    /// <summary>Field number for the "double_field_116" field.</summary>
    public const int DoubleField116FieldNumber = 116;
    private double doubleField116_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField116 {
      get { return doubleField116_; }
      set {
        doubleField116_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_117" field.</summary>
    public const int Int64Field117FieldNumber = 117;
    private long int64Field117_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field117 {
      get { return int64Field117_; }
      set {
        int64Field117_ = value;
      }
    }

    /// <summary>Field number for the "double_field_20" field.</summary>
    public const int DoubleField20FieldNumber = 20;
    private double doubleField20_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField20 {
      get { return doubleField20_; }
      set {
        doubleField20_ = value;
      }
    }

    /// <summary>Field number for the "double_field_21" field.</summary>
    public const int DoubleField21FieldNumber = 21;
    private double doubleField21_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField21 {
      get { return doubleField21_; }
      set {
        doubleField21_ = value;
      }
    }

    /// <summary>Field number for the "string_field_73" field.</summary>
    public const int StringField73FieldNumber = 73;
    private string stringField73_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string StringField73 {
      get { return stringField73_; }
      set {
        stringField73_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "string_field_74" field.</summary>
    public const int StringField74FieldNumber = 74;
    private string stringField74_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string StringField74 {
      get { return stringField74_; }
      set {
        stringField74_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "double_field_22" field.</summary>
    public const int DoubleField22FieldNumber = 22;
    private double doubleField22_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField22 {
      get { return doubleField22_; }
      set {
        doubleField22_ = value;
      }
    }

    /// <summary>Field number for the "double_field_69" field.</summary>
    public const int DoubleField69FieldNumber = 69;
    private double doubleField69_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField69 {
      get { return doubleField69_; }
      set {
        doubleField69_ = value;
      }
    }

    /// <summary>Field number for the "double_field_70" field.</summary>
    public const int DoubleField70FieldNumber = 70;
    private double doubleField70_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField70 {
      get { return doubleField70_; }
      set {
        doubleField70_ = value;
      }
    }

    /// <summary>Field number for the "double_field_71" field.</summary>
    public const int DoubleField71FieldNumber = 71;
    private double doubleField71_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField71 {
      get { return doubleField71_; }
      set {
        doubleField71_ = value;
      }
    }

    /// <summary>Field number for the "double_field_72" field.</summary>
    public const int DoubleField72FieldNumber = 72;
    private double doubleField72_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField72 {
      get { return doubleField72_; }
      set {
        doubleField72_ = value;
      }
    }

    /// <summary>Field number for the "double_field_25" field.</summary>
    public const int DoubleField25FieldNumber = 25;
    private double doubleField25_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField25 {
      get { return doubleField25_; }
      set {
        doubleField25_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_26" field.</summary>
    public const int Int64Field26FieldNumber = 26;
    private long int64Field26_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field26 {
      get { return int64Field26_; }
      set {
        int64Field26_ = value;
      }
    }

    /// <summary>Field number for the "double_field_68" field.</summary>
    public const int DoubleField68FieldNumber = 68;
    private double doubleField68_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField68 {
      get { return doubleField68_; }
      set {
        doubleField68_ = value;
      }
    }

    /// <summary>Field number for the "double_field_28" field.</summary>
    public const int DoubleField28FieldNumber = 28;
    private double doubleField28_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField28 {
      get { return doubleField28_; }
      set {
        doubleField28_ = value;
      }
    }

    /// <summary>Field number for the "double_field_106" field.</summary>
    public const int DoubleField106FieldNumber = 106;
    private double doubleField106_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField106 {
      get { return doubleField106_; }
      set {
        doubleField106_ = value;
      }
    }

    /// <summary>Field number for the "double_field_29" field.</summary>
    public const int DoubleField29FieldNumber = 29;
    private double doubleField29_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField29 {
      get { return doubleField29_; }
      set {
        doubleField29_ = value;
      }
    }

    /// <summary>Field number for the "double_field_30" field.</summary>
    public const int DoubleField30FieldNumber = 30;
    private double doubleField30_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField30 {
      get { return doubleField30_; }
      set {
        doubleField30_ = value;
      }
    }

    /// <summary>Field number for the "double_field_101" field.</summary>
    public const int DoubleField101FieldNumber = 101;
    private double doubleField101_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField101 {
      get { return doubleField101_; }
      set {
        doubleField101_ = value;
      }
    }

    /// <summary>Field number for the "double_field_102" field.</summary>
    public const int DoubleField102FieldNumber = 102;
    private double doubleField102_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField102 {
      get { return doubleField102_; }
      set {
        doubleField102_ = value;
      }
    }

    /// <summary>Field number for the "double_field_103" field.</summary>
    public const int DoubleField103FieldNumber = 103;
    private double doubleField103_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField103 {
      get { return doubleField103_; }
      set {
        doubleField103_ = value;
      }
    }

    /// <summary>Field number for the "double_field_104" field.</summary>
    public const int DoubleField104FieldNumber = 104;
    private double doubleField104_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField104 {
      get { return doubleField104_; }
      set {
        doubleField104_ = value;
      }
    }

    /// <summary>Field number for the "double_field_105" field.</summary>
    public const int DoubleField105FieldNumber = 105;
    private double doubleField105_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField105 {
      get { return doubleField105_; }
      set {
        doubleField105_ = value;
      }
    }

    /// <summary>Field number for the "double_field_31" field.</summary>
    public const int DoubleField31FieldNumber = 31;
    private double doubleField31_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField31 {
      get { return doubleField31_; }
      set {
        doubleField31_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_32" field.</summary>
    public const int Int64Field32FieldNumber = 32;
    private long int64Field32_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field32 {
      get { return int64Field32_; }
      set {
        int64Field32_ = value;
      }
    }

    /// <summary>Field number for the "double_field_75" field.</summary>
    public const int DoubleField75FieldNumber = 75;
    private double doubleField75_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField75 {
      get { return doubleField75_; }
      set {
        doubleField75_ = value;
      }
    }

    /// <summary>Field number for the "double_field_129" field.</summary>
    public const int DoubleField129FieldNumber = 129;
    private double doubleField129_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField129 {
      get { return doubleField129_; }
      set {
        doubleField129_ = value;
      }
    }

    /// <summary>Field number for the "enum_field_80" field.</summary>
    public const int EnumField80FieldNumber = 80;
    private int enumField80_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int EnumField80 {
      get { return enumField80_; }
      set {
        enumField80_ = value;
      }
    }

    /// <summary>Field number for the "enum_field_81" field.</summary>
    public const int EnumField81FieldNumber = 81;
    private int enumField81_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int EnumField81 {
      get { return enumField81_; }
      set {
        enumField81_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_82" field.</summary>
    public const int Int64Field82FieldNumber = 82;
    private long int64Field82_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field82 {
      get { return int64Field82_; }
      set {
        int64Field82_ = value;
      }
    }

    /// <summary>Field number for the "enum_field_83" field.</summary>
    public const int EnumField83FieldNumber = 83;
    private int enumField83_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int EnumField83 {
      get { return enumField83_; }
      set {
        enumField83_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_85" field.</summary>
    public const int Int64Field85FieldNumber = 85;
    private long int64Field85_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field85 {
      get { return int64Field85_; }
      set {
        int64Field85_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_86" field.</summary>
    public const int Int64Field86FieldNumber = 86;
    private long int64Field86_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field86 {
      get { return int64Field86_; }
      set {
        int64Field86_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_87" field.</summary>
    public const int Int64Field87FieldNumber = 87;
    private long int64Field87_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field87 {
      get { return int64Field87_; }
      set {
        int64Field87_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_125" field.</summary>
    public const int Int64Field125FieldNumber = 125;
    private long int64Field125_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field125 {
      get { return int64Field125_; }
      set {
        int64Field125_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_37" field.</summary>
    public const int Int64Field37FieldNumber = 37;
    private long int64Field37_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field37 {
      get { return int64Field37_; }
      set {
        int64Field37_ = value;
      }
    }

    /// <summary>Field number for the "double_field_38" field.</summary>
    public const int DoubleField38FieldNumber = 38;
    private double doubleField38_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField38 {
      get { return doubleField38_; }
      set {
        doubleField38_ = value;
      }
    }

    /// <summary>Field number for the "interactions" field.</summary>
    public const int InteractionsFieldNumber = 39;
    private long interactions_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Interactions {
      get { return interactions_; }
      set {
        interactions_ = value;
      }
    }

    /// <summary>Field number for the "repeated_int_field_100" field.</summary>
    public const int RepeatedIntField100FieldNumber = 100;
    private static readonly pb::FieldCodec<int> _repeated_repeatedIntField100_codec
        = pb::FieldCodec.ForInt32(802);
    private readonly pbc::RepeatedField<int> repeatedIntField100_ = new pbc::RepeatedField<int>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<int> RepeatedIntField100 {
      get { return repeatedIntField100_; }
    }

    /// <summary>Field number for the "double_field_40" field.</summary>
    public const int DoubleField40FieldNumber = 40;
    private double doubleField40_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField40 {
      get { return doubleField40_; }
      set {
        doubleField40_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_41" field.</summary>
    public const int Int64Field41FieldNumber = 41;
    private long int64Field41_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field41 {
      get { return int64Field41_; }
      set {
        int64Field41_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_126" field.</summary>
    public const int Int64Field126FieldNumber = 126;
    private long int64Field126_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field126 {
      get { return int64Field126_; }
      set {
        int64Field126_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_127" field.</summary>
    public const int Int64Field127FieldNumber = 127;
    private long int64Field127_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field127 {
      get { return int64Field127_; }
      set {
        int64Field127_ = value;
      }
    }

    /// <summary>Field number for the "double_field_128" field.</summary>
    public const int DoubleField128FieldNumber = 128;
    private double doubleField128_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField128 {
      get { return doubleField128_; }
      set {
        doubleField128_ = value;
      }
    }

    /// <summary>Field number for the "double_field_109" field.</summary>
    public const int DoubleField109FieldNumber = 109;
    private double doubleField109_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField109 {
      get { return doubleField109_; }
      set {
        doubleField109_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_110" field.</summary>
    public const int Int64Field110FieldNumber = 110;
    private long int64Field110_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field110 {
      get { return int64Field110_; }
      set {
        int64Field110_ = value;
      }
    }

    /// <summary>Field number for the "double_field_111" field.</summary>
    public const int DoubleField111FieldNumber = 111;
    private double doubleField111_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField111 {
      get { return doubleField111_; }
      set {
        doubleField111_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_112" field.</summary>
    public const int Int64Field112FieldNumber = 112;
    private long int64Field112_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field112 {
      get { return int64Field112_; }
      set {
        int64Field112_ = value;
      }
    }

    /// <summary>Field number for the "double_field_113" field.</summary>
    public const int DoubleField113FieldNumber = 113;
    private double doubleField113_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField113 {
      get { return doubleField113_; }
      set {
        doubleField113_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_114" field.</summary>
    public const int Int64Field114FieldNumber = 114;
    private long int64Field114_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field114 {
      get { return int64Field114_; }
      set {
        int64Field114_ = value;
      }
    }

    /// <summary>Field number for the "double_field_42" field.</summary>
    public const int DoubleField42FieldNumber = 42;
    private double doubleField42_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField42 {
      get { return doubleField42_; }
      set {
        doubleField42_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_43" field.</summary>
    public const int Int64Field43FieldNumber = 43;
    private long int64Field43_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field43 {
      get { return int64Field43_; }
      set {
        int64Field43_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_44" field.</summary>
    public const int Int64Field44FieldNumber = 44;
    private long int64Field44_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field44 {
      get { return int64Field44_; }
      set {
        int64Field44_ = value;
      }
    }

    /// <summary>Field number for the "double_field_45" field.</summary>
    public const int DoubleField45FieldNumber = 45;
    private double doubleField45_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField45 {
      get { return doubleField45_; }
      set {
        doubleField45_ = value;
      }
    }

    /// <summary>Field number for the "double_field_46" field.</summary>
    public const int DoubleField46FieldNumber = 46;
    private double doubleField46_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField46 {
      get { return doubleField46_; }
      set {
        doubleField46_ = value;
      }
    }

    /// <summary>Field number for the "double_field_78" field.</summary>
    public const int DoubleField78FieldNumber = 78;
    private double doubleField78_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField78 {
      get { return doubleField78_; }
      set {
        doubleField78_ = value;
      }
    }

    /// <summary>Field number for the "double_field_88" field.</summary>
    public const int DoubleField88FieldNumber = 88;
    private double doubleField88_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField88 {
      get { return doubleField88_; }
      set {
        doubleField88_ = value;
      }
    }

    /// <summary>Field number for the "double_field_47" field.</summary>
    public const int DoubleField47FieldNumber = 47;
    private double doubleField47_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField47 {
      get { return doubleField47_; }
      set {
        doubleField47_ = value;
      }
    }

    /// <summary>Field number for the "double_field_89" field.</summary>
    public const int DoubleField89FieldNumber = 89;
    private double doubleField89_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField89 {
      get { return doubleField89_; }
      set {
        doubleField89_ = value;
      }
    }

    /// <summary>Field number for the "double_field_48" field.</summary>
    public const int DoubleField48FieldNumber = 48;
    private double doubleField48_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField48 {
      get { return doubleField48_; }
      set {
        doubleField48_ = value;
      }
    }

    /// <summary>Field number for the "double_field_49" field.</summary>
    public const int DoubleField49FieldNumber = 49;
    private double doubleField49_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField49 {
      get { return doubleField49_; }
      set {
        doubleField49_ = value;
      }
    }

    /// <summary>Field number for the "double_field_50" field.</summary>
    public const int DoubleField50FieldNumber = 50;
    private double doubleField50_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField50 {
      get { return doubleField50_; }
      set {
        doubleField50_ = value;
      }
    }

    /// <summary>Field number for the "double_field_90" field.</summary>
    public const int DoubleField90FieldNumber = 90;
    private double doubleField90_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField90 {
      get { return doubleField90_; }
      set {
        doubleField90_ = value;
      }
    }

    /// <summary>Field number for the "double_field_51" field.</summary>
    public const int DoubleField51FieldNumber = 51;
    private double doubleField51_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField51 {
      get { return doubleField51_; }
      set {
        doubleField51_ = value;
      }
    }

    /// <summary>Field number for the "double_field_91" field.</summary>
    public const int DoubleField91FieldNumber = 91;
    private double doubleField91_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField91 {
      get { return doubleField91_; }
      set {
        doubleField91_ = value;
      }
    }

    /// <summary>Field number for the "double_field_92" field.</summary>
    public const int DoubleField92FieldNumber = 92;
    private double doubleField92_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField92 {
      get { return doubleField92_; }
      set {
        doubleField92_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_107" field.</summary>
    public const int Int64Field107FieldNumber = 107;
    private long int64Field107_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field107 {
      get { return int64Field107_; }
      set {
        int64Field107_ = value;
      }
    }

    /// <summary>Field number for the "double_field_93" field.</summary>
    public const int DoubleField93FieldNumber = 93;
    private double doubleField93_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField93 {
      get { return doubleField93_; }
      set {
        doubleField93_ = value;
      }
    }

    /// <summary>Field number for the "double_field_108" field.</summary>
    public const int DoubleField108FieldNumber = 108;
    private double doubleField108_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField108 {
      get { return doubleField108_; }
      set {
        doubleField108_ = value;
      }
    }

    /// <summary>Field number for the "double_field_52" field.</summary>
    public const int DoubleField52FieldNumber = 52;
    private double doubleField52_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField52 {
      get { return doubleField52_; }
      set {
        doubleField52_ = value;
      }
    }

    /// <summary>Field number for the "double_field_53" field.</summary>
    public const int DoubleField53FieldNumber = 53;
    private double doubleField53_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField53 {
      get { return doubleField53_; }
      set {
        doubleField53_ = value;
      }
    }

    /// <summary>Field number for the "double_field_94" field.</summary>
    public const int DoubleField94FieldNumber = 94;
    private double doubleField94_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField94 {
      get { return doubleField94_; }
      set {
        doubleField94_ = value;
      }
    }

    /// <summary>Field number for the "double_field_54" field.</summary>
    public const int DoubleField54FieldNumber = 54;
    private double doubleField54_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField54 {
      get { return doubleField54_; }
      set {
        doubleField54_ = value;
      }
    }

    /// <summary>Field number for the "double_field_55" field.</summary>
    public const int DoubleField55FieldNumber = 55;
    private double doubleField55_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField55 {
      get { return doubleField55_; }
      set {
        doubleField55_ = value;
      }
    }

    /// <summary>Field number for the "double_field_56" field.</summary>
    public const int DoubleField56FieldNumber = 56;
    private double doubleField56_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField56 {
      get { return doubleField56_; }
      set {
        doubleField56_ = value;
      }
    }

    /// <summary>Field number for the "double_field_57" field.</summary>
    public const int DoubleField57FieldNumber = 57;
    private double doubleField57_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField57 {
      get { return doubleField57_; }
      set {
        doubleField57_ = value;
      }
    }

    /// <summary>Field number for the "double_field_58" field.</summary>
    public const int DoubleField58FieldNumber = 58;
    private double doubleField58_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double DoubleField58 {
      get { return doubleField58_; }
      set {
        doubleField58_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_59" field.</summary>
    public const int Int64Field59FieldNumber = 59;
    private long int64Field59_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field59 {
      get { return int64Field59_; }
      set {
        int64Field59_ = value;
      }
    }

    /// <summary>Field number for the "int64_field_60" field.</summary>
    public const int Int64Field60FieldNumber = 60;
    private long int64Field60_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public long Int64Field60 {
      get { return int64Field60_; }
      set {
        int64Field60_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ManyPrimitiveFieldsMessage);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ManyPrimitiveFieldsMessage other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField95, other.DoubleField95)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField1, other.DoubleField1)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField79, other.DoubleField79)) return false;
      if (Int64Field2 != other.Int64Field2) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField96, other.DoubleField96)) return false;
      if (Int64Field3 != other.Int64Field3) return false;
      if (Int64Field4 != other.Int64Field4) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField97, other.DoubleField97)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField65, other.DoubleField65)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField66, other.DoubleField66)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField7, other.DoubleField7)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField62, other.DoubleField62)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField118, other.DoubleField118)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField119, other.DoubleField119)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField67, other.DoubleField67)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField120, other.DoubleField120)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField121, other.DoubleField121)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField122, other.DoubleField122)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField123, other.DoubleField123)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField124, other.DoubleField124)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField8, other.DoubleField8)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField9, other.DoubleField9)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField98, other.DoubleField98)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField10, other.DoubleField10)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField11, other.DoubleField11)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField99, other.DoubleField99)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField84, other.DoubleField84)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField14, other.DoubleField14)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField77, other.DoubleField77)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField15, other.DoubleField15)) return false;
      if (Int64Field19 != other.Int64Field19) return false;
      if (Int64Field115 != other.Int64Field115) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField116, other.DoubleField116)) return false;
      if (Int64Field117 != other.Int64Field117) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField20, other.DoubleField20)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField21, other.DoubleField21)) return false;
      if (StringField73 != other.StringField73) return false;
      if (StringField74 != other.StringField74) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField22, other.DoubleField22)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField69, other.DoubleField69)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField70, other.DoubleField70)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField71, other.DoubleField71)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField72, other.DoubleField72)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField25, other.DoubleField25)) return false;
      if (Int64Field26 != other.Int64Field26) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField68, other.DoubleField68)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField28, other.DoubleField28)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField106, other.DoubleField106)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField29, other.DoubleField29)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField30, other.DoubleField30)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField101, other.DoubleField101)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField102, other.DoubleField102)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField103, other.DoubleField103)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField104, other.DoubleField104)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField105, other.DoubleField105)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField31, other.DoubleField31)) return false;
      if (Int64Field32 != other.Int64Field32) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField75, other.DoubleField75)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField129, other.DoubleField129)) return false;
      if (EnumField80 != other.EnumField80) return false;
      if (EnumField81 != other.EnumField81) return false;
      if (Int64Field82 != other.Int64Field82) return false;
      if (EnumField83 != other.EnumField83) return false;
      if (Int64Field85 != other.Int64Field85) return false;
      if (Int64Field86 != other.Int64Field86) return false;
      if (Int64Field87 != other.Int64Field87) return false;
      if (Int64Field125 != other.Int64Field125) return false;
      if (Int64Field37 != other.Int64Field37) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField38, other.DoubleField38)) return false;
      if (Interactions != other.Interactions) return false;
      if(!repeatedIntField100_.Equals(other.repeatedIntField100_)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField40, other.DoubleField40)) return false;
      if (Int64Field41 != other.Int64Field41) return false;
      if (Int64Field126 != other.Int64Field126) return false;
      if (Int64Field127 != other.Int64Field127) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField128, other.DoubleField128)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField109, other.DoubleField109)) return false;
      if (Int64Field110 != other.Int64Field110) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField111, other.DoubleField111)) return false;
      if (Int64Field112 != other.Int64Field112) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField113, other.DoubleField113)) return false;
      if (Int64Field114 != other.Int64Field114) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField42, other.DoubleField42)) return false;
      if (Int64Field43 != other.Int64Field43) return false;
      if (Int64Field44 != other.Int64Field44) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField45, other.DoubleField45)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField46, other.DoubleField46)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField78, other.DoubleField78)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField88, other.DoubleField88)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField47, other.DoubleField47)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField89, other.DoubleField89)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField48, other.DoubleField48)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField49, other.DoubleField49)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField50, other.DoubleField50)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField90, other.DoubleField90)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField51, other.DoubleField51)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField91, other.DoubleField91)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField92, other.DoubleField92)) return false;
      if (Int64Field107 != other.Int64Field107) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField93, other.DoubleField93)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField108, other.DoubleField108)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField52, other.DoubleField52)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField53, other.DoubleField53)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField94, other.DoubleField94)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField54, other.DoubleField54)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField55, other.DoubleField55)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField56, other.DoubleField56)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField57, other.DoubleField57)) return false;
      if (!pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.Equals(DoubleField58, other.DoubleField58)) return false;
      if (Int64Field59 != other.Int64Field59) return false;
      if (Int64Field60 != other.Int64Field60) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (DoubleField95 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField95);
      if (DoubleField1 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField1);
      if (DoubleField79 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField79);
      if (Int64Field2 != 0L) hash ^= Int64Field2.GetHashCode();
      if (DoubleField96 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField96);
      if (Int64Field3 != 0L) hash ^= Int64Field3.GetHashCode();
      if (Int64Field4 != 0L) hash ^= Int64Field4.GetHashCode();
      if (DoubleField97 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField97);
      if (DoubleField65 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField65);
      if (DoubleField66 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField66);
      if (DoubleField7 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField7);
      if (DoubleField62 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField62);
      if (DoubleField118 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField118);
      if (DoubleField119 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField119);
      if (DoubleField67 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField67);
      if (DoubleField120 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField120);
      if (DoubleField121 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField121);
      if (DoubleField122 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField122);
      if (DoubleField123 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField123);
      if (DoubleField124 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField124);
      if (DoubleField8 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField8);
      if (DoubleField9 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField9);
      if (DoubleField98 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField98);
      if (DoubleField10 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField10);
      if (DoubleField11 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField11);
      if (DoubleField99 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField99);
      if (DoubleField84 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField84);
      if (DoubleField14 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField14);
      if (DoubleField77 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField77);
      if (DoubleField15 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField15);
      if (Int64Field19 != 0L) hash ^= Int64Field19.GetHashCode();
      if (Int64Field115 != 0L) hash ^= Int64Field115.GetHashCode();
      if (DoubleField116 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField116);
      if (Int64Field117 != 0L) hash ^= Int64Field117.GetHashCode();
      if (DoubleField20 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField20);
      if (DoubleField21 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField21);
      if (StringField73.Length != 0) hash ^= StringField73.GetHashCode();
      if (StringField74.Length != 0) hash ^= StringField74.GetHashCode();
      if (DoubleField22 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField22);
      if (DoubleField69 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField69);
      if (DoubleField70 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField70);
      if (DoubleField71 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField71);
      if (DoubleField72 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField72);
      if (DoubleField25 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField25);
      if (Int64Field26 != 0L) hash ^= Int64Field26.GetHashCode();
      if (DoubleField68 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField68);
      if (DoubleField28 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField28);
      if (DoubleField106 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField106);
      if (DoubleField29 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField29);
      if (DoubleField30 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField30);
      if (DoubleField101 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField101);
      if (DoubleField102 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField102);
      if (DoubleField103 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField103);
      if (DoubleField104 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField104);
      if (DoubleField105 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField105);
      if (DoubleField31 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField31);
      if (Int64Field32 != 0L) hash ^= Int64Field32.GetHashCode();
      if (DoubleField75 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField75);
      if (DoubleField129 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField129);
      if (EnumField80 != 0) hash ^= EnumField80.GetHashCode();
      if (EnumField81 != 0) hash ^= EnumField81.GetHashCode();
      if (Int64Field82 != 0L) hash ^= Int64Field82.GetHashCode();
      if (EnumField83 != 0) hash ^= EnumField83.GetHashCode();
      if (Int64Field85 != 0L) hash ^= Int64Field85.GetHashCode();
      if (Int64Field86 != 0L) hash ^= Int64Field86.GetHashCode();
      if (Int64Field87 != 0L) hash ^= Int64Field87.GetHashCode();
      if (Int64Field125 != 0L) hash ^= Int64Field125.GetHashCode();
      if (Int64Field37 != 0L) hash ^= Int64Field37.GetHashCode();
      if (DoubleField38 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField38);
      if (Interactions != 0L) hash ^= Interactions.GetHashCode();
      hash ^= repeatedIntField100_.GetHashCode();
      if (DoubleField40 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField40);
      if (Int64Field41 != 0L) hash ^= Int64Field41.GetHashCode();
      if (Int64Field126 != 0L) hash ^= Int64Field126.GetHashCode();
      if (Int64Field127 != 0L) hash ^= Int64Field127.GetHashCode();
      if (DoubleField128 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField128);
      if (DoubleField109 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField109);
      if (Int64Field110 != 0L) hash ^= Int64Field110.GetHashCode();
      if (DoubleField111 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField111);
      if (Int64Field112 != 0L) hash ^= Int64Field112.GetHashCode();
      if (DoubleField113 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField113);
      if (Int64Field114 != 0L) hash ^= Int64Field114.GetHashCode();
      if (DoubleField42 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField42);
      if (Int64Field43 != 0L) hash ^= Int64Field43.GetHashCode();
      if (Int64Field44 != 0L) hash ^= Int64Field44.GetHashCode();
      if (DoubleField45 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField45);
      if (DoubleField46 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField46);
      if (DoubleField78 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField78);
      if (DoubleField88 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField88);
      if (DoubleField47 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField47);
      if (DoubleField89 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField89);
      if (DoubleField48 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField48);
      if (DoubleField49 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField49);
      if (DoubleField50 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField50);
      if (DoubleField90 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField90);
      if (DoubleField51 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField51);
      if (DoubleField91 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField91);
      if (DoubleField92 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField92);
      if (Int64Field107 != 0L) hash ^= Int64Field107.GetHashCode();
      if (DoubleField93 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField93);
      if (DoubleField108 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField108);
      if (DoubleField52 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField52);
      if (DoubleField53 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField53);
      if (DoubleField94 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField94);
      if (DoubleField54 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField54);
      if (DoubleField55 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField55);
      if (DoubleField56 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField56);
      if (DoubleField57 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField57);
      if (DoubleField58 != 0D) hash ^= pbc::ProtobufEqualityComparers.BitwiseDoubleEqualityComparer.GetHashCode(DoubleField58);
      if (Int64Field59 != 0L) hash ^= Int64Field59.GetHashCode();
      if (Int64Field60 != 0L) hash ^= Int64Field60.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (DoubleField1 != 0D) {
        output.WriteRawTag(9);
        output.WriteDouble(DoubleField1);
      }
      if (Int64Field2 != 0L) {
        output.WriteRawTag(16);
        output.WriteInt64(Int64Field2);
      }
      if (Int64Field3 != 0L) {
        output.WriteRawTag(24);
        output.WriteInt64(Int64Field3);
      }
      if (Int64Field4 != 0L) {
        output.WriteRawTag(32);
        output.WriteInt64(Int64Field4);
      }
      if (DoubleField7 != 0D) {
        output.WriteRawTag(57);
        output.WriteDouble(DoubleField7);
      }
      if (DoubleField8 != 0D) {
        output.WriteRawTag(65);
        output.WriteDouble(DoubleField8);
      }
      if (DoubleField9 != 0D) {
        output.WriteRawTag(73);
        output.WriteDouble(DoubleField9);
      }
      if (DoubleField10 != 0D) {
        output.WriteRawTag(81);
        output.WriteDouble(DoubleField10);
      }
      if (DoubleField11 != 0D) {
        output.WriteRawTag(89);
        output.WriteDouble(DoubleField11);
      }
      if (DoubleField14 != 0D) {
        output.WriteRawTag(113);
        output.WriteDouble(DoubleField14);
      }
      if (DoubleField15 != 0D) {
        output.WriteRawTag(121);
        output.WriteDouble(DoubleField15);
      }
      if (Int64Field19 != 0L) {
        output.WriteRawTag(152, 1);
        output.WriteInt64(Int64Field19);
      }
      if (DoubleField20 != 0D) {
        output.WriteRawTag(161, 1);
        output.WriteDouble(DoubleField20);
      }
      if (DoubleField21 != 0D) {
        output.WriteRawTag(169, 1);
        output.WriteDouble(DoubleField21);
      }
      if (DoubleField22 != 0D) {
        output.WriteRawTag(177, 1);
        output.WriteDouble(DoubleField22);
      }
      if (DoubleField25 != 0D) {
        output.WriteRawTag(201, 1);
        output.WriteDouble(DoubleField25);
      }
      if (Int64Field26 != 0L) {
        output.WriteRawTag(208, 1);
        output.WriteInt64(Int64Field26);
      }
      if (DoubleField28 != 0D) {
        output.WriteRawTag(225, 1);
        output.WriteDouble(DoubleField28);
      }
      if (DoubleField29 != 0D) {
        output.WriteRawTag(233, 1);
        output.WriteDouble(DoubleField29);
      }
      if (DoubleField30 != 0D) {
        output.WriteRawTag(241, 1);
        output.WriteDouble(DoubleField30);
      }
      if (DoubleField31 != 0D) {
        output.WriteRawTag(249, 1);
        output.WriteDouble(DoubleField31);
      }
      if (Int64Field32 != 0L) {
        output.WriteRawTag(128, 2);
        output.WriteInt64(Int64Field32);
      }
      if (Int64Field37 != 0L) {
        output.WriteRawTag(168, 2);
        output.WriteInt64(Int64Field37);
      }
      if (DoubleField38 != 0D) {
        output.WriteRawTag(177, 2);
        output.WriteDouble(DoubleField38);
      }
      if (Interactions != 0L) {
        output.WriteRawTag(184, 2);
        output.WriteInt64(Interactions);
      }
      if (DoubleField40 != 0D) {
        output.WriteRawTag(193, 2);
        output.WriteDouble(DoubleField40);
      }
      if (Int64Field41 != 0L) {
        output.WriteRawTag(200, 2);
        output.WriteInt64(Int64Field41);
      }
      if (DoubleField42 != 0D) {
        output.WriteRawTag(209, 2);
        output.WriteDouble(DoubleField42);
      }
      if (Int64Field43 != 0L) {
        output.WriteRawTag(216, 2);
        output.WriteInt64(Int64Field43);
      }
      if (Int64Field44 != 0L) {
        output.WriteRawTag(224, 2);
        output.WriteInt64(Int64Field44);
      }
      if (DoubleField45 != 0D) {
        output.WriteRawTag(233, 2);
        output.WriteDouble(DoubleField45);
      }
      if (DoubleField46 != 0D) {
        output.WriteRawTag(241, 2);
        output.WriteDouble(DoubleField46);
      }
      if (DoubleField47 != 0D) {
        output.WriteRawTag(249, 2);
        output.WriteDouble(DoubleField47);
      }
      if (DoubleField48 != 0D) {
        output.WriteRawTag(129, 3);
        output.WriteDouble(DoubleField48);
      }
      if (DoubleField49 != 0D) {
        output.WriteRawTag(137, 3);
        output.WriteDouble(DoubleField49);
      }
      if (DoubleField50 != 0D) {
        output.WriteRawTag(145, 3);
        output.WriteDouble(DoubleField50);
      }
      if (DoubleField51 != 0D) {
        output.WriteRawTag(153, 3);
        output.WriteDouble(DoubleField51);
      }
      if (DoubleField52 != 0D) {
        output.WriteRawTag(161, 3);
        output.WriteDouble(DoubleField52);
      }
      if (DoubleField53 != 0D) {
        output.WriteRawTag(169, 3);
        output.WriteDouble(DoubleField53);
      }
      if (DoubleField54 != 0D) {
        output.WriteRawTag(177, 3);
        output.WriteDouble(DoubleField54);
      }
      if (DoubleField55 != 0D) {
        output.WriteRawTag(185, 3);
        output.WriteDouble(DoubleField55);
      }
      if (DoubleField56 != 0D) {
        output.WriteRawTag(193, 3);
        output.WriteDouble(DoubleField56);
      }
      if (DoubleField57 != 0D) {
        output.WriteRawTag(201, 3);
        output.WriteDouble(DoubleField57);
      }
      if (DoubleField58 != 0D) {
        output.WriteRawTag(209, 3);
        output.WriteDouble(DoubleField58);
      }
      if (Int64Field59 != 0L) {
        output.WriteRawTag(216, 3);
        output.WriteInt64(Int64Field59);
      }
      if (Int64Field60 != 0L) {
        output.WriteRawTag(224, 3);
        output.WriteInt64(Int64Field60);
      }
      if (DoubleField62 != 0D) {
        output.WriteRawTag(241, 3);
        output.WriteDouble(DoubleField62);
      }
      if (DoubleField65 != 0D) {
        output.WriteRawTag(137, 4);
        output.WriteDouble(DoubleField65);
      }
      if (DoubleField66 != 0D) {
        output.WriteRawTag(145, 4);
        output.WriteDouble(DoubleField66);
      }
      if (DoubleField67 != 0D) {
        output.WriteRawTag(153, 4);
        output.WriteDouble(DoubleField67);
      }
      if (DoubleField68 != 0D) {
        output.WriteRawTag(161, 4);
        output.WriteDouble(DoubleField68);
      }
      if (DoubleField69 != 0D) {
        output.WriteRawTag(169, 4);
        output.WriteDouble(DoubleField69);
      }
      if (DoubleField70 != 0D) {
        output.WriteRawTag(177, 4);
        output.WriteDouble(DoubleField70);
      }
      if (DoubleField71 != 0D) {
        output.WriteRawTag(185, 4);
        output.WriteDouble(DoubleField71);
      }
      if (DoubleField72 != 0D) {
        output.WriteRawTag(193, 4);
        output.WriteDouble(DoubleField72);
      }
      if (StringField73.Length != 0) {
        output.WriteRawTag(202, 4);
        output.WriteString(StringField73);
      }
      if (StringField74.Length != 0) {
        output.WriteRawTag(210, 4);
        output.WriteString(StringField74);
      }
      if (DoubleField75 != 0D) {
        output.WriteRawTag(217, 4);
        output.WriteDouble(DoubleField75);
      }
      if (DoubleField77 != 0D) {
        output.WriteRawTag(233, 4);
        output.WriteDouble(DoubleField77);
      }
      if (DoubleField78 != 0D) {
        output.WriteRawTag(241, 4);
        output.WriteDouble(DoubleField78);
      }
      if (DoubleField79 != 0D) {
        output.WriteRawTag(249, 4);
        output.WriteDouble(DoubleField79);
      }
      if (EnumField80 != 0) {
        output.WriteRawTag(128, 5);
        output.WriteInt32(EnumField80);
      }
      if (EnumField81 != 0) {
        output.WriteRawTag(136, 5);
        output.WriteInt32(EnumField81);
      }
      if (Int64Field82 != 0L) {
        output.WriteRawTag(144, 5);
        output.WriteInt64(Int64Field82);
      }
      if (EnumField83 != 0) {
        output.WriteRawTag(152, 5);
        output.WriteInt32(EnumField83);
      }
      if (DoubleField84 != 0D) {
        output.WriteRawTag(161, 5);
        output.WriteDouble(DoubleField84);
      }
      if (Int64Field85 != 0L) {
        output.WriteRawTag(168, 5);
        output.WriteInt64(Int64Field85);
      }
      if (Int64Field86 != 0L) {
        output.WriteRawTag(176, 5);
        output.WriteInt64(Int64Field86);
      }
      if (Int64Field87 != 0L) {
        output.WriteRawTag(184, 5);
        output.WriteInt64(Int64Field87);
      }
      if (DoubleField88 != 0D) {
        output.WriteRawTag(193, 5);
        output.WriteDouble(DoubleField88);
      }
      if (DoubleField89 != 0D) {
        output.WriteRawTag(201, 5);
        output.WriteDouble(DoubleField89);
      }
      if (DoubleField90 != 0D) {
        output.WriteRawTag(209, 5);
        output.WriteDouble(DoubleField90);
      }
      if (DoubleField91 != 0D) {
        output.WriteRawTag(217, 5);
        output.WriteDouble(DoubleField91);
      }
      if (DoubleField92 != 0D) {
        output.WriteRawTag(225, 5);
        output.WriteDouble(DoubleField92);
      }
      if (DoubleField93 != 0D) {
        output.WriteRawTag(233, 5);
        output.WriteDouble(DoubleField93);
      }
      if (DoubleField94 != 0D) {
        output.WriteRawTag(241, 5);
        output.WriteDouble(DoubleField94);
      }
      if (DoubleField95 != 0D) {
        output.WriteRawTag(249, 5);
        output.WriteDouble(DoubleField95);
      }
      if (DoubleField96 != 0D) {
        output.WriteRawTag(129, 6);
        output.WriteDouble(DoubleField96);
      }
      if (DoubleField97 != 0D) {
        output.WriteRawTag(137, 6);
        output.WriteDouble(DoubleField97);
      }
      if (DoubleField98 != 0D) {
        output.WriteRawTag(145, 6);
        output.WriteDouble(DoubleField98);
      }
      if (DoubleField99 != 0D) {
        output.WriteRawTag(153, 6);
        output.WriteDouble(DoubleField99);
      }
      repeatedIntField100_.WriteTo(output, _repeated_repeatedIntField100_codec);
      if (DoubleField101 != 0D) {
        output.WriteRawTag(169, 6);
        output.WriteDouble(DoubleField101);
      }
      if (DoubleField102 != 0D) {
        output.WriteRawTag(177, 6);
        output.WriteDouble(DoubleField102);
      }
      if (DoubleField103 != 0D) {
        output.WriteRawTag(185, 6);
        output.WriteDouble(DoubleField103);
      }
      if (DoubleField104 != 0D) {
        output.WriteRawTag(193, 6);
        output.WriteDouble(DoubleField104);
      }
      if (DoubleField105 != 0D) {
        output.WriteRawTag(201, 6);
        output.WriteDouble(DoubleField105);
      }
      if (DoubleField106 != 0D) {
        output.WriteRawTag(209, 6);
        output.WriteDouble(DoubleField106);
      }
      if (Int64Field107 != 0L) {
        output.WriteRawTag(216, 6);
        output.WriteInt64(Int64Field107);
      }
      if (DoubleField108 != 0D) {
        output.WriteRawTag(225, 6);
        output.WriteDouble(DoubleField108);
      }
      if (DoubleField109 != 0D) {
        output.WriteRawTag(233, 6);
        output.WriteDouble(DoubleField109);
      }
      if (Int64Field110 != 0L) {
        output.WriteRawTag(240, 6);
        output.WriteInt64(Int64Field110);
      }
      if (DoubleField111 != 0D) {
        output.WriteRawTag(249, 6);
        output.WriteDouble(DoubleField111);
      }
      if (Int64Field112 != 0L) {
        output.WriteRawTag(128, 7);
        output.WriteInt64(Int64Field112);
      }
      if (DoubleField113 != 0D) {
        output.WriteRawTag(137, 7);
        output.WriteDouble(DoubleField113);
      }
      if (Int64Field114 != 0L) {
        output.WriteRawTag(144, 7);
        output.WriteInt64(Int64Field114);
      }
      if (Int64Field115 != 0L) {
        output.WriteRawTag(152, 7);
        output.WriteInt64(Int64Field115);
      }
      if (DoubleField116 != 0D) {
        output.WriteRawTag(161, 7);
        output.WriteDouble(DoubleField116);
      }
      if (Int64Field117 != 0L) {
        output.WriteRawTag(168, 7);
        output.WriteInt64(Int64Field117);
      }
      if (DoubleField118 != 0D) {
        output.WriteRawTag(177, 7);
        output.WriteDouble(DoubleField118);
      }
      if (DoubleField119 != 0D) {
        output.WriteRawTag(185, 7);
        output.WriteDouble(DoubleField119);
      }
      if (DoubleField120 != 0D) {
        output.WriteRawTag(193, 7);
        output.WriteDouble(DoubleField120);
      }
      if (DoubleField121 != 0D) {
        output.WriteRawTag(201, 7);
        output.WriteDouble(DoubleField121);
      }
      if (DoubleField122 != 0D) {
        output.WriteRawTag(209, 7);
        output.WriteDouble(DoubleField122);
      }
      if (DoubleField123 != 0D) {
        output.WriteRawTag(217, 7);
        output.WriteDouble(DoubleField123);
      }
      if (DoubleField124 != 0D) {
        output.WriteRawTag(225, 7);
        output.WriteDouble(DoubleField124);
      }
      if (Int64Field125 != 0L) {
        output.WriteRawTag(232, 7);
        output.WriteInt64(Int64Field125);
      }
      if (Int64Field126 != 0L) {
        output.WriteRawTag(240, 7);
        output.WriteInt64(Int64Field126);
      }
      if (Int64Field127 != 0L) {
        output.WriteRawTag(248, 7);
        output.WriteInt64(Int64Field127);
      }
      if (DoubleField128 != 0D) {
        output.WriteRawTag(129, 8);
        output.WriteDouble(DoubleField128);
      }
      if (DoubleField129 != 0D) {
        output.WriteRawTag(137, 8);
        output.WriteDouble(DoubleField129);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (DoubleField95 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField1 != 0D) {
        size += 1 + 8;
      }
      if (DoubleField79 != 0D) {
        size += 2 + 8;
      }
      if (Int64Field2 != 0L) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(Int64Field2);
      }
      if (DoubleField96 != 0D) {
        size += 2 + 8;
      }
      if (Int64Field3 != 0L) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(Int64Field3);
      }
      if (Int64Field4 != 0L) {
        size += 1 + pb::CodedOutputStream.ComputeInt64Size(Int64Field4);
      }
      if (DoubleField97 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField65 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField66 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField7 != 0D) {
        size += 1 + 8;
      }
      if (DoubleField62 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField118 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField119 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField67 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField120 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField121 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField122 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField123 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField124 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField8 != 0D) {
        size += 1 + 8;
      }
      if (DoubleField9 != 0D) {
        size += 1 + 8;
      }
      if (DoubleField98 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField10 != 0D) {
        size += 1 + 8;
      }
      if (DoubleField11 != 0D) {
        size += 1 + 8;
      }
      if (DoubleField99 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField84 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField14 != 0D) {
        size += 1 + 8;
      }
      if (DoubleField77 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField15 != 0D) {
        size += 1 + 8;
      }
      if (Int64Field19 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field19);
      }
      if (Int64Field115 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field115);
      }
      if (DoubleField116 != 0D) {
        size += 2 + 8;
      }
      if (Int64Field117 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field117);
      }
      if (DoubleField20 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField21 != 0D) {
        size += 2 + 8;
      }
      if (StringField73.Length != 0) {
        size += 2 + pb::CodedOutputStream.ComputeStringSize(StringField73);
      }
      if (StringField74.Length != 0) {
        size += 2 + pb::CodedOutputStream.ComputeStringSize(StringField74);
      }
      if (DoubleField22 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField69 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField70 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField71 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField72 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField25 != 0D) {
        size += 2 + 8;
      }
      if (Int64Field26 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field26);
      }
      if (DoubleField68 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField28 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField106 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField29 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField30 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField101 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField102 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField103 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField104 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField105 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField31 != 0D) {
        size += 2 + 8;
      }
      if (Int64Field32 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field32);
      }
      if (DoubleField75 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField129 != 0D) {
        size += 2 + 8;
      }
      if (EnumField80 != 0) {
        size += 2 + pb::CodedOutputStream.ComputeInt32Size(EnumField80);
      }
      if (EnumField81 != 0) {
        size += 2 + pb::CodedOutputStream.ComputeInt32Size(EnumField81);
      }
      if (Int64Field82 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field82);
      }
      if (EnumField83 != 0) {
        size += 2 + pb::CodedOutputStream.ComputeInt32Size(EnumField83);
      }
      if (Int64Field85 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field85);
      }
      if (Int64Field86 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field86);
      }
      if (Int64Field87 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field87);
      }
      if (Int64Field125 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field125);
      }
      if (Int64Field37 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field37);
      }
      if (DoubleField38 != 0D) {
        size += 2 + 8;
      }
      if (Interactions != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Interactions);
      }
      size += repeatedIntField100_.CalculateSize(_repeated_repeatedIntField100_codec);
      if (DoubleField40 != 0D) {
        size += 2 + 8;
      }
      if (Int64Field41 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field41);
      }
      if (Int64Field126 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field126);
      }
      if (Int64Field127 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field127);
      }
      if (DoubleField128 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField109 != 0D) {
        size += 2 + 8;
      }
      if (Int64Field110 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field110);
      }
      if (DoubleField111 != 0D) {
        size += 2 + 8;
      }
      if (Int64Field112 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field112);
      }
      if (DoubleField113 != 0D) {
        size += 2 + 8;
      }
      if (Int64Field114 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field114);
      }
      if (DoubleField42 != 0D) {
        size += 2 + 8;
      }
      if (Int64Field43 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field43);
      }
      if (Int64Field44 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field44);
      }
      if (DoubleField45 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField46 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField78 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField88 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField47 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField89 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField48 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField49 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField50 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField90 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField51 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField91 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField92 != 0D) {
        size += 2 + 8;
      }
      if (Int64Field107 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field107);
      }
      if (DoubleField93 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField108 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField52 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField53 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField94 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField54 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField55 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField56 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField57 != 0D) {
        size += 2 + 8;
      }
      if (DoubleField58 != 0D) {
        size += 2 + 8;
      }
      if (Int64Field59 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field59);
      }
      if (Int64Field60 != 0L) {
        size += 2 + pb::CodedOutputStream.ComputeInt64Size(Int64Field60);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ManyPrimitiveFieldsMessage other) {
      if (other == null) {
        return;
      }
      if (other.DoubleField95 != 0D) {
        DoubleField95 = other.DoubleField95;
      }
      if (other.DoubleField1 != 0D) {
        DoubleField1 = other.DoubleField1;
      }
      if (other.DoubleField79 != 0D) {
        DoubleField79 = other.DoubleField79;
      }
      if (other.Int64Field2 != 0L) {
        Int64Field2 = other.Int64Field2;
      }
      if (other.DoubleField96 != 0D) {
        DoubleField96 = other.DoubleField96;
      }
      if (other.Int64Field3 != 0L) {
        Int64Field3 = other.Int64Field3;
      }
      if (other.Int64Field4 != 0L) {
        Int64Field4 = other.Int64Field4;
      }
      if (other.DoubleField97 != 0D) {
        DoubleField97 = other.DoubleField97;
      }
      if (other.DoubleField65 != 0D) {
        DoubleField65 = other.DoubleField65;
      }
      if (other.DoubleField66 != 0D) {
        DoubleField66 = other.DoubleField66;
      }
      if (other.DoubleField7 != 0D) {
        DoubleField7 = other.DoubleField7;
      }
      if (other.DoubleField62 != 0D) {
        DoubleField62 = other.DoubleField62;
      }
      if (other.DoubleField118 != 0D) {
        DoubleField118 = other.DoubleField118;
      }
      if (other.DoubleField119 != 0D) {
        DoubleField119 = other.DoubleField119;
      }
      if (other.DoubleField67 != 0D) {
        DoubleField67 = other.DoubleField67;
      }
      if (other.DoubleField120 != 0D) {
        DoubleField120 = other.DoubleField120;
      }
      if (other.DoubleField121 != 0D) {
        DoubleField121 = other.DoubleField121;
      }
      if (other.DoubleField122 != 0D) {
        DoubleField122 = other.DoubleField122;
      }
      if (other.DoubleField123 != 0D) {
        DoubleField123 = other.DoubleField123;
      }
      if (other.DoubleField124 != 0D) {
        DoubleField124 = other.DoubleField124;
      }
      if (other.DoubleField8 != 0D) {
        DoubleField8 = other.DoubleField8;
      }
      if (other.DoubleField9 != 0D) {
        DoubleField9 = other.DoubleField9;
      }
      if (other.DoubleField98 != 0D) {
        DoubleField98 = other.DoubleField98;
      }
      if (other.DoubleField10 != 0D) {
        DoubleField10 = other.DoubleField10;
      }
      if (other.DoubleField11 != 0D) {
        DoubleField11 = other.DoubleField11;
      }
      if (other.DoubleField99 != 0D) {
        DoubleField99 = other.DoubleField99;
      }
      if (other.DoubleField84 != 0D) {
        DoubleField84 = other.DoubleField84;
      }
      if (other.DoubleField14 != 0D) {
        DoubleField14 = other.DoubleField14;
      }
      if (other.DoubleField77 != 0D) {
        DoubleField77 = other.DoubleField77;
      }
      if (other.DoubleField15 != 0D) {
        DoubleField15 = other.DoubleField15;
      }
      if (other.Int64Field19 != 0L) {
        Int64Field19 = other.Int64Field19;
      }
      if (other.Int64Field115 != 0L) {
        Int64Field115 = other.Int64Field115;
      }
      if (other.DoubleField116 != 0D) {
        DoubleField116 = other.DoubleField116;
      }
      if (other.Int64Field117 != 0L) {
        Int64Field117 = other.Int64Field117;
      }
      if (other.DoubleField20 != 0D) {
        DoubleField20 = other.DoubleField20;
      }
      if (other.DoubleField21 != 0D) {
        DoubleField21 = other.DoubleField21;
      }
      if (other.StringField73.Length != 0) {
        StringField73 = other.StringField73;
      }
      if (other.StringField74.Length != 0) {
        StringField74 = other.StringField74;
      }
      if (other.DoubleField22 != 0D) {
        DoubleField22 = other.DoubleField22;
      }
      if (other.DoubleField69 != 0D) {
        DoubleField69 = other.DoubleField69;
      }
      if (other.DoubleField70 != 0D) {
        DoubleField70 = other.DoubleField70;
      }
      if (other.DoubleField71 != 0D) {
        DoubleField71 = other.DoubleField71;
      }
      if (other.DoubleField72 != 0D) {
        DoubleField72 = other.DoubleField72;
      }
      if (other.DoubleField25 != 0D) {
        DoubleField25 = other.DoubleField25;
      }
      if (other.Int64Field26 != 0L) {
        Int64Field26 = other.Int64Field26;
      }
      if (other.DoubleField68 != 0D) {
        DoubleField68 = other.DoubleField68;
      }
      if (other.DoubleField28 != 0D) {
        DoubleField28 = other.DoubleField28;
      }
      if (other.DoubleField106 != 0D) {
        DoubleField106 = other.DoubleField106;
      }
      if (other.DoubleField29 != 0D) {
        DoubleField29 = other.DoubleField29;
      }
      if (other.DoubleField30 != 0D) {
        DoubleField30 = other.DoubleField30;
      }
      if (other.DoubleField101 != 0D) {
        DoubleField101 = other.DoubleField101;
      }
      if (other.DoubleField102 != 0D) {
        DoubleField102 = other.DoubleField102;
      }
      if (other.DoubleField103 != 0D) {
        DoubleField103 = other.DoubleField103;
      }
      if (other.DoubleField104 != 0D) {
        DoubleField104 = other.DoubleField104;
      }
      if (other.DoubleField105 != 0D) {
        DoubleField105 = other.DoubleField105;
      }
      if (other.DoubleField31 != 0D) {
        DoubleField31 = other.DoubleField31;
      }
      if (other.Int64Field32 != 0L) {
        Int64Field32 = other.Int64Field32;
      }
      if (other.DoubleField75 != 0D) {
        DoubleField75 = other.DoubleField75;
      }
      if (other.DoubleField129 != 0D) {
        DoubleField129 = other.DoubleField129;
      }
      if (other.EnumField80 != 0) {
        EnumField80 = other.EnumField80;
      }
      if (other.EnumField81 != 0) {
        EnumField81 = other.EnumField81;
      }
      if (other.Int64Field82 != 0L) {
        Int64Field82 = other.Int64Field82;
      }
      if (other.EnumField83 != 0) {
        EnumField83 = other.EnumField83;
      }
      if (other.Int64Field85 != 0L) {
        Int64Field85 = other.Int64Field85;
      }
      if (other.Int64Field86 != 0L) {
        Int64Field86 = other.Int64Field86;
      }
      if (other.Int64Field87 != 0L) {
        Int64Field87 = other.Int64Field87;
      }
      if (other.Int64Field125 != 0L) {
        Int64Field125 = other.Int64Field125;
      }
      if (other.Int64Field37 != 0L) {
        Int64Field37 = other.Int64Field37;
      }
      if (other.DoubleField38 != 0D) {
        DoubleField38 = other.DoubleField38;
      }
      if (other.Interactions != 0L) {
        Interactions = other.Interactions;
      }
      repeatedIntField100_.Add(other.repeatedIntField100_);
      if (other.DoubleField40 != 0D) {
        DoubleField40 = other.DoubleField40;
      }
      if (other.Int64Field41 != 0L) {
        Int64Field41 = other.Int64Field41;
      }
      if (other.Int64Field126 != 0L) {
        Int64Field126 = other.Int64Field126;
      }
      if (other.Int64Field127 != 0L) {
        Int64Field127 = other.Int64Field127;
      }
      if (other.DoubleField128 != 0D) {
        DoubleField128 = other.DoubleField128;
      }
      if (other.DoubleField109 != 0D) {
        DoubleField109 = other.DoubleField109;
      }
      if (other.Int64Field110 != 0L) {
        Int64Field110 = other.Int64Field110;
      }
      if (other.DoubleField111 != 0D) {
        DoubleField111 = other.DoubleField111;
      }
      if (other.Int64Field112 != 0L) {
        Int64Field112 = other.Int64Field112;
      }
      if (other.DoubleField113 != 0D) {
        DoubleField113 = other.DoubleField113;
      }
      if (other.Int64Field114 != 0L) {
        Int64Field114 = other.Int64Field114;
      }
      if (other.DoubleField42 != 0D) {
        DoubleField42 = other.DoubleField42;
      }
      if (other.Int64Field43 != 0L) {
        Int64Field43 = other.Int64Field43;
      }
      if (other.Int64Field44 != 0L) {
        Int64Field44 = other.Int64Field44;
      }
      if (other.DoubleField45 != 0D) {
        DoubleField45 = other.DoubleField45;
      }
      if (other.DoubleField46 != 0D) {
        DoubleField46 = other.DoubleField46;
      }
      if (other.DoubleField78 != 0D) {
        DoubleField78 = other.DoubleField78;
      }
      if (other.DoubleField88 != 0D) {
        DoubleField88 = other.DoubleField88;
      }
      if (other.DoubleField47 != 0D) {
        DoubleField47 = other.DoubleField47;
      }
      if (other.DoubleField89 != 0D) {
        DoubleField89 = other.DoubleField89;
      }
      if (other.DoubleField48 != 0D) {
        DoubleField48 = other.DoubleField48;
      }
      if (other.DoubleField49 != 0D) {
        DoubleField49 = other.DoubleField49;
      }
      if (other.DoubleField50 != 0D) {
        DoubleField50 = other.DoubleField50;
      }
      if (other.DoubleField90 != 0D) {
        DoubleField90 = other.DoubleField90;
      }
      if (other.DoubleField51 != 0D) {
        DoubleField51 = other.DoubleField51;
      }
      if (other.DoubleField91 != 0D) {
        DoubleField91 = other.DoubleField91;
      }
      if (other.DoubleField92 != 0D) {
        DoubleField92 = other.DoubleField92;
      }
      if (other.Int64Field107 != 0L) {
        Int64Field107 = other.Int64Field107;
      }
      if (other.DoubleField93 != 0D) {
        DoubleField93 = other.DoubleField93;
      }
      if (other.DoubleField108 != 0D) {
        DoubleField108 = other.DoubleField108;
      }
      if (other.DoubleField52 != 0D) {
        DoubleField52 = other.DoubleField52;
      }
      if (other.DoubleField53 != 0D) {
        DoubleField53 = other.DoubleField53;
      }
      if (other.DoubleField94 != 0D) {
        DoubleField94 = other.DoubleField94;
      }
      if (other.DoubleField54 != 0D) {
        DoubleField54 = other.DoubleField54;
      }
      if (other.DoubleField55 != 0D) {
        DoubleField55 = other.DoubleField55;
      }
      if (other.DoubleField56 != 0D) {
        DoubleField56 = other.DoubleField56;
      }
      if (other.DoubleField57 != 0D) {
        DoubleField57 = other.DoubleField57;
      }
      if (other.DoubleField58 != 0D) {
        DoubleField58 = other.DoubleField58;
      }
      if (other.Int64Field59 != 0L) {
        Int64Field59 = other.Int64Field59;
      }
      if (other.Int64Field60 != 0L) {
        Int64Field60 = other.Int64Field60;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      input.ReadRawMessage(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 9: {
            DoubleField1 = input.ReadDouble();
            break;
          }
          case 16: {
            Int64Field2 = input.ReadInt64();
            break;
          }
          case 24: {
            Int64Field3 = input.ReadInt64();
            break;
          }
          case 32: {
            Int64Field4 = input.ReadInt64();
            break;
          }
          case 57: {
            DoubleField7 = input.ReadDouble();
            break;
          }
          case 65: {
            DoubleField8 = input.ReadDouble();
            break;
          }
          case 73: {
            DoubleField9 = input.ReadDouble();
            break;
          }
          case 81: {
            DoubleField10 = input.ReadDouble();
            break;
          }
          case 89: {
            DoubleField11 = input.ReadDouble();
            break;
          }
          case 113: {
            DoubleField14 = input.ReadDouble();
            break;
          }
          case 121: {
            DoubleField15 = input.ReadDouble();
            break;
          }
          case 152: {
            Int64Field19 = input.ReadInt64();
            break;
          }
          case 161: {
            DoubleField20 = input.ReadDouble();
            break;
          }
          case 169: {
            DoubleField21 = input.ReadDouble();
            break;
          }
          case 177: {
            DoubleField22 = input.ReadDouble();
            break;
          }
          case 201: {
            DoubleField25 = input.ReadDouble();
            break;
          }
          case 208: {
            Int64Field26 = input.ReadInt64();
            break;
          }
          case 225: {
            DoubleField28 = input.ReadDouble();
            break;
          }
          case 233: {
            DoubleField29 = input.ReadDouble();
            break;
          }
          case 241: {
            DoubleField30 = input.ReadDouble();
            break;
          }
          case 249: {
            DoubleField31 = input.ReadDouble();
            break;
          }
          case 256: {
            Int64Field32 = input.ReadInt64();
            break;
          }
          case 296: {
            Int64Field37 = input.ReadInt64();
            break;
          }
          case 305: {
            DoubleField38 = input.ReadDouble();
            break;
          }
          case 312: {
            Interactions = input.ReadInt64();
            break;
          }
          case 321: {
            DoubleField40 = input.ReadDouble();
            break;
          }
          case 328: {
            Int64Field41 = input.ReadInt64();
            break;
          }
          case 337: {
            DoubleField42 = input.ReadDouble();
            break;
          }
          case 344: {
            Int64Field43 = input.ReadInt64();
            break;
          }
          case 352: {
            Int64Field44 = input.ReadInt64();
            break;
          }
          case 361: {
            DoubleField45 = input.ReadDouble();
            break;
          }
          case 369: {
            DoubleField46 = input.ReadDouble();
            break;
          }
          case 377: {
            DoubleField47 = input.ReadDouble();
            break;
          }
          case 385: {
            DoubleField48 = input.ReadDouble();
            break;
          }
          case 393: {
            DoubleField49 = input.ReadDouble();
            break;
          }
          case 401: {
            DoubleField50 = input.ReadDouble();
            break;
          }
          case 409: {
            DoubleField51 = input.ReadDouble();
            break;
          }
          case 417: {
            DoubleField52 = input.ReadDouble();
            break;
          }
          case 425: {
            DoubleField53 = input.ReadDouble();
            break;
          }
          case 433: {
            DoubleField54 = input.ReadDouble();
            break;
          }
          case 441: {
            DoubleField55 = input.ReadDouble();
            break;
          }
          case 449: {
            DoubleField56 = input.ReadDouble();
            break;
          }
          case 457: {
            DoubleField57 = input.ReadDouble();
            break;
          }
          case 465: {
            DoubleField58 = input.ReadDouble();
            break;
          }
          case 472: {
            Int64Field59 = input.ReadInt64();
            break;
          }
          case 480: {
            Int64Field60 = input.ReadInt64();
            break;
          }
          case 497: {
            DoubleField62 = input.ReadDouble();
            break;
          }
          case 521: {
            DoubleField65 = input.ReadDouble();
            break;
          }
          case 529: {
            DoubleField66 = input.ReadDouble();
            break;
          }
          case 537: {
            DoubleField67 = input.ReadDouble();
            break;
          }
          case 545: {
            DoubleField68 = input.ReadDouble();
            break;
          }
          case 553: {
            DoubleField69 = input.ReadDouble();
            break;
          }
          case 561: {
            DoubleField70 = input.ReadDouble();
            break;
          }
          case 569: {
            DoubleField71 = input.ReadDouble();
            break;
          }
          case 577: {
            DoubleField72 = input.ReadDouble();
            break;
          }
          case 586: {
            StringField73 = input.ReadString();
            break;
          }
          case 594: {
            StringField74 = input.ReadString();
            break;
          }
          case 601: {
            DoubleField75 = input.ReadDouble();
            break;
          }
          case 617: {
            DoubleField77 = input.ReadDouble();
            break;
          }
          case 625: {
            DoubleField78 = input.ReadDouble();
            break;
          }
          case 633: {
            DoubleField79 = input.ReadDouble();
            break;
          }
          case 640: {
            EnumField80 = input.ReadInt32();
            break;
          }
          case 648: {
            EnumField81 = input.ReadInt32();
            break;
          }
          case 656: {
            Int64Field82 = input.ReadInt64();
            break;
          }
          case 664: {
            EnumField83 = input.ReadInt32();
            break;
          }
          case 673: {
            DoubleField84 = input.ReadDouble();
            break;
          }
          case 680: {
            Int64Field85 = input.ReadInt64();
            break;
          }
          case 688: {
            Int64Field86 = input.ReadInt64();
            break;
          }
          case 696: {
            Int64Field87 = input.ReadInt64();
            break;
          }
          case 705: {
            DoubleField88 = input.ReadDouble();
            break;
          }
          case 713: {
            DoubleField89 = input.ReadDouble();
            break;
          }
          case 721: {
            DoubleField90 = input.ReadDouble();
            break;
          }
          case 729: {
            DoubleField91 = input.ReadDouble();
            break;
          }
          case 737: {
            DoubleField92 = input.ReadDouble();
            break;
          }
          case 745: {
            DoubleField93 = input.ReadDouble();
            break;
          }
          case 753: {
            DoubleField94 = input.ReadDouble();
            break;
          }
          case 761: {
            DoubleField95 = input.ReadDouble();
            break;
          }
          case 769: {
            DoubleField96 = input.ReadDouble();
            break;
          }
          case 777: {
            DoubleField97 = input.ReadDouble();
            break;
          }
          case 785: {
            DoubleField98 = input.ReadDouble();
            break;
          }
          case 793: {
            DoubleField99 = input.ReadDouble();
            break;
          }
          case 802:
          case 800: {
            repeatedIntField100_.AddEntriesFrom(ref input, _repeated_repeatedIntField100_codec);
            break;
          }
          case 809: {
            DoubleField101 = input.ReadDouble();
            break;
          }
          case 817: {
            DoubleField102 = input.ReadDouble();
            break;
          }
          case 825: {
            DoubleField103 = input.ReadDouble();
            break;
          }
          case 833: {
            DoubleField104 = input.ReadDouble();
            break;
          }
          case 841: {
            DoubleField105 = input.ReadDouble();
            break;
          }
          case 849: {
            DoubleField106 = input.ReadDouble();
            break;
          }
          case 856: {
            Int64Field107 = input.ReadInt64();
            break;
          }
          case 865: {
            DoubleField108 = input.ReadDouble();
            break;
          }
          case 873: {
            DoubleField109 = input.ReadDouble();
            break;
          }
          case 880: {
            Int64Field110 = input.ReadInt64();
            break;
          }
          case 889: {
            DoubleField111 = input.ReadDouble();
            break;
          }
          case 896: {
            Int64Field112 = input.ReadInt64();
            break;
          }
          case 905: {
            DoubleField113 = input.ReadDouble();
            break;
          }
          case 912: {
            Int64Field114 = input.ReadInt64();
            break;
          }
          case 920: {
            Int64Field115 = input.ReadInt64();
            break;
          }
          case 929: {
            DoubleField116 = input.ReadDouble();
            break;
          }
          case 936: {
            Int64Field117 = input.ReadInt64();
            break;
          }
          case 945: {
            DoubleField118 = input.ReadDouble();
            break;
          }
          case 953: {
            DoubleField119 = input.ReadDouble();
            break;
          }
          case 961: {
            DoubleField120 = input.ReadDouble();
            break;
          }
          case 969: {
            DoubleField121 = input.ReadDouble();
            break;
          }
          case 977: {
            DoubleField122 = input.ReadDouble();
            break;
          }
          case 985: {
            DoubleField123 = input.ReadDouble();
            break;
          }
          case 993: {
            DoubleField124 = input.ReadDouble();
            break;
          }
          case 1000: {
            Int64Field125 = input.ReadInt64();
            break;
          }
          case 1008: {
            Int64Field126 = input.ReadInt64();
            break;
          }
          case 1016: {
            Int64Field127 = input.ReadInt64();
            break;
          }
          case 1025: {
            DoubleField128 = input.ReadDouble();
            break;
          }
          case 1033: {
            DoubleField129 = input.ReadDouble();
            break;
          }
        }
      }
    }

  }

  #endregion

}

#endregion Designer generated code
