// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: tensorflow/contrib/tpu/profiler/tf_op_stats.proto

package tensorflow.tpu;

public final class TfOpStatsOuterClass {
  private TfOpStatsOuterClass() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * <pre>
   * The types of host operations that are tracked.
   * </pre>
   *
   * Protobuf enum {@code tensorflow.tpu.HostOp}
   */
  public enum HostOp
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <pre>
     * Invalid host op.
     * </pre>
     *
     * <code>kINVALIDHostOp = 0;</code>
     */
    kINVALIDHostOp(0),
    /**
     * <pre>
     * Each of host op type has two parts:
     * (1) the stage where the op happens and (2) the op name.
     * stage = Input Data Producer, op = Get Next Batch.
     * </pre>
     *
     * <code>kInputDataProducerGetNextBatch = 1;</code>
     */
    kInputDataProducerGetNextBatch(1),
    /**
     * <pre>
     * stage = Input Data Producer, op = Session Run.
     * </pre>
     *
     * <code>kInputDataProducerSessionRun = 2;</code>
     */
    kInputDataProducerSessionRun(2),
    /**
     * <pre>
     * stage = Input Data Producer, op = Forward Batch.
     * </pre>
     *
     * <code>kInputDataProducerForwardBatch = 3;</code>
     */
    kInputDataProducerForwardBatch(3),
    /**
     * <pre>
     * stage = Infeed Thread, op = Get Next Batch.
     * </pre>
     *
     * <code>kInfeedThreadGetNextBatch = 4;</code>
     */
    kInfeedThreadGetNextBatch(4),
    /**
     * <pre>
     * stage = Infeed Thread, op = Session Run.
     * </pre>
     *
     * <code>kInfeedThreadSessionRun = 5;</code>
     */
    kInfeedThreadSessionRun(5),
    /**
     * <pre>
     * stage = Infeed Thread, op = Forward Batch.
     * </pre>
     *
     * <code>kInfeedThreadForwardBatch = 6;</code>
     */
    kInfeedThreadForwardBatch(6),
    /**
     * <pre>
     * stage = Outfeed Thread, op = Get Next Batch.
     * </pre>
     *
     * <code>kOutfeedThreadGetNextBatch = 7;</code>
     */
    kOutfeedThreadGetNextBatch(7),
    /**
     * <pre>
     * stage = Outfeed Thread, op = Session Run.
     * </pre>
     *
     * <code>kOutfeedThreadSessionRun = 8;</code>
     */
    kOutfeedThreadSessionRun(8),
    /**
     * <pre>
     * stage = Outfeed Thread, op = Forward Batch.
     * </pre>
     *
     * <code>kOutfeedThreadForwardBatch = 9;</code>
     */
    kOutfeedThreadForwardBatch(9),
    ;

    /**
     * <pre>
     * Invalid host op.
     * </pre>
     *
     * <code>kINVALIDHostOp = 0;</code>
     */
    public static final int kINVALIDHostOp_VALUE = 0;
    /**
     * <pre>
     * Each of host op type has two parts:
     * (1) the stage where the op happens and (2) the op name.
     * stage = Input Data Producer, op = Get Next Batch.
     * </pre>
     *
     * <code>kInputDataProducerGetNextBatch = 1;</code>
     */
    public static final int kInputDataProducerGetNextBatch_VALUE = 1;
    /**
     * <pre>
     * stage = Input Data Producer, op = Session Run.
     * </pre>
     *
     * <code>kInputDataProducerSessionRun = 2;</code>
     */
    public static final int kInputDataProducerSessionRun_VALUE = 2;
    /**
     * <pre>
     * stage = Input Data Producer, op = Forward Batch.
     * </pre>
     *
     * <code>kInputDataProducerForwardBatch = 3;</code>
     */
    public static final int kInputDataProducerForwardBatch_VALUE = 3;
    /**
     * <pre>
     * stage = Infeed Thread, op = Get Next Batch.
     * </pre>
     *
     * <code>kInfeedThreadGetNextBatch = 4;</code>
     */
    public static final int kInfeedThreadGetNextBatch_VALUE = 4;
    /**
     * <pre>
     * stage = Infeed Thread, op = Session Run.
     * </pre>
     *
     * <code>kInfeedThreadSessionRun = 5;</code>
     */
    public static final int kInfeedThreadSessionRun_VALUE = 5;
    /**
     * <pre>
     * stage = Infeed Thread, op = Forward Batch.
     * </pre>
     *
     * <code>kInfeedThreadForwardBatch = 6;</code>
     */
    public static final int kInfeedThreadForwardBatch_VALUE = 6;
    /**
     * <pre>
     * stage = Outfeed Thread, op = Get Next Batch.
     * </pre>
     *
     * <code>kOutfeedThreadGetNextBatch = 7;</code>
     */
    public static final int kOutfeedThreadGetNextBatch_VALUE = 7;
    /**
     * <pre>
     * stage = Outfeed Thread, op = Session Run.
     * </pre>
     *
     * <code>kOutfeedThreadSessionRun = 8;</code>
     */
    public static final int kOutfeedThreadSessionRun_VALUE = 8;
    /**
     * <pre>
     * stage = Outfeed Thread, op = Forward Batch.
     * </pre>
     *
     * <code>kOutfeedThreadForwardBatch = 9;</code>
     */
    public static final int kOutfeedThreadForwardBatch_VALUE = 9;


    public final int getNumber() {
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static HostOp valueOf(int value) {
      return forNumber(value);
    }

    public static HostOp forNumber(int value) {
      switch (value) {
        case 0: return kINVALIDHostOp;
        case 1: return kInputDataProducerGetNextBatch;
        case 2: return kInputDataProducerSessionRun;
        case 3: return kInputDataProducerForwardBatch;
        case 4: return kInfeedThreadGetNextBatch;
        case 5: return kInfeedThreadSessionRun;
        case 6: return kInfeedThreadForwardBatch;
        case 7: return kOutfeedThreadGetNextBatch;
        case 8: return kOutfeedThreadSessionRun;
        case 9: return kOutfeedThreadForwardBatch;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<HostOp>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        HostOp> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<HostOp>() {
            public HostOp findValueByNumber(int number) {
              return HostOp.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.getDescriptor().getEnumTypes().get(0);
    }

    private static final HostOp[] VALUES = values();

    public static HostOp valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private HostOp(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:tensorflow.tpu.HostOp)
  }

  public interface OpMetricsResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.OpMetricsResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * True if this OP is executed on the device; False if it is executed on the
     * host.
     * </pre>
     *
     * <code>optional bool on_device = 1;</code>
     */
    boolean hasOnDevice();
    /**
     * <pre>
     * True if this OP is executed on the device; False if it is executed on the
     * host.
     * </pre>
     *
     * <code>optional bool on_device = 1;</code>
     */
    boolean getOnDevice();

    /**
     * <pre>
     * Name of this OP.
     * </pre>
     *
     * <code>optional string name = 3;</code>
     */
    boolean hasName();
    /**
     * <pre>
     * Name of this OP.
     * </pre>
     *
     * <code>optional string name = 3;</code>
     */
    java.lang.String getName();
    /**
     * <pre>
     * Name of this OP.
     * </pre>
     *
     * <code>optional string name = 3;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <pre>
     * Rank of this OP.
     * </pre>
     *
     * <code>optional uint64 rank = 4;</code>
     */
    boolean hasRank();
    /**
     * <pre>
     * Rank of this OP.
     * </pre>
     *
     * <code>optional uint64 rank = 4;</code>
     */
    long getRank();

    /**
     * <pre>
     * The starting time in cycles of the last instance of this OP executed.
     * </pre>
     *
     * <code>optional double last_starttime_in_cycles = 5;</code>
     */
    boolean hasLastStarttimeInCycles();
    /**
     * <pre>
     * The starting time in cycles of the last instance of this OP executed.
     * </pre>
     *
     * <code>optional double last_starttime_in_cycles = 5;</code>
     */
    double getLastStarttimeInCycles();

    /**
     * <pre>
     * The ending time in cycles of the last instance of this OP executed.
     * </pre>
     *
     * <code>optional double last_endtime_in_cycles = 6;</code>
     */
    boolean hasLastEndtimeInCycles();
    /**
     * <pre>
     * The ending time in cycles of the last instance of this OP executed.
     * </pre>
     *
     * <code>optional double last_endtime_in_cycles = 6;</code>
     */
    double getLastEndtimeInCycles();

    /**
     * <pre>
     * If this OP (say A), is an immediate child of another OP (say B), this field
     * stores the sum of duration in microseconds of A inside B. If A appears more
     * than once in B, the duration of all A's appearances will be added together.
     * This sum will be reset after the self-time of B is calculated so that it
     * can be reused for a new parent OP.
     * </pre>
     *
     * <code>optional double sum_of_duration_in_us_as_children = 7;</code>
     */
    boolean hasSumOfDurationInUsAsChildren();
    /**
     * <pre>
     * If this OP (say A), is an immediate child of another OP (say B), this field
     * stores the sum of duration in microseconds of A inside B. If A appears more
     * than once in B, the duration of all A's appearances will be added together.
     * This sum will be reset after the self-time of B is calculated so that it
     * can be reused for a new parent OP.
     * </pre>
     *
     * <code>optional double sum_of_duration_in_us_as_children = 7;</code>
     */
    double getSumOfDurationInUsAsChildren();

    /**
     * <pre>
     * Number of instances that this OP occurred.
     * </pre>
     *
     * <code>optional uint64 occurrences = 8;</code>
     */
    boolean hasOccurrences();
    /**
     * <pre>
     * Number of instances that this OP occurred.
     * </pre>
     *
     * <code>optional uint64 occurrences = 8;</code>
     */
    long getOccurrences();

    /**
     * <pre>
     * Total time in microseconds spent in this OP (accumulated
     * over all of its occurrences).
     * </pre>
     *
     * <code>optional double total_time_in_us = 9;</code>
     */
    boolean hasTotalTimeInUs();
    /**
     * <pre>
     * Total time in microseconds spent in this OP (accumulated
     * over all of its occurrences).
     * </pre>
     *
     * <code>optional double total_time_in_us = 9;</code>
     */
    double getTotalTimeInUs();

    /**
     * <pre>
     * Total self time in microseconds spent in this OP
     * (accumulated over all of its occurrences).
     * </pre>
     *
     * <code>optional double total_self_time_in_us = 10;</code>
     */
    boolean hasTotalSelfTimeInUs();
    /**
     * <pre>
     * Total self time in microseconds spent in this OP
     * (accumulated over all of its occurrences).
     * </pre>
     *
     * <code>optional double total_self_time_in_us = 10;</code>
     */
    double getTotalSelfTimeInUs();

    /**
     * <pre>
     * The total self time as a fraction of sum of all OP's
     * total self time on the host.
     * </pre>
     *
     * <code>optional double host_total_self_time_as_fraction_of_all_op_time = 11;</code>
     */
    boolean hasHostTotalSelfTimeAsFractionOfAllOpTime();
    /**
     * <pre>
     * The total self time as a fraction of sum of all OP's
     * total self time on the host.
     * </pre>
     *
     * <code>optional double host_total_self_time_as_fraction_of_all_op_time = 11;</code>
     */
    double getHostTotalSelfTimeAsFractionOfAllOpTime();

    /**
     * <pre>
     * Cumulative total self time in fraction on the host.
     * </pre>
     *
     * <code>optional double host_cumulative_total_self_time_as_fraction_of_all_op_time = 12;</code>
     */
    boolean hasHostCumulativeTotalSelfTimeAsFractionOfAllOpTime();
    /**
     * <pre>
     * Cumulative total self time in fraction on the host.
     * </pre>
     *
     * <code>optional double host_cumulative_total_self_time_as_fraction_of_all_op_time = 12;</code>
     */
    double getHostCumulativeTotalSelfTimeAsFractionOfAllOpTime();

    /**
     * <pre>
     * The total self time as a fraction of sum of all OP's
     * total self time on the device.
     * </pre>
     *
     * <code>optional double device_total_self_time_as_fraction_of_all_op_time = 13;</code>
     */
    boolean hasDeviceTotalSelfTimeAsFractionOfAllOpTime();
    /**
     * <pre>
     * The total self time as a fraction of sum of all OP's
     * total self time on the device.
     * </pre>
     *
     * <code>optional double device_total_self_time_as_fraction_of_all_op_time = 13;</code>
     */
    double getDeviceTotalSelfTimeAsFractionOfAllOpTime();

    /**
     * <pre>
     * Cumulative total self time in fraction on the device.
     * </pre>
     *
     * <code>optional double device_cumulative_total_self_time_as_fraction_of_all_op_time = 14;</code>
     */
    boolean hasDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime();
    /**
     * <pre>
     * Cumulative total self time in fraction on the device.
     * </pre>
     *
     * <code>optional double device_cumulative_total_self_time_as_fraction_of_all_op_time = 14;</code>
     */
    double getDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime();

    /**
     * <pre>
     * Total number of FLOPs incurred by this OP.
     * </pre>
     *
     * <code>optional double total_flops = 15;</code>
     */
    boolean hasTotalFlops();
    /**
     * <pre>
     * Total number of FLOPs incurred by this OP.
     * </pre>
     *
     * <code>optional double total_flops = 15;</code>
     */
    double getTotalFlops();

    /**
     * <pre>
     * Total number of bytes accessed by this OP.
     * </pre>
     *
     * <code>optional double total_bytes_accessed = 16;</code>
     */
    boolean hasTotalBytesAccessed();
    /**
     * <pre>
     * Total number of bytes accessed by this OP.
     * </pre>
     *
     * <code>optional double total_bytes_accessed = 16;</code>
     */
    double getTotalBytesAccessed();

    /**
     * <pre>
     * Total time in microseconds that special hw unit 1 is occupied by this OP.
     * </pre>
     *
     * <code>optional double unit1_occupancy_in_us = 17;</code>
     */
    boolean hasUnit1OccupancyInUs();
    /**
     * <pre>
     * Total time in microseconds that special hw unit 1 is occupied by this OP.
     * </pre>
     *
     * <code>optional double unit1_occupancy_in_us = 17;</code>
     */
    double getUnit1OccupancyInUs();

    /**
     * <pre>
     * Total time in microseconds that special hw unit 2 is occupied by this OP.
     * </pre>
     *
     * <code>optional double unit2_occupancy_in_us = 18;</code>
     */
    boolean hasUnit2OccupancyInUs();
    /**
     * <pre>
     * Total time in microseconds that special hw unit 2 is occupied by this OP.
     * </pre>
     *
     * <code>optional double unit2_occupancy_in_us = 18;</code>
     */
    double getUnit2OccupancyInUs();

    /**
     * <pre>
     * Total memory stall time in microseconds.
     * </pre>
     *
     * <code>optional double total_memory_stall_in_us = 19;</code>
     */
    boolean hasTotalMemoryStallInUs();
    /**
     * <pre>
     * Total memory stall time in microseconds.
     * </pre>
     *
     * <code>optional double total_memory_stall_in_us = 19;</code>
     */
    double getTotalMemoryStallInUs();
  }
  /**
   * <pre>
   * Result proto for OpMetrics.
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.OpMetricsResult}
   */
  public  static final class OpMetricsResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.OpMetricsResult)
      OpMetricsResultOrBuilder {
    // Use OpMetricsResult.newBuilder() to construct.
    private OpMetricsResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private OpMetricsResult() {
      onDevice_ = false;
      name_ = "";
      rank_ = 0L;
      lastStarttimeInCycles_ = 0D;
      lastEndtimeInCycles_ = 0D;
      sumOfDurationInUsAsChildren_ = 0D;
      occurrences_ = 0L;
      totalTimeInUs_ = 0D;
      totalSelfTimeInUs_ = 0D;
      hostTotalSelfTimeAsFractionOfAllOpTime_ = 0D;
      hostCumulativeTotalSelfTimeAsFractionOfAllOpTime_ = 0D;
      deviceTotalSelfTimeAsFractionOfAllOpTime_ = 0D;
      deviceCumulativeTotalSelfTimeAsFractionOfAllOpTime_ = 0D;
      totalFlops_ = 0D;
      totalBytesAccessed_ = 0D;
      unit1OccupancyInUs_ = 0D;
      unit2OccupancyInUs_ = 0D;
      totalMemoryStallInUs_ = 0D;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private OpMetricsResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              onDevice_ = input.readBool();
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              name_ = bs;
              break;
            }
            case 32: {
              bitField0_ |= 0x00000004;
              rank_ = input.readUInt64();
              break;
            }
            case 41: {
              bitField0_ |= 0x00000008;
              lastStarttimeInCycles_ = input.readDouble();
              break;
            }
            case 49: {
              bitField0_ |= 0x00000010;
              lastEndtimeInCycles_ = input.readDouble();
              break;
            }
            case 57: {
              bitField0_ |= 0x00000020;
              sumOfDurationInUsAsChildren_ = input.readDouble();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000040;
              occurrences_ = input.readUInt64();
              break;
            }
            case 73: {
              bitField0_ |= 0x00000080;
              totalTimeInUs_ = input.readDouble();
              break;
            }
            case 81: {
              bitField0_ |= 0x00000100;
              totalSelfTimeInUs_ = input.readDouble();
              break;
            }
            case 89: {
              bitField0_ |= 0x00000200;
              hostTotalSelfTimeAsFractionOfAllOpTime_ = input.readDouble();
              break;
            }
            case 97: {
              bitField0_ |= 0x00000400;
              hostCumulativeTotalSelfTimeAsFractionOfAllOpTime_ = input.readDouble();
              break;
            }
            case 105: {
              bitField0_ |= 0x00000800;
              deviceTotalSelfTimeAsFractionOfAllOpTime_ = input.readDouble();
              break;
            }
            case 113: {
              bitField0_ |= 0x00001000;
              deviceCumulativeTotalSelfTimeAsFractionOfAllOpTime_ = input.readDouble();
              break;
            }
            case 121: {
              bitField0_ |= 0x00002000;
              totalFlops_ = input.readDouble();
              break;
            }
            case 129: {
              bitField0_ |= 0x00004000;
              totalBytesAccessed_ = input.readDouble();
              break;
            }
            case 137: {
              bitField0_ |= 0x00008000;
              unit1OccupancyInUs_ = input.readDouble();
              break;
            }
            case 145: {
              bitField0_ |= 0x00010000;
              unit2OccupancyInUs_ = input.readDouble();
              break;
            }
            case 153: {
              bitField0_ |= 0x00020000;
              totalMemoryStallInUs_ = input.readDouble();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_OpMetricsResult_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_OpMetricsResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.class, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.Builder.class);
    }

    private int bitField0_;
    public static final int ON_DEVICE_FIELD_NUMBER = 1;
    private boolean onDevice_;
    /**
     * <pre>
     * True if this OP is executed on the device; False if it is executed on the
     * host.
     * </pre>
     *
     * <code>optional bool on_device = 1;</code>
     */
    public boolean hasOnDevice() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * True if this OP is executed on the device; False if it is executed on the
     * host.
     * </pre>
     *
     * <code>optional bool on_device = 1;</code>
     */
    public boolean getOnDevice() {
      return onDevice_;
    }

    public static final int NAME_FIELD_NUMBER = 3;
    private volatile java.lang.Object name_;
    /**
     * <pre>
     * Name of this OP.
     * </pre>
     *
     * <code>optional string name = 3;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Name of this OP.
     * </pre>
     *
     * <code>optional string name = 3;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Name of this OP.
     * </pre>
     *
     * <code>optional string name = 3;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int RANK_FIELD_NUMBER = 4;
    private long rank_;
    /**
     * <pre>
     * Rank of this OP.
     * </pre>
     *
     * <code>optional uint64 rank = 4;</code>
     */
    public boolean hasRank() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * Rank of this OP.
     * </pre>
     *
     * <code>optional uint64 rank = 4;</code>
     */
    public long getRank() {
      return rank_;
    }

    public static final int LAST_STARTTIME_IN_CYCLES_FIELD_NUMBER = 5;
    private double lastStarttimeInCycles_;
    /**
     * <pre>
     * The starting time in cycles of the last instance of this OP executed.
     * </pre>
     *
     * <code>optional double last_starttime_in_cycles = 5;</code>
     */
    public boolean hasLastStarttimeInCycles() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     * The starting time in cycles of the last instance of this OP executed.
     * </pre>
     *
     * <code>optional double last_starttime_in_cycles = 5;</code>
     */
    public double getLastStarttimeInCycles() {
      return lastStarttimeInCycles_;
    }

    public static final int LAST_ENDTIME_IN_CYCLES_FIELD_NUMBER = 6;
    private double lastEndtimeInCycles_;
    /**
     * <pre>
     * The ending time in cycles of the last instance of this OP executed.
     * </pre>
     *
     * <code>optional double last_endtime_in_cycles = 6;</code>
     */
    public boolean hasLastEndtimeInCycles() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <pre>
     * The ending time in cycles of the last instance of this OP executed.
     * </pre>
     *
     * <code>optional double last_endtime_in_cycles = 6;</code>
     */
    public double getLastEndtimeInCycles() {
      return lastEndtimeInCycles_;
    }

    public static final int SUM_OF_DURATION_IN_US_AS_CHILDREN_FIELD_NUMBER = 7;
    private double sumOfDurationInUsAsChildren_;
    /**
     * <pre>
     * If this OP (say A), is an immediate child of another OP (say B), this field
     * stores the sum of duration in microseconds of A inside B. If A appears more
     * than once in B, the duration of all A's appearances will be added together.
     * This sum will be reset after the self-time of B is calculated so that it
     * can be reused for a new parent OP.
     * </pre>
     *
     * <code>optional double sum_of_duration_in_us_as_children = 7;</code>
     */
    public boolean hasSumOfDurationInUsAsChildren() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <pre>
     * If this OP (say A), is an immediate child of another OP (say B), this field
     * stores the sum of duration in microseconds of A inside B. If A appears more
     * than once in B, the duration of all A's appearances will be added together.
     * This sum will be reset after the self-time of B is calculated so that it
     * can be reused for a new parent OP.
     * </pre>
     *
     * <code>optional double sum_of_duration_in_us_as_children = 7;</code>
     */
    public double getSumOfDurationInUsAsChildren() {
      return sumOfDurationInUsAsChildren_;
    }

    public static final int OCCURRENCES_FIELD_NUMBER = 8;
    private long occurrences_;
    /**
     * <pre>
     * Number of instances that this OP occurred.
     * </pre>
     *
     * <code>optional uint64 occurrences = 8;</code>
     */
    public boolean hasOccurrences() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <pre>
     * Number of instances that this OP occurred.
     * </pre>
     *
     * <code>optional uint64 occurrences = 8;</code>
     */
    public long getOccurrences() {
      return occurrences_;
    }

    public static final int TOTAL_TIME_IN_US_FIELD_NUMBER = 9;
    private double totalTimeInUs_;
    /**
     * <pre>
     * Total time in microseconds spent in this OP (accumulated
     * over all of its occurrences).
     * </pre>
     *
     * <code>optional double total_time_in_us = 9;</code>
     */
    public boolean hasTotalTimeInUs() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <pre>
     * Total time in microseconds spent in this OP (accumulated
     * over all of its occurrences).
     * </pre>
     *
     * <code>optional double total_time_in_us = 9;</code>
     */
    public double getTotalTimeInUs() {
      return totalTimeInUs_;
    }

    public static final int TOTAL_SELF_TIME_IN_US_FIELD_NUMBER = 10;
    private double totalSelfTimeInUs_;
    /**
     * <pre>
     * Total self time in microseconds spent in this OP
     * (accumulated over all of its occurrences).
     * </pre>
     *
     * <code>optional double total_self_time_in_us = 10;</code>
     */
    public boolean hasTotalSelfTimeInUs() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <pre>
     * Total self time in microseconds spent in this OP
     * (accumulated over all of its occurrences).
     * </pre>
     *
     * <code>optional double total_self_time_in_us = 10;</code>
     */
    public double getTotalSelfTimeInUs() {
      return totalSelfTimeInUs_;
    }

    public static final int HOST_TOTAL_SELF_TIME_AS_FRACTION_OF_ALL_OP_TIME_FIELD_NUMBER = 11;
    private double hostTotalSelfTimeAsFractionOfAllOpTime_;
    /**
     * <pre>
     * The total self time as a fraction of sum of all OP's
     * total self time on the host.
     * </pre>
     *
     * <code>optional double host_total_self_time_as_fraction_of_all_op_time = 11;</code>
     */
    public boolean hasHostTotalSelfTimeAsFractionOfAllOpTime() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <pre>
     * The total self time as a fraction of sum of all OP's
     * total self time on the host.
     * </pre>
     *
     * <code>optional double host_total_self_time_as_fraction_of_all_op_time = 11;</code>
     */
    public double getHostTotalSelfTimeAsFractionOfAllOpTime() {
      return hostTotalSelfTimeAsFractionOfAllOpTime_;
    }

    public static final int HOST_CUMULATIVE_TOTAL_SELF_TIME_AS_FRACTION_OF_ALL_OP_TIME_FIELD_NUMBER = 12;
    private double hostCumulativeTotalSelfTimeAsFractionOfAllOpTime_;
    /**
     * <pre>
     * Cumulative total self time in fraction on the host.
     * </pre>
     *
     * <code>optional double host_cumulative_total_self_time_as_fraction_of_all_op_time = 12;</code>
     */
    public boolean hasHostCumulativeTotalSelfTimeAsFractionOfAllOpTime() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <pre>
     * Cumulative total self time in fraction on the host.
     * </pre>
     *
     * <code>optional double host_cumulative_total_self_time_as_fraction_of_all_op_time = 12;</code>
     */
    public double getHostCumulativeTotalSelfTimeAsFractionOfAllOpTime() {
      return hostCumulativeTotalSelfTimeAsFractionOfAllOpTime_;
    }

    public static final int DEVICE_TOTAL_SELF_TIME_AS_FRACTION_OF_ALL_OP_TIME_FIELD_NUMBER = 13;
    private double deviceTotalSelfTimeAsFractionOfAllOpTime_;
    /**
     * <pre>
     * The total self time as a fraction of sum of all OP's
     * total self time on the device.
     * </pre>
     *
     * <code>optional double device_total_self_time_as_fraction_of_all_op_time = 13;</code>
     */
    public boolean hasDeviceTotalSelfTimeAsFractionOfAllOpTime() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <pre>
     * The total self time as a fraction of sum of all OP's
     * total self time on the device.
     * </pre>
     *
     * <code>optional double device_total_self_time_as_fraction_of_all_op_time = 13;</code>
     */
    public double getDeviceTotalSelfTimeAsFractionOfAllOpTime() {
      return deviceTotalSelfTimeAsFractionOfAllOpTime_;
    }

    public static final int DEVICE_CUMULATIVE_TOTAL_SELF_TIME_AS_FRACTION_OF_ALL_OP_TIME_FIELD_NUMBER = 14;
    private double deviceCumulativeTotalSelfTimeAsFractionOfAllOpTime_;
    /**
     * <pre>
     * Cumulative total self time in fraction on the device.
     * </pre>
     *
     * <code>optional double device_cumulative_total_self_time_as_fraction_of_all_op_time = 14;</code>
     */
    public boolean hasDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <pre>
     * Cumulative total self time in fraction on the device.
     * </pre>
     *
     * <code>optional double device_cumulative_total_self_time_as_fraction_of_all_op_time = 14;</code>
     */
    public double getDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime() {
      return deviceCumulativeTotalSelfTimeAsFractionOfAllOpTime_;
    }

    public static final int TOTAL_FLOPS_FIELD_NUMBER = 15;
    private double totalFlops_;
    /**
     * <pre>
     * Total number of FLOPs incurred by this OP.
     * </pre>
     *
     * <code>optional double total_flops = 15;</code>
     */
    public boolean hasTotalFlops() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     * <pre>
     * Total number of FLOPs incurred by this OP.
     * </pre>
     *
     * <code>optional double total_flops = 15;</code>
     */
    public double getTotalFlops() {
      return totalFlops_;
    }

    public static final int TOTAL_BYTES_ACCESSED_FIELD_NUMBER = 16;
    private double totalBytesAccessed_;
    /**
     * <pre>
     * Total number of bytes accessed by this OP.
     * </pre>
     *
     * <code>optional double total_bytes_accessed = 16;</code>
     */
    public boolean hasTotalBytesAccessed() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     * <pre>
     * Total number of bytes accessed by this OP.
     * </pre>
     *
     * <code>optional double total_bytes_accessed = 16;</code>
     */
    public double getTotalBytesAccessed() {
      return totalBytesAccessed_;
    }

    public static final int UNIT1_OCCUPANCY_IN_US_FIELD_NUMBER = 17;
    private double unit1OccupancyInUs_;
    /**
     * <pre>
     * Total time in microseconds that special hw unit 1 is occupied by this OP.
     * </pre>
     *
     * <code>optional double unit1_occupancy_in_us = 17;</code>
     */
    public boolean hasUnit1OccupancyInUs() {
      return ((bitField0_ & 0x00008000) == 0x00008000);
    }
    /**
     * <pre>
     * Total time in microseconds that special hw unit 1 is occupied by this OP.
     * </pre>
     *
     * <code>optional double unit1_occupancy_in_us = 17;</code>
     */
    public double getUnit1OccupancyInUs() {
      return unit1OccupancyInUs_;
    }

    public static final int UNIT2_OCCUPANCY_IN_US_FIELD_NUMBER = 18;
    private double unit2OccupancyInUs_;
    /**
     * <pre>
     * Total time in microseconds that special hw unit 2 is occupied by this OP.
     * </pre>
     *
     * <code>optional double unit2_occupancy_in_us = 18;</code>
     */
    public boolean hasUnit2OccupancyInUs() {
      return ((bitField0_ & 0x00010000) == 0x00010000);
    }
    /**
     * <pre>
     * Total time in microseconds that special hw unit 2 is occupied by this OP.
     * </pre>
     *
     * <code>optional double unit2_occupancy_in_us = 18;</code>
     */
    public double getUnit2OccupancyInUs() {
      return unit2OccupancyInUs_;
    }

    public static final int TOTAL_MEMORY_STALL_IN_US_FIELD_NUMBER = 19;
    private double totalMemoryStallInUs_;
    /**
     * <pre>
     * Total memory stall time in microseconds.
     * </pre>
     *
     * <code>optional double total_memory_stall_in_us = 19;</code>
     */
    public boolean hasTotalMemoryStallInUs() {
      return ((bitField0_ & 0x00020000) == 0x00020000);
    }
    /**
     * <pre>
     * Total memory stall time in microseconds.
     * </pre>
     *
     * <code>optional double total_memory_stall_in_us = 19;</code>
     */
    public double getTotalMemoryStallInUs() {
      return totalMemoryStallInUs_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, onDevice_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, name_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt64(4, rank_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeDouble(5, lastStarttimeInCycles_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeDouble(6, lastEndtimeInCycles_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeDouble(7, sumOfDurationInUsAsChildren_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeUInt64(8, occurrences_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeDouble(9, totalTimeInUs_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeDouble(10, totalSelfTimeInUs_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeDouble(11, hostTotalSelfTimeAsFractionOfAllOpTime_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeDouble(12, hostCumulativeTotalSelfTimeAsFractionOfAllOpTime_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeDouble(13, deviceTotalSelfTimeAsFractionOfAllOpTime_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeDouble(14, deviceCumulativeTotalSelfTimeAsFractionOfAllOpTime_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeDouble(15, totalFlops_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeDouble(16, totalBytesAccessed_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        output.writeDouble(17, unit1OccupancyInUs_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        output.writeDouble(18, unit2OccupancyInUs_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        output.writeDouble(19, totalMemoryStallInUs_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, onDevice_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, name_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(4, rank_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(5, lastStarttimeInCycles_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(6, lastEndtimeInCycles_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(7, sumOfDurationInUsAsChildren_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(8, occurrences_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(9, totalTimeInUs_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(10, totalSelfTimeInUs_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(11, hostTotalSelfTimeAsFractionOfAllOpTime_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(12, hostCumulativeTotalSelfTimeAsFractionOfAllOpTime_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(13, deviceTotalSelfTimeAsFractionOfAllOpTime_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(14, deviceCumulativeTotalSelfTimeAsFractionOfAllOpTime_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(15, totalFlops_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(16, totalBytesAccessed_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(17, unit1OccupancyInUs_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(18, unit2OccupancyInUs_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(19, totalMemoryStallInUs_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult other = (tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult) obj;

      boolean result = true;
      result = result && (hasOnDevice() == other.hasOnDevice());
      if (hasOnDevice()) {
        result = result && (getOnDevice()
            == other.getOnDevice());
      }
      result = result && (hasName() == other.hasName());
      if (hasName()) {
        result = result && getName()
            .equals(other.getName());
      }
      result = result && (hasRank() == other.hasRank());
      if (hasRank()) {
        result = result && (getRank()
            == other.getRank());
      }
      result = result && (hasLastStarttimeInCycles() == other.hasLastStarttimeInCycles());
      if (hasLastStarttimeInCycles()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getLastStarttimeInCycles())
            == java.lang.Double.doubleToLongBits(
                other.getLastStarttimeInCycles()));
      }
      result = result && (hasLastEndtimeInCycles() == other.hasLastEndtimeInCycles());
      if (hasLastEndtimeInCycles()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getLastEndtimeInCycles())
            == java.lang.Double.doubleToLongBits(
                other.getLastEndtimeInCycles()));
      }
      result = result && (hasSumOfDurationInUsAsChildren() == other.hasSumOfDurationInUsAsChildren());
      if (hasSumOfDurationInUsAsChildren()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getSumOfDurationInUsAsChildren())
            == java.lang.Double.doubleToLongBits(
                other.getSumOfDurationInUsAsChildren()));
      }
      result = result && (hasOccurrences() == other.hasOccurrences());
      if (hasOccurrences()) {
        result = result && (getOccurrences()
            == other.getOccurrences());
      }
      result = result && (hasTotalTimeInUs() == other.hasTotalTimeInUs());
      if (hasTotalTimeInUs()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getTotalTimeInUs())
            == java.lang.Double.doubleToLongBits(
                other.getTotalTimeInUs()));
      }
      result = result && (hasTotalSelfTimeInUs() == other.hasTotalSelfTimeInUs());
      if (hasTotalSelfTimeInUs()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getTotalSelfTimeInUs())
            == java.lang.Double.doubleToLongBits(
                other.getTotalSelfTimeInUs()));
      }
      result = result && (hasHostTotalSelfTimeAsFractionOfAllOpTime() == other.hasHostTotalSelfTimeAsFractionOfAllOpTime());
      if (hasHostTotalSelfTimeAsFractionOfAllOpTime()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getHostTotalSelfTimeAsFractionOfAllOpTime())
            == java.lang.Double.doubleToLongBits(
                other.getHostTotalSelfTimeAsFractionOfAllOpTime()));
      }
      result = result && (hasHostCumulativeTotalSelfTimeAsFractionOfAllOpTime() == other.hasHostCumulativeTotalSelfTimeAsFractionOfAllOpTime());
      if (hasHostCumulativeTotalSelfTimeAsFractionOfAllOpTime()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getHostCumulativeTotalSelfTimeAsFractionOfAllOpTime())
            == java.lang.Double.doubleToLongBits(
                other.getHostCumulativeTotalSelfTimeAsFractionOfAllOpTime()));
      }
      result = result && (hasDeviceTotalSelfTimeAsFractionOfAllOpTime() == other.hasDeviceTotalSelfTimeAsFractionOfAllOpTime());
      if (hasDeviceTotalSelfTimeAsFractionOfAllOpTime()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getDeviceTotalSelfTimeAsFractionOfAllOpTime())
            == java.lang.Double.doubleToLongBits(
                other.getDeviceTotalSelfTimeAsFractionOfAllOpTime()));
      }
      result = result && (hasDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime() == other.hasDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime());
      if (hasDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime())
            == java.lang.Double.doubleToLongBits(
                other.getDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime()));
      }
      result = result && (hasTotalFlops() == other.hasTotalFlops());
      if (hasTotalFlops()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getTotalFlops())
            == java.lang.Double.doubleToLongBits(
                other.getTotalFlops()));
      }
      result = result && (hasTotalBytesAccessed() == other.hasTotalBytesAccessed());
      if (hasTotalBytesAccessed()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getTotalBytesAccessed())
            == java.lang.Double.doubleToLongBits(
                other.getTotalBytesAccessed()));
      }
      result = result && (hasUnit1OccupancyInUs() == other.hasUnit1OccupancyInUs());
      if (hasUnit1OccupancyInUs()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getUnit1OccupancyInUs())
            == java.lang.Double.doubleToLongBits(
                other.getUnit1OccupancyInUs()));
      }
      result = result && (hasUnit2OccupancyInUs() == other.hasUnit2OccupancyInUs());
      if (hasUnit2OccupancyInUs()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getUnit2OccupancyInUs())
            == java.lang.Double.doubleToLongBits(
                other.getUnit2OccupancyInUs()));
      }
      result = result && (hasTotalMemoryStallInUs() == other.hasTotalMemoryStallInUs());
      if (hasTotalMemoryStallInUs()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getTotalMemoryStallInUs())
            == java.lang.Double.doubleToLongBits(
                other.getTotalMemoryStallInUs()));
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasOnDevice()) {
        hash = (37 * hash) + ON_DEVICE_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getOnDevice());
      }
      if (hasName()) {
        hash = (37 * hash) + NAME_FIELD_NUMBER;
        hash = (53 * hash) + getName().hashCode();
      }
      if (hasRank()) {
        hash = (37 * hash) + RANK_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getRank());
      }
      if (hasLastStarttimeInCycles()) {
        hash = (37 * hash) + LAST_STARTTIME_IN_CYCLES_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getLastStarttimeInCycles()));
      }
      if (hasLastEndtimeInCycles()) {
        hash = (37 * hash) + LAST_ENDTIME_IN_CYCLES_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getLastEndtimeInCycles()));
      }
      if (hasSumOfDurationInUsAsChildren()) {
        hash = (37 * hash) + SUM_OF_DURATION_IN_US_AS_CHILDREN_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getSumOfDurationInUsAsChildren()));
      }
      if (hasOccurrences()) {
        hash = (37 * hash) + OCCURRENCES_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getOccurrences());
      }
      if (hasTotalTimeInUs()) {
        hash = (37 * hash) + TOTAL_TIME_IN_US_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getTotalTimeInUs()));
      }
      if (hasTotalSelfTimeInUs()) {
        hash = (37 * hash) + TOTAL_SELF_TIME_IN_US_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getTotalSelfTimeInUs()));
      }
      if (hasHostTotalSelfTimeAsFractionOfAllOpTime()) {
        hash = (37 * hash) + HOST_TOTAL_SELF_TIME_AS_FRACTION_OF_ALL_OP_TIME_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getHostTotalSelfTimeAsFractionOfAllOpTime()));
      }
      if (hasHostCumulativeTotalSelfTimeAsFractionOfAllOpTime()) {
        hash = (37 * hash) + HOST_CUMULATIVE_TOTAL_SELF_TIME_AS_FRACTION_OF_ALL_OP_TIME_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getHostCumulativeTotalSelfTimeAsFractionOfAllOpTime()));
      }
      if (hasDeviceTotalSelfTimeAsFractionOfAllOpTime()) {
        hash = (37 * hash) + DEVICE_TOTAL_SELF_TIME_AS_FRACTION_OF_ALL_OP_TIME_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getDeviceTotalSelfTimeAsFractionOfAllOpTime()));
      }
      if (hasDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime()) {
        hash = (37 * hash) + DEVICE_CUMULATIVE_TOTAL_SELF_TIME_AS_FRACTION_OF_ALL_OP_TIME_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime()));
      }
      if (hasTotalFlops()) {
        hash = (37 * hash) + TOTAL_FLOPS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getTotalFlops()));
      }
      if (hasTotalBytesAccessed()) {
        hash = (37 * hash) + TOTAL_BYTES_ACCESSED_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getTotalBytesAccessed()));
      }
      if (hasUnit1OccupancyInUs()) {
        hash = (37 * hash) + UNIT1_OCCUPANCY_IN_US_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getUnit1OccupancyInUs()));
      }
      if (hasUnit2OccupancyInUs()) {
        hash = (37 * hash) + UNIT2_OCCUPANCY_IN_US_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getUnit2OccupancyInUs()));
      }
      if (hasTotalMemoryStallInUs()) {
        hash = (37 * hash) + TOTAL_MEMORY_STALL_IN_US_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getTotalMemoryStallInUs()));
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for OpMetrics.
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.OpMetricsResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.OpMetricsResult)
        tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_OpMetricsResult_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_OpMetricsResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.class, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        onDevice_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        rank_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        lastStarttimeInCycles_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000008);
        lastEndtimeInCycles_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000010);
        sumOfDurationInUsAsChildren_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000020);
        occurrences_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        totalTimeInUs_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000080);
        totalSelfTimeInUs_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000100);
        hostTotalSelfTimeAsFractionOfAllOpTime_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000200);
        hostCumulativeTotalSelfTimeAsFractionOfAllOpTime_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000400);
        deviceTotalSelfTimeAsFractionOfAllOpTime_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000800);
        deviceCumulativeTotalSelfTimeAsFractionOfAllOpTime_ = 0D;
        bitField0_ = (bitField0_ & ~0x00001000);
        totalFlops_ = 0D;
        bitField0_ = (bitField0_ & ~0x00002000);
        totalBytesAccessed_ = 0D;
        bitField0_ = (bitField0_ & ~0x00004000);
        unit1OccupancyInUs_ = 0D;
        bitField0_ = (bitField0_ & ~0x00008000);
        unit2OccupancyInUs_ = 0D;
        bitField0_ = (bitField0_ & ~0x00010000);
        totalMemoryStallInUs_ = 0D;
        bitField0_ = (bitField0_ & ~0x00020000);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_OpMetricsResult_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult build() {
        tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult result = new tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.onDevice_ = onDevice_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.rank_ = rank_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.lastStarttimeInCycles_ = lastStarttimeInCycles_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.lastEndtimeInCycles_ = lastEndtimeInCycles_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.sumOfDurationInUsAsChildren_ = sumOfDurationInUsAsChildren_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.occurrences_ = occurrences_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.totalTimeInUs_ = totalTimeInUs_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.totalSelfTimeInUs_ = totalSelfTimeInUs_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.hostTotalSelfTimeAsFractionOfAllOpTime_ = hostTotalSelfTimeAsFractionOfAllOpTime_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.hostCumulativeTotalSelfTimeAsFractionOfAllOpTime_ = hostCumulativeTotalSelfTimeAsFractionOfAllOpTime_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.deviceTotalSelfTimeAsFractionOfAllOpTime_ = deviceTotalSelfTimeAsFractionOfAllOpTime_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.deviceCumulativeTotalSelfTimeAsFractionOfAllOpTime_ = deviceCumulativeTotalSelfTimeAsFractionOfAllOpTime_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00002000;
        }
        result.totalFlops_ = totalFlops_;
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00004000;
        }
        result.totalBytesAccessed_ = totalBytesAccessed_;
        if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
          to_bitField0_ |= 0x00008000;
        }
        result.unit1OccupancyInUs_ = unit1OccupancyInUs_;
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00010000;
        }
        result.unit2OccupancyInUs_ = unit2OccupancyInUs_;
        if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
          to_bitField0_ |= 0x00020000;
        }
        result.totalMemoryStallInUs_ = totalMemoryStallInUs_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.getDefaultInstance()) return this;
        if (other.hasOnDevice()) {
          setOnDevice(other.getOnDevice());
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000002;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasRank()) {
          setRank(other.getRank());
        }
        if (other.hasLastStarttimeInCycles()) {
          setLastStarttimeInCycles(other.getLastStarttimeInCycles());
        }
        if (other.hasLastEndtimeInCycles()) {
          setLastEndtimeInCycles(other.getLastEndtimeInCycles());
        }
        if (other.hasSumOfDurationInUsAsChildren()) {
          setSumOfDurationInUsAsChildren(other.getSumOfDurationInUsAsChildren());
        }
        if (other.hasOccurrences()) {
          setOccurrences(other.getOccurrences());
        }
        if (other.hasTotalTimeInUs()) {
          setTotalTimeInUs(other.getTotalTimeInUs());
        }
        if (other.hasTotalSelfTimeInUs()) {
          setTotalSelfTimeInUs(other.getTotalSelfTimeInUs());
        }
        if (other.hasHostTotalSelfTimeAsFractionOfAllOpTime()) {
          setHostTotalSelfTimeAsFractionOfAllOpTime(other.getHostTotalSelfTimeAsFractionOfAllOpTime());
        }
        if (other.hasHostCumulativeTotalSelfTimeAsFractionOfAllOpTime()) {
          setHostCumulativeTotalSelfTimeAsFractionOfAllOpTime(other.getHostCumulativeTotalSelfTimeAsFractionOfAllOpTime());
        }
        if (other.hasDeviceTotalSelfTimeAsFractionOfAllOpTime()) {
          setDeviceTotalSelfTimeAsFractionOfAllOpTime(other.getDeviceTotalSelfTimeAsFractionOfAllOpTime());
        }
        if (other.hasDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime()) {
          setDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime(other.getDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime());
        }
        if (other.hasTotalFlops()) {
          setTotalFlops(other.getTotalFlops());
        }
        if (other.hasTotalBytesAccessed()) {
          setTotalBytesAccessed(other.getTotalBytesAccessed());
        }
        if (other.hasUnit1OccupancyInUs()) {
          setUnit1OccupancyInUs(other.getUnit1OccupancyInUs());
        }
        if (other.hasUnit2OccupancyInUs()) {
          setUnit2OccupancyInUs(other.getUnit2OccupancyInUs());
        }
        if (other.hasTotalMemoryStallInUs()) {
          setTotalMemoryStallInUs(other.getTotalMemoryStallInUs());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private boolean onDevice_ ;
      /**
       * <pre>
       * True if this OP is executed on the device; False if it is executed on the
       * host.
       * </pre>
       *
       * <code>optional bool on_device = 1;</code>
       */
      public boolean hasOnDevice() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * True if this OP is executed on the device; False if it is executed on the
       * host.
       * </pre>
       *
       * <code>optional bool on_device = 1;</code>
       */
      public boolean getOnDevice() {
        return onDevice_;
      }
      /**
       * <pre>
       * True if this OP is executed on the device; False if it is executed on the
       * host.
       * </pre>
       *
       * <code>optional bool on_device = 1;</code>
       */
      public Builder setOnDevice(boolean value) {
        bitField0_ |= 0x00000001;
        onDevice_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * True if this OP is executed on the device; False if it is executed on the
       * host.
       * </pre>
       *
       * <code>optional bool on_device = 1;</code>
       */
      public Builder clearOnDevice() {
        bitField0_ = (bitField0_ & ~0x00000001);
        onDevice_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <pre>
       * Name of this OP.
       * </pre>
       *
       * <code>optional string name = 3;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Name of this OP.
       * </pre>
       *
       * <code>optional string name = 3;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Name of this OP.
       * </pre>
       *
       * <code>optional string name = 3;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Name of this OP.
       * </pre>
       *
       * <code>optional string name = 3;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of this OP.
       * </pre>
       *
       * <code>optional string name = 3;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of this OP.
       * </pre>
       *
       * <code>optional string name = 3;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }

      private long rank_ ;
      /**
       * <pre>
       * Rank of this OP.
       * </pre>
       *
       * <code>optional uint64 rank = 4;</code>
       */
      public boolean hasRank() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * Rank of this OP.
       * </pre>
       *
       * <code>optional uint64 rank = 4;</code>
       */
      public long getRank() {
        return rank_;
      }
      /**
       * <pre>
       * Rank of this OP.
       * </pre>
       *
       * <code>optional uint64 rank = 4;</code>
       */
      public Builder setRank(long value) {
        bitField0_ |= 0x00000004;
        rank_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Rank of this OP.
       * </pre>
       *
       * <code>optional uint64 rank = 4;</code>
       */
      public Builder clearRank() {
        bitField0_ = (bitField0_ & ~0x00000004);
        rank_ = 0L;
        onChanged();
        return this;
      }

      private double lastStarttimeInCycles_ ;
      /**
       * <pre>
       * The starting time in cycles of the last instance of this OP executed.
       * </pre>
       *
       * <code>optional double last_starttime_in_cycles = 5;</code>
       */
      public boolean hasLastStarttimeInCycles() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       * The starting time in cycles of the last instance of this OP executed.
       * </pre>
       *
       * <code>optional double last_starttime_in_cycles = 5;</code>
       */
      public double getLastStarttimeInCycles() {
        return lastStarttimeInCycles_;
      }
      /**
       * <pre>
       * The starting time in cycles of the last instance of this OP executed.
       * </pre>
       *
       * <code>optional double last_starttime_in_cycles = 5;</code>
       */
      public Builder setLastStarttimeInCycles(double value) {
        bitField0_ |= 0x00000008;
        lastStarttimeInCycles_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The starting time in cycles of the last instance of this OP executed.
       * </pre>
       *
       * <code>optional double last_starttime_in_cycles = 5;</code>
       */
      public Builder clearLastStarttimeInCycles() {
        bitField0_ = (bitField0_ & ~0x00000008);
        lastStarttimeInCycles_ = 0D;
        onChanged();
        return this;
      }

      private double lastEndtimeInCycles_ ;
      /**
       * <pre>
       * The ending time in cycles of the last instance of this OP executed.
       * </pre>
       *
       * <code>optional double last_endtime_in_cycles = 6;</code>
       */
      public boolean hasLastEndtimeInCycles() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <pre>
       * The ending time in cycles of the last instance of this OP executed.
       * </pre>
       *
       * <code>optional double last_endtime_in_cycles = 6;</code>
       */
      public double getLastEndtimeInCycles() {
        return lastEndtimeInCycles_;
      }
      /**
       * <pre>
       * The ending time in cycles of the last instance of this OP executed.
       * </pre>
       *
       * <code>optional double last_endtime_in_cycles = 6;</code>
       */
      public Builder setLastEndtimeInCycles(double value) {
        bitField0_ |= 0x00000010;
        lastEndtimeInCycles_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The ending time in cycles of the last instance of this OP executed.
       * </pre>
       *
       * <code>optional double last_endtime_in_cycles = 6;</code>
       */
      public Builder clearLastEndtimeInCycles() {
        bitField0_ = (bitField0_ & ~0x00000010);
        lastEndtimeInCycles_ = 0D;
        onChanged();
        return this;
      }

      private double sumOfDurationInUsAsChildren_ ;
      /**
       * <pre>
       * If this OP (say A), is an immediate child of another OP (say B), this field
       * stores the sum of duration in microseconds of A inside B. If A appears more
       * than once in B, the duration of all A's appearances will be added together.
       * This sum will be reset after the self-time of B is calculated so that it
       * can be reused for a new parent OP.
       * </pre>
       *
       * <code>optional double sum_of_duration_in_us_as_children = 7;</code>
       */
      public boolean hasSumOfDurationInUsAsChildren() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <pre>
       * If this OP (say A), is an immediate child of another OP (say B), this field
       * stores the sum of duration in microseconds of A inside B. If A appears more
       * than once in B, the duration of all A's appearances will be added together.
       * This sum will be reset after the self-time of B is calculated so that it
       * can be reused for a new parent OP.
       * </pre>
       *
       * <code>optional double sum_of_duration_in_us_as_children = 7;</code>
       */
      public double getSumOfDurationInUsAsChildren() {
        return sumOfDurationInUsAsChildren_;
      }
      /**
       * <pre>
       * If this OP (say A), is an immediate child of another OP (say B), this field
       * stores the sum of duration in microseconds of A inside B. If A appears more
       * than once in B, the duration of all A's appearances will be added together.
       * This sum will be reset after the self-time of B is calculated so that it
       * can be reused for a new parent OP.
       * </pre>
       *
       * <code>optional double sum_of_duration_in_us_as_children = 7;</code>
       */
      public Builder setSumOfDurationInUsAsChildren(double value) {
        bitField0_ |= 0x00000020;
        sumOfDurationInUsAsChildren_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * If this OP (say A), is an immediate child of another OP (say B), this field
       * stores the sum of duration in microseconds of A inside B. If A appears more
       * than once in B, the duration of all A's appearances will be added together.
       * This sum will be reset after the self-time of B is calculated so that it
       * can be reused for a new parent OP.
       * </pre>
       *
       * <code>optional double sum_of_duration_in_us_as_children = 7;</code>
       */
      public Builder clearSumOfDurationInUsAsChildren() {
        bitField0_ = (bitField0_ & ~0x00000020);
        sumOfDurationInUsAsChildren_ = 0D;
        onChanged();
        return this;
      }

      private long occurrences_ ;
      /**
       * <pre>
       * Number of instances that this OP occurred.
       * </pre>
       *
       * <code>optional uint64 occurrences = 8;</code>
       */
      public boolean hasOccurrences() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <pre>
       * Number of instances that this OP occurred.
       * </pre>
       *
       * <code>optional uint64 occurrences = 8;</code>
       */
      public long getOccurrences() {
        return occurrences_;
      }
      /**
       * <pre>
       * Number of instances that this OP occurred.
       * </pre>
       *
       * <code>optional uint64 occurrences = 8;</code>
       */
      public Builder setOccurrences(long value) {
        bitField0_ |= 0x00000040;
        occurrences_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Number of instances that this OP occurred.
       * </pre>
       *
       * <code>optional uint64 occurrences = 8;</code>
       */
      public Builder clearOccurrences() {
        bitField0_ = (bitField0_ & ~0x00000040);
        occurrences_ = 0L;
        onChanged();
        return this;
      }

      private double totalTimeInUs_ ;
      /**
       * <pre>
       * Total time in microseconds spent in this OP (accumulated
       * over all of its occurrences).
       * </pre>
       *
       * <code>optional double total_time_in_us = 9;</code>
       */
      public boolean hasTotalTimeInUs() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <pre>
       * Total time in microseconds spent in this OP (accumulated
       * over all of its occurrences).
       * </pre>
       *
       * <code>optional double total_time_in_us = 9;</code>
       */
      public double getTotalTimeInUs() {
        return totalTimeInUs_;
      }
      /**
       * <pre>
       * Total time in microseconds spent in this OP (accumulated
       * over all of its occurrences).
       * </pre>
       *
       * <code>optional double total_time_in_us = 9;</code>
       */
      public Builder setTotalTimeInUs(double value) {
        bitField0_ |= 0x00000080;
        totalTimeInUs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Total time in microseconds spent in this OP (accumulated
       * over all of its occurrences).
       * </pre>
       *
       * <code>optional double total_time_in_us = 9;</code>
       */
      public Builder clearTotalTimeInUs() {
        bitField0_ = (bitField0_ & ~0x00000080);
        totalTimeInUs_ = 0D;
        onChanged();
        return this;
      }

      private double totalSelfTimeInUs_ ;
      /**
       * <pre>
       * Total self time in microseconds spent in this OP
       * (accumulated over all of its occurrences).
       * </pre>
       *
       * <code>optional double total_self_time_in_us = 10;</code>
       */
      public boolean hasTotalSelfTimeInUs() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <pre>
       * Total self time in microseconds spent in this OP
       * (accumulated over all of its occurrences).
       * </pre>
       *
       * <code>optional double total_self_time_in_us = 10;</code>
       */
      public double getTotalSelfTimeInUs() {
        return totalSelfTimeInUs_;
      }
      /**
       * <pre>
       * Total self time in microseconds spent in this OP
       * (accumulated over all of its occurrences).
       * </pre>
       *
       * <code>optional double total_self_time_in_us = 10;</code>
       */
      public Builder setTotalSelfTimeInUs(double value) {
        bitField0_ |= 0x00000100;
        totalSelfTimeInUs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Total self time in microseconds spent in this OP
       * (accumulated over all of its occurrences).
       * </pre>
       *
       * <code>optional double total_self_time_in_us = 10;</code>
       */
      public Builder clearTotalSelfTimeInUs() {
        bitField0_ = (bitField0_ & ~0x00000100);
        totalSelfTimeInUs_ = 0D;
        onChanged();
        return this;
      }

      private double hostTotalSelfTimeAsFractionOfAllOpTime_ ;
      /**
       * <pre>
       * The total self time as a fraction of sum of all OP's
       * total self time on the host.
       * </pre>
       *
       * <code>optional double host_total_self_time_as_fraction_of_all_op_time = 11;</code>
       */
      public boolean hasHostTotalSelfTimeAsFractionOfAllOpTime() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <pre>
       * The total self time as a fraction of sum of all OP's
       * total self time on the host.
       * </pre>
       *
       * <code>optional double host_total_self_time_as_fraction_of_all_op_time = 11;</code>
       */
      public double getHostTotalSelfTimeAsFractionOfAllOpTime() {
        return hostTotalSelfTimeAsFractionOfAllOpTime_;
      }
      /**
       * <pre>
       * The total self time as a fraction of sum of all OP's
       * total self time on the host.
       * </pre>
       *
       * <code>optional double host_total_self_time_as_fraction_of_all_op_time = 11;</code>
       */
      public Builder setHostTotalSelfTimeAsFractionOfAllOpTime(double value) {
        bitField0_ |= 0x00000200;
        hostTotalSelfTimeAsFractionOfAllOpTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The total self time as a fraction of sum of all OP's
       * total self time on the host.
       * </pre>
       *
       * <code>optional double host_total_self_time_as_fraction_of_all_op_time = 11;</code>
       */
      public Builder clearHostTotalSelfTimeAsFractionOfAllOpTime() {
        bitField0_ = (bitField0_ & ~0x00000200);
        hostTotalSelfTimeAsFractionOfAllOpTime_ = 0D;
        onChanged();
        return this;
      }

      private double hostCumulativeTotalSelfTimeAsFractionOfAllOpTime_ ;
      /**
       * <pre>
       * Cumulative total self time in fraction on the host.
       * </pre>
       *
       * <code>optional double host_cumulative_total_self_time_as_fraction_of_all_op_time = 12;</code>
       */
      public boolean hasHostCumulativeTotalSelfTimeAsFractionOfAllOpTime() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <pre>
       * Cumulative total self time in fraction on the host.
       * </pre>
       *
       * <code>optional double host_cumulative_total_self_time_as_fraction_of_all_op_time = 12;</code>
       */
      public double getHostCumulativeTotalSelfTimeAsFractionOfAllOpTime() {
        return hostCumulativeTotalSelfTimeAsFractionOfAllOpTime_;
      }
      /**
       * <pre>
       * Cumulative total self time in fraction on the host.
       * </pre>
       *
       * <code>optional double host_cumulative_total_self_time_as_fraction_of_all_op_time = 12;</code>
       */
      public Builder setHostCumulativeTotalSelfTimeAsFractionOfAllOpTime(double value) {
        bitField0_ |= 0x00000400;
        hostCumulativeTotalSelfTimeAsFractionOfAllOpTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Cumulative total self time in fraction on the host.
       * </pre>
       *
       * <code>optional double host_cumulative_total_self_time_as_fraction_of_all_op_time = 12;</code>
       */
      public Builder clearHostCumulativeTotalSelfTimeAsFractionOfAllOpTime() {
        bitField0_ = (bitField0_ & ~0x00000400);
        hostCumulativeTotalSelfTimeAsFractionOfAllOpTime_ = 0D;
        onChanged();
        return this;
      }

      private double deviceTotalSelfTimeAsFractionOfAllOpTime_ ;
      /**
       * <pre>
       * The total self time as a fraction of sum of all OP's
       * total self time on the device.
       * </pre>
       *
       * <code>optional double device_total_self_time_as_fraction_of_all_op_time = 13;</code>
       */
      public boolean hasDeviceTotalSelfTimeAsFractionOfAllOpTime() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <pre>
       * The total self time as a fraction of sum of all OP's
       * total self time on the device.
       * </pre>
       *
       * <code>optional double device_total_self_time_as_fraction_of_all_op_time = 13;</code>
       */
      public double getDeviceTotalSelfTimeAsFractionOfAllOpTime() {
        return deviceTotalSelfTimeAsFractionOfAllOpTime_;
      }
      /**
       * <pre>
       * The total self time as a fraction of sum of all OP's
       * total self time on the device.
       * </pre>
       *
       * <code>optional double device_total_self_time_as_fraction_of_all_op_time = 13;</code>
       */
      public Builder setDeviceTotalSelfTimeAsFractionOfAllOpTime(double value) {
        bitField0_ |= 0x00000800;
        deviceTotalSelfTimeAsFractionOfAllOpTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The total self time as a fraction of sum of all OP's
       * total self time on the device.
       * </pre>
       *
       * <code>optional double device_total_self_time_as_fraction_of_all_op_time = 13;</code>
       */
      public Builder clearDeviceTotalSelfTimeAsFractionOfAllOpTime() {
        bitField0_ = (bitField0_ & ~0x00000800);
        deviceTotalSelfTimeAsFractionOfAllOpTime_ = 0D;
        onChanged();
        return this;
      }

      private double deviceCumulativeTotalSelfTimeAsFractionOfAllOpTime_ ;
      /**
       * <pre>
       * Cumulative total self time in fraction on the device.
       * </pre>
       *
       * <code>optional double device_cumulative_total_self_time_as_fraction_of_all_op_time = 14;</code>
       */
      public boolean hasDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <pre>
       * Cumulative total self time in fraction on the device.
       * </pre>
       *
       * <code>optional double device_cumulative_total_self_time_as_fraction_of_all_op_time = 14;</code>
       */
      public double getDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime() {
        return deviceCumulativeTotalSelfTimeAsFractionOfAllOpTime_;
      }
      /**
       * <pre>
       * Cumulative total self time in fraction on the device.
       * </pre>
       *
       * <code>optional double device_cumulative_total_self_time_as_fraction_of_all_op_time = 14;</code>
       */
      public Builder setDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime(double value) {
        bitField0_ |= 0x00001000;
        deviceCumulativeTotalSelfTimeAsFractionOfAllOpTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Cumulative total self time in fraction on the device.
       * </pre>
       *
       * <code>optional double device_cumulative_total_self_time_as_fraction_of_all_op_time = 14;</code>
       */
      public Builder clearDeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime() {
        bitField0_ = (bitField0_ & ~0x00001000);
        deviceCumulativeTotalSelfTimeAsFractionOfAllOpTime_ = 0D;
        onChanged();
        return this;
      }

      private double totalFlops_ ;
      /**
       * <pre>
       * Total number of FLOPs incurred by this OP.
       * </pre>
       *
       * <code>optional double total_flops = 15;</code>
       */
      public boolean hasTotalFlops() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <pre>
       * Total number of FLOPs incurred by this OP.
       * </pre>
       *
       * <code>optional double total_flops = 15;</code>
       */
      public double getTotalFlops() {
        return totalFlops_;
      }
      /**
       * <pre>
       * Total number of FLOPs incurred by this OP.
       * </pre>
       *
       * <code>optional double total_flops = 15;</code>
       */
      public Builder setTotalFlops(double value) {
        bitField0_ |= 0x00002000;
        totalFlops_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Total number of FLOPs incurred by this OP.
       * </pre>
       *
       * <code>optional double total_flops = 15;</code>
       */
      public Builder clearTotalFlops() {
        bitField0_ = (bitField0_ & ~0x00002000);
        totalFlops_ = 0D;
        onChanged();
        return this;
      }

      private double totalBytesAccessed_ ;
      /**
       * <pre>
       * Total number of bytes accessed by this OP.
       * </pre>
       *
       * <code>optional double total_bytes_accessed = 16;</code>
       */
      public boolean hasTotalBytesAccessed() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       * <pre>
       * Total number of bytes accessed by this OP.
       * </pre>
       *
       * <code>optional double total_bytes_accessed = 16;</code>
       */
      public double getTotalBytesAccessed() {
        return totalBytesAccessed_;
      }
      /**
       * <pre>
       * Total number of bytes accessed by this OP.
       * </pre>
       *
       * <code>optional double total_bytes_accessed = 16;</code>
       */
      public Builder setTotalBytesAccessed(double value) {
        bitField0_ |= 0x00004000;
        totalBytesAccessed_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Total number of bytes accessed by this OP.
       * </pre>
       *
       * <code>optional double total_bytes_accessed = 16;</code>
       */
      public Builder clearTotalBytesAccessed() {
        bitField0_ = (bitField0_ & ~0x00004000);
        totalBytesAccessed_ = 0D;
        onChanged();
        return this;
      }

      private double unit1OccupancyInUs_ ;
      /**
       * <pre>
       * Total time in microseconds that special hw unit 1 is occupied by this OP.
       * </pre>
       *
       * <code>optional double unit1_occupancy_in_us = 17;</code>
       */
      public boolean hasUnit1OccupancyInUs() {
        return ((bitField0_ & 0x00008000) == 0x00008000);
      }
      /**
       * <pre>
       * Total time in microseconds that special hw unit 1 is occupied by this OP.
       * </pre>
       *
       * <code>optional double unit1_occupancy_in_us = 17;</code>
       */
      public double getUnit1OccupancyInUs() {
        return unit1OccupancyInUs_;
      }
      /**
       * <pre>
       * Total time in microseconds that special hw unit 1 is occupied by this OP.
       * </pre>
       *
       * <code>optional double unit1_occupancy_in_us = 17;</code>
       */
      public Builder setUnit1OccupancyInUs(double value) {
        bitField0_ |= 0x00008000;
        unit1OccupancyInUs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Total time in microseconds that special hw unit 1 is occupied by this OP.
       * </pre>
       *
       * <code>optional double unit1_occupancy_in_us = 17;</code>
       */
      public Builder clearUnit1OccupancyInUs() {
        bitField0_ = (bitField0_ & ~0x00008000);
        unit1OccupancyInUs_ = 0D;
        onChanged();
        return this;
      }

      private double unit2OccupancyInUs_ ;
      /**
       * <pre>
       * Total time in microseconds that special hw unit 2 is occupied by this OP.
       * </pre>
       *
       * <code>optional double unit2_occupancy_in_us = 18;</code>
       */
      public boolean hasUnit2OccupancyInUs() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       * <pre>
       * Total time in microseconds that special hw unit 2 is occupied by this OP.
       * </pre>
       *
       * <code>optional double unit2_occupancy_in_us = 18;</code>
       */
      public double getUnit2OccupancyInUs() {
        return unit2OccupancyInUs_;
      }
      /**
       * <pre>
       * Total time in microseconds that special hw unit 2 is occupied by this OP.
       * </pre>
       *
       * <code>optional double unit2_occupancy_in_us = 18;</code>
       */
      public Builder setUnit2OccupancyInUs(double value) {
        bitField0_ |= 0x00010000;
        unit2OccupancyInUs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Total time in microseconds that special hw unit 2 is occupied by this OP.
       * </pre>
       *
       * <code>optional double unit2_occupancy_in_us = 18;</code>
       */
      public Builder clearUnit2OccupancyInUs() {
        bitField0_ = (bitField0_ & ~0x00010000);
        unit2OccupancyInUs_ = 0D;
        onChanged();
        return this;
      }

      private double totalMemoryStallInUs_ ;
      /**
       * <pre>
       * Total memory stall time in microseconds.
       * </pre>
       *
       * <code>optional double total_memory_stall_in_us = 19;</code>
       */
      public boolean hasTotalMemoryStallInUs() {
        return ((bitField0_ & 0x00020000) == 0x00020000);
      }
      /**
       * <pre>
       * Total memory stall time in microseconds.
       * </pre>
       *
       * <code>optional double total_memory_stall_in_us = 19;</code>
       */
      public double getTotalMemoryStallInUs() {
        return totalMemoryStallInUs_;
      }
      /**
       * <pre>
       * Total memory stall time in microseconds.
       * </pre>
       *
       * <code>optional double total_memory_stall_in_us = 19;</code>
       */
      public Builder setTotalMemoryStallInUs(double value) {
        bitField0_ |= 0x00020000;
        totalMemoryStallInUs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Total memory stall time in microseconds.
       * </pre>
       *
       * <code>optional double total_memory_stall_in_us = 19;</code>
       */
      public Builder clearTotalMemoryStallInUs() {
        bitField0_ = (bitField0_ & ~0x00020000);
        totalMemoryStallInUs_ = 0D;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.OpMetricsResult)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.OpMetricsResult)
    private static final tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<OpMetricsResult>
        PARSER = new com.google.protobuf.AbstractParser<OpMetricsResult>() {
      public OpMetricsResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new OpMetricsResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<OpMetricsResult> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<OpMetricsResult> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface OpMetricsDbResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.OpMetricsDbResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * A bunch of OpMetricsResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
     */
    java.util.List<tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult> 
        getMetricsDbList();
    /**
     * <pre>
     * A bunch of OpMetricsResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult getMetricsDb(int index);
    /**
     * <pre>
     * A bunch of OpMetricsResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
     */
    int getMetricsDbCount();
    /**
     * <pre>
     * A bunch of OpMetricsResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
     */
    java.util.List<? extends tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResultOrBuilder> 
        getMetricsDbOrBuilderList();
    /**
     * <pre>
     * A bunch of OpMetricsResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResultOrBuilder getMetricsDbOrBuilder(
        int index);

    /**
     * <pre>
     * The total host infeed-enqueue duration in picoseconds.
     * </pre>
     *
     * <code>optional uint64 total_host_infeed_enq_duration_ps = 2;</code>
     */
    boolean hasTotalHostInfeedEnqDurationPs();
    /**
     * <pre>
     * The total host infeed-enqueue duration in picoseconds.
     * </pre>
     *
     * <code>optional uint64 total_host_infeed_enq_duration_ps = 2;</code>
     */
    long getTotalHostInfeedEnqDurationPs();

    /**
     * <pre>
     * The total of the difference between the start times of two
     * consecutive infeed-enqueues (per host) in picoseconds.
     * </pre>
     *
     * <code>optional uint64 total_host_infeed_enq_start_timestamp_ps_diff = 3;</code>
     */
    boolean hasTotalHostInfeedEnqStartTimestampPsDiff();
    /**
     * <pre>
     * The total of the difference between the start times of two
     * consecutive infeed-enqueues (per host) in picoseconds.
     * </pre>
     *
     * <code>optional uint64 total_host_infeed_enq_start_timestamp_ps_diff = 3;</code>
     */
    long getTotalHostInfeedEnqStartTimestampPsDiff();
  }
  /**
   * <pre>
   * Result proto for OpMetricsDb.
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.OpMetricsDbResult}
   */
  public  static final class OpMetricsDbResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.OpMetricsDbResult)
      OpMetricsDbResultOrBuilder {
    // Use OpMetricsDbResult.newBuilder() to construct.
    private OpMetricsDbResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private OpMetricsDbResult() {
      metricsDb_ = java.util.Collections.emptyList();
      totalHostInfeedEnqDurationPs_ = 0L;
      totalHostInfeedEnqStartTimestampPsDiff_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private OpMetricsDbResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                metricsDb_ = new java.util.ArrayList<tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult>();
                mutable_bitField0_ |= 0x00000001;
              }
              metricsDb_.add(
                  input.readMessage(tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.PARSER, extensionRegistry));
              break;
            }
            case 16: {
              bitField0_ |= 0x00000001;
              totalHostInfeedEnqDurationPs_ = input.readUInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000002;
              totalHostInfeedEnqStartTimestampPsDiff_ = input.readUInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          metricsDb_ = java.util.Collections.unmodifiableList(metricsDb_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_OpMetricsDbResult_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_OpMetricsDbResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.class, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder.class);
    }

    private int bitField0_;
    public static final int METRICS_DB_FIELD_NUMBER = 1;
    private java.util.List<tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult> metricsDb_;
    /**
     * <pre>
     * A bunch of OpMetricsResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
     */
    public java.util.List<tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult> getMetricsDbList() {
      return metricsDb_;
    }
    /**
     * <pre>
     * A bunch of OpMetricsResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
     */
    public java.util.List<? extends tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResultOrBuilder> 
        getMetricsDbOrBuilderList() {
      return metricsDb_;
    }
    /**
     * <pre>
     * A bunch of OpMetricsResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
     */
    public int getMetricsDbCount() {
      return metricsDb_.size();
    }
    /**
     * <pre>
     * A bunch of OpMetricsResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult getMetricsDb(int index) {
      return metricsDb_.get(index);
    }
    /**
     * <pre>
     * A bunch of OpMetricsResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResultOrBuilder getMetricsDbOrBuilder(
        int index) {
      return metricsDb_.get(index);
    }

    public static final int TOTAL_HOST_INFEED_ENQ_DURATION_PS_FIELD_NUMBER = 2;
    private long totalHostInfeedEnqDurationPs_;
    /**
     * <pre>
     * The total host infeed-enqueue duration in picoseconds.
     * </pre>
     *
     * <code>optional uint64 total_host_infeed_enq_duration_ps = 2;</code>
     */
    public boolean hasTotalHostInfeedEnqDurationPs() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * The total host infeed-enqueue duration in picoseconds.
     * </pre>
     *
     * <code>optional uint64 total_host_infeed_enq_duration_ps = 2;</code>
     */
    public long getTotalHostInfeedEnqDurationPs() {
      return totalHostInfeedEnqDurationPs_;
    }

    public static final int TOTAL_HOST_INFEED_ENQ_START_TIMESTAMP_PS_DIFF_FIELD_NUMBER = 3;
    private long totalHostInfeedEnqStartTimestampPsDiff_;
    /**
     * <pre>
     * The total of the difference between the start times of two
     * consecutive infeed-enqueues (per host) in picoseconds.
     * </pre>
     *
     * <code>optional uint64 total_host_infeed_enq_start_timestamp_ps_diff = 3;</code>
     */
    public boolean hasTotalHostInfeedEnqStartTimestampPsDiff() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * The total of the difference between the start times of two
     * consecutive infeed-enqueues (per host) in picoseconds.
     * </pre>
     *
     * <code>optional uint64 total_host_infeed_enq_start_timestamp_ps_diff = 3;</code>
     */
    public long getTotalHostInfeedEnqStartTimestampPsDiff() {
      return totalHostInfeedEnqStartTimestampPsDiff_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < metricsDb_.size(); i++) {
        output.writeMessage(1, metricsDb_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt64(2, totalHostInfeedEnqDurationPs_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt64(3, totalHostInfeedEnqStartTimestampPsDiff_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < metricsDb_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, metricsDb_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(2, totalHostInfeedEnqDurationPs_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, totalHostInfeedEnqStartTimestampPsDiff_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult other = (tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult) obj;

      boolean result = true;
      result = result && getMetricsDbList()
          .equals(other.getMetricsDbList());
      result = result && (hasTotalHostInfeedEnqDurationPs() == other.hasTotalHostInfeedEnqDurationPs());
      if (hasTotalHostInfeedEnqDurationPs()) {
        result = result && (getTotalHostInfeedEnqDurationPs()
            == other.getTotalHostInfeedEnqDurationPs());
      }
      result = result && (hasTotalHostInfeedEnqStartTimestampPsDiff() == other.hasTotalHostInfeedEnqStartTimestampPsDiff());
      if (hasTotalHostInfeedEnqStartTimestampPsDiff()) {
        result = result && (getTotalHostInfeedEnqStartTimestampPsDiff()
            == other.getTotalHostInfeedEnqStartTimestampPsDiff());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getMetricsDbCount() > 0) {
        hash = (37 * hash) + METRICS_DB_FIELD_NUMBER;
        hash = (53 * hash) + getMetricsDbList().hashCode();
      }
      if (hasTotalHostInfeedEnqDurationPs()) {
        hash = (37 * hash) + TOTAL_HOST_INFEED_ENQ_DURATION_PS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getTotalHostInfeedEnqDurationPs());
      }
      if (hasTotalHostInfeedEnqStartTimestampPsDiff()) {
        hash = (37 * hash) + TOTAL_HOST_INFEED_ENQ_START_TIMESTAMP_PS_DIFF_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getTotalHostInfeedEnqStartTimestampPsDiff());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for OpMetricsDb.
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.OpMetricsDbResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.OpMetricsDbResult)
        tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_OpMetricsDbResult_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_OpMetricsDbResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.class, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getMetricsDbFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (metricsDbBuilder_ == null) {
          metricsDb_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          metricsDbBuilder_.clear();
        }
        totalHostInfeedEnqDurationPs_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        totalHostInfeedEnqStartTimestampPsDiff_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_OpMetricsDbResult_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult build() {
        tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult result = new tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (metricsDbBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            metricsDb_ = java.util.Collections.unmodifiableList(metricsDb_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.metricsDb_ = metricsDb_;
        } else {
          result.metricsDb_ = metricsDbBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000001;
        }
        result.totalHostInfeedEnqDurationPs_ = totalHostInfeedEnqDurationPs_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000002;
        }
        result.totalHostInfeedEnqStartTimestampPsDiff_ = totalHostInfeedEnqStartTimestampPsDiff_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.getDefaultInstance()) return this;
        if (metricsDbBuilder_ == null) {
          if (!other.metricsDb_.isEmpty()) {
            if (metricsDb_.isEmpty()) {
              metricsDb_ = other.metricsDb_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureMetricsDbIsMutable();
              metricsDb_.addAll(other.metricsDb_);
            }
            onChanged();
          }
        } else {
          if (!other.metricsDb_.isEmpty()) {
            if (metricsDbBuilder_.isEmpty()) {
              metricsDbBuilder_.dispose();
              metricsDbBuilder_ = null;
              metricsDb_ = other.metricsDb_;
              bitField0_ = (bitField0_ & ~0x00000001);
              metricsDbBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMetricsDbFieldBuilder() : null;
            } else {
              metricsDbBuilder_.addAllMessages(other.metricsDb_);
            }
          }
        }
        if (other.hasTotalHostInfeedEnqDurationPs()) {
          setTotalHostInfeedEnqDurationPs(other.getTotalHostInfeedEnqDurationPs());
        }
        if (other.hasTotalHostInfeedEnqStartTimestampPsDiff()) {
          setTotalHostInfeedEnqStartTimestampPsDiff(other.getTotalHostInfeedEnqStartTimestampPsDiff());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult> metricsDb_ =
        java.util.Collections.emptyList();
      private void ensureMetricsDbIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          metricsDb_ = new java.util.ArrayList<tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult>(metricsDb_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResultOrBuilder> metricsDbBuilder_;

      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public java.util.List<tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult> getMetricsDbList() {
        if (metricsDbBuilder_ == null) {
          return java.util.Collections.unmodifiableList(metricsDb_);
        } else {
          return metricsDbBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public int getMetricsDbCount() {
        if (metricsDbBuilder_ == null) {
          return metricsDb_.size();
        } else {
          return metricsDbBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult getMetricsDb(int index) {
        if (metricsDbBuilder_ == null) {
          return metricsDb_.get(index);
        } else {
          return metricsDbBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public Builder setMetricsDb(
          int index, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult value) {
        if (metricsDbBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetricsDbIsMutable();
          metricsDb_.set(index, value);
          onChanged();
        } else {
          metricsDbBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public Builder setMetricsDb(
          int index, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.Builder builderForValue) {
        if (metricsDbBuilder_ == null) {
          ensureMetricsDbIsMutable();
          metricsDb_.set(index, builderForValue.build());
          onChanged();
        } else {
          metricsDbBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public Builder addMetricsDb(tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult value) {
        if (metricsDbBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetricsDbIsMutable();
          metricsDb_.add(value);
          onChanged();
        } else {
          metricsDbBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public Builder addMetricsDb(
          int index, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult value) {
        if (metricsDbBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetricsDbIsMutable();
          metricsDb_.add(index, value);
          onChanged();
        } else {
          metricsDbBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public Builder addMetricsDb(
          tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.Builder builderForValue) {
        if (metricsDbBuilder_ == null) {
          ensureMetricsDbIsMutable();
          metricsDb_.add(builderForValue.build());
          onChanged();
        } else {
          metricsDbBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public Builder addMetricsDb(
          int index, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.Builder builderForValue) {
        if (metricsDbBuilder_ == null) {
          ensureMetricsDbIsMutable();
          metricsDb_.add(index, builderForValue.build());
          onChanged();
        } else {
          metricsDbBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public Builder addAllMetricsDb(
          java.lang.Iterable<? extends tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult> values) {
        if (metricsDbBuilder_ == null) {
          ensureMetricsDbIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, metricsDb_);
          onChanged();
        } else {
          metricsDbBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public Builder clearMetricsDb() {
        if (metricsDbBuilder_ == null) {
          metricsDb_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          metricsDbBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public Builder removeMetricsDb(int index) {
        if (metricsDbBuilder_ == null) {
          ensureMetricsDbIsMutable();
          metricsDb_.remove(index);
          onChanged();
        } else {
          metricsDbBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.Builder getMetricsDbBuilder(
          int index) {
        return getMetricsDbFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResultOrBuilder getMetricsDbOrBuilder(
          int index) {
        if (metricsDbBuilder_ == null) {
          return metricsDb_.get(index);  } else {
          return metricsDbBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public java.util.List<? extends tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResultOrBuilder> 
           getMetricsDbOrBuilderList() {
        if (metricsDbBuilder_ != null) {
          return metricsDbBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(metricsDb_);
        }
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.Builder addMetricsDbBuilder() {
        return getMetricsDbFieldBuilder().addBuilder(
            tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.getDefaultInstance());
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.Builder addMetricsDbBuilder(
          int index) {
        return getMetricsDbFieldBuilder().addBuilder(
            index, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.getDefaultInstance());
      }
      /**
       * <pre>
       * A bunch of OpMetricsResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.OpMetricsResult metrics_db = 1;</code>
       */
      public java.util.List<tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.Builder> 
           getMetricsDbBuilderList() {
        return getMetricsDbFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResultOrBuilder> 
          getMetricsDbFieldBuilder() {
        if (metricsDbBuilder_ == null) {
          metricsDbBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsResultOrBuilder>(
                  metricsDb_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          metricsDb_ = null;
        }
        return metricsDbBuilder_;
      }

      private long totalHostInfeedEnqDurationPs_ ;
      /**
       * <pre>
       * The total host infeed-enqueue duration in picoseconds.
       * </pre>
       *
       * <code>optional uint64 total_host_infeed_enq_duration_ps = 2;</code>
       */
      public boolean hasTotalHostInfeedEnqDurationPs() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * The total host infeed-enqueue duration in picoseconds.
       * </pre>
       *
       * <code>optional uint64 total_host_infeed_enq_duration_ps = 2;</code>
       */
      public long getTotalHostInfeedEnqDurationPs() {
        return totalHostInfeedEnqDurationPs_;
      }
      /**
       * <pre>
       * The total host infeed-enqueue duration in picoseconds.
       * </pre>
       *
       * <code>optional uint64 total_host_infeed_enq_duration_ps = 2;</code>
       */
      public Builder setTotalHostInfeedEnqDurationPs(long value) {
        bitField0_ |= 0x00000002;
        totalHostInfeedEnqDurationPs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The total host infeed-enqueue duration in picoseconds.
       * </pre>
       *
       * <code>optional uint64 total_host_infeed_enq_duration_ps = 2;</code>
       */
      public Builder clearTotalHostInfeedEnqDurationPs() {
        bitField0_ = (bitField0_ & ~0x00000002);
        totalHostInfeedEnqDurationPs_ = 0L;
        onChanged();
        return this;
      }

      private long totalHostInfeedEnqStartTimestampPsDiff_ ;
      /**
       * <pre>
       * The total of the difference between the start times of two
       * consecutive infeed-enqueues (per host) in picoseconds.
       * </pre>
       *
       * <code>optional uint64 total_host_infeed_enq_start_timestamp_ps_diff = 3;</code>
       */
      public boolean hasTotalHostInfeedEnqStartTimestampPsDiff() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * The total of the difference between the start times of two
       * consecutive infeed-enqueues (per host) in picoseconds.
       * </pre>
       *
       * <code>optional uint64 total_host_infeed_enq_start_timestamp_ps_diff = 3;</code>
       */
      public long getTotalHostInfeedEnqStartTimestampPsDiff() {
        return totalHostInfeedEnqStartTimestampPsDiff_;
      }
      /**
       * <pre>
       * The total of the difference between the start times of two
       * consecutive infeed-enqueues (per host) in picoseconds.
       * </pre>
       *
       * <code>optional uint64 total_host_infeed_enq_start_timestamp_ps_diff = 3;</code>
       */
      public Builder setTotalHostInfeedEnqStartTimestampPsDiff(long value) {
        bitField0_ |= 0x00000004;
        totalHostInfeedEnqStartTimestampPsDiff_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The total of the difference between the start times of two
       * consecutive infeed-enqueues (per host) in picoseconds.
       * </pre>
       *
       * <code>optional uint64 total_host_infeed_enq_start_timestamp_ps_diff = 3;</code>
       */
      public Builder clearTotalHostInfeedEnqStartTimestampPsDiff() {
        bitField0_ = (bitField0_ & ~0x00000004);
        totalHostInfeedEnqStartTimestampPsDiff_ = 0L;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.OpMetricsDbResult)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.OpMetricsDbResult)
    private static final tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<OpMetricsDbResult>
        PARSER = new com.google.protobuf.AbstractParser<OpMetricsDbResult>() {
      public OpMetricsDbResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new OpMetricsDbResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<OpMetricsDbResult> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<OpMetricsDbResult> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface StepInfoResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.StepInfoResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * The (micro) step number.
     * </pre>
     *
     * <code>optional uint32 step_num = 1;</code>
     */
    boolean hasStepNum();
    /**
     * <pre>
     * The (micro) step number.
     * </pre>
     *
     * <code>optional uint32 step_num = 1;</code>
     */
    int getStepNum();

    /**
     * <pre>
     * The step duration in picoseconds.
     * </pre>
     *
     * <code>optional uint64 duration_ps = 2;</code>
     */
    boolean hasDurationPs();
    /**
     * <pre>
     * The step duration in picoseconds.
     * </pre>
     *
     * <code>optional uint64 duration_ps = 2;</code>
     */
    long getDurationPs();

    /**
     * <pre>
     * The infeed duration in picoseconds.
     * Can turn into a map if we want a variable number of ops.
     * </pre>
     *
     * <code>optional uint64 infeed_duration_ps = 3;</code>
     */
    boolean hasInfeedDurationPs();
    /**
     * <pre>
     * The infeed duration in picoseconds.
     * Can turn into a map if we want a variable number of ops.
     * </pre>
     *
     * <code>optional uint64 infeed_duration_ps = 3;</code>
     */
    long getInfeedDurationPs();

    /**
     * <pre>
     * The start time of this step in picoseconds.
     * </pre>
     *
     * <code>optional uint64 begin_ps = 4;</code>
     */
    boolean hasBeginPs();
    /**
     * <pre>
     * The start time of this step in picoseconds.
     * </pre>
     *
     * <code>optional uint64 begin_ps = 4;</code>
     */
    long getBeginPs();

    /**
     * <pre>
     * The waiting time within this step in picoseconds.
     * </pre>
     *
     * <code>optional uint64 wait_duration_ps = 5;</code>
     */
    boolean hasWaitDurationPs();
    /**
     * <pre>
     * The waiting time within this step in picoseconds.
     * </pre>
     *
     * <code>optional uint64 wait_duration_ps = 5;</code>
     */
    long getWaitDurationPs();

    /**
     * <pre>
     * The time spent on cross-replica-sum in picoseconds.
     * </pre>
     *
     * <code>optional uint64 crs_duration_ps = 6;</code>
     */
    boolean hasCrsDurationPs();
    /**
     * <pre>
     * The time spent on cross-replica-sum in picoseconds.
     * </pre>
     *
     * <code>optional uint64 crs_duration_ps = 6;</code>
     */
    long getCrsDurationPs();
  }
  /**
   * <pre>
   * Result proto for StepInfo.
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.StepInfoResult}
   */
  public  static final class StepInfoResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.StepInfoResult)
      StepInfoResultOrBuilder {
    // Use StepInfoResult.newBuilder() to construct.
    private StepInfoResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private StepInfoResult() {
      stepNum_ = 0;
      durationPs_ = 0L;
      infeedDurationPs_ = 0L;
      beginPs_ = 0L;
      waitDurationPs_ = 0L;
      crsDurationPs_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private StepInfoResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              stepNum_ = input.readUInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              durationPs_ = input.readUInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              infeedDurationPs_ = input.readUInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              beginPs_ = input.readUInt64();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              waitDurationPs_ = input.readUInt64();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              crsDurationPs_ = input.readUInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepInfoResult_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepInfoResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.class, tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.Builder.class);
    }

    private int bitField0_;
    public static final int STEP_NUM_FIELD_NUMBER = 1;
    private int stepNum_;
    /**
     * <pre>
     * The (micro) step number.
     * </pre>
     *
     * <code>optional uint32 step_num = 1;</code>
     */
    public boolean hasStepNum() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * The (micro) step number.
     * </pre>
     *
     * <code>optional uint32 step_num = 1;</code>
     */
    public int getStepNum() {
      return stepNum_;
    }

    public static final int DURATION_PS_FIELD_NUMBER = 2;
    private long durationPs_;
    /**
     * <pre>
     * The step duration in picoseconds.
     * </pre>
     *
     * <code>optional uint64 duration_ps = 2;</code>
     */
    public boolean hasDurationPs() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * The step duration in picoseconds.
     * </pre>
     *
     * <code>optional uint64 duration_ps = 2;</code>
     */
    public long getDurationPs() {
      return durationPs_;
    }

    public static final int INFEED_DURATION_PS_FIELD_NUMBER = 3;
    private long infeedDurationPs_;
    /**
     * <pre>
     * The infeed duration in picoseconds.
     * Can turn into a map if we want a variable number of ops.
     * </pre>
     *
     * <code>optional uint64 infeed_duration_ps = 3;</code>
     */
    public boolean hasInfeedDurationPs() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * The infeed duration in picoseconds.
     * Can turn into a map if we want a variable number of ops.
     * </pre>
     *
     * <code>optional uint64 infeed_duration_ps = 3;</code>
     */
    public long getInfeedDurationPs() {
      return infeedDurationPs_;
    }

    public static final int BEGIN_PS_FIELD_NUMBER = 4;
    private long beginPs_;
    /**
     * <pre>
     * The start time of this step in picoseconds.
     * </pre>
     *
     * <code>optional uint64 begin_ps = 4;</code>
     */
    public boolean hasBeginPs() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     * The start time of this step in picoseconds.
     * </pre>
     *
     * <code>optional uint64 begin_ps = 4;</code>
     */
    public long getBeginPs() {
      return beginPs_;
    }

    public static final int WAIT_DURATION_PS_FIELD_NUMBER = 5;
    private long waitDurationPs_;
    /**
     * <pre>
     * The waiting time within this step in picoseconds.
     * </pre>
     *
     * <code>optional uint64 wait_duration_ps = 5;</code>
     */
    public boolean hasWaitDurationPs() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <pre>
     * The waiting time within this step in picoseconds.
     * </pre>
     *
     * <code>optional uint64 wait_duration_ps = 5;</code>
     */
    public long getWaitDurationPs() {
      return waitDurationPs_;
    }

    public static final int CRS_DURATION_PS_FIELD_NUMBER = 6;
    private long crsDurationPs_;
    /**
     * <pre>
     * The time spent on cross-replica-sum in picoseconds.
     * </pre>
     *
     * <code>optional uint64 crs_duration_ps = 6;</code>
     */
    public boolean hasCrsDurationPs() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <pre>
     * The time spent on cross-replica-sum in picoseconds.
     * </pre>
     *
     * <code>optional uint64 crs_duration_ps = 6;</code>
     */
    public long getCrsDurationPs() {
      return crsDurationPs_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt32(1, stepNum_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt64(2, durationPs_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt64(3, infeedDurationPs_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt64(4, beginPs_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeUInt64(5, waitDurationPs_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeUInt64(6, crsDurationPs_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, stepNum_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(2, durationPs_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, infeedDurationPs_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(4, beginPs_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(5, waitDurationPs_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(6, crsDurationPs_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult other = (tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult) obj;

      boolean result = true;
      result = result && (hasStepNum() == other.hasStepNum());
      if (hasStepNum()) {
        result = result && (getStepNum()
            == other.getStepNum());
      }
      result = result && (hasDurationPs() == other.hasDurationPs());
      if (hasDurationPs()) {
        result = result && (getDurationPs()
            == other.getDurationPs());
      }
      result = result && (hasInfeedDurationPs() == other.hasInfeedDurationPs());
      if (hasInfeedDurationPs()) {
        result = result && (getInfeedDurationPs()
            == other.getInfeedDurationPs());
      }
      result = result && (hasBeginPs() == other.hasBeginPs());
      if (hasBeginPs()) {
        result = result && (getBeginPs()
            == other.getBeginPs());
      }
      result = result && (hasWaitDurationPs() == other.hasWaitDurationPs());
      if (hasWaitDurationPs()) {
        result = result && (getWaitDurationPs()
            == other.getWaitDurationPs());
      }
      result = result && (hasCrsDurationPs() == other.hasCrsDurationPs());
      if (hasCrsDurationPs()) {
        result = result && (getCrsDurationPs()
            == other.getCrsDurationPs());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasStepNum()) {
        hash = (37 * hash) + STEP_NUM_FIELD_NUMBER;
        hash = (53 * hash) + getStepNum();
      }
      if (hasDurationPs()) {
        hash = (37 * hash) + DURATION_PS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getDurationPs());
      }
      if (hasInfeedDurationPs()) {
        hash = (37 * hash) + INFEED_DURATION_PS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getInfeedDurationPs());
      }
      if (hasBeginPs()) {
        hash = (37 * hash) + BEGIN_PS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getBeginPs());
      }
      if (hasWaitDurationPs()) {
        hash = (37 * hash) + WAIT_DURATION_PS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getWaitDurationPs());
      }
      if (hasCrsDurationPs()) {
        hash = (37 * hash) + CRS_DURATION_PS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getCrsDurationPs());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for StepInfo.
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.StepInfoResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.StepInfoResult)
        tensorflow.tpu.TfOpStatsOuterClass.StepInfoResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepInfoResult_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepInfoResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.class, tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        stepNum_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        durationPs_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        infeedDurationPs_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        beginPs_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        waitDurationPs_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        crsDurationPs_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepInfoResult_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult build() {
        tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult result = new tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.stepNum_ = stepNum_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.durationPs_ = durationPs_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.infeedDurationPs_ = infeedDurationPs_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.beginPs_ = beginPs_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.waitDurationPs_ = waitDurationPs_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.crsDurationPs_ = crsDurationPs_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.getDefaultInstance()) return this;
        if (other.hasStepNum()) {
          setStepNum(other.getStepNum());
        }
        if (other.hasDurationPs()) {
          setDurationPs(other.getDurationPs());
        }
        if (other.hasInfeedDurationPs()) {
          setInfeedDurationPs(other.getInfeedDurationPs());
        }
        if (other.hasBeginPs()) {
          setBeginPs(other.getBeginPs());
        }
        if (other.hasWaitDurationPs()) {
          setWaitDurationPs(other.getWaitDurationPs());
        }
        if (other.hasCrsDurationPs()) {
          setCrsDurationPs(other.getCrsDurationPs());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int stepNum_ ;
      /**
       * <pre>
       * The (micro) step number.
       * </pre>
       *
       * <code>optional uint32 step_num = 1;</code>
       */
      public boolean hasStepNum() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * The (micro) step number.
       * </pre>
       *
       * <code>optional uint32 step_num = 1;</code>
       */
      public int getStepNum() {
        return stepNum_;
      }
      /**
       * <pre>
       * The (micro) step number.
       * </pre>
       *
       * <code>optional uint32 step_num = 1;</code>
       */
      public Builder setStepNum(int value) {
        bitField0_ |= 0x00000001;
        stepNum_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The (micro) step number.
       * </pre>
       *
       * <code>optional uint32 step_num = 1;</code>
       */
      public Builder clearStepNum() {
        bitField0_ = (bitField0_ & ~0x00000001);
        stepNum_ = 0;
        onChanged();
        return this;
      }

      private long durationPs_ ;
      /**
       * <pre>
       * The step duration in picoseconds.
       * </pre>
       *
       * <code>optional uint64 duration_ps = 2;</code>
       */
      public boolean hasDurationPs() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * The step duration in picoseconds.
       * </pre>
       *
       * <code>optional uint64 duration_ps = 2;</code>
       */
      public long getDurationPs() {
        return durationPs_;
      }
      /**
       * <pre>
       * The step duration in picoseconds.
       * </pre>
       *
       * <code>optional uint64 duration_ps = 2;</code>
       */
      public Builder setDurationPs(long value) {
        bitField0_ |= 0x00000002;
        durationPs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The step duration in picoseconds.
       * </pre>
       *
       * <code>optional uint64 duration_ps = 2;</code>
       */
      public Builder clearDurationPs() {
        bitField0_ = (bitField0_ & ~0x00000002);
        durationPs_ = 0L;
        onChanged();
        return this;
      }

      private long infeedDurationPs_ ;
      /**
       * <pre>
       * The infeed duration in picoseconds.
       * Can turn into a map if we want a variable number of ops.
       * </pre>
       *
       * <code>optional uint64 infeed_duration_ps = 3;</code>
       */
      public boolean hasInfeedDurationPs() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * The infeed duration in picoseconds.
       * Can turn into a map if we want a variable number of ops.
       * </pre>
       *
       * <code>optional uint64 infeed_duration_ps = 3;</code>
       */
      public long getInfeedDurationPs() {
        return infeedDurationPs_;
      }
      /**
       * <pre>
       * The infeed duration in picoseconds.
       * Can turn into a map if we want a variable number of ops.
       * </pre>
       *
       * <code>optional uint64 infeed_duration_ps = 3;</code>
       */
      public Builder setInfeedDurationPs(long value) {
        bitField0_ |= 0x00000004;
        infeedDurationPs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The infeed duration in picoseconds.
       * Can turn into a map if we want a variable number of ops.
       * </pre>
       *
       * <code>optional uint64 infeed_duration_ps = 3;</code>
       */
      public Builder clearInfeedDurationPs() {
        bitField0_ = (bitField0_ & ~0x00000004);
        infeedDurationPs_ = 0L;
        onChanged();
        return this;
      }

      private long beginPs_ ;
      /**
       * <pre>
       * The start time of this step in picoseconds.
       * </pre>
       *
       * <code>optional uint64 begin_ps = 4;</code>
       */
      public boolean hasBeginPs() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       * The start time of this step in picoseconds.
       * </pre>
       *
       * <code>optional uint64 begin_ps = 4;</code>
       */
      public long getBeginPs() {
        return beginPs_;
      }
      /**
       * <pre>
       * The start time of this step in picoseconds.
       * </pre>
       *
       * <code>optional uint64 begin_ps = 4;</code>
       */
      public Builder setBeginPs(long value) {
        bitField0_ |= 0x00000008;
        beginPs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The start time of this step in picoseconds.
       * </pre>
       *
       * <code>optional uint64 begin_ps = 4;</code>
       */
      public Builder clearBeginPs() {
        bitField0_ = (bitField0_ & ~0x00000008);
        beginPs_ = 0L;
        onChanged();
        return this;
      }

      private long waitDurationPs_ ;
      /**
       * <pre>
       * The waiting time within this step in picoseconds.
       * </pre>
       *
       * <code>optional uint64 wait_duration_ps = 5;</code>
       */
      public boolean hasWaitDurationPs() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <pre>
       * The waiting time within this step in picoseconds.
       * </pre>
       *
       * <code>optional uint64 wait_duration_ps = 5;</code>
       */
      public long getWaitDurationPs() {
        return waitDurationPs_;
      }
      /**
       * <pre>
       * The waiting time within this step in picoseconds.
       * </pre>
       *
       * <code>optional uint64 wait_duration_ps = 5;</code>
       */
      public Builder setWaitDurationPs(long value) {
        bitField0_ |= 0x00000010;
        waitDurationPs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The waiting time within this step in picoseconds.
       * </pre>
       *
       * <code>optional uint64 wait_duration_ps = 5;</code>
       */
      public Builder clearWaitDurationPs() {
        bitField0_ = (bitField0_ & ~0x00000010);
        waitDurationPs_ = 0L;
        onChanged();
        return this;
      }

      private long crsDurationPs_ ;
      /**
       * <pre>
       * The time spent on cross-replica-sum in picoseconds.
       * </pre>
       *
       * <code>optional uint64 crs_duration_ps = 6;</code>
       */
      public boolean hasCrsDurationPs() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <pre>
       * The time spent on cross-replica-sum in picoseconds.
       * </pre>
       *
       * <code>optional uint64 crs_duration_ps = 6;</code>
       */
      public long getCrsDurationPs() {
        return crsDurationPs_;
      }
      /**
       * <pre>
       * The time spent on cross-replica-sum in picoseconds.
       * </pre>
       *
       * <code>optional uint64 crs_duration_ps = 6;</code>
       */
      public Builder setCrsDurationPs(long value) {
        bitField0_ |= 0x00000020;
        crsDurationPs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The time spent on cross-replica-sum in picoseconds.
       * </pre>
       *
       * <code>optional uint64 crs_duration_ps = 6;</code>
       */
      public Builder clearCrsDurationPs() {
        bitField0_ = (bitField0_ & ~0x00000020);
        crsDurationPs_ = 0L;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.StepInfoResult)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.StepInfoResult)
    private static final tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<StepInfoResult>
        PARSER = new com.google.protobuf.AbstractParser<StepInfoResult>() {
      public StepInfoResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new StepInfoResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<StepInfoResult> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<StepInfoResult> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface StepSequenceResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.StepSequenceResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * A sequence of StepInfoResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
     */
    java.util.List<tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult> 
        getStepSequenceList();
    /**
     * <pre>
     * A sequence of StepInfoResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult getStepSequence(int index);
    /**
     * <pre>
     * A sequence of StepInfoResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
     */
    int getStepSequenceCount();
    /**
     * <pre>
     * A sequence of StepInfoResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
     */
    java.util.List<? extends tensorflow.tpu.TfOpStatsOuterClass.StepInfoResultOrBuilder> 
        getStepSequenceOrBuilderList();
    /**
     * <pre>
     * A sequence of StepInfoResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.StepInfoResultOrBuilder getStepSequenceOrBuilder(
        int index);
  }
  /**
   * <pre>
   * Result proto for a sequence of steps.
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.StepSequenceResult}
   */
  public  static final class StepSequenceResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.StepSequenceResult)
      StepSequenceResultOrBuilder {
    // Use StepSequenceResult.newBuilder() to construct.
    private StepSequenceResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private StepSequenceResult() {
      stepSequence_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private StepSequenceResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                stepSequence_ = new java.util.ArrayList<tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult>();
                mutable_bitField0_ |= 0x00000001;
              }
              stepSequence_.add(
                  input.readMessage(tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          stepSequence_ = java.util.Collections.unmodifiableList(stepSequence_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepSequenceResult_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepSequenceResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult.class, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult.Builder.class);
    }

    public static final int STEP_SEQUENCE_FIELD_NUMBER = 1;
    private java.util.List<tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult> stepSequence_;
    /**
     * <pre>
     * A sequence of StepInfoResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
     */
    public java.util.List<tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult> getStepSequenceList() {
      return stepSequence_;
    }
    /**
     * <pre>
     * A sequence of StepInfoResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
     */
    public java.util.List<? extends tensorflow.tpu.TfOpStatsOuterClass.StepInfoResultOrBuilder> 
        getStepSequenceOrBuilderList() {
      return stepSequence_;
    }
    /**
     * <pre>
     * A sequence of StepInfoResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
     */
    public int getStepSequenceCount() {
      return stepSequence_.size();
    }
    /**
     * <pre>
     * A sequence of StepInfoResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult getStepSequence(int index) {
      return stepSequence_.get(index);
    }
    /**
     * <pre>
     * A sequence of StepInfoResults.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.StepInfoResultOrBuilder getStepSequenceOrBuilder(
        int index) {
      return stepSequence_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < stepSequence_.size(); i++) {
        output.writeMessage(1, stepSequence_.get(i));
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < stepSequence_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, stepSequence_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult other = (tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult) obj;

      boolean result = true;
      result = result && getStepSequenceList()
          .equals(other.getStepSequenceList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getStepSequenceCount() > 0) {
        hash = (37 * hash) + STEP_SEQUENCE_FIELD_NUMBER;
        hash = (53 * hash) + getStepSequenceList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for a sequence of steps.
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.StepSequenceResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.StepSequenceResult)
        tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepSequenceResult_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepSequenceResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult.class, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getStepSequenceFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (stepSequenceBuilder_ == null) {
          stepSequence_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          stepSequenceBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepSequenceResult_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult build() {
        tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult result = new tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult(this);
        int from_bitField0_ = bitField0_;
        if (stepSequenceBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            stepSequence_ = java.util.Collections.unmodifiableList(stepSequence_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.stepSequence_ = stepSequence_;
        } else {
          result.stepSequence_ = stepSequenceBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult.getDefaultInstance()) return this;
        if (stepSequenceBuilder_ == null) {
          if (!other.stepSequence_.isEmpty()) {
            if (stepSequence_.isEmpty()) {
              stepSequence_ = other.stepSequence_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureStepSequenceIsMutable();
              stepSequence_.addAll(other.stepSequence_);
            }
            onChanged();
          }
        } else {
          if (!other.stepSequence_.isEmpty()) {
            if (stepSequenceBuilder_.isEmpty()) {
              stepSequenceBuilder_.dispose();
              stepSequenceBuilder_ = null;
              stepSequence_ = other.stepSequence_;
              bitField0_ = (bitField0_ & ~0x00000001);
              stepSequenceBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getStepSequenceFieldBuilder() : null;
            } else {
              stepSequenceBuilder_.addAllMessages(other.stepSequence_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult> stepSequence_ =
        java.util.Collections.emptyList();
      private void ensureStepSequenceIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          stepSequence_ = new java.util.ArrayList<tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult>(stepSequence_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult, tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.StepInfoResultOrBuilder> stepSequenceBuilder_;

      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public java.util.List<tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult> getStepSequenceList() {
        if (stepSequenceBuilder_ == null) {
          return java.util.Collections.unmodifiableList(stepSequence_);
        } else {
          return stepSequenceBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public int getStepSequenceCount() {
        if (stepSequenceBuilder_ == null) {
          return stepSequence_.size();
        } else {
          return stepSequenceBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult getStepSequence(int index) {
        if (stepSequenceBuilder_ == null) {
          return stepSequence_.get(index);
        } else {
          return stepSequenceBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public Builder setStepSequence(
          int index, tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult value) {
        if (stepSequenceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStepSequenceIsMutable();
          stepSequence_.set(index, value);
          onChanged();
        } else {
          stepSequenceBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public Builder setStepSequence(
          int index, tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.Builder builderForValue) {
        if (stepSequenceBuilder_ == null) {
          ensureStepSequenceIsMutable();
          stepSequence_.set(index, builderForValue.build());
          onChanged();
        } else {
          stepSequenceBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public Builder addStepSequence(tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult value) {
        if (stepSequenceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStepSequenceIsMutable();
          stepSequence_.add(value);
          onChanged();
        } else {
          stepSequenceBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public Builder addStepSequence(
          int index, tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult value) {
        if (stepSequenceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStepSequenceIsMutable();
          stepSequence_.add(index, value);
          onChanged();
        } else {
          stepSequenceBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public Builder addStepSequence(
          tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.Builder builderForValue) {
        if (stepSequenceBuilder_ == null) {
          ensureStepSequenceIsMutable();
          stepSequence_.add(builderForValue.build());
          onChanged();
        } else {
          stepSequenceBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public Builder addStepSequence(
          int index, tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.Builder builderForValue) {
        if (stepSequenceBuilder_ == null) {
          ensureStepSequenceIsMutable();
          stepSequence_.add(index, builderForValue.build());
          onChanged();
        } else {
          stepSequenceBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public Builder addAllStepSequence(
          java.lang.Iterable<? extends tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult> values) {
        if (stepSequenceBuilder_ == null) {
          ensureStepSequenceIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, stepSequence_);
          onChanged();
        } else {
          stepSequenceBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public Builder clearStepSequence() {
        if (stepSequenceBuilder_ == null) {
          stepSequence_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          stepSequenceBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public Builder removeStepSequence(int index) {
        if (stepSequenceBuilder_ == null) {
          ensureStepSequenceIsMutable();
          stepSequence_.remove(index);
          onChanged();
        } else {
          stepSequenceBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.Builder getStepSequenceBuilder(
          int index) {
        return getStepSequenceFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.StepInfoResultOrBuilder getStepSequenceOrBuilder(
          int index) {
        if (stepSequenceBuilder_ == null) {
          return stepSequence_.get(index);  } else {
          return stepSequenceBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public java.util.List<? extends tensorflow.tpu.TfOpStatsOuterClass.StepInfoResultOrBuilder> 
           getStepSequenceOrBuilderList() {
        if (stepSequenceBuilder_ != null) {
          return stepSequenceBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(stepSequence_);
        }
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.Builder addStepSequenceBuilder() {
        return getStepSequenceFieldBuilder().addBuilder(
            tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.getDefaultInstance());
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.Builder addStepSequenceBuilder(
          int index) {
        return getStepSequenceFieldBuilder().addBuilder(
            index, tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.getDefaultInstance());
      }
      /**
       * <pre>
       * A sequence of StepInfoResults.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.StepInfoResult step_sequence = 1;</code>
       */
      public java.util.List<tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.Builder> 
           getStepSequenceBuilderList() {
        return getStepSequenceFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult, tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.StepInfoResultOrBuilder> 
          getStepSequenceFieldBuilder() {
        if (stepSequenceBuilder_ == null) {
          stepSequenceBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult, tensorflow.tpu.TfOpStatsOuterClass.StepInfoResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.StepInfoResultOrBuilder>(
                  stepSequence_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          stepSequence_ = null;
        }
        return stepSequenceBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.StepSequenceResult)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.StepSequenceResult)
    private static final tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<StepSequenceResult>
        PARSER = new com.google.protobuf.AbstractParser<StepSequenceResult>() {
      public StepSequenceResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new StepSequenceResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<StepSequenceResult> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<StepSequenceResult> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface StepDatabaseResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.StepDatabaseResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * A map from core_id to StepSequenceResult.
     * </pre>
     *
     * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
     */
    int getStepSequencePerCoreCount();
    /**
     * <pre>
     * A map from core_id to StepSequenceResult.
     * </pre>
     *
     * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
     */
    boolean containsStepSequencePerCore(
        int key);
    /**
     * Use {@link #getStepSequencePerCoreMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult>
    getStepSequencePerCore();
    /**
     * <pre>
     * A map from core_id to StepSequenceResult.
     * </pre>
     *
     * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
     */
    java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult>
    getStepSequencePerCoreMap();
    /**
     * <pre>
     * A map from core_id to StepSequenceResult.
     * </pre>
     *
     * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
     */

    tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult getStepSequencePerCoreOrDefault(
        int key,
        tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult defaultValue);
    /**
     * <pre>
     * A map from core_id to StepSequenceResult.
     * </pre>
     *
     * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
     */

    tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult getStepSequencePerCoreOrThrow(
        int key);
  }
  /**
   * <pre>
   * Result proto for a StepDatabase.
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.StepDatabaseResult}
   */
  public  static final class StepDatabaseResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.StepDatabaseResult)
      StepDatabaseResultOrBuilder {
    // Use StepDatabaseResult.newBuilder() to construct.
    private StepDatabaseResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private StepDatabaseResult() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private StepDatabaseResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                stepSequencePerCore_ = com.google.protobuf.MapField.newMapField(
                    StepSequencePerCoreDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000001;
              }
              com.google.protobuf.MapEntry<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult>
              stepSequencePerCore__ = input.readMessage(
                  StepSequencePerCoreDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              stepSequencePerCore_.getMutableMap().put(
                  stepSequencePerCore__.getKey(), stepSequencePerCore__.getValue());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepDatabaseResult_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 1:
          return internalGetStepSequencePerCore();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepDatabaseResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.class, tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.Builder.class);
    }

    public static final int STEP_SEQUENCE_PER_CORE_FIELD_NUMBER = 1;
    private static final class StepSequencePerCoreDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult>newDefaultInstance(
                  tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepDatabaseResult_StepSequencePerCoreEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.UINT32,
                  0,
                  com.google.protobuf.WireFormat.FieldType.MESSAGE,
                  tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult.getDefaultInstance());
    }
    private com.google.protobuf.MapField<
        java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult> stepSequencePerCore_;
    private com.google.protobuf.MapField<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult>
    internalGetStepSequencePerCore() {
      if (stepSequencePerCore_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            StepSequencePerCoreDefaultEntryHolder.defaultEntry);
      }
      return stepSequencePerCore_;
    }

    public int getStepSequencePerCoreCount() {
      return internalGetStepSequencePerCore().getMap().size();
    }
    /**
     * <pre>
     * A map from core_id to StepSequenceResult.
     * </pre>
     *
     * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
     */

    public boolean containsStepSequencePerCore(
        int key) {
      
      return internalGetStepSequencePerCore().getMap().containsKey(key);
    }
    /**
     * Use {@link #getStepSequencePerCoreMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult> getStepSequencePerCore() {
      return getStepSequencePerCoreMap();
    }
    /**
     * <pre>
     * A map from core_id to StepSequenceResult.
     * </pre>
     *
     * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
     */

    public java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult> getStepSequencePerCoreMap() {
      return internalGetStepSequencePerCore().getMap();
    }
    /**
     * <pre>
     * A map from core_id to StepSequenceResult.
     * </pre>
     *
     * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
     */

    public tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult getStepSequencePerCoreOrDefault(
        int key,
        tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult defaultValue) {
      
      java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult> map =
          internalGetStepSequencePerCore().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <pre>
     * A map from core_id to StepSequenceResult.
     * </pre>
     *
     * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
     */

    public tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult getStepSequencePerCoreOrThrow(
        int key) {
      
      java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult> map =
          internalGetStepSequencePerCore().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      com.google.protobuf.GeneratedMessageV3
        .serializeIntegerMapTo(
          output,
          internalGetStepSequencePerCore(),
          StepSequencePerCoreDefaultEntryHolder.defaultEntry,
          1);
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (java.util.Map.Entry<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult> entry
           : internalGetStepSequencePerCore().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult>
        stepSequencePerCore__ = StepSequencePerCoreDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, stepSequencePerCore__);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult other = (tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult) obj;

      boolean result = true;
      result = result && internalGetStepSequencePerCore().equals(
          other.internalGetStepSequencePerCore());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (!internalGetStepSequencePerCore().getMap().isEmpty()) {
        hash = (37 * hash) + STEP_SEQUENCE_PER_CORE_FIELD_NUMBER;
        hash = (53 * hash) + internalGetStepSequencePerCore().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for a StepDatabase.
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.StepDatabaseResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.StepDatabaseResult)
        tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepDatabaseResult_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetStepSequencePerCore();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetMutableStepSequencePerCore();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepDatabaseResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.class, tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        internalGetMutableStepSequencePerCore().clear();
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_StepDatabaseResult_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult build() {
        tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult result = new tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult(this);
        int from_bitField0_ = bitField0_;
        result.stepSequencePerCore_ = internalGetStepSequencePerCore();
        result.stepSequencePerCore_.makeImmutable();
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.getDefaultInstance()) return this;
        internalGetMutableStepSequencePerCore().mergeFrom(
            other.internalGetStepSequencePerCore());
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.MapField<
          java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult> stepSequencePerCore_;
      private com.google.protobuf.MapField<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult>
      internalGetStepSequencePerCore() {
        if (stepSequencePerCore_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              StepSequencePerCoreDefaultEntryHolder.defaultEntry);
        }
        return stepSequencePerCore_;
      }
      private com.google.protobuf.MapField<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult>
      internalGetMutableStepSequencePerCore() {
        onChanged();;
        if (stepSequencePerCore_ == null) {
          stepSequencePerCore_ = com.google.protobuf.MapField.newMapField(
              StepSequencePerCoreDefaultEntryHolder.defaultEntry);
        }
        if (!stepSequencePerCore_.isMutable()) {
          stepSequencePerCore_ = stepSequencePerCore_.copy();
        }
        return stepSequencePerCore_;
      }

      public int getStepSequencePerCoreCount() {
        return internalGetStepSequencePerCore().getMap().size();
      }
      /**
       * <pre>
       * A map from core_id to StepSequenceResult.
       * </pre>
       *
       * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
       */

      public boolean containsStepSequencePerCore(
          int key) {
        
        return internalGetStepSequencePerCore().getMap().containsKey(key);
      }
      /**
       * Use {@link #getStepSequencePerCoreMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult> getStepSequencePerCore() {
        return getStepSequencePerCoreMap();
      }
      /**
       * <pre>
       * A map from core_id to StepSequenceResult.
       * </pre>
       *
       * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
       */

      public java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult> getStepSequencePerCoreMap() {
        return internalGetStepSequencePerCore().getMap();
      }
      /**
       * <pre>
       * A map from core_id to StepSequenceResult.
       * </pre>
       *
       * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
       */

      public tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult getStepSequencePerCoreOrDefault(
          int key,
          tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult defaultValue) {
        
        java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult> map =
            internalGetStepSequencePerCore().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <pre>
       * A map from core_id to StepSequenceResult.
       * </pre>
       *
       * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
       */

      public tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult getStepSequencePerCoreOrThrow(
          int key) {
        
        java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult> map =
            internalGetStepSequencePerCore().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearStepSequencePerCore() {
        internalGetMutableStepSequencePerCore().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <pre>
       * A map from core_id to StepSequenceResult.
       * </pre>
       *
       * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
       */

      public Builder removeStepSequencePerCore(
          int key) {
        
        internalGetMutableStepSequencePerCore().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult>
      getMutableStepSequencePerCore() {
        return internalGetMutableStepSequencePerCore().getMutableMap();
      }
      /**
       * <pre>
       * A map from core_id to StepSequenceResult.
       * </pre>
       *
       * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
       */
      public Builder putStepSequencePerCore(
          int key,
          tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult value) {
        
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableStepSequencePerCore().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <pre>
       * A map from core_id to StepSequenceResult.
       * </pre>
       *
       * <code>map&lt;uint32, .tensorflow.tpu.StepSequenceResult&gt; step_sequence_per_core = 1;</code>
       */

      public Builder putAllStepSequencePerCore(
          java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.StepSequenceResult> values) {
        internalGetMutableStepSequencePerCore().getMutableMap()
            .putAll(values);
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.StepDatabaseResult)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.StepDatabaseResult)
    private static final tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<StepDatabaseResult>
        PARSER = new com.google.protobuf.AbstractParser<StepDatabaseResult>() {
      public StepDatabaseResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new StepDatabaseResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<StepDatabaseResult> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<StepDatabaseResult> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LoopingResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.LoopingResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * The total iteration time in nanoseconds.
     * </pre>
     *
     * <code>optional double iteration_time_ns = 1;</code>
     */
    boolean hasIterationTimeNs();
    /**
     * <pre>
     * The total iteration time in nanoseconds.
     * </pre>
     *
     * <code>optional double iteration_time_ns = 1;</code>
     */
    double getIterationTimeNs();

    /**
     * <pre>
     * The total number of iterations.
     * </pre>
     *
     * <code>optional int32 num_iterations = 2;</code>
     */
    boolean hasNumIterations();
    /**
     * <pre>
     * The total number of iterations.
     * </pre>
     *
     * <code>optional int32 num_iterations = 2;</code>
     */
    int getNumIterations();

    /**
     * <pre>
     * The total computation time in nanoseconds.
     * </pre>
     *
     * <code>optional double computation_time_ns = 3;</code>
     */
    boolean hasComputationTimeNs();
    /**
     * <pre>
     * The total computation time in nanoseconds.
     * </pre>
     *
     * <code>optional double computation_time_ns = 3;</code>
     */
    double getComputationTimeNs();

    /**
     * <pre>
     * The total number of computations.
     * </pre>
     *
     * <code>optional int32 num_computations = 4;</code>
     */
    boolean hasNumComputations();
    /**
     * <pre>
     * The total number of computations.
     * </pre>
     *
     * <code>optional int32 num_computations = 4;</code>
     */
    int getNumComputations();
  }
  /**
   * <pre>
   * Result proto for looping-related metrics.
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.LoopingResult}
   */
  public  static final class LoopingResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.LoopingResult)
      LoopingResultOrBuilder {
    // Use LoopingResult.newBuilder() to construct.
    private LoopingResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private LoopingResult() {
      iterationTimeNs_ = 0D;
      numIterations_ = 0;
      computationTimeNs_ = 0D;
      numComputations_ = 0;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private LoopingResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 9: {
              bitField0_ |= 0x00000001;
              iterationTimeNs_ = input.readDouble();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              numIterations_ = input.readInt32();
              break;
            }
            case 25: {
              bitField0_ |= 0x00000004;
              computationTimeNs_ = input.readDouble();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              numComputations_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_LoopingResult_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_LoopingResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.class, tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.Builder.class);
    }

    private int bitField0_;
    public static final int ITERATION_TIME_NS_FIELD_NUMBER = 1;
    private double iterationTimeNs_;
    /**
     * <pre>
     * The total iteration time in nanoseconds.
     * </pre>
     *
     * <code>optional double iteration_time_ns = 1;</code>
     */
    public boolean hasIterationTimeNs() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * The total iteration time in nanoseconds.
     * </pre>
     *
     * <code>optional double iteration_time_ns = 1;</code>
     */
    public double getIterationTimeNs() {
      return iterationTimeNs_;
    }

    public static final int NUM_ITERATIONS_FIELD_NUMBER = 2;
    private int numIterations_;
    /**
     * <pre>
     * The total number of iterations.
     * </pre>
     *
     * <code>optional int32 num_iterations = 2;</code>
     */
    public boolean hasNumIterations() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * The total number of iterations.
     * </pre>
     *
     * <code>optional int32 num_iterations = 2;</code>
     */
    public int getNumIterations() {
      return numIterations_;
    }

    public static final int COMPUTATION_TIME_NS_FIELD_NUMBER = 3;
    private double computationTimeNs_;
    /**
     * <pre>
     * The total computation time in nanoseconds.
     * </pre>
     *
     * <code>optional double computation_time_ns = 3;</code>
     */
    public boolean hasComputationTimeNs() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * The total computation time in nanoseconds.
     * </pre>
     *
     * <code>optional double computation_time_ns = 3;</code>
     */
    public double getComputationTimeNs() {
      return computationTimeNs_;
    }

    public static final int NUM_COMPUTATIONS_FIELD_NUMBER = 4;
    private int numComputations_;
    /**
     * <pre>
     * The total number of computations.
     * </pre>
     *
     * <code>optional int32 num_computations = 4;</code>
     */
    public boolean hasNumComputations() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     * The total number of computations.
     * </pre>
     *
     * <code>optional int32 num_computations = 4;</code>
     */
    public int getNumComputations() {
      return numComputations_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeDouble(1, iterationTimeNs_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, numIterations_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeDouble(3, computationTimeNs_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, numComputations_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(1, iterationTimeNs_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, numIterations_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, computationTimeNs_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, numComputations_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.LoopingResult)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.LoopingResult other = (tensorflow.tpu.TfOpStatsOuterClass.LoopingResult) obj;

      boolean result = true;
      result = result && (hasIterationTimeNs() == other.hasIterationTimeNs());
      if (hasIterationTimeNs()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getIterationTimeNs())
            == java.lang.Double.doubleToLongBits(
                other.getIterationTimeNs()));
      }
      result = result && (hasNumIterations() == other.hasNumIterations());
      if (hasNumIterations()) {
        result = result && (getNumIterations()
            == other.getNumIterations());
      }
      result = result && (hasComputationTimeNs() == other.hasComputationTimeNs());
      if (hasComputationTimeNs()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getComputationTimeNs())
            == java.lang.Double.doubleToLongBits(
                other.getComputationTimeNs()));
      }
      result = result && (hasNumComputations() == other.hasNumComputations());
      if (hasNumComputations()) {
        result = result && (getNumComputations()
            == other.getNumComputations());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasIterationTimeNs()) {
        hash = (37 * hash) + ITERATION_TIME_NS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getIterationTimeNs()));
      }
      if (hasNumIterations()) {
        hash = (37 * hash) + NUM_ITERATIONS_FIELD_NUMBER;
        hash = (53 * hash) + getNumIterations();
      }
      if (hasComputationTimeNs()) {
        hash = (37 * hash) + COMPUTATION_TIME_NS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getComputationTimeNs()));
      }
      if (hasNumComputations()) {
        hash = (37 * hash) + NUM_COMPUTATIONS_FIELD_NUMBER;
        hash = (53 * hash) + getNumComputations();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.LoopingResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.LoopingResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.LoopingResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.LoopingResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.LoopingResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.LoopingResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.LoopingResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.LoopingResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.LoopingResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.LoopingResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.LoopingResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for looping-related metrics.
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.LoopingResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.LoopingResult)
        tensorflow.tpu.TfOpStatsOuterClass.LoopingResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_LoopingResult_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_LoopingResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.class, tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        iterationTimeNs_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000001);
        numIterations_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        computationTimeNs_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000004);
        numComputations_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_LoopingResult_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.LoopingResult getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.LoopingResult build() {
        tensorflow.tpu.TfOpStatsOuterClass.LoopingResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.LoopingResult buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.LoopingResult result = new tensorflow.tpu.TfOpStatsOuterClass.LoopingResult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.iterationTimeNs_ = iterationTimeNs_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.numIterations_ = numIterations_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.computationTimeNs_ = computationTimeNs_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.numComputations_ = numComputations_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.LoopingResult) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.LoopingResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.LoopingResult other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.getDefaultInstance()) return this;
        if (other.hasIterationTimeNs()) {
          setIterationTimeNs(other.getIterationTimeNs());
        }
        if (other.hasNumIterations()) {
          setNumIterations(other.getNumIterations());
        }
        if (other.hasComputationTimeNs()) {
          setComputationTimeNs(other.getComputationTimeNs());
        }
        if (other.hasNumComputations()) {
          setNumComputations(other.getNumComputations());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.LoopingResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.LoopingResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private double iterationTimeNs_ ;
      /**
       * <pre>
       * The total iteration time in nanoseconds.
       * </pre>
       *
       * <code>optional double iteration_time_ns = 1;</code>
       */
      public boolean hasIterationTimeNs() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * The total iteration time in nanoseconds.
       * </pre>
       *
       * <code>optional double iteration_time_ns = 1;</code>
       */
      public double getIterationTimeNs() {
        return iterationTimeNs_;
      }
      /**
       * <pre>
       * The total iteration time in nanoseconds.
       * </pre>
       *
       * <code>optional double iteration_time_ns = 1;</code>
       */
      public Builder setIterationTimeNs(double value) {
        bitField0_ |= 0x00000001;
        iterationTimeNs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The total iteration time in nanoseconds.
       * </pre>
       *
       * <code>optional double iteration_time_ns = 1;</code>
       */
      public Builder clearIterationTimeNs() {
        bitField0_ = (bitField0_ & ~0x00000001);
        iterationTimeNs_ = 0D;
        onChanged();
        return this;
      }

      private int numIterations_ ;
      /**
       * <pre>
       * The total number of iterations.
       * </pre>
       *
       * <code>optional int32 num_iterations = 2;</code>
       */
      public boolean hasNumIterations() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * The total number of iterations.
       * </pre>
       *
       * <code>optional int32 num_iterations = 2;</code>
       */
      public int getNumIterations() {
        return numIterations_;
      }
      /**
       * <pre>
       * The total number of iterations.
       * </pre>
       *
       * <code>optional int32 num_iterations = 2;</code>
       */
      public Builder setNumIterations(int value) {
        bitField0_ |= 0x00000002;
        numIterations_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The total number of iterations.
       * </pre>
       *
       * <code>optional int32 num_iterations = 2;</code>
       */
      public Builder clearNumIterations() {
        bitField0_ = (bitField0_ & ~0x00000002);
        numIterations_ = 0;
        onChanged();
        return this;
      }

      private double computationTimeNs_ ;
      /**
       * <pre>
       * The total computation time in nanoseconds.
       * </pre>
       *
       * <code>optional double computation_time_ns = 3;</code>
       */
      public boolean hasComputationTimeNs() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * The total computation time in nanoseconds.
       * </pre>
       *
       * <code>optional double computation_time_ns = 3;</code>
       */
      public double getComputationTimeNs() {
        return computationTimeNs_;
      }
      /**
       * <pre>
       * The total computation time in nanoseconds.
       * </pre>
       *
       * <code>optional double computation_time_ns = 3;</code>
       */
      public Builder setComputationTimeNs(double value) {
        bitField0_ |= 0x00000004;
        computationTimeNs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The total computation time in nanoseconds.
       * </pre>
       *
       * <code>optional double computation_time_ns = 3;</code>
       */
      public Builder clearComputationTimeNs() {
        bitField0_ = (bitField0_ & ~0x00000004);
        computationTimeNs_ = 0D;
        onChanged();
        return this;
      }

      private int numComputations_ ;
      /**
       * <pre>
       * The total number of computations.
       * </pre>
       *
       * <code>optional int32 num_computations = 4;</code>
       */
      public boolean hasNumComputations() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       * The total number of computations.
       * </pre>
       *
       * <code>optional int32 num_computations = 4;</code>
       */
      public int getNumComputations() {
        return numComputations_;
      }
      /**
       * <pre>
       * The total number of computations.
       * </pre>
       *
       * <code>optional int32 num_computations = 4;</code>
       */
      public Builder setNumComputations(int value) {
        bitField0_ |= 0x00000008;
        numComputations_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The total number of computations.
       * </pre>
       *
       * <code>optional int32 num_computations = 4;</code>
       */
      public Builder clearNumComputations() {
        bitField0_ = (bitField0_ & ~0x00000008);
        numComputations_ = 0;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.LoopingResult)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.LoopingResult)
    private static final tensorflow.tpu.TfOpStatsOuterClass.LoopingResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.LoopingResult();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.LoopingResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<LoopingResult>
        PARSER = new com.google.protobuf.AbstractParser<LoopingResult>() {
      public LoopingResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new LoopingResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<LoopingResult> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<LoopingResult> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.LoopingResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface HloExtraInfoResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.HloExtraInfoResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Category of the HLO op given by the compiler.
     * </pre>
     *
     * <code>optional string category = 1;</code>
     */
    boolean hasCategory();
    /**
     * <pre>
     * Category of the HLO op given by the compiler.
     * </pre>
     *
     * <code>optional string category = 1;</code>
     */
    java.lang.String getCategory();
    /**
     * <pre>
     * Category of the HLO op given by the compiler.
     * </pre>
     *
     * <code>optional string category = 1;</code>
     */
    com.google.protobuf.ByteString
        getCategoryBytes();

    /**
     * <pre>
     * The long name of the HLO that includes the dimensions.
     * </pre>
     *
     * <code>optional string long_name = 2;</code>
     */
    boolean hasLongName();
    /**
     * <pre>
     * The long name of the HLO that includes the dimensions.
     * </pre>
     *
     * <code>optional string long_name = 2;</code>
     */
    java.lang.String getLongName();
    /**
     * <pre>
     * The long name of the HLO that includes the dimensions.
     * </pre>
     *
     * <code>optional string long_name = 2;</code>
     */
    com.google.protobuf.ByteString
        getLongNameBytes();

    /**
     * <pre>
     * The per-TPU-core batch size inferred from this HLO.
     * </pre>
     *
     * <code>optional int64 per_core_batch_size = 3;</code>
     */
    boolean hasPerCoreBatchSize();
    /**
     * <pre>
     * The per-TPU-core batch size inferred from this HLO.
     * </pre>
     *
     * <code>optional int64 per_core_batch_size = 3;</code>
     */
    long getPerCoreBatchSize();
  }
  /**
   * <pre>
   * Result proto for HloExtraInfo.
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.HloExtraInfoResult}
   */
  public  static final class HloExtraInfoResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.HloExtraInfoResult)
      HloExtraInfoResultOrBuilder {
    // Use HloExtraInfoResult.newBuilder() to construct.
    private HloExtraInfoResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private HloExtraInfoResult() {
      category_ = "";
      longName_ = "";
      perCoreBatchSize_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HloExtraInfoResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              category_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              longName_ = bs;
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              perCoreBatchSize_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HloExtraInfoResult_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HloExtraInfoResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult.class, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult.Builder.class);
    }

    private int bitField0_;
    public static final int CATEGORY_FIELD_NUMBER = 1;
    private volatile java.lang.Object category_;
    /**
     * <pre>
     * Category of the HLO op given by the compiler.
     * </pre>
     *
     * <code>optional string category = 1;</code>
     */
    public boolean hasCategory() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Category of the HLO op given by the compiler.
     * </pre>
     *
     * <code>optional string category = 1;</code>
     */
    public java.lang.String getCategory() {
      java.lang.Object ref = category_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          category_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Category of the HLO op given by the compiler.
     * </pre>
     *
     * <code>optional string category = 1;</code>
     */
    public com.google.protobuf.ByteString
        getCategoryBytes() {
      java.lang.Object ref = category_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        category_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LONG_NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object longName_;
    /**
     * <pre>
     * The long name of the HLO that includes the dimensions.
     * </pre>
     *
     * <code>optional string long_name = 2;</code>
     */
    public boolean hasLongName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * The long name of the HLO that includes the dimensions.
     * </pre>
     *
     * <code>optional string long_name = 2;</code>
     */
    public java.lang.String getLongName() {
      java.lang.Object ref = longName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          longName_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The long name of the HLO that includes the dimensions.
     * </pre>
     *
     * <code>optional string long_name = 2;</code>
     */
    public com.google.protobuf.ByteString
        getLongNameBytes() {
      java.lang.Object ref = longName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        longName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PER_CORE_BATCH_SIZE_FIELD_NUMBER = 3;
    private long perCoreBatchSize_;
    /**
     * <pre>
     * The per-TPU-core batch size inferred from this HLO.
     * </pre>
     *
     * <code>optional int64 per_core_batch_size = 3;</code>
     */
    public boolean hasPerCoreBatchSize() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * The per-TPU-core batch size inferred from this HLO.
     * </pre>
     *
     * <code>optional int64 per_core_batch_size = 3;</code>
     */
    public long getPerCoreBatchSize() {
      return perCoreBatchSize_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, category_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, longName_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, perCoreBatchSize_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, category_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, longName_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, perCoreBatchSize_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult other = (tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult) obj;

      boolean result = true;
      result = result && (hasCategory() == other.hasCategory());
      if (hasCategory()) {
        result = result && getCategory()
            .equals(other.getCategory());
      }
      result = result && (hasLongName() == other.hasLongName());
      if (hasLongName()) {
        result = result && getLongName()
            .equals(other.getLongName());
      }
      result = result && (hasPerCoreBatchSize() == other.hasPerCoreBatchSize());
      if (hasPerCoreBatchSize()) {
        result = result && (getPerCoreBatchSize()
            == other.getPerCoreBatchSize());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasCategory()) {
        hash = (37 * hash) + CATEGORY_FIELD_NUMBER;
        hash = (53 * hash) + getCategory().hashCode();
      }
      if (hasLongName()) {
        hash = (37 * hash) + LONG_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getLongName().hashCode();
      }
      if (hasPerCoreBatchSize()) {
        hash = (37 * hash) + PER_CORE_BATCH_SIZE_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getPerCoreBatchSize());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for HloExtraInfo.
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.HloExtraInfoResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.HloExtraInfoResult)
        tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HloExtraInfoResult_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HloExtraInfoResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult.class, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        category_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        longName_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        perCoreBatchSize_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HloExtraInfoResult_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult build() {
        tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult result = new tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.category_ = category_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.longName_ = longName_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.perCoreBatchSize_ = perCoreBatchSize_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult.getDefaultInstance()) return this;
        if (other.hasCategory()) {
          bitField0_ |= 0x00000001;
          category_ = other.category_;
          onChanged();
        }
        if (other.hasLongName()) {
          bitField0_ |= 0x00000002;
          longName_ = other.longName_;
          onChanged();
        }
        if (other.hasPerCoreBatchSize()) {
          setPerCoreBatchSize(other.getPerCoreBatchSize());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object category_ = "";
      /**
       * <pre>
       * Category of the HLO op given by the compiler.
       * </pre>
       *
       * <code>optional string category = 1;</code>
       */
      public boolean hasCategory() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Category of the HLO op given by the compiler.
       * </pre>
       *
       * <code>optional string category = 1;</code>
       */
      public java.lang.String getCategory() {
        java.lang.Object ref = category_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            category_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Category of the HLO op given by the compiler.
       * </pre>
       *
       * <code>optional string category = 1;</code>
       */
      public com.google.protobuf.ByteString
          getCategoryBytes() {
        java.lang.Object ref = category_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          category_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Category of the HLO op given by the compiler.
       * </pre>
       *
       * <code>optional string category = 1;</code>
       */
      public Builder setCategory(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        category_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Category of the HLO op given by the compiler.
       * </pre>
       *
       * <code>optional string category = 1;</code>
       */
      public Builder clearCategory() {
        bitField0_ = (bitField0_ & ~0x00000001);
        category_ = getDefaultInstance().getCategory();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Category of the HLO op given by the compiler.
       * </pre>
       *
       * <code>optional string category = 1;</code>
       */
      public Builder setCategoryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        category_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object longName_ = "";
      /**
       * <pre>
       * The long name of the HLO that includes the dimensions.
       * </pre>
       *
       * <code>optional string long_name = 2;</code>
       */
      public boolean hasLongName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * The long name of the HLO that includes the dimensions.
       * </pre>
       *
       * <code>optional string long_name = 2;</code>
       */
      public java.lang.String getLongName() {
        java.lang.Object ref = longName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            longName_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The long name of the HLO that includes the dimensions.
       * </pre>
       *
       * <code>optional string long_name = 2;</code>
       */
      public com.google.protobuf.ByteString
          getLongNameBytes() {
        java.lang.Object ref = longName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          longName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The long name of the HLO that includes the dimensions.
       * </pre>
       *
       * <code>optional string long_name = 2;</code>
       */
      public Builder setLongName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        longName_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The long name of the HLO that includes the dimensions.
       * </pre>
       *
       * <code>optional string long_name = 2;</code>
       */
      public Builder clearLongName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        longName_ = getDefaultInstance().getLongName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The long name of the HLO that includes the dimensions.
       * </pre>
       *
       * <code>optional string long_name = 2;</code>
       */
      public Builder setLongNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        longName_ = value;
        onChanged();
        return this;
      }

      private long perCoreBatchSize_ ;
      /**
       * <pre>
       * The per-TPU-core batch size inferred from this HLO.
       * </pre>
       *
       * <code>optional int64 per_core_batch_size = 3;</code>
       */
      public boolean hasPerCoreBatchSize() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * The per-TPU-core batch size inferred from this HLO.
       * </pre>
       *
       * <code>optional int64 per_core_batch_size = 3;</code>
       */
      public long getPerCoreBatchSize() {
        return perCoreBatchSize_;
      }
      /**
       * <pre>
       * The per-TPU-core batch size inferred from this HLO.
       * </pre>
       *
       * <code>optional int64 per_core_batch_size = 3;</code>
       */
      public Builder setPerCoreBatchSize(long value) {
        bitField0_ |= 0x00000004;
        perCoreBatchSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The per-TPU-core batch size inferred from this HLO.
       * </pre>
       *
       * <code>optional int64 per_core_batch_size = 3;</code>
       */
      public Builder clearPerCoreBatchSize() {
        bitField0_ = (bitField0_ & ~0x00000004);
        perCoreBatchSize_ = 0L;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.HloExtraInfoResult)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.HloExtraInfoResult)
    private static final tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<HloExtraInfoResult>
        PARSER = new com.google.protobuf.AbstractParser<HloExtraInfoResult>() {
      public HloExtraInfoResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new HloExtraInfoResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<HloExtraInfoResult> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<HloExtraInfoResult> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface HloExtraInfoMapResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.HloExtraInfoMapResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * A map from HLO name to HloExtraInfo.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
     */
    int getHloExtrainfoMapCount();
    /**
     * <pre>
     * A map from HLO name to HloExtraInfo.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
     */
    boolean containsHloExtrainfoMap(
        java.lang.String key);
    /**
     * Use {@link #getHloExtrainfoMapMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult>
    getHloExtrainfoMap();
    /**
     * <pre>
     * A map from HLO name to HloExtraInfo.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
     */
    java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult>
    getHloExtrainfoMapMap();
    /**
     * <pre>
     * A map from HLO name to HloExtraInfo.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
     */

    tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult getHloExtrainfoMapOrDefault(
        java.lang.String key,
        tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult defaultValue);
    /**
     * <pre>
     * A map from HLO name to HloExtraInfo.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
     */

    tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult getHloExtrainfoMapOrThrow(
        java.lang.String key);
  }
  /**
   * <pre>
   * Result proto for HloExtraInfoMap.
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.HloExtraInfoMapResult}
   */
  public  static final class HloExtraInfoMapResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.HloExtraInfoMapResult)
      HloExtraInfoMapResultOrBuilder {
    // Use HloExtraInfoMapResult.newBuilder() to construct.
    private HloExtraInfoMapResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private HloExtraInfoMapResult() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HloExtraInfoMapResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                hloExtrainfoMap_ = com.google.protobuf.MapField.newMapField(
                    HloExtrainfoMapDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000001;
              }
              com.google.protobuf.MapEntry<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult>
              hloExtrainfoMap__ = input.readMessage(
                  HloExtrainfoMapDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              hloExtrainfoMap_.getMutableMap().put(
                  hloExtrainfoMap__.getKey(), hloExtrainfoMap__.getValue());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HloExtraInfoMapResult_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 1:
          return internalGetHloExtrainfoMap();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HloExtraInfoMapResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.class, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.Builder.class);
    }

    public static final int HLO_EXTRAINFO_MAP_FIELD_NUMBER = 1;
    private static final class HloExtrainfoMapDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult>newDefaultInstance(
                  tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HloExtraInfoMapResult_HloExtrainfoMapEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.MESSAGE,
                  tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult.getDefaultInstance());
    }
    private com.google.protobuf.MapField<
        java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult> hloExtrainfoMap_;
    private com.google.protobuf.MapField<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult>
    internalGetHloExtrainfoMap() {
      if (hloExtrainfoMap_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            HloExtrainfoMapDefaultEntryHolder.defaultEntry);
      }
      return hloExtrainfoMap_;
    }

    public int getHloExtrainfoMapCount() {
      return internalGetHloExtrainfoMap().getMap().size();
    }
    /**
     * <pre>
     * A map from HLO name to HloExtraInfo.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
     */

    public boolean containsHloExtrainfoMap(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      return internalGetHloExtrainfoMap().getMap().containsKey(key);
    }
    /**
     * Use {@link #getHloExtrainfoMapMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult> getHloExtrainfoMap() {
      return getHloExtrainfoMapMap();
    }
    /**
     * <pre>
     * A map from HLO name to HloExtraInfo.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
     */

    public java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult> getHloExtrainfoMapMap() {
      return internalGetHloExtrainfoMap().getMap();
    }
    /**
     * <pre>
     * A map from HLO name to HloExtraInfo.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
     */

    public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult getHloExtrainfoMapOrDefault(
        java.lang.String key,
        tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult defaultValue) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult> map =
          internalGetHloExtrainfoMap().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <pre>
     * A map from HLO name to HloExtraInfo.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
     */

    public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult getHloExtrainfoMapOrThrow(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult> map =
          internalGetHloExtrainfoMap().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      com.google.protobuf.GeneratedMessageV3
        .serializeStringMapTo(
          output,
          internalGetHloExtrainfoMap(),
          HloExtrainfoMapDefaultEntryHolder.defaultEntry,
          1);
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (java.util.Map.Entry<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult> entry
           : internalGetHloExtrainfoMap().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult>
        hloExtrainfoMap__ = HloExtrainfoMapDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, hloExtrainfoMap__);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult other = (tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult) obj;

      boolean result = true;
      result = result && internalGetHloExtrainfoMap().equals(
          other.internalGetHloExtrainfoMap());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (!internalGetHloExtrainfoMap().getMap().isEmpty()) {
        hash = (37 * hash) + HLO_EXTRAINFO_MAP_FIELD_NUMBER;
        hash = (53 * hash) + internalGetHloExtrainfoMap().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for HloExtraInfoMap.
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.HloExtraInfoMapResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.HloExtraInfoMapResult)
        tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HloExtraInfoMapResult_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetHloExtrainfoMap();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetMutableHloExtrainfoMap();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HloExtraInfoMapResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.class, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        internalGetMutableHloExtrainfoMap().clear();
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HloExtraInfoMapResult_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult build() {
        tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult result = new tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult(this);
        int from_bitField0_ = bitField0_;
        result.hloExtrainfoMap_ = internalGetHloExtrainfoMap();
        result.hloExtrainfoMap_.makeImmutable();
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.getDefaultInstance()) return this;
        internalGetMutableHloExtrainfoMap().mergeFrom(
            other.internalGetHloExtrainfoMap());
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.MapField<
          java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult> hloExtrainfoMap_;
      private com.google.protobuf.MapField<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult>
      internalGetHloExtrainfoMap() {
        if (hloExtrainfoMap_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              HloExtrainfoMapDefaultEntryHolder.defaultEntry);
        }
        return hloExtrainfoMap_;
      }
      private com.google.protobuf.MapField<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult>
      internalGetMutableHloExtrainfoMap() {
        onChanged();;
        if (hloExtrainfoMap_ == null) {
          hloExtrainfoMap_ = com.google.protobuf.MapField.newMapField(
              HloExtrainfoMapDefaultEntryHolder.defaultEntry);
        }
        if (!hloExtrainfoMap_.isMutable()) {
          hloExtrainfoMap_ = hloExtrainfoMap_.copy();
        }
        return hloExtrainfoMap_;
      }

      public int getHloExtrainfoMapCount() {
        return internalGetHloExtrainfoMap().getMap().size();
      }
      /**
       * <pre>
       * A map from HLO name to HloExtraInfo.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
       */

      public boolean containsHloExtrainfoMap(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        return internalGetHloExtrainfoMap().getMap().containsKey(key);
      }
      /**
       * Use {@link #getHloExtrainfoMapMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult> getHloExtrainfoMap() {
        return getHloExtrainfoMapMap();
      }
      /**
       * <pre>
       * A map from HLO name to HloExtraInfo.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
       */

      public java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult> getHloExtrainfoMapMap() {
        return internalGetHloExtrainfoMap().getMap();
      }
      /**
       * <pre>
       * A map from HLO name to HloExtraInfo.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
       */

      public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult getHloExtrainfoMapOrDefault(
          java.lang.String key,
          tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult defaultValue) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult> map =
            internalGetHloExtrainfoMap().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <pre>
       * A map from HLO name to HloExtraInfo.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
       */

      public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult getHloExtrainfoMapOrThrow(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult> map =
            internalGetHloExtrainfoMap().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearHloExtrainfoMap() {
        internalGetMutableHloExtrainfoMap().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <pre>
       * A map from HLO name to HloExtraInfo.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
       */

      public Builder removeHloExtrainfoMap(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableHloExtrainfoMap().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult>
      getMutableHloExtrainfoMap() {
        return internalGetMutableHloExtrainfoMap().getMutableMap();
      }
      /**
       * <pre>
       * A map from HLO name to HloExtraInfo.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
       */
      public Builder putHloExtrainfoMap(
          java.lang.String key,
          tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult value) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableHloExtrainfoMap().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <pre>
       * A map from HLO name to HloExtraInfo.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HloExtraInfoResult&gt; hlo_extrainfo_map = 1;</code>
       */

      public Builder putAllHloExtrainfoMap(
          java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoResult> values) {
        internalGetMutableHloExtrainfoMap().getMutableMap()
            .putAll(values);
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.HloExtraInfoMapResult)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.HloExtraInfoMapResult)
    private static final tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<HloExtraInfoMapResult>
        PARSER = new com.google.protobuf.AbstractParser<HloExtraInfoMapResult>() {
      public HloExtraInfoMapResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new HloExtraInfoMapResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<HloExtraInfoMapResult> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<HloExtraInfoMapResult> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface HostIndependentJobInfoResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.HostIndependentJobInfoResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * The change-list number of this build.
     * </pre>
     *
     * <code>optional int64 change_list = 1;</code>
     */
    boolean hasChangeList();
    /**
     * <pre>
     * The change-list number of this build.
     * </pre>
     *
     * <code>optional int64 change_list = 1;</code>
     */
    long getChangeList();

    /**
     * <pre>
     * The time of this build.
     * </pre>
     *
     * <code>optional int64 build_time = 2;</code>
     */
    boolean hasBuildTime();
    /**
     * <pre>
     * The time of this build.
     * </pre>
     *
     * <code>optional int64 build_time = 2;</code>
     */
    long getBuildTime();

    /**
     * <pre>
     * The target of this build.
     * </pre>
     *
     * <code>optional string build_target = 3;</code>
     */
    boolean hasBuildTarget();
    /**
     * <pre>
     * The target of this build.
     * </pre>
     *
     * <code>optional string build_target = 3;</code>
     */
    java.lang.String getBuildTarget();
    /**
     * <pre>
     * The target of this build.
     * </pre>
     *
     * <code>optional string build_target = 3;</code>
     */
    com.google.protobuf.ByteString
        getBuildTargetBytes();
  }
  /**
   * <pre>
   * Result proto for host-independent job information.
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.HostIndependentJobInfoResult}
   */
  public  static final class HostIndependentJobInfoResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.HostIndependentJobInfoResult)
      HostIndependentJobInfoResultOrBuilder {
    // Use HostIndependentJobInfoResult.newBuilder() to construct.
    private HostIndependentJobInfoResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private HostIndependentJobInfoResult() {
      changeList_ = 0L;
      buildTime_ = 0L;
      buildTarget_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HostIndependentJobInfoResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              changeList_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              buildTime_ = input.readInt64();
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              buildTarget_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostIndependentJobInfoResult_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostIndependentJobInfoResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.class, tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.Builder.class);
    }

    private int bitField0_;
    public static final int CHANGE_LIST_FIELD_NUMBER = 1;
    private long changeList_;
    /**
     * <pre>
     * The change-list number of this build.
     * </pre>
     *
     * <code>optional int64 change_list = 1;</code>
     */
    public boolean hasChangeList() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * The change-list number of this build.
     * </pre>
     *
     * <code>optional int64 change_list = 1;</code>
     */
    public long getChangeList() {
      return changeList_;
    }

    public static final int BUILD_TIME_FIELD_NUMBER = 2;
    private long buildTime_;
    /**
     * <pre>
     * The time of this build.
     * </pre>
     *
     * <code>optional int64 build_time = 2;</code>
     */
    public boolean hasBuildTime() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * The time of this build.
     * </pre>
     *
     * <code>optional int64 build_time = 2;</code>
     */
    public long getBuildTime() {
      return buildTime_;
    }

    public static final int BUILD_TARGET_FIELD_NUMBER = 3;
    private volatile java.lang.Object buildTarget_;
    /**
     * <pre>
     * The target of this build.
     * </pre>
     *
     * <code>optional string build_target = 3;</code>
     */
    public boolean hasBuildTarget() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * The target of this build.
     * </pre>
     *
     * <code>optional string build_target = 3;</code>
     */
    public java.lang.String getBuildTarget() {
      java.lang.Object ref = buildTarget_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          buildTarget_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The target of this build.
     * </pre>
     *
     * <code>optional string build_target = 3;</code>
     */
    public com.google.protobuf.ByteString
        getBuildTargetBytes() {
      java.lang.Object ref = buildTarget_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        buildTarget_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, changeList_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, buildTime_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, buildTarget_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, changeList_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, buildTime_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, buildTarget_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult other = (tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult) obj;

      boolean result = true;
      result = result && (hasChangeList() == other.hasChangeList());
      if (hasChangeList()) {
        result = result && (getChangeList()
            == other.getChangeList());
      }
      result = result && (hasBuildTime() == other.hasBuildTime());
      if (hasBuildTime()) {
        result = result && (getBuildTime()
            == other.getBuildTime());
      }
      result = result && (hasBuildTarget() == other.hasBuildTarget());
      if (hasBuildTarget()) {
        result = result && getBuildTarget()
            .equals(other.getBuildTarget());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasChangeList()) {
        hash = (37 * hash) + CHANGE_LIST_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getChangeList());
      }
      if (hasBuildTime()) {
        hash = (37 * hash) + BUILD_TIME_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getBuildTime());
      }
      if (hasBuildTarget()) {
        hash = (37 * hash) + BUILD_TARGET_FIELD_NUMBER;
        hash = (53 * hash) + getBuildTarget().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for host-independent job information.
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.HostIndependentJobInfoResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.HostIndependentJobInfoResult)
        tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostIndependentJobInfoResult_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostIndependentJobInfoResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.class, tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        changeList_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        buildTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        buildTarget_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostIndependentJobInfoResult_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult build() {
        tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult result = new tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.changeList_ = changeList_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.buildTime_ = buildTime_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.buildTarget_ = buildTarget_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.getDefaultInstance()) return this;
        if (other.hasChangeList()) {
          setChangeList(other.getChangeList());
        }
        if (other.hasBuildTime()) {
          setBuildTime(other.getBuildTime());
        }
        if (other.hasBuildTarget()) {
          bitField0_ |= 0x00000004;
          buildTarget_ = other.buildTarget_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long changeList_ ;
      /**
       * <pre>
       * The change-list number of this build.
       * </pre>
       *
       * <code>optional int64 change_list = 1;</code>
       */
      public boolean hasChangeList() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * The change-list number of this build.
       * </pre>
       *
       * <code>optional int64 change_list = 1;</code>
       */
      public long getChangeList() {
        return changeList_;
      }
      /**
       * <pre>
       * The change-list number of this build.
       * </pre>
       *
       * <code>optional int64 change_list = 1;</code>
       */
      public Builder setChangeList(long value) {
        bitField0_ |= 0x00000001;
        changeList_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The change-list number of this build.
       * </pre>
       *
       * <code>optional int64 change_list = 1;</code>
       */
      public Builder clearChangeList() {
        bitField0_ = (bitField0_ & ~0x00000001);
        changeList_ = 0L;
        onChanged();
        return this;
      }

      private long buildTime_ ;
      /**
       * <pre>
       * The time of this build.
       * </pre>
       *
       * <code>optional int64 build_time = 2;</code>
       */
      public boolean hasBuildTime() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * The time of this build.
       * </pre>
       *
       * <code>optional int64 build_time = 2;</code>
       */
      public long getBuildTime() {
        return buildTime_;
      }
      /**
       * <pre>
       * The time of this build.
       * </pre>
       *
       * <code>optional int64 build_time = 2;</code>
       */
      public Builder setBuildTime(long value) {
        bitField0_ |= 0x00000002;
        buildTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The time of this build.
       * </pre>
       *
       * <code>optional int64 build_time = 2;</code>
       */
      public Builder clearBuildTime() {
        bitField0_ = (bitField0_ & ~0x00000002);
        buildTime_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object buildTarget_ = "";
      /**
       * <pre>
       * The target of this build.
       * </pre>
       *
       * <code>optional string build_target = 3;</code>
       */
      public boolean hasBuildTarget() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * The target of this build.
       * </pre>
       *
       * <code>optional string build_target = 3;</code>
       */
      public java.lang.String getBuildTarget() {
        java.lang.Object ref = buildTarget_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            buildTarget_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The target of this build.
       * </pre>
       *
       * <code>optional string build_target = 3;</code>
       */
      public com.google.protobuf.ByteString
          getBuildTargetBytes() {
        java.lang.Object ref = buildTarget_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          buildTarget_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The target of this build.
       * </pre>
       *
       * <code>optional string build_target = 3;</code>
       */
      public Builder setBuildTarget(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        buildTarget_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The target of this build.
       * </pre>
       *
       * <code>optional string build_target = 3;</code>
       */
      public Builder clearBuildTarget() {
        bitField0_ = (bitField0_ & ~0x00000004);
        buildTarget_ = getDefaultInstance().getBuildTarget();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The target of this build.
       * </pre>
       *
       * <code>optional string build_target = 3;</code>
       */
      public Builder setBuildTargetBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        buildTarget_ = value;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.HostIndependentJobInfoResult)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.HostIndependentJobInfoResult)
    private static final tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<HostIndependentJobInfoResult>
        PARSER = new com.google.protobuf.AbstractParser<HostIndependentJobInfoResult>() {
      public HostIndependentJobInfoResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new HostIndependentJobInfoResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<HostIndependentJobInfoResult> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<HostIndependentJobInfoResult> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface HostDependentJobInfoResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.HostDependentJobInfoResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * This ID of the host where the job was run on.
     * </pre>
     *
     * <code>optional string host_id = 1;</code>
     */
    boolean hasHostId();
    /**
     * <pre>
     * This ID of the host where the job was run on.
     * </pre>
     *
     * <code>optional string host_id = 1;</code>
     */
    java.lang.String getHostId();
    /**
     * <pre>
     * This ID of the host where the job was run on.
     * </pre>
     *
     * <code>optional string host_id = 1;</code>
     */
    com.google.protobuf.ByteString
        getHostIdBytes();

    /**
     * <pre>
     * The command line used to run the job.
     * </pre>
     *
     * <code>optional string command_line = 2;</code>
     */
    boolean hasCommandLine();
    /**
     * <pre>
     * The command line used to run the job.
     * </pre>
     *
     * <code>optional string command_line = 2;</code>
     */
    java.lang.String getCommandLine();
    /**
     * <pre>
     * The command line used to run the job.
     * </pre>
     *
     * <code>optional string command_line = 2;</code>
     */
    com.google.protobuf.ByteString
        getCommandLineBytes();

    /**
     * <pre>
     * The start time of the job on this host.
     * </pre>
     *
     * <code>optional int64 start_time = 3;</code>
     */
    boolean hasStartTime();
    /**
     * <pre>
     * The start time of the job on this host.
     * </pre>
     *
     * <code>optional int64 start_time = 3;</code>
     */
    long getStartTime();
  }
  /**
   * <pre>
   * Result proto for host-dependent job information.
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.HostDependentJobInfoResult}
   */
  public  static final class HostDependentJobInfoResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.HostDependentJobInfoResult)
      HostDependentJobInfoResultOrBuilder {
    // Use HostDependentJobInfoResult.newBuilder() to construct.
    private HostDependentJobInfoResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private HostDependentJobInfoResult() {
      hostId_ = "";
      commandLine_ = "";
      startTime_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HostDependentJobInfoResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              hostId_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              commandLine_ = bs;
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              startTime_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostDependentJobInfoResult_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostDependentJobInfoResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.class, tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.Builder.class);
    }

    private int bitField0_;
    public static final int HOST_ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object hostId_;
    /**
     * <pre>
     * This ID of the host where the job was run on.
     * </pre>
     *
     * <code>optional string host_id = 1;</code>
     */
    public boolean hasHostId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * This ID of the host where the job was run on.
     * </pre>
     *
     * <code>optional string host_id = 1;</code>
     */
    public java.lang.String getHostId() {
      java.lang.Object ref = hostId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          hostId_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * This ID of the host where the job was run on.
     * </pre>
     *
     * <code>optional string host_id = 1;</code>
     */
    public com.google.protobuf.ByteString
        getHostIdBytes() {
      java.lang.Object ref = hostId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        hostId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int COMMAND_LINE_FIELD_NUMBER = 2;
    private volatile java.lang.Object commandLine_;
    /**
     * <pre>
     * The command line used to run the job.
     * </pre>
     *
     * <code>optional string command_line = 2;</code>
     */
    public boolean hasCommandLine() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * The command line used to run the job.
     * </pre>
     *
     * <code>optional string command_line = 2;</code>
     */
    public java.lang.String getCommandLine() {
      java.lang.Object ref = commandLine_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          commandLine_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The command line used to run the job.
     * </pre>
     *
     * <code>optional string command_line = 2;</code>
     */
    public com.google.protobuf.ByteString
        getCommandLineBytes() {
      java.lang.Object ref = commandLine_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        commandLine_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int START_TIME_FIELD_NUMBER = 3;
    private long startTime_;
    /**
     * <pre>
     * The start time of the job on this host.
     * </pre>
     *
     * <code>optional int64 start_time = 3;</code>
     */
    public boolean hasStartTime() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * The start time of the job on this host.
     * </pre>
     *
     * <code>optional int64 start_time = 3;</code>
     */
    public long getStartTime() {
      return startTime_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, hostId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, commandLine_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, startTime_);
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, hostId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, commandLine_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, startTime_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult other = (tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult) obj;

      boolean result = true;
      result = result && (hasHostId() == other.hasHostId());
      if (hasHostId()) {
        result = result && getHostId()
            .equals(other.getHostId());
      }
      result = result && (hasCommandLine() == other.hasCommandLine());
      if (hasCommandLine()) {
        result = result && getCommandLine()
            .equals(other.getCommandLine());
      }
      result = result && (hasStartTime() == other.hasStartTime());
      if (hasStartTime()) {
        result = result && (getStartTime()
            == other.getStartTime());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasHostId()) {
        hash = (37 * hash) + HOST_ID_FIELD_NUMBER;
        hash = (53 * hash) + getHostId().hashCode();
      }
      if (hasCommandLine()) {
        hash = (37 * hash) + COMMAND_LINE_FIELD_NUMBER;
        hash = (53 * hash) + getCommandLine().hashCode();
      }
      if (hasStartTime()) {
        hash = (37 * hash) + START_TIME_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getStartTime());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for host-dependent job information.
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.HostDependentJobInfoResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.HostDependentJobInfoResult)
        tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostDependentJobInfoResult_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostDependentJobInfoResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.class, tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        hostId_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        commandLine_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        startTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostDependentJobInfoResult_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult build() {
        tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult result = new tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.hostId_ = hostId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.commandLine_ = commandLine_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.startTime_ = startTime_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.getDefaultInstance()) return this;
        if (other.hasHostId()) {
          bitField0_ |= 0x00000001;
          hostId_ = other.hostId_;
          onChanged();
        }
        if (other.hasCommandLine()) {
          bitField0_ |= 0x00000002;
          commandLine_ = other.commandLine_;
          onChanged();
        }
        if (other.hasStartTime()) {
          setStartTime(other.getStartTime());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object hostId_ = "";
      /**
       * <pre>
       * This ID of the host where the job was run on.
       * </pre>
       *
       * <code>optional string host_id = 1;</code>
       */
      public boolean hasHostId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * This ID of the host where the job was run on.
       * </pre>
       *
       * <code>optional string host_id = 1;</code>
       */
      public java.lang.String getHostId() {
        java.lang.Object ref = hostId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            hostId_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * This ID of the host where the job was run on.
       * </pre>
       *
       * <code>optional string host_id = 1;</code>
       */
      public com.google.protobuf.ByteString
          getHostIdBytes() {
        java.lang.Object ref = hostId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          hostId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * This ID of the host where the job was run on.
       * </pre>
       *
       * <code>optional string host_id = 1;</code>
       */
      public Builder setHostId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        hostId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * This ID of the host where the job was run on.
       * </pre>
       *
       * <code>optional string host_id = 1;</code>
       */
      public Builder clearHostId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        hostId_ = getDefaultInstance().getHostId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * This ID of the host where the job was run on.
       * </pre>
       *
       * <code>optional string host_id = 1;</code>
       */
      public Builder setHostIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        hostId_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object commandLine_ = "";
      /**
       * <pre>
       * The command line used to run the job.
       * </pre>
       *
       * <code>optional string command_line = 2;</code>
       */
      public boolean hasCommandLine() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * The command line used to run the job.
       * </pre>
       *
       * <code>optional string command_line = 2;</code>
       */
      public java.lang.String getCommandLine() {
        java.lang.Object ref = commandLine_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            commandLine_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The command line used to run the job.
       * </pre>
       *
       * <code>optional string command_line = 2;</code>
       */
      public com.google.protobuf.ByteString
          getCommandLineBytes() {
        java.lang.Object ref = commandLine_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          commandLine_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The command line used to run the job.
       * </pre>
       *
       * <code>optional string command_line = 2;</code>
       */
      public Builder setCommandLine(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        commandLine_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The command line used to run the job.
       * </pre>
       *
       * <code>optional string command_line = 2;</code>
       */
      public Builder clearCommandLine() {
        bitField0_ = (bitField0_ & ~0x00000002);
        commandLine_ = getDefaultInstance().getCommandLine();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The command line used to run the job.
       * </pre>
       *
       * <code>optional string command_line = 2;</code>
       */
      public Builder setCommandLineBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        commandLine_ = value;
        onChanged();
        return this;
      }

      private long startTime_ ;
      /**
       * <pre>
       * The start time of the job on this host.
       * </pre>
       *
       * <code>optional int64 start_time = 3;</code>
       */
      public boolean hasStartTime() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * The start time of the job on this host.
       * </pre>
       *
       * <code>optional int64 start_time = 3;</code>
       */
      public long getStartTime() {
        return startTime_;
      }
      /**
       * <pre>
       * The start time of the job on this host.
       * </pre>
       *
       * <code>optional int64 start_time = 3;</code>
       */
      public Builder setStartTime(long value) {
        bitField0_ |= 0x00000004;
        startTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The start time of the job on this host.
       * </pre>
       *
       * <code>optional int64 start_time = 3;</code>
       */
      public Builder clearStartTime() {
        bitField0_ = (bitField0_ & ~0x00000004);
        startTime_ = 0L;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.HostDependentJobInfoResult)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.HostDependentJobInfoResult)
    private static final tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<HostDependentJobInfoResult>
        PARSER = new com.google.protobuf.AbstractParser<HostDependentJobInfoResult>() {
      public HostDependentJobInfoResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new HostDependentJobInfoResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<HostDependentJobInfoResult> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<HostDependentJobInfoResult> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RunEnvironmentResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.RunEnvironmentResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Number of hosts used.
     * </pre>
     *
     * <code>optional int32 host_count = 1;</code>
     */
    boolean hasHostCount();
    /**
     * <pre>
     * Number of hosts used.
     * </pre>
     *
     * <code>optional int32 host_count = 1;</code>
     */
    int getHostCount();

    /**
     * <pre>
     * The type of TPU used.
     * </pre>
     *
     * <code>optional string tpu_type = 2;</code>
     */
    boolean hasTpuType();
    /**
     * <pre>
     * The type of TPU used.
     * </pre>
     *
     * <code>optional string tpu_type = 2;</code>
     */
    java.lang.String getTpuType();
    /**
     * <pre>
     * The type of TPU used.
     * </pre>
     *
     * <code>optional string tpu_type = 2;</code>
     */
    com.google.protobuf.ByteString
        getTpuTypeBytes();

    /**
     * <pre>
     * The number of TPU cores used.
     * </pre>
     *
     * <code>optional int32 tpu_core_count = 3;</code>
     */
    boolean hasTpuCoreCount();
    /**
     * <pre>
     * The number of TPU cores used.
     * </pre>
     *
     * <code>optional int32 tpu_core_count = 3;</code>
     */
    int getTpuCoreCount();

    /**
     * <pre>
     * The per-TPU-core batch size.
     * </pre>
     *
     * <code>optional int32 per_core_batch_size = 4;</code>
     */
    boolean hasPerCoreBatchSize();
    /**
     * <pre>
     * The per-TPU-core batch size.
     * </pre>
     *
     * <code>optional int32 per_core_batch_size = 4;</code>
     */
    int getPerCoreBatchSize();

    /**
     * <pre>
     * Host-independent job information.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
     */
    boolean hasHostIndependentJobInfo();
    /**
     * <pre>
     * Host-independent job information.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult getHostIndependentJobInfo();
    /**
     * <pre>
     * Host-independent job information.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResultOrBuilder getHostIndependentJobInfoOrBuilder();

    /**
     * <pre>
     * Host-dependent job information.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
     */
    java.util.List<tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult> 
        getHostDependentJobInfoList();
    /**
     * <pre>
     * Host-dependent job information.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult getHostDependentJobInfo(int index);
    /**
     * <pre>
     * Host-dependent job information.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
     */
    int getHostDependentJobInfoCount();
    /**
     * <pre>
     * Host-dependent job information.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
     */
    java.util.List<? extends tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResultOrBuilder> 
        getHostDependentJobInfoOrBuilderList();
    /**
     * <pre>
     * Host-dependent job information.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResultOrBuilder getHostDependentJobInfoOrBuilder(
        int index);
  }
  /**
   * <pre>
   * Result proto for RunEnvironment (the run environment of a profiling session).
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.RunEnvironmentResult}
   */
  public  static final class RunEnvironmentResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.RunEnvironmentResult)
      RunEnvironmentResultOrBuilder {
    // Use RunEnvironmentResult.newBuilder() to construct.
    private RunEnvironmentResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RunEnvironmentResult() {
      hostCount_ = 0;
      tpuType_ = "";
      tpuCoreCount_ = 0;
      perCoreBatchSize_ = 0;
      hostDependentJobInfo_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RunEnvironmentResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              hostCount_ = input.readInt32();
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              tpuType_ = bs;
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              tpuCoreCount_ = input.readInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              perCoreBatchSize_ = input.readInt32();
              break;
            }
            case 42: {
              tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = hostIndependentJobInfo_.toBuilder();
              }
              hostIndependentJobInfo_ = input.readMessage(tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(hostIndependentJobInfo_);
                hostIndependentJobInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                hostDependentJobInfo_ = new java.util.ArrayList<tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult>();
                mutable_bitField0_ |= 0x00000020;
              }
              hostDependentJobInfo_.add(
                  input.readMessage(tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          hostDependentJobInfo_ = java.util.Collections.unmodifiableList(hostDependentJobInfo_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_RunEnvironmentResult_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_RunEnvironmentResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.class, tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.Builder.class);
    }

    private int bitField0_;
    public static final int HOST_COUNT_FIELD_NUMBER = 1;
    private int hostCount_;
    /**
     * <pre>
     * Number of hosts used.
     * </pre>
     *
     * <code>optional int32 host_count = 1;</code>
     */
    public boolean hasHostCount() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Number of hosts used.
     * </pre>
     *
     * <code>optional int32 host_count = 1;</code>
     */
    public int getHostCount() {
      return hostCount_;
    }

    public static final int TPU_TYPE_FIELD_NUMBER = 2;
    private volatile java.lang.Object tpuType_;
    /**
     * <pre>
     * The type of TPU used.
     * </pre>
     *
     * <code>optional string tpu_type = 2;</code>
     */
    public boolean hasTpuType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * The type of TPU used.
     * </pre>
     *
     * <code>optional string tpu_type = 2;</code>
     */
    public java.lang.String getTpuType() {
      java.lang.Object ref = tpuType_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          tpuType_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The type of TPU used.
     * </pre>
     *
     * <code>optional string tpu_type = 2;</code>
     */
    public com.google.protobuf.ByteString
        getTpuTypeBytes() {
      java.lang.Object ref = tpuType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        tpuType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TPU_CORE_COUNT_FIELD_NUMBER = 3;
    private int tpuCoreCount_;
    /**
     * <pre>
     * The number of TPU cores used.
     * </pre>
     *
     * <code>optional int32 tpu_core_count = 3;</code>
     */
    public boolean hasTpuCoreCount() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * The number of TPU cores used.
     * </pre>
     *
     * <code>optional int32 tpu_core_count = 3;</code>
     */
    public int getTpuCoreCount() {
      return tpuCoreCount_;
    }

    public static final int PER_CORE_BATCH_SIZE_FIELD_NUMBER = 4;
    private int perCoreBatchSize_;
    /**
     * <pre>
     * The per-TPU-core batch size.
     * </pre>
     *
     * <code>optional int32 per_core_batch_size = 4;</code>
     */
    public boolean hasPerCoreBatchSize() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     * The per-TPU-core batch size.
     * </pre>
     *
     * <code>optional int32 per_core_batch_size = 4;</code>
     */
    public int getPerCoreBatchSize() {
      return perCoreBatchSize_;
    }

    public static final int HOST_INDEPENDENT_JOB_INFO_FIELD_NUMBER = 5;
    private tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult hostIndependentJobInfo_;
    /**
     * <pre>
     * Host-independent job information.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
     */
    public boolean hasHostIndependentJobInfo() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <pre>
     * Host-independent job information.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult getHostIndependentJobInfo() {
      return hostIndependentJobInfo_ == null ? tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.getDefaultInstance() : hostIndependentJobInfo_;
    }
    /**
     * <pre>
     * Host-independent job information.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResultOrBuilder getHostIndependentJobInfoOrBuilder() {
      return hostIndependentJobInfo_ == null ? tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.getDefaultInstance() : hostIndependentJobInfo_;
    }

    public static final int HOST_DEPENDENT_JOB_INFO_FIELD_NUMBER = 6;
    private java.util.List<tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult> hostDependentJobInfo_;
    /**
     * <pre>
     * Host-dependent job information.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
     */
    public java.util.List<tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult> getHostDependentJobInfoList() {
      return hostDependentJobInfo_;
    }
    /**
     * <pre>
     * Host-dependent job information.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
     */
    public java.util.List<? extends tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResultOrBuilder> 
        getHostDependentJobInfoOrBuilderList() {
      return hostDependentJobInfo_;
    }
    /**
     * <pre>
     * Host-dependent job information.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
     */
    public int getHostDependentJobInfoCount() {
      return hostDependentJobInfo_.size();
    }
    /**
     * <pre>
     * Host-dependent job information.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult getHostDependentJobInfo(int index) {
      return hostDependentJobInfo_.get(index);
    }
    /**
     * <pre>
     * Host-dependent job information.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResultOrBuilder getHostDependentJobInfoOrBuilder(
        int index) {
      return hostDependentJobInfo_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, hostCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, tpuType_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, tpuCoreCount_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, perCoreBatchSize_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(5, getHostIndependentJobInfo());
      }
      for (int i = 0; i < hostDependentJobInfo_.size(); i++) {
        output.writeMessage(6, hostDependentJobInfo_.get(i));
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, hostCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, tpuType_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, tpuCoreCount_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, perCoreBatchSize_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getHostIndependentJobInfo());
      }
      for (int i = 0; i < hostDependentJobInfo_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, hostDependentJobInfo_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult other = (tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult) obj;

      boolean result = true;
      result = result && (hasHostCount() == other.hasHostCount());
      if (hasHostCount()) {
        result = result && (getHostCount()
            == other.getHostCount());
      }
      result = result && (hasTpuType() == other.hasTpuType());
      if (hasTpuType()) {
        result = result && getTpuType()
            .equals(other.getTpuType());
      }
      result = result && (hasTpuCoreCount() == other.hasTpuCoreCount());
      if (hasTpuCoreCount()) {
        result = result && (getTpuCoreCount()
            == other.getTpuCoreCount());
      }
      result = result && (hasPerCoreBatchSize() == other.hasPerCoreBatchSize());
      if (hasPerCoreBatchSize()) {
        result = result && (getPerCoreBatchSize()
            == other.getPerCoreBatchSize());
      }
      result = result && (hasHostIndependentJobInfo() == other.hasHostIndependentJobInfo());
      if (hasHostIndependentJobInfo()) {
        result = result && getHostIndependentJobInfo()
            .equals(other.getHostIndependentJobInfo());
      }
      result = result && getHostDependentJobInfoList()
          .equals(other.getHostDependentJobInfoList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasHostCount()) {
        hash = (37 * hash) + HOST_COUNT_FIELD_NUMBER;
        hash = (53 * hash) + getHostCount();
      }
      if (hasTpuType()) {
        hash = (37 * hash) + TPU_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + getTpuType().hashCode();
      }
      if (hasTpuCoreCount()) {
        hash = (37 * hash) + TPU_CORE_COUNT_FIELD_NUMBER;
        hash = (53 * hash) + getTpuCoreCount();
      }
      if (hasPerCoreBatchSize()) {
        hash = (37 * hash) + PER_CORE_BATCH_SIZE_FIELD_NUMBER;
        hash = (53 * hash) + getPerCoreBatchSize();
      }
      if (hasHostIndependentJobInfo()) {
        hash = (37 * hash) + HOST_INDEPENDENT_JOB_INFO_FIELD_NUMBER;
        hash = (53 * hash) + getHostIndependentJobInfo().hashCode();
      }
      if (getHostDependentJobInfoCount() > 0) {
        hash = (37 * hash) + HOST_DEPENDENT_JOB_INFO_FIELD_NUMBER;
        hash = (53 * hash) + getHostDependentJobInfoList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for RunEnvironment (the run environment of a profiling session).
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.RunEnvironmentResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.RunEnvironmentResult)
        tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_RunEnvironmentResult_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_RunEnvironmentResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.class, tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getHostIndependentJobInfoFieldBuilder();
          getHostDependentJobInfoFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        hostCount_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        tpuType_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        tpuCoreCount_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        perCoreBatchSize_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        if (hostIndependentJobInfoBuilder_ == null) {
          hostIndependentJobInfo_ = null;
        } else {
          hostIndependentJobInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (hostDependentJobInfoBuilder_ == null) {
          hostDependentJobInfo_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          hostDependentJobInfoBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_RunEnvironmentResult_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult build() {
        tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult result = new tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.hostCount_ = hostCount_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.tpuType_ = tpuType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.tpuCoreCount_ = tpuCoreCount_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.perCoreBatchSize_ = perCoreBatchSize_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (hostIndependentJobInfoBuilder_ == null) {
          result.hostIndependentJobInfo_ = hostIndependentJobInfo_;
        } else {
          result.hostIndependentJobInfo_ = hostIndependentJobInfoBuilder_.build();
        }
        if (hostDependentJobInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            hostDependentJobInfo_ = java.util.Collections.unmodifiableList(hostDependentJobInfo_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.hostDependentJobInfo_ = hostDependentJobInfo_;
        } else {
          result.hostDependentJobInfo_ = hostDependentJobInfoBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.getDefaultInstance()) return this;
        if (other.hasHostCount()) {
          setHostCount(other.getHostCount());
        }
        if (other.hasTpuType()) {
          bitField0_ |= 0x00000002;
          tpuType_ = other.tpuType_;
          onChanged();
        }
        if (other.hasTpuCoreCount()) {
          setTpuCoreCount(other.getTpuCoreCount());
        }
        if (other.hasPerCoreBatchSize()) {
          setPerCoreBatchSize(other.getPerCoreBatchSize());
        }
        if (other.hasHostIndependentJobInfo()) {
          mergeHostIndependentJobInfo(other.getHostIndependentJobInfo());
        }
        if (hostDependentJobInfoBuilder_ == null) {
          if (!other.hostDependentJobInfo_.isEmpty()) {
            if (hostDependentJobInfo_.isEmpty()) {
              hostDependentJobInfo_ = other.hostDependentJobInfo_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureHostDependentJobInfoIsMutable();
              hostDependentJobInfo_.addAll(other.hostDependentJobInfo_);
            }
            onChanged();
          }
        } else {
          if (!other.hostDependentJobInfo_.isEmpty()) {
            if (hostDependentJobInfoBuilder_.isEmpty()) {
              hostDependentJobInfoBuilder_.dispose();
              hostDependentJobInfoBuilder_ = null;
              hostDependentJobInfo_ = other.hostDependentJobInfo_;
              bitField0_ = (bitField0_ & ~0x00000020);
              hostDependentJobInfoBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getHostDependentJobInfoFieldBuilder() : null;
            } else {
              hostDependentJobInfoBuilder_.addAllMessages(other.hostDependentJobInfo_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int hostCount_ ;
      /**
       * <pre>
       * Number of hosts used.
       * </pre>
       *
       * <code>optional int32 host_count = 1;</code>
       */
      public boolean hasHostCount() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Number of hosts used.
       * </pre>
       *
       * <code>optional int32 host_count = 1;</code>
       */
      public int getHostCount() {
        return hostCount_;
      }
      /**
       * <pre>
       * Number of hosts used.
       * </pre>
       *
       * <code>optional int32 host_count = 1;</code>
       */
      public Builder setHostCount(int value) {
        bitField0_ |= 0x00000001;
        hostCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Number of hosts used.
       * </pre>
       *
       * <code>optional int32 host_count = 1;</code>
       */
      public Builder clearHostCount() {
        bitField0_ = (bitField0_ & ~0x00000001);
        hostCount_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object tpuType_ = "";
      /**
       * <pre>
       * The type of TPU used.
       * </pre>
       *
       * <code>optional string tpu_type = 2;</code>
       */
      public boolean hasTpuType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * The type of TPU used.
       * </pre>
       *
       * <code>optional string tpu_type = 2;</code>
       */
      public java.lang.String getTpuType() {
        java.lang.Object ref = tpuType_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            tpuType_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The type of TPU used.
       * </pre>
       *
       * <code>optional string tpu_type = 2;</code>
       */
      public com.google.protobuf.ByteString
          getTpuTypeBytes() {
        java.lang.Object ref = tpuType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          tpuType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The type of TPU used.
       * </pre>
       *
       * <code>optional string tpu_type = 2;</code>
       */
      public Builder setTpuType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        tpuType_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The type of TPU used.
       * </pre>
       *
       * <code>optional string tpu_type = 2;</code>
       */
      public Builder clearTpuType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        tpuType_ = getDefaultInstance().getTpuType();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The type of TPU used.
       * </pre>
       *
       * <code>optional string tpu_type = 2;</code>
       */
      public Builder setTpuTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        tpuType_ = value;
        onChanged();
        return this;
      }

      private int tpuCoreCount_ ;
      /**
       * <pre>
       * The number of TPU cores used.
       * </pre>
       *
       * <code>optional int32 tpu_core_count = 3;</code>
       */
      public boolean hasTpuCoreCount() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * The number of TPU cores used.
       * </pre>
       *
       * <code>optional int32 tpu_core_count = 3;</code>
       */
      public int getTpuCoreCount() {
        return tpuCoreCount_;
      }
      /**
       * <pre>
       * The number of TPU cores used.
       * </pre>
       *
       * <code>optional int32 tpu_core_count = 3;</code>
       */
      public Builder setTpuCoreCount(int value) {
        bitField0_ |= 0x00000004;
        tpuCoreCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The number of TPU cores used.
       * </pre>
       *
       * <code>optional int32 tpu_core_count = 3;</code>
       */
      public Builder clearTpuCoreCount() {
        bitField0_ = (bitField0_ & ~0x00000004);
        tpuCoreCount_ = 0;
        onChanged();
        return this;
      }

      private int perCoreBatchSize_ ;
      /**
       * <pre>
       * The per-TPU-core batch size.
       * </pre>
       *
       * <code>optional int32 per_core_batch_size = 4;</code>
       */
      public boolean hasPerCoreBatchSize() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       * The per-TPU-core batch size.
       * </pre>
       *
       * <code>optional int32 per_core_batch_size = 4;</code>
       */
      public int getPerCoreBatchSize() {
        return perCoreBatchSize_;
      }
      /**
       * <pre>
       * The per-TPU-core batch size.
       * </pre>
       *
       * <code>optional int32 per_core_batch_size = 4;</code>
       */
      public Builder setPerCoreBatchSize(int value) {
        bitField0_ |= 0x00000008;
        perCoreBatchSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The per-TPU-core batch size.
       * </pre>
       *
       * <code>optional int32 per_core_batch_size = 4;</code>
       */
      public Builder clearPerCoreBatchSize() {
        bitField0_ = (bitField0_ & ~0x00000008);
        perCoreBatchSize_ = 0;
        onChanged();
        return this;
      }

      private tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult hostIndependentJobInfo_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult, tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResultOrBuilder> hostIndependentJobInfoBuilder_;
      /**
       * <pre>
       * Host-independent job information.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
       */
      public boolean hasHostIndependentJobInfo() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <pre>
       * Host-independent job information.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult getHostIndependentJobInfo() {
        if (hostIndependentJobInfoBuilder_ == null) {
          return hostIndependentJobInfo_ == null ? tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.getDefaultInstance() : hostIndependentJobInfo_;
        } else {
          return hostIndependentJobInfoBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Host-independent job information.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
       */
      public Builder setHostIndependentJobInfo(tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult value) {
        if (hostIndependentJobInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          hostIndependentJobInfo_ = value;
          onChanged();
        } else {
          hostIndependentJobInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <pre>
       * Host-independent job information.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
       */
      public Builder setHostIndependentJobInfo(
          tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.Builder builderForValue) {
        if (hostIndependentJobInfoBuilder_ == null) {
          hostIndependentJobInfo_ = builderForValue.build();
          onChanged();
        } else {
          hostIndependentJobInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <pre>
       * Host-independent job information.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
       */
      public Builder mergeHostIndependentJobInfo(tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult value) {
        if (hostIndependentJobInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              hostIndependentJobInfo_ != null &&
              hostIndependentJobInfo_ != tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.getDefaultInstance()) {
            hostIndependentJobInfo_ =
              tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.newBuilder(hostIndependentJobInfo_).mergeFrom(value).buildPartial();
          } else {
            hostIndependentJobInfo_ = value;
          }
          onChanged();
        } else {
          hostIndependentJobInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <pre>
       * Host-independent job information.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
       */
      public Builder clearHostIndependentJobInfo() {
        if (hostIndependentJobInfoBuilder_ == null) {
          hostIndependentJobInfo_ = null;
          onChanged();
        } else {
          hostIndependentJobInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <pre>
       * Host-independent job information.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.Builder getHostIndependentJobInfoBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getHostIndependentJobInfoFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Host-independent job information.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResultOrBuilder getHostIndependentJobInfoOrBuilder() {
        if (hostIndependentJobInfoBuilder_ != null) {
          return hostIndependentJobInfoBuilder_.getMessageOrBuilder();
        } else {
          return hostIndependentJobInfo_ == null ?
              tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.getDefaultInstance() : hostIndependentJobInfo_;
        }
      }
      /**
       * <pre>
       * Host-independent job information.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostIndependentJobInfoResult host_independent_job_info = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult, tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResultOrBuilder> 
          getHostIndependentJobInfoFieldBuilder() {
        if (hostIndependentJobInfoBuilder_ == null) {
          hostIndependentJobInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult, tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.HostIndependentJobInfoResultOrBuilder>(
                  getHostIndependentJobInfo(),
                  getParentForChildren(),
                  isClean());
          hostIndependentJobInfo_ = null;
        }
        return hostIndependentJobInfoBuilder_;
      }

      private java.util.List<tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult> hostDependentJobInfo_ =
        java.util.Collections.emptyList();
      private void ensureHostDependentJobInfoIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          hostDependentJobInfo_ = new java.util.ArrayList<tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult>(hostDependentJobInfo_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult, tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResultOrBuilder> hostDependentJobInfoBuilder_;

      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public java.util.List<tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult> getHostDependentJobInfoList() {
        if (hostDependentJobInfoBuilder_ == null) {
          return java.util.Collections.unmodifiableList(hostDependentJobInfo_);
        } else {
          return hostDependentJobInfoBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public int getHostDependentJobInfoCount() {
        if (hostDependentJobInfoBuilder_ == null) {
          return hostDependentJobInfo_.size();
        } else {
          return hostDependentJobInfoBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult getHostDependentJobInfo(int index) {
        if (hostDependentJobInfoBuilder_ == null) {
          return hostDependentJobInfo_.get(index);
        } else {
          return hostDependentJobInfoBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public Builder setHostDependentJobInfo(
          int index, tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult value) {
        if (hostDependentJobInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHostDependentJobInfoIsMutable();
          hostDependentJobInfo_.set(index, value);
          onChanged();
        } else {
          hostDependentJobInfoBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public Builder setHostDependentJobInfo(
          int index, tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.Builder builderForValue) {
        if (hostDependentJobInfoBuilder_ == null) {
          ensureHostDependentJobInfoIsMutable();
          hostDependentJobInfo_.set(index, builderForValue.build());
          onChanged();
        } else {
          hostDependentJobInfoBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public Builder addHostDependentJobInfo(tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult value) {
        if (hostDependentJobInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHostDependentJobInfoIsMutable();
          hostDependentJobInfo_.add(value);
          onChanged();
        } else {
          hostDependentJobInfoBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public Builder addHostDependentJobInfo(
          int index, tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult value) {
        if (hostDependentJobInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHostDependentJobInfoIsMutable();
          hostDependentJobInfo_.add(index, value);
          onChanged();
        } else {
          hostDependentJobInfoBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public Builder addHostDependentJobInfo(
          tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.Builder builderForValue) {
        if (hostDependentJobInfoBuilder_ == null) {
          ensureHostDependentJobInfoIsMutable();
          hostDependentJobInfo_.add(builderForValue.build());
          onChanged();
        } else {
          hostDependentJobInfoBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public Builder addHostDependentJobInfo(
          int index, tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.Builder builderForValue) {
        if (hostDependentJobInfoBuilder_ == null) {
          ensureHostDependentJobInfoIsMutable();
          hostDependentJobInfo_.add(index, builderForValue.build());
          onChanged();
        } else {
          hostDependentJobInfoBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public Builder addAllHostDependentJobInfo(
          java.lang.Iterable<? extends tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult> values) {
        if (hostDependentJobInfoBuilder_ == null) {
          ensureHostDependentJobInfoIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, hostDependentJobInfo_);
          onChanged();
        } else {
          hostDependentJobInfoBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public Builder clearHostDependentJobInfo() {
        if (hostDependentJobInfoBuilder_ == null) {
          hostDependentJobInfo_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          hostDependentJobInfoBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public Builder removeHostDependentJobInfo(int index) {
        if (hostDependentJobInfoBuilder_ == null) {
          ensureHostDependentJobInfoIsMutable();
          hostDependentJobInfo_.remove(index);
          onChanged();
        } else {
          hostDependentJobInfoBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.Builder getHostDependentJobInfoBuilder(
          int index) {
        return getHostDependentJobInfoFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResultOrBuilder getHostDependentJobInfoOrBuilder(
          int index) {
        if (hostDependentJobInfoBuilder_ == null) {
          return hostDependentJobInfo_.get(index);  } else {
          return hostDependentJobInfoBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public java.util.List<? extends tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResultOrBuilder> 
           getHostDependentJobInfoOrBuilderList() {
        if (hostDependentJobInfoBuilder_ != null) {
          return hostDependentJobInfoBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(hostDependentJobInfo_);
        }
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.Builder addHostDependentJobInfoBuilder() {
        return getHostDependentJobInfoFieldBuilder().addBuilder(
            tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.getDefaultInstance());
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.Builder addHostDependentJobInfoBuilder(
          int index) {
        return getHostDependentJobInfoFieldBuilder().addBuilder(
            index, tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.getDefaultInstance());
      }
      /**
       * <pre>
       * Host-dependent job information.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostDependentJobInfoResult host_dependent_job_info = 6;</code>
       */
      public java.util.List<tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.Builder> 
           getHostDependentJobInfoBuilderList() {
        return getHostDependentJobInfoFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult, tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResultOrBuilder> 
          getHostDependentJobInfoFieldBuilder() {
        if (hostDependentJobInfoBuilder_ == null) {
          hostDependentJobInfoBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult, tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.HostDependentJobInfoResultOrBuilder>(
                  hostDependentJobInfo_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          hostDependentJobInfo_ = null;
        }
        return hostDependentJobInfoBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.RunEnvironmentResult)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.RunEnvironmentResult)
    private static final tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<RunEnvironmentResult>
        PARSER = new com.google.protobuf.AbstractParser<RunEnvironmentResult>() {
      public RunEnvironmentResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new RunEnvironmentResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RunEnvironmentResult> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<RunEnvironmentResult> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface HostOpsPerTpuStepOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.HostOpsPerTpuStep)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Whether the data in this message is valid.
     * </pre>
     *
     * <code>optional bool valid = 1 [default = false];</code>
     */
    boolean hasValid();
    /**
     * <pre>
     * Whether the data in this message is valid.
     * </pre>
     *
     * <code>optional bool valid = 1 [default = false];</code>
     */
    boolean getValid();

    /**
     * <pre>
     * The current TPU step number.
     * </pre>
     *
     * <code>optional uint32 tpu_step_num = 2;</code>
     */
    boolean hasTpuStepNum();
    /**
     * <pre>
     * The current TPU step number.
     * </pre>
     *
     * <code>optional uint32 tpu_step_num = 2;</code>
     */
    int getTpuStepNum();

    /**
     * <pre>
     * The beginning time of the current TPU step on the device in picoseconds.
     * </pre>
     *
     * <code>optional uint64 tpu_step_begin_ps = 3;</code>
     */
    boolean hasTpuStepBeginPs();
    /**
     * <pre>
     * The beginning time of the current TPU step on the device in picoseconds.
     * </pre>
     *
     * <code>optional uint64 tpu_step_begin_ps = 3;</code>
     */
    long getTpuStepBeginPs();

    /**
     * <pre>
     * The ending time of the current TPU step on the device in picoseconds.
     * </pre>
     *
     * <code>optional uint64 tpu_step_end_ps = 4;</code>
     */
    boolean hasTpuStepEndPs();
    /**
     * <pre>
     * The ending time of the current TPU step on the device in picoseconds.
     * </pre>
     *
     * <code>optional uint64 tpu_step_end_ps = 4;</code>
     */
    long getTpuStepEndPs();

    /**
     * <pre>
     * For each possible host operation, maps to the difference between the TPU
     * step number that the host op targets and the current TPU step number.
     * The key is HostOp, value is the step difference.
     * </pre>
     *
     * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
     */
    int getStepDiffsCount();
    /**
     * <pre>
     * For each possible host operation, maps to the difference between the TPU
     * step number that the host op targets and the current TPU step number.
     * The key is HostOp, value is the step difference.
     * </pre>
     *
     * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
     */
    boolean containsStepDiffs(
        int key);
    /**
     * Use {@link #getStepDiffsMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.Integer, java.lang.Integer>
    getStepDiffs();
    /**
     * <pre>
     * For each possible host operation, maps to the difference between the TPU
     * step number that the host op targets and the current TPU step number.
     * The key is HostOp, value is the step difference.
     * </pre>
     *
     * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
     */
    java.util.Map<java.lang.Integer, java.lang.Integer>
    getStepDiffsMap();
    /**
     * <pre>
     * For each possible host operation, maps to the difference between the TPU
     * step number that the host op targets and the current TPU step number.
     * The key is HostOp, value is the step difference.
     * </pre>
     *
     * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
     */

    int getStepDiffsOrDefault(
        int key,
        int defaultValue);
    /**
     * <pre>
     * For each possible host operation, maps to the difference between the TPU
     * step number that the host op targets and the current TPU step number.
     * The key is HostOp, value is the step difference.
     * </pre>
     *
     * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
     */

    int getStepDiffsOrThrow(
        int key);
  }
  /**
   * <pre>
   * Result proto for the host ops per TPU step.
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.HostOpsPerTpuStep}
   */
  public  static final class HostOpsPerTpuStep extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.HostOpsPerTpuStep)
      HostOpsPerTpuStepOrBuilder {
    // Use HostOpsPerTpuStep.newBuilder() to construct.
    private HostOpsPerTpuStep(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private HostOpsPerTpuStep() {
      valid_ = false;
      tpuStepNum_ = 0;
      tpuStepBeginPs_ = 0L;
      tpuStepEndPs_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HostOpsPerTpuStep(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              valid_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              tpuStepNum_ = input.readUInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              tpuStepBeginPs_ = input.readUInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              tpuStepEndPs_ = input.readUInt64();
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                stepDiffs_ = com.google.protobuf.MapField.newMapField(
                    StepDiffsDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000010;
              }
              com.google.protobuf.MapEntry<java.lang.Integer, java.lang.Integer>
              stepDiffs__ = input.readMessage(
                  StepDiffsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              stepDiffs_.getMutableMap().put(
                  stepDiffs__.getKey(), stepDiffs__.getValue());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsPerTpuStep_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 5:
          return internalGetStepDiffs();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsPerTpuStep_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep.class, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep.Builder.class);
    }

    private int bitField0_;
    public static final int VALID_FIELD_NUMBER = 1;
    private boolean valid_;
    /**
     * <pre>
     * Whether the data in this message is valid.
     * </pre>
     *
     * <code>optional bool valid = 1 [default = false];</code>
     */
    public boolean hasValid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Whether the data in this message is valid.
     * </pre>
     *
     * <code>optional bool valid = 1 [default = false];</code>
     */
    public boolean getValid() {
      return valid_;
    }

    public static final int TPU_STEP_NUM_FIELD_NUMBER = 2;
    private int tpuStepNum_;
    /**
     * <pre>
     * The current TPU step number.
     * </pre>
     *
     * <code>optional uint32 tpu_step_num = 2;</code>
     */
    public boolean hasTpuStepNum() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * The current TPU step number.
     * </pre>
     *
     * <code>optional uint32 tpu_step_num = 2;</code>
     */
    public int getTpuStepNum() {
      return tpuStepNum_;
    }

    public static final int TPU_STEP_BEGIN_PS_FIELD_NUMBER = 3;
    private long tpuStepBeginPs_;
    /**
     * <pre>
     * The beginning time of the current TPU step on the device in picoseconds.
     * </pre>
     *
     * <code>optional uint64 tpu_step_begin_ps = 3;</code>
     */
    public boolean hasTpuStepBeginPs() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * The beginning time of the current TPU step on the device in picoseconds.
     * </pre>
     *
     * <code>optional uint64 tpu_step_begin_ps = 3;</code>
     */
    public long getTpuStepBeginPs() {
      return tpuStepBeginPs_;
    }

    public static final int TPU_STEP_END_PS_FIELD_NUMBER = 4;
    private long tpuStepEndPs_;
    /**
     * <pre>
     * The ending time of the current TPU step on the device in picoseconds.
     * </pre>
     *
     * <code>optional uint64 tpu_step_end_ps = 4;</code>
     */
    public boolean hasTpuStepEndPs() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     * The ending time of the current TPU step on the device in picoseconds.
     * </pre>
     *
     * <code>optional uint64 tpu_step_end_ps = 4;</code>
     */
    public long getTpuStepEndPs() {
      return tpuStepEndPs_;
    }

    public static final int STEP_DIFFS_FIELD_NUMBER = 5;
    private static final class StepDiffsDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.Integer, java.lang.Integer> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.Integer, java.lang.Integer>newDefaultInstance(
                  tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsPerTpuStep_StepDiffsEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.INT32,
                  0,
                  com.google.protobuf.WireFormat.FieldType.INT32,
                  0);
    }
    private com.google.protobuf.MapField<
        java.lang.Integer, java.lang.Integer> stepDiffs_;
    private com.google.protobuf.MapField<java.lang.Integer, java.lang.Integer>
    internalGetStepDiffs() {
      if (stepDiffs_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            StepDiffsDefaultEntryHolder.defaultEntry);
      }
      return stepDiffs_;
    }

    public int getStepDiffsCount() {
      return internalGetStepDiffs().getMap().size();
    }
    /**
     * <pre>
     * For each possible host operation, maps to the difference between the TPU
     * step number that the host op targets and the current TPU step number.
     * The key is HostOp, value is the step difference.
     * </pre>
     *
     * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
     */

    public boolean containsStepDiffs(
        int key) {
      
      return internalGetStepDiffs().getMap().containsKey(key);
    }
    /**
     * Use {@link #getStepDiffsMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.Integer, java.lang.Integer> getStepDiffs() {
      return getStepDiffsMap();
    }
    /**
     * <pre>
     * For each possible host operation, maps to the difference between the TPU
     * step number that the host op targets and the current TPU step number.
     * The key is HostOp, value is the step difference.
     * </pre>
     *
     * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
     */

    public java.util.Map<java.lang.Integer, java.lang.Integer> getStepDiffsMap() {
      return internalGetStepDiffs().getMap();
    }
    /**
     * <pre>
     * For each possible host operation, maps to the difference between the TPU
     * step number that the host op targets and the current TPU step number.
     * The key is HostOp, value is the step difference.
     * </pre>
     *
     * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
     */

    public int getStepDiffsOrDefault(
        int key,
        int defaultValue) {
      
      java.util.Map<java.lang.Integer, java.lang.Integer> map =
          internalGetStepDiffs().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <pre>
     * For each possible host operation, maps to the difference between the TPU
     * step number that the host op targets and the current TPU step number.
     * The key is HostOp, value is the step difference.
     * </pre>
     *
     * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
     */

    public int getStepDiffsOrThrow(
        int key) {
      
      java.util.Map<java.lang.Integer, java.lang.Integer> map =
          internalGetStepDiffs().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, valid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt32(2, tpuStepNum_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt64(3, tpuStepBeginPs_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt64(4, tpuStepEndPs_);
      }
      com.google.protobuf.GeneratedMessageV3
        .serializeIntegerMapTo(
          output,
          internalGetStepDiffs(),
          StepDiffsDefaultEntryHolder.defaultEntry,
          5);
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, valid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, tpuStepNum_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, tpuStepBeginPs_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(4, tpuStepEndPs_);
      }
      for (java.util.Map.Entry<java.lang.Integer, java.lang.Integer> entry
           : internalGetStepDiffs().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.Integer, java.lang.Integer>
        stepDiffs__ = StepDiffsDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(5, stepDiffs__);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep other = (tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep) obj;

      boolean result = true;
      result = result && (hasValid() == other.hasValid());
      if (hasValid()) {
        result = result && (getValid()
            == other.getValid());
      }
      result = result && (hasTpuStepNum() == other.hasTpuStepNum());
      if (hasTpuStepNum()) {
        result = result && (getTpuStepNum()
            == other.getTpuStepNum());
      }
      result = result && (hasTpuStepBeginPs() == other.hasTpuStepBeginPs());
      if (hasTpuStepBeginPs()) {
        result = result && (getTpuStepBeginPs()
            == other.getTpuStepBeginPs());
      }
      result = result && (hasTpuStepEndPs() == other.hasTpuStepEndPs());
      if (hasTpuStepEndPs()) {
        result = result && (getTpuStepEndPs()
            == other.getTpuStepEndPs());
      }
      result = result && internalGetStepDiffs().equals(
          other.internalGetStepDiffs());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasValid()) {
        hash = (37 * hash) + VALID_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getValid());
      }
      if (hasTpuStepNum()) {
        hash = (37 * hash) + TPU_STEP_NUM_FIELD_NUMBER;
        hash = (53 * hash) + getTpuStepNum();
      }
      if (hasTpuStepBeginPs()) {
        hash = (37 * hash) + TPU_STEP_BEGIN_PS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getTpuStepBeginPs());
      }
      if (hasTpuStepEndPs()) {
        hash = (37 * hash) + TPU_STEP_END_PS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getTpuStepEndPs());
      }
      if (!internalGetStepDiffs().getMap().isEmpty()) {
        hash = (37 * hash) + STEP_DIFFS_FIELD_NUMBER;
        hash = (53 * hash) + internalGetStepDiffs().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for the host ops per TPU step.
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.HostOpsPerTpuStep}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.HostOpsPerTpuStep)
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStepOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsPerTpuStep_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 5:
            return internalGetStepDiffs();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 5:
            return internalGetMutableStepDiffs();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsPerTpuStep_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep.class, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        valid_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        tpuStepNum_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        tpuStepBeginPs_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        tpuStepEndPs_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        internalGetMutableStepDiffs().clear();
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsPerTpuStep_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep build() {
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep result = new tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.valid_ = valid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.tpuStepNum_ = tpuStepNum_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.tpuStepBeginPs_ = tpuStepBeginPs_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.tpuStepEndPs_ = tpuStepEndPs_;
        result.stepDiffs_ = internalGetStepDiffs();
        result.stepDiffs_.makeImmutable();
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep.getDefaultInstance()) return this;
        if (other.hasValid()) {
          setValid(other.getValid());
        }
        if (other.hasTpuStepNum()) {
          setTpuStepNum(other.getTpuStepNum());
        }
        if (other.hasTpuStepBeginPs()) {
          setTpuStepBeginPs(other.getTpuStepBeginPs());
        }
        if (other.hasTpuStepEndPs()) {
          setTpuStepEndPs(other.getTpuStepEndPs());
        }
        internalGetMutableStepDiffs().mergeFrom(
            other.internalGetStepDiffs());
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private boolean valid_ ;
      /**
       * <pre>
       * Whether the data in this message is valid.
       * </pre>
       *
       * <code>optional bool valid = 1 [default = false];</code>
       */
      public boolean hasValid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Whether the data in this message is valid.
       * </pre>
       *
       * <code>optional bool valid = 1 [default = false];</code>
       */
      public boolean getValid() {
        return valid_;
      }
      /**
       * <pre>
       * Whether the data in this message is valid.
       * </pre>
       *
       * <code>optional bool valid = 1 [default = false];</code>
       */
      public Builder setValid(boolean value) {
        bitField0_ |= 0x00000001;
        valid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether the data in this message is valid.
       * </pre>
       *
       * <code>optional bool valid = 1 [default = false];</code>
       */
      public Builder clearValid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        valid_ = false;
        onChanged();
        return this;
      }

      private int tpuStepNum_ ;
      /**
       * <pre>
       * The current TPU step number.
       * </pre>
       *
       * <code>optional uint32 tpu_step_num = 2;</code>
       */
      public boolean hasTpuStepNum() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * The current TPU step number.
       * </pre>
       *
       * <code>optional uint32 tpu_step_num = 2;</code>
       */
      public int getTpuStepNum() {
        return tpuStepNum_;
      }
      /**
       * <pre>
       * The current TPU step number.
       * </pre>
       *
       * <code>optional uint32 tpu_step_num = 2;</code>
       */
      public Builder setTpuStepNum(int value) {
        bitField0_ |= 0x00000002;
        tpuStepNum_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The current TPU step number.
       * </pre>
       *
       * <code>optional uint32 tpu_step_num = 2;</code>
       */
      public Builder clearTpuStepNum() {
        bitField0_ = (bitField0_ & ~0x00000002);
        tpuStepNum_ = 0;
        onChanged();
        return this;
      }

      private long tpuStepBeginPs_ ;
      /**
       * <pre>
       * The beginning time of the current TPU step on the device in picoseconds.
       * </pre>
       *
       * <code>optional uint64 tpu_step_begin_ps = 3;</code>
       */
      public boolean hasTpuStepBeginPs() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * The beginning time of the current TPU step on the device in picoseconds.
       * </pre>
       *
       * <code>optional uint64 tpu_step_begin_ps = 3;</code>
       */
      public long getTpuStepBeginPs() {
        return tpuStepBeginPs_;
      }
      /**
       * <pre>
       * The beginning time of the current TPU step on the device in picoseconds.
       * </pre>
       *
       * <code>optional uint64 tpu_step_begin_ps = 3;</code>
       */
      public Builder setTpuStepBeginPs(long value) {
        bitField0_ |= 0x00000004;
        tpuStepBeginPs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The beginning time of the current TPU step on the device in picoseconds.
       * </pre>
       *
       * <code>optional uint64 tpu_step_begin_ps = 3;</code>
       */
      public Builder clearTpuStepBeginPs() {
        bitField0_ = (bitField0_ & ~0x00000004);
        tpuStepBeginPs_ = 0L;
        onChanged();
        return this;
      }

      private long tpuStepEndPs_ ;
      /**
       * <pre>
       * The ending time of the current TPU step on the device in picoseconds.
       * </pre>
       *
       * <code>optional uint64 tpu_step_end_ps = 4;</code>
       */
      public boolean hasTpuStepEndPs() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       * The ending time of the current TPU step on the device in picoseconds.
       * </pre>
       *
       * <code>optional uint64 tpu_step_end_ps = 4;</code>
       */
      public long getTpuStepEndPs() {
        return tpuStepEndPs_;
      }
      /**
       * <pre>
       * The ending time of the current TPU step on the device in picoseconds.
       * </pre>
       *
       * <code>optional uint64 tpu_step_end_ps = 4;</code>
       */
      public Builder setTpuStepEndPs(long value) {
        bitField0_ |= 0x00000008;
        tpuStepEndPs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The ending time of the current TPU step on the device in picoseconds.
       * </pre>
       *
       * <code>optional uint64 tpu_step_end_ps = 4;</code>
       */
      public Builder clearTpuStepEndPs() {
        bitField0_ = (bitField0_ & ~0x00000008);
        tpuStepEndPs_ = 0L;
        onChanged();
        return this;
      }

      private com.google.protobuf.MapField<
          java.lang.Integer, java.lang.Integer> stepDiffs_;
      private com.google.protobuf.MapField<java.lang.Integer, java.lang.Integer>
      internalGetStepDiffs() {
        if (stepDiffs_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              StepDiffsDefaultEntryHolder.defaultEntry);
        }
        return stepDiffs_;
      }
      private com.google.protobuf.MapField<java.lang.Integer, java.lang.Integer>
      internalGetMutableStepDiffs() {
        onChanged();;
        if (stepDiffs_ == null) {
          stepDiffs_ = com.google.protobuf.MapField.newMapField(
              StepDiffsDefaultEntryHolder.defaultEntry);
        }
        if (!stepDiffs_.isMutable()) {
          stepDiffs_ = stepDiffs_.copy();
        }
        return stepDiffs_;
      }

      public int getStepDiffsCount() {
        return internalGetStepDiffs().getMap().size();
      }
      /**
       * <pre>
       * For each possible host operation, maps to the difference between the TPU
       * step number that the host op targets and the current TPU step number.
       * The key is HostOp, value is the step difference.
       * </pre>
       *
       * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
       */

      public boolean containsStepDiffs(
          int key) {
        
        return internalGetStepDiffs().getMap().containsKey(key);
      }
      /**
       * Use {@link #getStepDiffsMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.Integer, java.lang.Integer> getStepDiffs() {
        return getStepDiffsMap();
      }
      /**
       * <pre>
       * For each possible host operation, maps to the difference between the TPU
       * step number that the host op targets and the current TPU step number.
       * The key is HostOp, value is the step difference.
       * </pre>
       *
       * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
       */

      public java.util.Map<java.lang.Integer, java.lang.Integer> getStepDiffsMap() {
        return internalGetStepDiffs().getMap();
      }
      /**
       * <pre>
       * For each possible host operation, maps to the difference between the TPU
       * step number that the host op targets and the current TPU step number.
       * The key is HostOp, value is the step difference.
       * </pre>
       *
       * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
       */

      public int getStepDiffsOrDefault(
          int key,
          int defaultValue) {
        
        java.util.Map<java.lang.Integer, java.lang.Integer> map =
            internalGetStepDiffs().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <pre>
       * For each possible host operation, maps to the difference between the TPU
       * step number that the host op targets and the current TPU step number.
       * The key is HostOp, value is the step difference.
       * </pre>
       *
       * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
       */

      public int getStepDiffsOrThrow(
          int key) {
        
        java.util.Map<java.lang.Integer, java.lang.Integer> map =
            internalGetStepDiffs().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearStepDiffs() {
        internalGetMutableStepDiffs().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <pre>
       * For each possible host operation, maps to the difference between the TPU
       * step number that the host op targets and the current TPU step number.
       * The key is HostOp, value is the step difference.
       * </pre>
       *
       * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
       */

      public Builder removeStepDiffs(
          int key) {
        
        internalGetMutableStepDiffs().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.Integer, java.lang.Integer>
      getMutableStepDiffs() {
        return internalGetMutableStepDiffs().getMutableMap();
      }
      /**
       * <pre>
       * For each possible host operation, maps to the difference between the TPU
       * step number that the host op targets and the current TPU step number.
       * The key is HostOp, value is the step difference.
       * </pre>
       *
       * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
       */
      public Builder putStepDiffs(
          int key,
          int value) {
        
        
        internalGetMutableStepDiffs().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <pre>
       * For each possible host operation, maps to the difference between the TPU
       * step number that the host op targets and the current TPU step number.
       * The key is HostOp, value is the step difference.
       * </pre>
       *
       * <code>map&lt;int32, int32&gt; step_diffs = 5;</code>
       */

      public Builder putAllStepDiffs(
          java.util.Map<java.lang.Integer, java.lang.Integer> values) {
        internalGetMutableStepDiffs().getMutableMap()
            .putAll(values);
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.HostOpsPerTpuStep)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.HostOpsPerTpuStep)
    private static final tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<HostOpsPerTpuStep>
        PARSER = new com.google.protobuf.AbstractParser<HostOpsPerTpuStep>() {
      public HostOpsPerTpuStep parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new HostOpsPerTpuStep(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<HostOpsPerTpuStep> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<HostOpsPerTpuStep> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface HostOpsDetailsPerCoreOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.HostOpsDetailsPerCore)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
     */
    int getCoreMapCount();
    /**
     * <pre>
     * Map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
     */
    boolean containsCoreMap(
        int key);
    /**
     * Use {@link #getCoreMapMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep>
    getCoreMap();
    /**
     * <pre>
     * Map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
     */
    java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep>
    getCoreMapMap();
    /**
     * <pre>
     * Map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
     */

    tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep getCoreMapOrDefault(
        int key,
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep defaultValue);
    /**
     * <pre>
     * Map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
     */

    tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep getCoreMapOrThrow(
        int key);
  }
  /**
   * Protobuf type {@code tensorflow.tpu.HostOpsDetailsPerCore}
   */
  public  static final class HostOpsDetailsPerCore extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.HostOpsDetailsPerCore)
      HostOpsDetailsPerCoreOrBuilder {
    // Use HostOpsDetailsPerCore.newBuilder() to construct.
    private HostOpsDetailsPerCore(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private HostOpsDetailsPerCore() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HostOpsDetailsPerCore(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                coreMap_ = com.google.protobuf.MapField.newMapField(
                    CoreMapDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000001;
              }
              com.google.protobuf.MapEntry<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep>
              coreMap__ = input.readMessage(
                  CoreMapDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              coreMap_.getMutableMap().put(
                  coreMap__.getKey(), coreMap__.getValue());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsDetailsPerCore_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 1:
          return internalGetCoreMap();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsDetailsPerCore_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore.class, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore.Builder.class);
    }

    public static final int CORE_MAP_FIELD_NUMBER = 1;
    private static final class CoreMapDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep>newDefaultInstance(
                  tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsDetailsPerCore_CoreMapEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.INT32,
                  0,
                  com.google.protobuf.WireFormat.FieldType.MESSAGE,
                  tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep.getDefaultInstance());
    }
    private com.google.protobuf.MapField<
        java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep> coreMap_;
    private com.google.protobuf.MapField<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep>
    internalGetCoreMap() {
      if (coreMap_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            CoreMapDefaultEntryHolder.defaultEntry);
      }
      return coreMap_;
    }

    public int getCoreMapCount() {
      return internalGetCoreMap().getMap().size();
    }
    /**
     * <pre>
     * Map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
     */

    public boolean containsCoreMap(
        int key) {
      
      return internalGetCoreMap().getMap().containsKey(key);
    }
    /**
     * Use {@link #getCoreMapMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep> getCoreMap() {
      return getCoreMapMap();
    }
    /**
     * <pre>
     * Map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
     */

    public java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep> getCoreMapMap() {
      return internalGetCoreMap().getMap();
    }
    /**
     * <pre>
     * Map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
     */

    public tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep getCoreMapOrDefault(
        int key,
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep defaultValue) {
      
      java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep> map =
          internalGetCoreMap().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <pre>
     * Map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
     */

    public tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep getCoreMapOrThrow(
        int key) {
      
      java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep> map =
          internalGetCoreMap().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      com.google.protobuf.GeneratedMessageV3
        .serializeIntegerMapTo(
          output,
          internalGetCoreMap(),
          CoreMapDefaultEntryHolder.defaultEntry,
          1);
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (java.util.Map.Entry<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep> entry
           : internalGetCoreMap().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep>
        coreMap__ = CoreMapDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, coreMap__);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore other = (tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore) obj;

      boolean result = true;
      result = result && internalGetCoreMap().equals(
          other.internalGetCoreMap());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (!internalGetCoreMap().getMap().isEmpty()) {
        hash = (37 * hash) + CORE_MAP_FIELD_NUMBER;
        hash = (53 * hash) + internalGetCoreMap().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code tensorflow.tpu.HostOpsDetailsPerCore}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.HostOpsDetailsPerCore)
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCoreOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsDetailsPerCore_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetCoreMap();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetMutableCoreMap();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsDetailsPerCore_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore.class, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        internalGetMutableCoreMap().clear();
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsDetailsPerCore_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore build() {
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore result = new tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore(this);
        int from_bitField0_ = bitField0_;
        result.coreMap_ = internalGetCoreMap();
        result.coreMap_.makeImmutable();
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore.getDefaultInstance()) return this;
        internalGetMutableCoreMap().mergeFrom(
            other.internalGetCoreMap());
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.MapField<
          java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep> coreMap_;
      private com.google.protobuf.MapField<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep>
      internalGetCoreMap() {
        if (coreMap_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              CoreMapDefaultEntryHolder.defaultEntry);
        }
        return coreMap_;
      }
      private com.google.protobuf.MapField<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep>
      internalGetMutableCoreMap() {
        onChanged();;
        if (coreMap_ == null) {
          coreMap_ = com.google.protobuf.MapField.newMapField(
              CoreMapDefaultEntryHolder.defaultEntry);
        }
        if (!coreMap_.isMutable()) {
          coreMap_ = coreMap_.copy();
        }
        return coreMap_;
      }

      public int getCoreMapCount() {
        return internalGetCoreMap().getMap().size();
      }
      /**
       * <pre>
       * Map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
       */

      public boolean containsCoreMap(
          int key) {
        
        return internalGetCoreMap().getMap().containsKey(key);
      }
      /**
       * Use {@link #getCoreMapMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep> getCoreMap() {
        return getCoreMapMap();
      }
      /**
       * <pre>
       * Map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
       */

      public java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep> getCoreMapMap() {
        return internalGetCoreMap().getMap();
      }
      /**
       * <pre>
       * Map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
       */

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep getCoreMapOrDefault(
          int key,
          tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep defaultValue) {
        
        java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep> map =
            internalGetCoreMap().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <pre>
       * Map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
       */

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep getCoreMapOrThrow(
          int key) {
        
        java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep> map =
            internalGetCoreMap().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearCoreMap() {
        internalGetMutableCoreMap().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <pre>
       * Map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
       */

      public Builder removeCoreMap(
          int key) {
        
        internalGetMutableCoreMap().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep>
      getMutableCoreMap() {
        return internalGetMutableCoreMap().getMutableMap();
      }
      /**
       * <pre>
       * Map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
       */
      public Builder putCoreMap(
          int key,
          tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep value) {
        
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableCoreMap().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <pre>
       * Map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;int32, .tensorflow.tpu.HostOpsPerTpuStep&gt; core_map = 1;</code>
       */

      public Builder putAllCoreMap(
          java.util.Map<java.lang.Integer, tensorflow.tpu.TfOpStatsOuterClass.HostOpsPerTpuStep> values) {
        internalGetMutableCoreMap().getMutableMap()
            .putAll(values);
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.HostOpsDetailsPerCore)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.HostOpsDetailsPerCore)
    private static final tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<HostOpsDetailsPerCore>
        PARSER = new com.google.protobuf.AbstractParser<HostOpsDetailsPerCore>() {
      public HostOpsDetailsPerCore parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new HostOpsDetailsPerCore(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<HostOpsDetailsPerCore> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<HostOpsDetailsPerCore> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface HostOpsDetailsPerHostOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.HostOpsDetailsPerHost)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
     */
    int getHostMapCount();
    /**
     * <pre>
     * Map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
     */
    boolean containsHostMap(
        java.lang.String key);
    /**
     * Use {@link #getHostMapMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore>
    getHostMap();
    /**
     * <pre>
     * Map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
     */
    java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore>
    getHostMapMap();
    /**
     * <pre>
     * Map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
     */

    tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore getHostMapOrDefault(
        java.lang.String key,
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore defaultValue);
    /**
     * <pre>
     * Map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
     */

    tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore getHostMapOrThrow(
        java.lang.String key);
  }
  /**
   * Protobuf type {@code tensorflow.tpu.HostOpsDetailsPerHost}
   */
  public  static final class HostOpsDetailsPerHost extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.HostOpsDetailsPerHost)
      HostOpsDetailsPerHostOrBuilder {
    // Use HostOpsDetailsPerHost.newBuilder() to construct.
    private HostOpsDetailsPerHost(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private HostOpsDetailsPerHost() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HostOpsDetailsPerHost(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                hostMap_ = com.google.protobuf.MapField.newMapField(
                    HostMapDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000001;
              }
              com.google.protobuf.MapEntry<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore>
              hostMap__ = input.readMessage(
                  HostMapDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              hostMap_.getMutableMap().put(
                  hostMap__.getKey(), hostMap__.getValue());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsDetailsPerHost_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 1:
          return internalGetHostMap();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsDetailsPerHost_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.class, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.Builder.class);
    }

    public static final int HOST_MAP_FIELD_NUMBER = 1;
    private static final class HostMapDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore>newDefaultInstance(
                  tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsDetailsPerHost_HostMapEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.MESSAGE,
                  tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore.getDefaultInstance());
    }
    private com.google.protobuf.MapField<
        java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore> hostMap_;
    private com.google.protobuf.MapField<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore>
    internalGetHostMap() {
      if (hostMap_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            HostMapDefaultEntryHolder.defaultEntry);
      }
      return hostMap_;
    }

    public int getHostMapCount() {
      return internalGetHostMap().getMap().size();
    }
    /**
     * <pre>
     * Map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
     */

    public boolean containsHostMap(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      return internalGetHostMap().getMap().containsKey(key);
    }
    /**
     * Use {@link #getHostMapMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore> getHostMap() {
      return getHostMapMap();
    }
    /**
     * <pre>
     * Map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
     */

    public java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore> getHostMapMap() {
      return internalGetHostMap().getMap();
    }
    /**
     * <pre>
     * Map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
     */

    public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore getHostMapOrDefault(
        java.lang.String key,
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore defaultValue) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore> map =
          internalGetHostMap().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <pre>
     * Map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
     */

    public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore getHostMapOrThrow(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore> map =
          internalGetHostMap().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      com.google.protobuf.GeneratedMessageV3
        .serializeStringMapTo(
          output,
          internalGetHostMap(),
          HostMapDefaultEntryHolder.defaultEntry,
          1);
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (java.util.Map.Entry<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore> entry
           : internalGetHostMap().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore>
        hostMap__ = HostMapDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, hostMap__);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost other = (tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost) obj;

      boolean result = true;
      result = result && internalGetHostMap().equals(
          other.internalGetHostMap());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (!internalGetHostMap().getMap().isEmpty()) {
        hash = (37 * hash) + HOST_MAP_FIELD_NUMBER;
        hash = (53 * hash) + internalGetHostMap().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code tensorflow.tpu.HostOpsDetailsPerHost}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.HostOpsDetailsPerHost)
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHostOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsDetailsPerHost_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetHostMap();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetMutableHostMap();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsDetailsPerHost_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.class, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        internalGetMutableHostMap().clear();
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsDetailsPerHost_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost build() {
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost result = new tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost(this);
        int from_bitField0_ = bitField0_;
        result.hostMap_ = internalGetHostMap();
        result.hostMap_.makeImmutable();
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.getDefaultInstance()) return this;
        internalGetMutableHostMap().mergeFrom(
            other.internalGetHostMap());
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.MapField<
          java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore> hostMap_;
      private com.google.protobuf.MapField<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore>
      internalGetHostMap() {
        if (hostMap_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              HostMapDefaultEntryHolder.defaultEntry);
        }
        return hostMap_;
      }
      private com.google.protobuf.MapField<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore>
      internalGetMutableHostMap() {
        onChanged();;
        if (hostMap_ == null) {
          hostMap_ = com.google.protobuf.MapField.newMapField(
              HostMapDefaultEntryHolder.defaultEntry);
        }
        if (!hostMap_.isMutable()) {
          hostMap_ = hostMap_.copy();
        }
        return hostMap_;
      }

      public int getHostMapCount() {
        return internalGetHostMap().getMap().size();
      }
      /**
       * <pre>
       * Map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
       */

      public boolean containsHostMap(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        return internalGetHostMap().getMap().containsKey(key);
      }
      /**
       * Use {@link #getHostMapMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore> getHostMap() {
        return getHostMapMap();
      }
      /**
       * <pre>
       * Map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
       */

      public java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore> getHostMapMap() {
        return internalGetHostMap().getMap();
      }
      /**
       * <pre>
       * Map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
       */

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore getHostMapOrDefault(
          java.lang.String key,
          tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore defaultValue) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore> map =
            internalGetHostMap().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <pre>
       * Map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
       */

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore getHostMapOrThrow(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore> map =
            internalGetHostMap().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearHostMap() {
        internalGetMutableHostMap().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <pre>
       * Map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
       */

      public Builder removeHostMap(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableHostMap().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore>
      getMutableHostMap() {
        return internalGetMutableHostMap().getMutableMap();
      }
      /**
       * <pre>
       * Map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
       */
      public Builder putHostMap(
          java.lang.String key,
          tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore value) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableHostMap().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <pre>
       * Map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>map&lt;string, .tensorflow.tpu.HostOpsDetailsPerCore&gt; host_map = 1;</code>
       */

      public Builder putAllHostMap(
          java.util.Map<java.lang.String, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerCore> values) {
        internalGetMutableHostMap().getMutableMap()
            .putAll(values);
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.HostOpsDetailsPerHost)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.HostOpsDetailsPerHost)
    private static final tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<HostOpsDetailsPerHost>
        PARSER = new com.google.protobuf.AbstractParser<HostOpsDetailsPerHost>() {
      public HostOpsDetailsPerHost parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new HostOpsDetailsPerHost(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<HostOpsDetailsPerHost> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<HostOpsDetailsPerHost> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface HostOpsResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.HostOpsResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * A sequence of records with one for each TPU step. Each record
     * is a map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
     */
    java.util.List<tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost> 
        getHostopsDetailsList();
    /**
     * <pre>
     * A sequence of records with one for each TPU step. Each record
     * is a map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost getHostopsDetails(int index);
    /**
     * <pre>
     * A sequence of records with one for each TPU step. Each record
     * is a map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
     */
    int getHostopsDetailsCount();
    /**
     * <pre>
     * A sequence of records with one for each TPU step. Each record
     * is a map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
     */
    java.util.List<? extends tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHostOrBuilder> 
        getHostopsDetailsOrBuilderList();
    /**
     * <pre>
     * A sequence of records with one for each TPU step. Each record
     * is a map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHostOrBuilder getHostopsDetailsOrBuilder(
        int index);
  }
  /**
   * <pre>
   * Result proto for the host ops for all TPU steps.
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.HostOpsResult}
   */
  public  static final class HostOpsResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.HostOpsResult)
      HostOpsResultOrBuilder {
    // Use HostOpsResult.newBuilder() to construct.
    private HostOpsResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private HostOpsResult() {
      hostopsDetails_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HostOpsResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                hostopsDetails_ = new java.util.ArrayList<tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost>();
                mutable_bitField0_ |= 0x00000001;
              }
              hostopsDetails_.add(
                  input.readMessage(tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          hostopsDetails_ = java.util.Collections.unmodifiableList(hostopsDetails_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsResult_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.class, tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.Builder.class);
    }

    public static final int HOSTOPS_DETAILS_FIELD_NUMBER = 2;
    private java.util.List<tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost> hostopsDetails_;
    /**
     * <pre>
     * A sequence of records with one for each TPU step. Each record
     * is a map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
     */
    public java.util.List<tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost> getHostopsDetailsList() {
      return hostopsDetails_;
    }
    /**
     * <pre>
     * A sequence of records with one for each TPU step. Each record
     * is a map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
     */
    public java.util.List<? extends tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHostOrBuilder> 
        getHostopsDetailsOrBuilderList() {
      return hostopsDetails_;
    }
    /**
     * <pre>
     * A sequence of records with one for each TPU step. Each record
     * is a map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
     */
    public int getHostopsDetailsCount() {
      return hostopsDetails_.size();
    }
    /**
     * <pre>
     * A sequence of records with one for each TPU step. Each record
     * is a map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost getHostopsDetails(int index) {
      return hostopsDetails_.get(index);
    }
    /**
     * <pre>
     * A sequence of records with one for each TPU step. Each record
     * is a map from hostname to a map from core id to HostOpsPerTpuStep.
     * </pre>
     *
     * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHostOrBuilder getHostopsDetailsOrBuilder(
        int index) {
      return hostopsDetails_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < hostopsDetails_.size(); i++) {
        output.writeMessage(2, hostopsDetails_.get(i));
      }
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < hostopsDetails_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, hostopsDetails_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult other = (tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult) obj;

      boolean result = true;
      result = result && getHostopsDetailsList()
          .equals(other.getHostopsDetailsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getHostopsDetailsCount() > 0) {
        hash = (37 * hash) + HOSTOPS_DETAILS_FIELD_NUMBER;
        hash = (53 * hash) + getHostopsDetailsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for the host ops for all TPU steps.
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.HostOpsResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.HostOpsResult)
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsResult_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.class, tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getHostopsDetailsFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (hostopsDetailsBuilder_ == null) {
          hostopsDetails_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          hostopsDetailsBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_HostOpsResult_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult build() {
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult result = new tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult(this);
        int from_bitField0_ = bitField0_;
        if (hostopsDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            hostopsDetails_ = java.util.Collections.unmodifiableList(hostopsDetails_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.hostopsDetails_ = hostopsDetails_;
        } else {
          result.hostopsDetails_ = hostopsDetailsBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.getDefaultInstance()) return this;
        if (hostopsDetailsBuilder_ == null) {
          if (!other.hostopsDetails_.isEmpty()) {
            if (hostopsDetails_.isEmpty()) {
              hostopsDetails_ = other.hostopsDetails_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureHostopsDetailsIsMutable();
              hostopsDetails_.addAll(other.hostopsDetails_);
            }
            onChanged();
          }
        } else {
          if (!other.hostopsDetails_.isEmpty()) {
            if (hostopsDetailsBuilder_.isEmpty()) {
              hostopsDetailsBuilder_.dispose();
              hostopsDetailsBuilder_ = null;
              hostopsDetails_ = other.hostopsDetails_;
              bitField0_ = (bitField0_ & ~0x00000001);
              hostopsDetailsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getHostopsDetailsFieldBuilder() : null;
            } else {
              hostopsDetailsBuilder_.addAllMessages(other.hostopsDetails_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost> hostopsDetails_ =
        java.util.Collections.emptyList();
      private void ensureHostopsDetailsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          hostopsDetails_ = new java.util.ArrayList<tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost>(hostopsDetails_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.Builder, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHostOrBuilder> hostopsDetailsBuilder_;

      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public java.util.List<tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost> getHostopsDetailsList() {
        if (hostopsDetailsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(hostopsDetails_);
        } else {
          return hostopsDetailsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public int getHostopsDetailsCount() {
        if (hostopsDetailsBuilder_ == null) {
          return hostopsDetails_.size();
        } else {
          return hostopsDetailsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost getHostopsDetails(int index) {
        if (hostopsDetailsBuilder_ == null) {
          return hostopsDetails_.get(index);
        } else {
          return hostopsDetailsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public Builder setHostopsDetails(
          int index, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost value) {
        if (hostopsDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHostopsDetailsIsMutable();
          hostopsDetails_.set(index, value);
          onChanged();
        } else {
          hostopsDetailsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public Builder setHostopsDetails(
          int index, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.Builder builderForValue) {
        if (hostopsDetailsBuilder_ == null) {
          ensureHostopsDetailsIsMutable();
          hostopsDetails_.set(index, builderForValue.build());
          onChanged();
        } else {
          hostopsDetailsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public Builder addHostopsDetails(tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost value) {
        if (hostopsDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHostopsDetailsIsMutable();
          hostopsDetails_.add(value);
          onChanged();
        } else {
          hostopsDetailsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public Builder addHostopsDetails(
          int index, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost value) {
        if (hostopsDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHostopsDetailsIsMutable();
          hostopsDetails_.add(index, value);
          onChanged();
        } else {
          hostopsDetailsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public Builder addHostopsDetails(
          tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.Builder builderForValue) {
        if (hostopsDetailsBuilder_ == null) {
          ensureHostopsDetailsIsMutable();
          hostopsDetails_.add(builderForValue.build());
          onChanged();
        } else {
          hostopsDetailsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public Builder addHostopsDetails(
          int index, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.Builder builderForValue) {
        if (hostopsDetailsBuilder_ == null) {
          ensureHostopsDetailsIsMutable();
          hostopsDetails_.add(index, builderForValue.build());
          onChanged();
        } else {
          hostopsDetailsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public Builder addAllHostopsDetails(
          java.lang.Iterable<? extends tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost> values) {
        if (hostopsDetailsBuilder_ == null) {
          ensureHostopsDetailsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, hostopsDetails_);
          onChanged();
        } else {
          hostopsDetailsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public Builder clearHostopsDetails() {
        if (hostopsDetailsBuilder_ == null) {
          hostopsDetails_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          hostopsDetailsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public Builder removeHostopsDetails(int index) {
        if (hostopsDetailsBuilder_ == null) {
          ensureHostopsDetailsIsMutable();
          hostopsDetails_.remove(index);
          onChanged();
        } else {
          hostopsDetailsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.Builder getHostopsDetailsBuilder(
          int index) {
        return getHostopsDetailsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHostOrBuilder getHostopsDetailsOrBuilder(
          int index) {
        if (hostopsDetailsBuilder_ == null) {
          return hostopsDetails_.get(index);  } else {
          return hostopsDetailsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public java.util.List<? extends tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHostOrBuilder> 
           getHostopsDetailsOrBuilderList() {
        if (hostopsDetailsBuilder_ != null) {
          return hostopsDetailsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(hostopsDetails_);
        }
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.Builder addHostopsDetailsBuilder() {
        return getHostopsDetailsFieldBuilder().addBuilder(
            tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.getDefaultInstance());
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.Builder addHostopsDetailsBuilder(
          int index) {
        return getHostopsDetailsFieldBuilder().addBuilder(
            index, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.getDefaultInstance());
      }
      /**
       * <pre>
       * A sequence of records with one for each TPU step. Each record
       * is a map from hostname to a map from core id to HostOpsPerTpuStep.
       * </pre>
       *
       * <code>repeated .tensorflow.tpu.HostOpsDetailsPerHost hostops_details = 2;</code>
       */
      public java.util.List<tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.Builder> 
           getHostopsDetailsBuilderList() {
        return getHostopsDetailsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.Builder, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHostOrBuilder> 
          getHostopsDetailsFieldBuilder() {
        if (hostopsDetailsBuilder_ == null) {
          hostopsDetailsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHost.Builder, tensorflow.tpu.TfOpStatsOuterClass.HostOpsDetailsPerHostOrBuilder>(
                  hostopsDetails_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          hostopsDetails_ = null;
        }
        return hostopsDetailsBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.HostOpsResult)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.HostOpsResult)
    private static final tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<HostOpsResult>
        PARSER = new com.google.protobuf.AbstractParser<HostOpsResult>() {
      public HostOpsResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new HostOpsResult(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<HostOpsResult> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<HostOpsResult> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface TfOpStatsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.tpu.TfOpStats)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * The result for the TF-metric database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
     */
    boolean hasTfMetricsDb();
    /**
     * <pre>
     * The result for the TF-metric database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult getTfMetricsDb();
    /**
     * <pre>
     * The result for the TF-metric database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResultOrBuilder getTfMetricsDbOrBuilder();

    /**
     * <pre>
     * The result for the HLO-metric database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
     */
    boolean hasHloMetricsDb();
    /**
     * <pre>
     * The result for the HLO-metric database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult getHloMetricsDb();
    /**
     * <pre>
     * The result for the HLO-metric database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResultOrBuilder getHloMetricsDbOrBuilder();

    /**
     * <pre>
     * The result for the step database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
     */
    boolean hasStepDb();
    /**
     * <pre>
     * The result for the step database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult getStepDb();
    /**
     * <pre>
     * The result for the step database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResultOrBuilder getStepDbOrBuilder();

    /**
     * <pre>
     * The result for the looping-related metrics.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
     */
    boolean hasLooping();
    /**
     * <pre>
     * The result for the looping-related metrics.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.LoopingResult getLooping();
    /**
     * <pre>
     * The result for the looping-related metrics.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.LoopingResultOrBuilder getLoopingOrBuilder();

    /**
     * <pre>
     * The result for the HloExtraInfoMap.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
     */
    boolean hasHloExtrainfoMap();
    /**
     * <pre>
     * The result for the HloExtraInfoMap.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult getHloExtrainfoMap();
    /**
     * <pre>
     * The result for the HloExtraInfoMap.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResultOrBuilder getHloExtrainfoMapOrBuilder();

    /**
     * <pre>
     * Overall matrix unit utilization in percentage.
     * </pre>
     *
     * <code>optional double matrix_unit_utilization_percent = 6;</code>
     */
    boolean hasMatrixUnitUtilizationPercent();
    /**
     * <pre>
     * Overall matrix unit utilization in percentage.
     * </pre>
     *
     * <code>optional double matrix_unit_utilization_percent = 6;</code>
     */
    double getMatrixUnitUtilizationPercent();

    /**
     * <pre>
     * The run environment of this profiling session.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
     */
    boolean hasRunEnvironment();
    /**
     * <pre>
     * The run environment of this profiling session.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult getRunEnvironment();
    /**
     * <pre>
     * The run environment of this profiling session.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResultOrBuilder getRunEnvironmentOrBuilder();

    /**
     * <pre>
     * The result for the host operations.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
     */
    boolean hasHostOps();
    /**
     * <pre>
     * The result for the host operations.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult getHostOps();
    /**
     * <pre>
     * The result for the host operations.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
     */
    tensorflow.tpu.TfOpStatsOuterClass.HostOpsResultOrBuilder getHostOpsOrBuilder();

    /**
     * <pre>
     * A map from core ID to name.
     * </pre>
     *
     * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
     */
    int getCoreIdToNameMapCount();
    /**
     * <pre>
     * A map from core ID to name.
     * </pre>
     *
     * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
     */
    boolean containsCoreIdToNameMap(
        int key);
    /**
     * Use {@link #getCoreIdToNameMapMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.Integer, java.lang.String>
    getCoreIdToNameMap();
    /**
     * <pre>
     * A map from core ID to name.
     * </pre>
     *
     * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
     */
    java.util.Map<java.lang.Integer, java.lang.String>
    getCoreIdToNameMapMap();
    /**
     * <pre>
     * A map from core ID to name.
     * </pre>
     *
     * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
     */

    java.lang.String getCoreIdToNameMapOrDefault(
        int key,
        java.lang.String defaultValue);
    /**
     * <pre>
     * A map from core ID to name.
     * </pre>
     *
     * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
     */

    java.lang.String getCoreIdToNameMapOrThrow(
        int key);
  }
  /**
   * <pre>
   * Result proto for TfStatsHelper.
   * </pre>
   *
   * Protobuf type {@code tensorflow.tpu.TfOpStats}
   */
  public  static final class TfOpStats extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.tpu.TfOpStats)
      TfOpStatsOrBuilder {
    // Use TfOpStats.newBuilder() to construct.
    private TfOpStats(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private TfOpStats() {
      matrixUnitUtilizationPercent_ = 0D;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private TfOpStats(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = tfMetricsDb_.toBuilder();
              }
              tfMetricsDb_ = input.readMessage(tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(tfMetricsDb_);
                tfMetricsDb_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = hloMetricsDb_.toBuilder();
              }
              hloMetricsDb_ = input.readMessage(tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(hloMetricsDb_);
                hloMetricsDb_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = stepDb_.toBuilder();
              }
              stepDb_ = input.readMessage(tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(stepDb_);
                stepDb_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = looping_.toBuilder();
              }
              looping_ = input.readMessage(tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(looping_);
                looping_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 42: {
              tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = hloExtrainfoMap_.toBuilder();
              }
              hloExtrainfoMap_ = input.readMessage(tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(hloExtrainfoMap_);
                hloExtrainfoMap_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 49: {
              bitField0_ |= 0x00000020;
              matrixUnitUtilizationPercent_ = input.readDouble();
              break;
            }
            case 58: {
              tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = runEnvironment_.toBuilder();
              }
              runEnvironment_ = input.readMessage(tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(runEnvironment_);
                runEnvironment_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 66: {
              tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = hostOps_.toBuilder();
              }
              hostOps_ = input.readMessage(tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(hostOps_);
                hostOps_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 74: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                coreIdToNameMap_ = com.google.protobuf.MapField.newMapField(
                    CoreIdToNameMapDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000100;
              }
              com.google.protobuf.MapEntry<java.lang.Integer, java.lang.String>
              coreIdToNameMap__ = input.readMessage(
                  CoreIdToNameMapDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              coreIdToNameMap_.getMutableMap().put(
                  coreIdToNameMap__.getKey(), coreIdToNameMap__.getValue());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_TfOpStats_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 9:
          return internalGetCoreIdToNameMap();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_TfOpStats_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              tensorflow.tpu.TfOpStatsOuterClass.TfOpStats.class, tensorflow.tpu.TfOpStatsOuterClass.TfOpStats.Builder.class);
    }

    private int bitField0_;
    public static final int TF_METRICS_DB_FIELD_NUMBER = 1;
    private tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult tfMetricsDb_;
    /**
     * <pre>
     * The result for the TF-metric database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
     */
    public boolean hasTfMetricsDb() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * The result for the TF-metric database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult getTfMetricsDb() {
      return tfMetricsDb_ == null ? tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.getDefaultInstance() : tfMetricsDb_;
    }
    /**
     * <pre>
     * The result for the TF-metric database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResultOrBuilder getTfMetricsDbOrBuilder() {
      return tfMetricsDb_ == null ? tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.getDefaultInstance() : tfMetricsDb_;
    }

    public static final int HLO_METRICS_DB_FIELD_NUMBER = 2;
    private tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult hloMetricsDb_;
    /**
     * <pre>
     * The result for the HLO-metric database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
     */
    public boolean hasHloMetricsDb() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * The result for the HLO-metric database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult getHloMetricsDb() {
      return hloMetricsDb_ == null ? tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.getDefaultInstance() : hloMetricsDb_;
    }
    /**
     * <pre>
     * The result for the HLO-metric database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResultOrBuilder getHloMetricsDbOrBuilder() {
      return hloMetricsDb_ == null ? tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.getDefaultInstance() : hloMetricsDb_;
    }

    public static final int STEP_DB_FIELD_NUMBER = 3;
    private tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult stepDb_;
    /**
     * <pre>
     * The result for the step database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
     */
    public boolean hasStepDb() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * The result for the step database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult getStepDb() {
      return stepDb_ == null ? tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.getDefaultInstance() : stepDb_;
    }
    /**
     * <pre>
     * The result for the step database.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResultOrBuilder getStepDbOrBuilder() {
      return stepDb_ == null ? tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.getDefaultInstance() : stepDb_;
    }

    public static final int LOOPING_FIELD_NUMBER = 4;
    private tensorflow.tpu.TfOpStatsOuterClass.LoopingResult looping_;
    /**
     * <pre>
     * The result for the looping-related metrics.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
     */
    public boolean hasLooping() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     * The result for the looping-related metrics.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.LoopingResult getLooping() {
      return looping_ == null ? tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.getDefaultInstance() : looping_;
    }
    /**
     * <pre>
     * The result for the looping-related metrics.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.LoopingResultOrBuilder getLoopingOrBuilder() {
      return looping_ == null ? tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.getDefaultInstance() : looping_;
    }

    public static final int HLO_EXTRAINFO_MAP_FIELD_NUMBER = 5;
    private tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult hloExtrainfoMap_;
    /**
     * <pre>
     * The result for the HloExtraInfoMap.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
     */
    public boolean hasHloExtrainfoMap() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <pre>
     * The result for the HloExtraInfoMap.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult getHloExtrainfoMap() {
      return hloExtrainfoMap_ == null ? tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.getDefaultInstance() : hloExtrainfoMap_;
    }
    /**
     * <pre>
     * The result for the HloExtraInfoMap.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResultOrBuilder getHloExtrainfoMapOrBuilder() {
      return hloExtrainfoMap_ == null ? tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.getDefaultInstance() : hloExtrainfoMap_;
    }

    public static final int MATRIX_UNIT_UTILIZATION_PERCENT_FIELD_NUMBER = 6;
    private double matrixUnitUtilizationPercent_;
    /**
     * <pre>
     * Overall matrix unit utilization in percentage.
     * </pre>
     *
     * <code>optional double matrix_unit_utilization_percent = 6;</code>
     */
    public boolean hasMatrixUnitUtilizationPercent() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <pre>
     * Overall matrix unit utilization in percentage.
     * </pre>
     *
     * <code>optional double matrix_unit_utilization_percent = 6;</code>
     */
    public double getMatrixUnitUtilizationPercent() {
      return matrixUnitUtilizationPercent_;
    }

    public static final int RUN_ENVIRONMENT_FIELD_NUMBER = 7;
    private tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult runEnvironment_;
    /**
     * <pre>
     * The run environment of this profiling session.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
     */
    public boolean hasRunEnvironment() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <pre>
     * The run environment of this profiling session.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult getRunEnvironment() {
      return runEnvironment_ == null ? tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.getDefaultInstance() : runEnvironment_;
    }
    /**
     * <pre>
     * The run environment of this profiling session.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResultOrBuilder getRunEnvironmentOrBuilder() {
      return runEnvironment_ == null ? tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.getDefaultInstance() : runEnvironment_;
    }

    public static final int HOST_OPS_FIELD_NUMBER = 8;
    private tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult hostOps_;
    /**
     * <pre>
     * The result for the host operations.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
     */
    public boolean hasHostOps() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <pre>
     * The result for the host operations.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult getHostOps() {
      return hostOps_ == null ? tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.getDefaultInstance() : hostOps_;
    }
    /**
     * <pre>
     * The result for the host operations.
     * </pre>
     *
     * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
     */
    public tensorflow.tpu.TfOpStatsOuterClass.HostOpsResultOrBuilder getHostOpsOrBuilder() {
      return hostOps_ == null ? tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.getDefaultInstance() : hostOps_;
    }

    public static final int CORE_ID_TO_NAME_MAP_FIELD_NUMBER = 9;
    private static final class CoreIdToNameMapDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.Integer, java.lang.String> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.Integer, java.lang.String>newDefaultInstance(
                  tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_TfOpStats_CoreIdToNameMapEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.UINT32,
                  0,
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "");
    }
    private com.google.protobuf.MapField<
        java.lang.Integer, java.lang.String> coreIdToNameMap_;
    private com.google.protobuf.MapField<java.lang.Integer, java.lang.String>
    internalGetCoreIdToNameMap() {
      if (coreIdToNameMap_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            CoreIdToNameMapDefaultEntryHolder.defaultEntry);
      }
      return coreIdToNameMap_;
    }

    public int getCoreIdToNameMapCount() {
      return internalGetCoreIdToNameMap().getMap().size();
    }
    /**
     * <pre>
     * A map from core ID to name.
     * </pre>
     *
     * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
     */

    public boolean containsCoreIdToNameMap(
        int key) {
      
      return internalGetCoreIdToNameMap().getMap().containsKey(key);
    }
    /**
     * Use {@link #getCoreIdToNameMapMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.Integer, java.lang.String> getCoreIdToNameMap() {
      return getCoreIdToNameMapMap();
    }
    /**
     * <pre>
     * A map from core ID to name.
     * </pre>
     *
     * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
     */

    public java.util.Map<java.lang.Integer, java.lang.String> getCoreIdToNameMapMap() {
      return internalGetCoreIdToNameMap().getMap();
    }
    /**
     * <pre>
     * A map from core ID to name.
     * </pre>
     *
     * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
     */

    public java.lang.String getCoreIdToNameMapOrDefault(
        int key,
        java.lang.String defaultValue) {
      
      java.util.Map<java.lang.Integer, java.lang.String> map =
          internalGetCoreIdToNameMap().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <pre>
     * A map from core ID to name.
     * </pre>
     *
     * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
     */

    public java.lang.String getCoreIdToNameMapOrThrow(
        int key) {
      
      java.util.Map<java.lang.Integer, java.lang.String> map =
          internalGetCoreIdToNameMap().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, getTfMetricsDb());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, getHloMetricsDb());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, getStepDb());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, getLooping());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(5, getHloExtrainfoMap());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeDouble(6, matrixUnitUtilizationPercent_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(7, getRunEnvironment());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(8, getHostOps());
      }
      com.google.protobuf.GeneratedMessageV3
        .serializeIntegerMapTo(
          output,
          internalGetCoreIdToNameMap(),
          CoreIdToNameMapDefaultEntryHolder.defaultEntry,
          9);
      unknownFields.writeTo(output);
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getTfMetricsDb());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getHloMetricsDb());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getStepDb());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getLooping());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getHloExtrainfoMap());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(6, matrixUnitUtilizationPercent_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, getRunEnvironment());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, getHostOps());
      }
      for (java.util.Map.Entry<java.lang.Integer, java.lang.String> entry
           : internalGetCoreIdToNameMap().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.Integer, java.lang.String>
        coreIdToNameMap__ = CoreIdToNameMapDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(9, coreIdToNameMap__);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof tensorflow.tpu.TfOpStatsOuterClass.TfOpStats)) {
        return super.equals(obj);
      }
      tensorflow.tpu.TfOpStatsOuterClass.TfOpStats other = (tensorflow.tpu.TfOpStatsOuterClass.TfOpStats) obj;

      boolean result = true;
      result = result && (hasTfMetricsDb() == other.hasTfMetricsDb());
      if (hasTfMetricsDb()) {
        result = result && getTfMetricsDb()
            .equals(other.getTfMetricsDb());
      }
      result = result && (hasHloMetricsDb() == other.hasHloMetricsDb());
      if (hasHloMetricsDb()) {
        result = result && getHloMetricsDb()
            .equals(other.getHloMetricsDb());
      }
      result = result && (hasStepDb() == other.hasStepDb());
      if (hasStepDb()) {
        result = result && getStepDb()
            .equals(other.getStepDb());
      }
      result = result && (hasLooping() == other.hasLooping());
      if (hasLooping()) {
        result = result && getLooping()
            .equals(other.getLooping());
      }
      result = result && (hasHloExtrainfoMap() == other.hasHloExtrainfoMap());
      if (hasHloExtrainfoMap()) {
        result = result && getHloExtrainfoMap()
            .equals(other.getHloExtrainfoMap());
      }
      result = result && (hasMatrixUnitUtilizationPercent() == other.hasMatrixUnitUtilizationPercent());
      if (hasMatrixUnitUtilizationPercent()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getMatrixUnitUtilizationPercent())
            == java.lang.Double.doubleToLongBits(
                other.getMatrixUnitUtilizationPercent()));
      }
      result = result && (hasRunEnvironment() == other.hasRunEnvironment());
      if (hasRunEnvironment()) {
        result = result && getRunEnvironment()
            .equals(other.getRunEnvironment());
      }
      result = result && (hasHostOps() == other.hasHostOps());
      if (hasHostOps()) {
        result = result && getHostOps()
            .equals(other.getHostOps());
      }
      result = result && internalGetCoreIdToNameMap().equals(
          other.internalGetCoreIdToNameMap());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasTfMetricsDb()) {
        hash = (37 * hash) + TF_METRICS_DB_FIELD_NUMBER;
        hash = (53 * hash) + getTfMetricsDb().hashCode();
      }
      if (hasHloMetricsDb()) {
        hash = (37 * hash) + HLO_METRICS_DB_FIELD_NUMBER;
        hash = (53 * hash) + getHloMetricsDb().hashCode();
      }
      if (hasStepDb()) {
        hash = (37 * hash) + STEP_DB_FIELD_NUMBER;
        hash = (53 * hash) + getStepDb().hashCode();
      }
      if (hasLooping()) {
        hash = (37 * hash) + LOOPING_FIELD_NUMBER;
        hash = (53 * hash) + getLooping().hashCode();
      }
      if (hasHloExtrainfoMap()) {
        hash = (37 * hash) + HLO_EXTRAINFO_MAP_FIELD_NUMBER;
        hash = (53 * hash) + getHloExtrainfoMap().hashCode();
      }
      if (hasMatrixUnitUtilizationPercent()) {
        hash = (37 * hash) + MATRIX_UNIT_UTILIZATION_PERCENT_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getMatrixUnitUtilizationPercent()));
      }
      if (hasRunEnvironment()) {
        hash = (37 * hash) + RUN_ENVIRONMENT_FIELD_NUMBER;
        hash = (53 * hash) + getRunEnvironment().hashCode();
      }
      if (hasHostOps()) {
        hash = (37 * hash) + HOST_OPS_FIELD_NUMBER;
        hash = (53 * hash) + getHostOps().hashCode();
      }
      if (!internalGetCoreIdToNameMap().getMap().isEmpty()) {
        hash = (37 * hash) + CORE_ID_TO_NAME_MAP_FIELD_NUMBER;
        hash = (53 * hash) + internalGetCoreIdToNameMap().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.TfOpStats parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.TfOpStats parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.TfOpStats parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.TfOpStats parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.TfOpStats parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.TfOpStats parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.TfOpStats parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.TfOpStats parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.TfOpStats parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static tensorflow.tpu.TfOpStatsOuterClass.TfOpStats parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(tensorflow.tpu.TfOpStatsOuterClass.TfOpStats prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Result proto for TfStatsHelper.
     * </pre>
     *
     * Protobuf type {@code tensorflow.tpu.TfOpStats}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.tpu.TfOpStats)
        tensorflow.tpu.TfOpStatsOuterClass.TfOpStatsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_TfOpStats_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 9:
            return internalGetCoreIdToNameMap();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 9:
            return internalGetMutableCoreIdToNameMap();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_TfOpStats_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                tensorflow.tpu.TfOpStatsOuterClass.TfOpStats.class, tensorflow.tpu.TfOpStatsOuterClass.TfOpStats.Builder.class);
      }

      // Construct using tensorflow.tpu.TfOpStatsOuterClass.TfOpStats.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTfMetricsDbFieldBuilder();
          getHloMetricsDbFieldBuilder();
          getStepDbFieldBuilder();
          getLoopingFieldBuilder();
          getHloExtrainfoMapFieldBuilder();
          getRunEnvironmentFieldBuilder();
          getHostOpsFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (tfMetricsDbBuilder_ == null) {
          tfMetricsDb_ = null;
        } else {
          tfMetricsDbBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (hloMetricsDbBuilder_ == null) {
          hloMetricsDb_ = null;
        } else {
          hloMetricsDbBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (stepDbBuilder_ == null) {
          stepDb_ = null;
        } else {
          stepDbBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (loopingBuilder_ == null) {
          looping_ = null;
        } else {
          loopingBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (hloExtrainfoMapBuilder_ == null) {
          hloExtrainfoMap_ = null;
        } else {
          hloExtrainfoMapBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        matrixUnitUtilizationPercent_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000020);
        if (runEnvironmentBuilder_ == null) {
          runEnvironment_ = null;
        } else {
          runEnvironmentBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (hostOpsBuilder_ == null) {
          hostOps_ = null;
        } else {
          hostOpsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        internalGetMutableCoreIdToNameMap().clear();
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.internal_static_tensorflow_tpu_TfOpStats_descriptor;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.TfOpStats getDefaultInstanceForType() {
        return tensorflow.tpu.TfOpStatsOuterClass.TfOpStats.getDefaultInstance();
      }

      public tensorflow.tpu.TfOpStatsOuterClass.TfOpStats build() {
        tensorflow.tpu.TfOpStatsOuterClass.TfOpStats result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public tensorflow.tpu.TfOpStatsOuterClass.TfOpStats buildPartial() {
        tensorflow.tpu.TfOpStatsOuterClass.TfOpStats result = new tensorflow.tpu.TfOpStatsOuterClass.TfOpStats(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (tfMetricsDbBuilder_ == null) {
          result.tfMetricsDb_ = tfMetricsDb_;
        } else {
          result.tfMetricsDb_ = tfMetricsDbBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (hloMetricsDbBuilder_ == null) {
          result.hloMetricsDb_ = hloMetricsDb_;
        } else {
          result.hloMetricsDb_ = hloMetricsDbBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (stepDbBuilder_ == null) {
          result.stepDb_ = stepDb_;
        } else {
          result.stepDb_ = stepDbBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (loopingBuilder_ == null) {
          result.looping_ = looping_;
        } else {
          result.looping_ = loopingBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (hloExtrainfoMapBuilder_ == null) {
          result.hloExtrainfoMap_ = hloExtrainfoMap_;
        } else {
          result.hloExtrainfoMap_ = hloExtrainfoMapBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.matrixUnitUtilizationPercent_ = matrixUnitUtilizationPercent_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (runEnvironmentBuilder_ == null) {
          result.runEnvironment_ = runEnvironment_;
        } else {
          result.runEnvironment_ = runEnvironmentBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (hostOpsBuilder_ == null) {
          result.hostOps_ = hostOps_;
        } else {
          result.hostOps_ = hostOpsBuilder_.build();
        }
        result.coreIdToNameMap_ = internalGetCoreIdToNameMap();
        result.coreIdToNameMap_.makeImmutable();
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof tensorflow.tpu.TfOpStatsOuterClass.TfOpStats) {
          return mergeFrom((tensorflow.tpu.TfOpStatsOuterClass.TfOpStats)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(tensorflow.tpu.TfOpStatsOuterClass.TfOpStats other) {
        if (other == tensorflow.tpu.TfOpStatsOuterClass.TfOpStats.getDefaultInstance()) return this;
        if (other.hasTfMetricsDb()) {
          mergeTfMetricsDb(other.getTfMetricsDb());
        }
        if (other.hasHloMetricsDb()) {
          mergeHloMetricsDb(other.getHloMetricsDb());
        }
        if (other.hasStepDb()) {
          mergeStepDb(other.getStepDb());
        }
        if (other.hasLooping()) {
          mergeLooping(other.getLooping());
        }
        if (other.hasHloExtrainfoMap()) {
          mergeHloExtrainfoMap(other.getHloExtrainfoMap());
        }
        if (other.hasMatrixUnitUtilizationPercent()) {
          setMatrixUnitUtilizationPercent(other.getMatrixUnitUtilizationPercent());
        }
        if (other.hasRunEnvironment()) {
          mergeRunEnvironment(other.getRunEnvironment());
        }
        if (other.hasHostOps()) {
          mergeHostOps(other.getHostOps());
        }
        internalGetMutableCoreIdToNameMap().mergeFrom(
            other.internalGetCoreIdToNameMap());
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        tensorflow.tpu.TfOpStatsOuterClass.TfOpStats parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (tensorflow.tpu.TfOpStatsOuterClass.TfOpStats) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult tfMetricsDb_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResultOrBuilder> tfMetricsDbBuilder_;
      /**
       * <pre>
       * The result for the TF-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
       */
      public boolean hasTfMetricsDb() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * The result for the TF-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult getTfMetricsDb() {
        if (tfMetricsDbBuilder_ == null) {
          return tfMetricsDb_ == null ? tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.getDefaultInstance() : tfMetricsDb_;
        } else {
          return tfMetricsDbBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * The result for the TF-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
       */
      public Builder setTfMetricsDb(tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult value) {
        if (tfMetricsDbBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          tfMetricsDb_ = value;
          onChanged();
        } else {
          tfMetricsDbBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * The result for the TF-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
       */
      public Builder setTfMetricsDb(
          tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder builderForValue) {
        if (tfMetricsDbBuilder_ == null) {
          tfMetricsDb_ = builderForValue.build();
          onChanged();
        } else {
          tfMetricsDbBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * The result for the TF-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
       */
      public Builder mergeTfMetricsDb(tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult value) {
        if (tfMetricsDbBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              tfMetricsDb_ != null &&
              tfMetricsDb_ != tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.getDefaultInstance()) {
            tfMetricsDb_ =
              tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.newBuilder(tfMetricsDb_).mergeFrom(value).buildPartial();
          } else {
            tfMetricsDb_ = value;
          }
          onChanged();
        } else {
          tfMetricsDbBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * The result for the TF-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
       */
      public Builder clearTfMetricsDb() {
        if (tfMetricsDbBuilder_ == null) {
          tfMetricsDb_ = null;
          onChanged();
        } else {
          tfMetricsDbBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <pre>
       * The result for the TF-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder getTfMetricsDbBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getTfMetricsDbFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * The result for the TF-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResultOrBuilder getTfMetricsDbOrBuilder() {
        if (tfMetricsDbBuilder_ != null) {
          return tfMetricsDbBuilder_.getMessageOrBuilder();
        } else {
          return tfMetricsDb_ == null ?
              tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.getDefaultInstance() : tfMetricsDb_;
        }
      }
      /**
       * <pre>
       * The result for the TF-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult tf_metrics_db = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResultOrBuilder> 
          getTfMetricsDbFieldBuilder() {
        if (tfMetricsDbBuilder_ == null) {
          tfMetricsDbBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResultOrBuilder>(
                  getTfMetricsDb(),
                  getParentForChildren(),
                  isClean());
          tfMetricsDb_ = null;
        }
        return tfMetricsDbBuilder_;
      }

      private tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult hloMetricsDb_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResultOrBuilder> hloMetricsDbBuilder_;
      /**
       * <pre>
       * The result for the HLO-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
       */
      public boolean hasHloMetricsDb() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * The result for the HLO-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult getHloMetricsDb() {
        if (hloMetricsDbBuilder_ == null) {
          return hloMetricsDb_ == null ? tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.getDefaultInstance() : hloMetricsDb_;
        } else {
          return hloMetricsDbBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * The result for the HLO-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
       */
      public Builder setHloMetricsDb(tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult value) {
        if (hloMetricsDbBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          hloMetricsDb_ = value;
          onChanged();
        } else {
          hloMetricsDbBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * The result for the HLO-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
       */
      public Builder setHloMetricsDb(
          tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder builderForValue) {
        if (hloMetricsDbBuilder_ == null) {
          hloMetricsDb_ = builderForValue.build();
          onChanged();
        } else {
          hloMetricsDbBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * The result for the HLO-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
       */
      public Builder mergeHloMetricsDb(tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult value) {
        if (hloMetricsDbBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              hloMetricsDb_ != null &&
              hloMetricsDb_ != tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.getDefaultInstance()) {
            hloMetricsDb_ =
              tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.newBuilder(hloMetricsDb_).mergeFrom(value).buildPartial();
          } else {
            hloMetricsDb_ = value;
          }
          onChanged();
        } else {
          hloMetricsDbBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * The result for the HLO-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
       */
      public Builder clearHloMetricsDb() {
        if (hloMetricsDbBuilder_ == null) {
          hloMetricsDb_ = null;
          onChanged();
        } else {
          hloMetricsDbBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <pre>
       * The result for the HLO-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder getHloMetricsDbBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getHloMetricsDbFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * The result for the HLO-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResultOrBuilder getHloMetricsDbOrBuilder() {
        if (hloMetricsDbBuilder_ != null) {
          return hloMetricsDbBuilder_.getMessageOrBuilder();
        } else {
          return hloMetricsDb_ == null ?
              tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.getDefaultInstance() : hloMetricsDb_;
        }
      }
      /**
       * <pre>
       * The result for the HLO-metric database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.OpMetricsDbResult hlo_metrics_db = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResultOrBuilder> 
          getHloMetricsDbFieldBuilder() {
        if (hloMetricsDbBuilder_ == null) {
          hloMetricsDbBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.OpMetricsDbResultOrBuilder>(
                  getHloMetricsDb(),
                  getParentForChildren(),
                  isClean());
          hloMetricsDb_ = null;
        }
        return hloMetricsDbBuilder_;
      }

      private tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult stepDb_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult, tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResultOrBuilder> stepDbBuilder_;
      /**
       * <pre>
       * The result for the step database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
       */
      public boolean hasStepDb() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * The result for the step database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult getStepDb() {
        if (stepDbBuilder_ == null) {
          return stepDb_ == null ? tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.getDefaultInstance() : stepDb_;
        } else {
          return stepDbBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * The result for the step database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
       */
      public Builder setStepDb(tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult value) {
        if (stepDbBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          stepDb_ = value;
          onChanged();
        } else {
          stepDbBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * The result for the step database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
       */
      public Builder setStepDb(
          tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.Builder builderForValue) {
        if (stepDbBuilder_ == null) {
          stepDb_ = builderForValue.build();
          onChanged();
        } else {
          stepDbBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * The result for the step database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
       */
      public Builder mergeStepDb(tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult value) {
        if (stepDbBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              stepDb_ != null &&
              stepDb_ != tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.getDefaultInstance()) {
            stepDb_ =
              tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.newBuilder(stepDb_).mergeFrom(value).buildPartial();
          } else {
            stepDb_ = value;
          }
          onChanged();
        } else {
          stepDbBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <pre>
       * The result for the step database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
       */
      public Builder clearStepDb() {
        if (stepDbBuilder_ == null) {
          stepDb_ = null;
          onChanged();
        } else {
          stepDbBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <pre>
       * The result for the step database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.Builder getStepDbBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getStepDbFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * The result for the step database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResultOrBuilder getStepDbOrBuilder() {
        if (stepDbBuilder_ != null) {
          return stepDbBuilder_.getMessageOrBuilder();
        } else {
          return stepDb_ == null ?
              tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.getDefaultInstance() : stepDb_;
        }
      }
      /**
       * <pre>
       * The result for the step database.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.StepDatabaseResult step_db = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult, tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResultOrBuilder> 
          getStepDbFieldBuilder() {
        if (stepDbBuilder_ == null) {
          stepDbBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult, tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.StepDatabaseResultOrBuilder>(
                  getStepDb(),
                  getParentForChildren(),
                  isClean());
          stepDb_ = null;
        }
        return stepDbBuilder_;
      }

      private tensorflow.tpu.TfOpStatsOuterClass.LoopingResult looping_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.LoopingResult, tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.LoopingResultOrBuilder> loopingBuilder_;
      /**
       * <pre>
       * The result for the looping-related metrics.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
       */
      public boolean hasLooping() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       * The result for the looping-related metrics.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.LoopingResult getLooping() {
        if (loopingBuilder_ == null) {
          return looping_ == null ? tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.getDefaultInstance() : looping_;
        } else {
          return loopingBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * The result for the looping-related metrics.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
       */
      public Builder setLooping(tensorflow.tpu.TfOpStatsOuterClass.LoopingResult value) {
        if (loopingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          looping_ = value;
          onChanged();
        } else {
          loopingBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <pre>
       * The result for the looping-related metrics.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
       */
      public Builder setLooping(
          tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.Builder builderForValue) {
        if (loopingBuilder_ == null) {
          looping_ = builderForValue.build();
          onChanged();
        } else {
          loopingBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <pre>
       * The result for the looping-related metrics.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
       */
      public Builder mergeLooping(tensorflow.tpu.TfOpStatsOuterClass.LoopingResult value) {
        if (loopingBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              looping_ != null &&
              looping_ != tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.getDefaultInstance()) {
            looping_ =
              tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.newBuilder(looping_).mergeFrom(value).buildPartial();
          } else {
            looping_ = value;
          }
          onChanged();
        } else {
          loopingBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <pre>
       * The result for the looping-related metrics.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
       */
      public Builder clearLooping() {
        if (loopingBuilder_ == null) {
          looping_ = null;
          onChanged();
        } else {
          loopingBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <pre>
       * The result for the looping-related metrics.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.Builder getLoopingBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getLoopingFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * The result for the looping-related metrics.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.LoopingResultOrBuilder getLoopingOrBuilder() {
        if (loopingBuilder_ != null) {
          return loopingBuilder_.getMessageOrBuilder();
        } else {
          return looping_ == null ?
              tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.getDefaultInstance() : looping_;
        }
      }
      /**
       * <pre>
       * The result for the looping-related metrics.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.LoopingResult looping = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.LoopingResult, tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.LoopingResultOrBuilder> 
          getLoopingFieldBuilder() {
        if (loopingBuilder_ == null) {
          loopingBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.tpu.TfOpStatsOuterClass.LoopingResult, tensorflow.tpu.TfOpStatsOuterClass.LoopingResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.LoopingResultOrBuilder>(
                  getLooping(),
                  getParentForChildren(),
                  isClean());
          looping_ = null;
        }
        return loopingBuilder_;
      }

      private tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult hloExtrainfoMap_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResultOrBuilder> hloExtrainfoMapBuilder_;
      /**
       * <pre>
       * The result for the HloExtraInfoMap.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
       */
      public boolean hasHloExtrainfoMap() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <pre>
       * The result for the HloExtraInfoMap.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult getHloExtrainfoMap() {
        if (hloExtrainfoMapBuilder_ == null) {
          return hloExtrainfoMap_ == null ? tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.getDefaultInstance() : hloExtrainfoMap_;
        } else {
          return hloExtrainfoMapBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * The result for the HloExtraInfoMap.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
       */
      public Builder setHloExtrainfoMap(tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult value) {
        if (hloExtrainfoMapBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          hloExtrainfoMap_ = value;
          onChanged();
        } else {
          hloExtrainfoMapBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <pre>
       * The result for the HloExtraInfoMap.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
       */
      public Builder setHloExtrainfoMap(
          tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.Builder builderForValue) {
        if (hloExtrainfoMapBuilder_ == null) {
          hloExtrainfoMap_ = builderForValue.build();
          onChanged();
        } else {
          hloExtrainfoMapBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <pre>
       * The result for the HloExtraInfoMap.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
       */
      public Builder mergeHloExtrainfoMap(tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult value) {
        if (hloExtrainfoMapBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              hloExtrainfoMap_ != null &&
              hloExtrainfoMap_ != tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.getDefaultInstance()) {
            hloExtrainfoMap_ =
              tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.newBuilder(hloExtrainfoMap_).mergeFrom(value).buildPartial();
          } else {
            hloExtrainfoMap_ = value;
          }
          onChanged();
        } else {
          hloExtrainfoMapBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <pre>
       * The result for the HloExtraInfoMap.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
       */
      public Builder clearHloExtrainfoMap() {
        if (hloExtrainfoMapBuilder_ == null) {
          hloExtrainfoMap_ = null;
          onChanged();
        } else {
          hloExtrainfoMapBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <pre>
       * The result for the HloExtraInfoMap.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.Builder getHloExtrainfoMapBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getHloExtrainfoMapFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * The result for the HloExtraInfoMap.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResultOrBuilder getHloExtrainfoMapOrBuilder() {
        if (hloExtrainfoMapBuilder_ != null) {
          return hloExtrainfoMapBuilder_.getMessageOrBuilder();
        } else {
          return hloExtrainfoMap_ == null ?
              tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.getDefaultInstance() : hloExtrainfoMap_;
        }
      }
      /**
       * <pre>
       * The result for the HloExtraInfoMap.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HloExtraInfoMapResult hlo_extrainfo_map = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResultOrBuilder> 
          getHloExtrainfoMapFieldBuilder() {
        if (hloExtrainfoMapBuilder_ == null) {
          hloExtrainfoMapBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.HloExtraInfoMapResultOrBuilder>(
                  getHloExtrainfoMap(),
                  getParentForChildren(),
                  isClean());
          hloExtrainfoMap_ = null;
        }
        return hloExtrainfoMapBuilder_;
      }

      private double matrixUnitUtilizationPercent_ ;
      /**
       * <pre>
       * Overall matrix unit utilization in percentage.
       * </pre>
       *
       * <code>optional double matrix_unit_utilization_percent = 6;</code>
       */
      public boolean hasMatrixUnitUtilizationPercent() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <pre>
       * Overall matrix unit utilization in percentage.
       * </pre>
       *
       * <code>optional double matrix_unit_utilization_percent = 6;</code>
       */
      public double getMatrixUnitUtilizationPercent() {
        return matrixUnitUtilizationPercent_;
      }
      /**
       * <pre>
       * Overall matrix unit utilization in percentage.
       * </pre>
       *
       * <code>optional double matrix_unit_utilization_percent = 6;</code>
       */
      public Builder setMatrixUnitUtilizationPercent(double value) {
        bitField0_ |= 0x00000020;
        matrixUnitUtilizationPercent_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Overall matrix unit utilization in percentage.
       * </pre>
       *
       * <code>optional double matrix_unit_utilization_percent = 6;</code>
       */
      public Builder clearMatrixUnitUtilizationPercent() {
        bitField0_ = (bitField0_ & ~0x00000020);
        matrixUnitUtilizationPercent_ = 0D;
        onChanged();
        return this;
      }

      private tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult runEnvironment_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult, tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResultOrBuilder> runEnvironmentBuilder_;
      /**
       * <pre>
       * The run environment of this profiling session.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
       */
      public boolean hasRunEnvironment() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <pre>
       * The run environment of this profiling session.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult getRunEnvironment() {
        if (runEnvironmentBuilder_ == null) {
          return runEnvironment_ == null ? tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.getDefaultInstance() : runEnvironment_;
        } else {
          return runEnvironmentBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * The run environment of this profiling session.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
       */
      public Builder setRunEnvironment(tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult value) {
        if (runEnvironmentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          runEnvironment_ = value;
          onChanged();
        } else {
          runEnvironmentBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <pre>
       * The run environment of this profiling session.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
       */
      public Builder setRunEnvironment(
          tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.Builder builderForValue) {
        if (runEnvironmentBuilder_ == null) {
          runEnvironment_ = builderForValue.build();
          onChanged();
        } else {
          runEnvironmentBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <pre>
       * The run environment of this profiling session.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
       */
      public Builder mergeRunEnvironment(tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult value) {
        if (runEnvironmentBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              runEnvironment_ != null &&
              runEnvironment_ != tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.getDefaultInstance()) {
            runEnvironment_ =
              tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.newBuilder(runEnvironment_).mergeFrom(value).buildPartial();
          } else {
            runEnvironment_ = value;
          }
          onChanged();
        } else {
          runEnvironmentBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <pre>
       * The run environment of this profiling session.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
       */
      public Builder clearRunEnvironment() {
        if (runEnvironmentBuilder_ == null) {
          runEnvironment_ = null;
          onChanged();
        } else {
          runEnvironmentBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <pre>
       * The run environment of this profiling session.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.Builder getRunEnvironmentBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getRunEnvironmentFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * The run environment of this profiling session.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResultOrBuilder getRunEnvironmentOrBuilder() {
        if (runEnvironmentBuilder_ != null) {
          return runEnvironmentBuilder_.getMessageOrBuilder();
        } else {
          return runEnvironment_ == null ?
              tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.getDefaultInstance() : runEnvironment_;
        }
      }
      /**
       * <pre>
       * The run environment of this profiling session.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.RunEnvironmentResult run_environment = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult, tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResultOrBuilder> 
          getRunEnvironmentFieldBuilder() {
        if (runEnvironmentBuilder_ == null) {
          runEnvironmentBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult, tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.RunEnvironmentResultOrBuilder>(
                  getRunEnvironment(),
                  getParentForChildren(),
                  isClean());
          runEnvironment_ = null;
        }
        return runEnvironmentBuilder_;
      }

      private tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult hostOps_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult, tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.HostOpsResultOrBuilder> hostOpsBuilder_;
      /**
       * <pre>
       * The result for the host operations.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
       */
      public boolean hasHostOps() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <pre>
       * The result for the host operations.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult getHostOps() {
        if (hostOpsBuilder_ == null) {
          return hostOps_ == null ? tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.getDefaultInstance() : hostOps_;
        } else {
          return hostOpsBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * The result for the host operations.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
       */
      public Builder setHostOps(tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult value) {
        if (hostOpsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          hostOps_ = value;
          onChanged();
        } else {
          hostOpsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <pre>
       * The result for the host operations.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
       */
      public Builder setHostOps(
          tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.Builder builderForValue) {
        if (hostOpsBuilder_ == null) {
          hostOps_ = builderForValue.build();
          onChanged();
        } else {
          hostOpsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <pre>
       * The result for the host operations.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
       */
      public Builder mergeHostOps(tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult value) {
        if (hostOpsBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              hostOps_ != null &&
              hostOps_ != tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.getDefaultInstance()) {
            hostOps_ =
              tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.newBuilder(hostOps_).mergeFrom(value).buildPartial();
          } else {
            hostOps_ = value;
          }
          onChanged();
        } else {
          hostOpsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <pre>
       * The result for the host operations.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
       */
      public Builder clearHostOps() {
        if (hostOpsBuilder_ == null) {
          hostOps_ = null;
          onChanged();
        } else {
          hostOpsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <pre>
       * The result for the host operations.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.Builder getHostOpsBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getHostOpsFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * The result for the host operations.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
       */
      public tensorflow.tpu.TfOpStatsOuterClass.HostOpsResultOrBuilder getHostOpsOrBuilder() {
        if (hostOpsBuilder_ != null) {
          return hostOpsBuilder_.getMessageOrBuilder();
        } else {
          return hostOps_ == null ?
              tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.getDefaultInstance() : hostOps_;
        }
      }
      /**
       * <pre>
       * The result for the host operations.
       * </pre>
       *
       * <code>optional .tensorflow.tpu.HostOpsResult host_ops = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult, tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.HostOpsResultOrBuilder> 
          getHostOpsFieldBuilder() {
        if (hostOpsBuilder_ == null) {
          hostOpsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult, tensorflow.tpu.TfOpStatsOuterClass.HostOpsResult.Builder, tensorflow.tpu.TfOpStatsOuterClass.HostOpsResultOrBuilder>(
                  getHostOps(),
                  getParentForChildren(),
                  isClean());
          hostOps_ = null;
        }
        return hostOpsBuilder_;
      }

      private com.google.protobuf.MapField<
          java.lang.Integer, java.lang.String> coreIdToNameMap_;
      private com.google.protobuf.MapField<java.lang.Integer, java.lang.String>
      internalGetCoreIdToNameMap() {
        if (coreIdToNameMap_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              CoreIdToNameMapDefaultEntryHolder.defaultEntry);
        }
        return coreIdToNameMap_;
      }
      private com.google.protobuf.MapField<java.lang.Integer, java.lang.String>
      internalGetMutableCoreIdToNameMap() {
        onChanged();;
        if (coreIdToNameMap_ == null) {
          coreIdToNameMap_ = com.google.protobuf.MapField.newMapField(
              CoreIdToNameMapDefaultEntryHolder.defaultEntry);
        }
        if (!coreIdToNameMap_.isMutable()) {
          coreIdToNameMap_ = coreIdToNameMap_.copy();
        }
        return coreIdToNameMap_;
      }

      public int getCoreIdToNameMapCount() {
        return internalGetCoreIdToNameMap().getMap().size();
      }
      /**
       * <pre>
       * A map from core ID to name.
       * </pre>
       *
       * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
       */

      public boolean containsCoreIdToNameMap(
          int key) {
        
        return internalGetCoreIdToNameMap().getMap().containsKey(key);
      }
      /**
       * Use {@link #getCoreIdToNameMapMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.Integer, java.lang.String> getCoreIdToNameMap() {
        return getCoreIdToNameMapMap();
      }
      /**
       * <pre>
       * A map from core ID to name.
       * </pre>
       *
       * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
       */

      public java.util.Map<java.lang.Integer, java.lang.String> getCoreIdToNameMapMap() {
        return internalGetCoreIdToNameMap().getMap();
      }
      /**
       * <pre>
       * A map from core ID to name.
       * </pre>
       *
       * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
       */

      public java.lang.String getCoreIdToNameMapOrDefault(
          int key,
          java.lang.String defaultValue) {
        
        java.util.Map<java.lang.Integer, java.lang.String> map =
            internalGetCoreIdToNameMap().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <pre>
       * A map from core ID to name.
       * </pre>
       *
       * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
       */

      public java.lang.String getCoreIdToNameMapOrThrow(
          int key) {
        
        java.util.Map<java.lang.Integer, java.lang.String> map =
            internalGetCoreIdToNameMap().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearCoreIdToNameMap() {
        internalGetMutableCoreIdToNameMap().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <pre>
       * A map from core ID to name.
       * </pre>
       *
       * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
       */

      public Builder removeCoreIdToNameMap(
          int key) {
        
        internalGetMutableCoreIdToNameMap().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.Integer, java.lang.String>
      getMutableCoreIdToNameMap() {
        return internalGetMutableCoreIdToNameMap().getMutableMap();
      }
      /**
       * <pre>
       * A map from core ID to name.
       * </pre>
       *
       * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
       */
      public Builder putCoreIdToNameMap(
          int key,
          java.lang.String value) {
        
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableCoreIdToNameMap().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <pre>
       * A map from core ID to name.
       * </pre>
       *
       * <code>map&lt;uint32, string&gt; core_id_to_name_map = 9;</code>
       */

      public Builder putAllCoreIdToNameMap(
          java.util.Map<java.lang.Integer, java.lang.String> values) {
        internalGetMutableCoreIdToNameMap().getMutableMap()
            .putAll(values);
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:tensorflow.tpu.TfOpStats)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.tpu.TfOpStats)
    private static final tensorflow.tpu.TfOpStatsOuterClass.TfOpStats DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new tensorflow.tpu.TfOpStatsOuterClass.TfOpStats();
    }

    public static tensorflow.tpu.TfOpStatsOuterClass.TfOpStats getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<TfOpStats>
        PARSER = new com.google.protobuf.AbstractParser<TfOpStats>() {
      public TfOpStats parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new TfOpStats(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<TfOpStats> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<TfOpStats> getParserForType() {
      return PARSER;
    }

    public tensorflow.tpu.TfOpStatsOuterClass.TfOpStats getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_OpMetricsResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_OpMetricsResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_OpMetricsDbResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_OpMetricsDbResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_StepInfoResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_StepInfoResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_StepSequenceResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_StepSequenceResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_StepDatabaseResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_StepDatabaseResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_StepDatabaseResult_StepSequencePerCoreEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_StepDatabaseResult_StepSequencePerCoreEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_LoopingResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_LoopingResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_HloExtraInfoResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_HloExtraInfoResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_HloExtraInfoMapResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_HloExtraInfoMapResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_HloExtraInfoMapResult_HloExtrainfoMapEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_HloExtraInfoMapResult_HloExtrainfoMapEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_HostIndependentJobInfoResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_HostIndependentJobInfoResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_HostDependentJobInfoResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_HostDependentJobInfoResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_RunEnvironmentResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_RunEnvironmentResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_HostOpsPerTpuStep_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_HostOpsPerTpuStep_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_HostOpsPerTpuStep_StepDiffsEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_HostOpsPerTpuStep_StepDiffsEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_HostOpsDetailsPerCore_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_HostOpsDetailsPerCore_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_HostOpsDetailsPerCore_CoreMapEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_HostOpsDetailsPerCore_CoreMapEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_HostOpsDetailsPerHost_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_HostOpsDetailsPerHost_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_HostOpsDetailsPerHost_HostMapEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_HostOpsDetailsPerHost_HostMapEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_HostOpsResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_HostOpsResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_TfOpStats_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_TfOpStats_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_tensorflow_tpu_TfOpStats_CoreIdToNameMapEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_tensorflow_tpu_TfOpStats_CoreIdToNameMapEntry_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n1tensorflow/contrib/tpu/profiler/tf_op_" +
      "stats.proto\022\016tensorflow.tpu\"\222\005\n\017OpMetric" +
      "sResult\022\021\n\ton_device\030\001 \001(\010\022\014\n\004name\030\003 \001(\t" +
      "\022\014\n\004rank\030\004 \001(\004\022 \n\030last_starttime_in_cycl" +
      "es\030\005 \001(\001\022\036\n\026last_endtime_in_cycles\030\006 \001(\001" +
      "\022)\n!sum_of_duration_in_us_as_children\030\007 " +
      "\001(\001\022\023\n\013occurrences\030\010 \001(\004\022\030\n\020total_time_i" +
      "n_us\030\t \001(\001\022\035\n\025total_self_time_in_us\030\n \001(" +
      "\001\0227\n/host_total_self_time_as_fraction_of" +
      "_all_op_time\030\013 \001(\001\022B\n:host_cumulative_to",
      "tal_self_time_as_fraction_of_all_op_time" +
      "\030\014 \001(\001\0229\n1device_total_self_time_as_frac" +
      "tion_of_all_op_time\030\r \001(\001\022D\n<device_cumu" +
      "lative_total_self_time_as_fraction_of_al" +
      "l_op_time\030\016 \001(\001\022\023\n\013total_flops\030\017 \001(\001\022\034\n\024" +
      "total_bytes_accessed\030\020 \001(\001\022\035\n\025unit1_occu" +
      "pancy_in_us\030\021 \001(\001\022\035\n\025unit2_occupancy_in_" +
      "us\030\022 \001(\001\022 \n\030total_memory_stall_in_us\030\023 \001" +
      "(\001J\004\010\002\020\003\"\252\001\n\021OpMetricsDbResult\0223\n\nmetric" +
      "s_db\030\001 \003(\0132\037.tensorflow.tpu.OpMetricsRes",
      "ult\022)\n!total_host_infeed_enq_duration_ps" +
      "\030\002 \001(\004\0225\n-total_host_infeed_enq_start_ti" +
      "mestamp_ps_diff\030\003 \001(\004\"\230\001\n\016StepInfoResult" +
      "\022\020\n\010step_num\030\001 \001(\r\022\023\n\013duration_ps\030\002 \001(\004\022" +
      "\032\n\022infeed_duration_ps\030\003 \001(\004\022\020\n\010begin_ps\030" +
      "\004 \001(\004\022\030\n\020wait_duration_ps\030\005 \001(\004\022\027\n\017crs_d" +
      "uration_ps\030\006 \001(\004\"K\n\022StepSequenceResult\0225" +
      "\n\rstep_sequence\030\001 \003(\0132\036.tensorflow.tpu.S" +
      "tepInfoResult\"\321\001\n\022StepDatabaseResult\022[\n\026" +
      "step_sequence_per_core\030\001 \003(\0132;.tensorflo",
      "w.tpu.StepDatabaseResult.StepSequencePer" +
      "CoreEntry\032^\n\030StepSequencePerCoreEntry\022\013\n" +
      "\003key\030\001 \001(\r\0221\n\005value\030\002 \001(\0132\".tensorflow.t" +
      "pu.StepSequenceResult:\0028\001\"y\n\rLoopingResu" +
      "lt\022\031\n\021iteration_time_ns\030\001 \001(\001\022\026\n\016num_ite" +
      "rations\030\002 \001(\005\022\033\n\023computation_time_ns\030\003 \001" +
      "(\001\022\030\n\020num_computations\030\004 \001(\005\"V\n\022HloExtra" +
      "InfoResult\022\020\n\010category\030\001 \001(\t\022\021\n\tlong_nam" +
      "e\030\002 \001(\t\022\033\n\023per_core_batch_size\030\003 \001(\003\"\312\001\n" +
      "\025HloExtraInfoMapResult\022U\n\021hlo_extrainfo_",
      "map\030\001 \003(\0132:.tensorflow.tpu.HloExtraInfoM" +
      "apResult.HloExtrainfoMapEntry\032Z\n\024HloExtr" +
      "ainfoMapEntry\022\013\n\003key\030\001 \001(\t\0221\n\005value\030\002 \001(" +
      "\0132\".tensorflow.tpu.HloExtraInfoResult:\0028" +
      "\001\"]\n\034HostIndependentJobInfoResult\022\023\n\013cha" +
      "nge_list\030\001 \001(\003\022\022\n\nbuild_time\030\002 \001(\003\022\024\n\014bu" +
      "ild_target\030\003 \001(\t\"W\n\032HostDependentJobInfo" +
      "Result\022\017\n\007host_id\030\001 \001(\t\022\024\n\014command_line\030" +
      "\002 \001(\t\022\022\n\nstart_time\030\003 \001(\003\"\217\002\n\024RunEnviron" +
      "mentResult\022\022\n\nhost_count\030\001 \001(\005\022\020\n\010tpu_ty",
      "pe\030\002 \001(\t\022\026\n\016tpu_core_count\030\003 \001(\005\022\033\n\023per_" +
      "core_batch_size\030\004 \001(\005\022O\n\031host_independen" +
      "t_job_info\030\005 \001(\0132,.tensorflow.tpu.HostIn" +
      "dependentJobInfoResult\022K\n\027host_dependent" +
      "_job_info\030\006 \003(\0132*.tensorflow.tpu.HostDep" +
      "endentJobInfoResult\"\353\001\n\021HostOpsPerTpuSte" +
      "p\022\024\n\005valid\030\001 \001(\010:\005false\022\024\n\014tpu_step_num\030" +
      "\002 \001(\r\022\031\n\021tpu_step_begin_ps\030\003 \001(\004\022\027\n\017tpu_" +
      "step_end_ps\030\004 \001(\004\022D\n\nstep_diffs\030\005 \003(\01320." +
      "tensorflow.tpu.HostOpsPerTpuStep.StepDif",
      "fsEntry\0320\n\016StepDiffsEntry\022\013\n\003key\030\001 \001(\005\022\r" +
      "\n\005value\030\002 \001(\005:\0028\001\"\260\001\n\025HostOpsDetailsPerC" +
      "ore\022D\n\010core_map\030\001 \003(\01322.tensorflow.tpu.H" +
      "ostOpsDetailsPerCore.CoreMapEntry\032Q\n\014Cor" +
      "eMapEntry\022\013\n\003key\030\001 \001(\005\0220\n\005value\030\002 \001(\0132!." +
      "tensorflow.tpu.HostOpsPerTpuStep:\0028\001\"\264\001\n" +
      "\025HostOpsDetailsPerHost\022D\n\010host_map\030\001 \003(\013" +
      "22.tensorflow.tpu.HostOpsDetailsPerHost." +
      "HostMapEntry\032U\n\014HostMapEntry\022\013\n\003key\030\001 \001(" +
      "\t\0224\n\005value\030\002 \001(\0132%.tensorflow.tpu.HostOp",
      "sDetailsPerCore:\0028\001\"U\n\rHostOpsResult\022>\n\017" +
      "hostops_details\030\002 \003(\0132%.tensorflow.tpu.H" +
      "ostOpsDetailsPerHostJ\004\010\001\020\002\"\305\004\n\tTfOpStats" +
      "\0228\n\rtf_metrics_db\030\001 \001(\0132!.tensorflow.tpu" +
      ".OpMetricsDbResult\0229\n\016hlo_metrics_db\030\002 \001" +
      "(\0132!.tensorflow.tpu.OpMetricsDbResult\0223\n" +
      "\007step_db\030\003 \001(\0132\".tensorflow.tpu.StepData" +
      "baseResult\022.\n\007looping\030\004 \001(\0132\035.tensorflow" +
      ".tpu.LoopingResult\022@\n\021hlo_extrainfo_map\030" +
      "\005 \001(\0132%.tensorflow.tpu.HloExtraInfoMapRe",
      "sult\022\'\n\037matrix_unit_utilization_percent\030" +
      "\006 \001(\001\022=\n\017run_environment\030\007 \001(\0132$.tensorf" +
      "low.tpu.RunEnvironmentResult\022/\n\010host_ops" +
      "\030\010 \001(\0132\035.tensorflow.tpu.HostOpsResult\022K\n" +
      "\023core_id_to_name_map\030\t \003(\0132..tensorflow." +
      "tpu.TfOpStats.CoreIdToNameMapEntry\0326\n\024Co" +
      "reIdToNameMapEntry\022\013\n\003key\030\001 \001(\r\022\r\n\005value" +
      "\030\002 \001(\t:\0028\001*\277\002\n\006HostOp\022\022\n\016kINVALIDHostOp\020" +
      "\000\022\"\n\036kInputDataProducerGetNextBatch\020\001\022 \n" +
      "\034kInputDataProducerSessionRun\020\002\022\"\n\036kInpu",
      "tDataProducerForwardBatch\020\003\022\035\n\031kInfeedTh" +
      "readGetNextBatch\020\004\022\033\n\027kInfeedThreadSessi" +
      "onRun\020\005\022\035\n\031kInfeedThreadForwardBatch\020\006\022\036" +
      "\n\032kOutfeedThreadGetNextBatch\020\007\022\034\n\030kOutfe" +
      "edThreadSessionRun\020\010\022\036\n\032kOutfeedThreadFo" +
      "rwardBatch\020\t"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
          public com.google.protobuf.ExtensionRegistry assignDescriptors(
              com.google.protobuf.Descriptors.FileDescriptor root) {
            descriptor = root;
            return null;
          }
        };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
    internal_static_tensorflow_tpu_OpMetricsResult_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_tensorflow_tpu_OpMetricsResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_OpMetricsResult_descriptor,
        new java.lang.String[] { "OnDevice", "Name", "Rank", "LastStarttimeInCycles", "LastEndtimeInCycles", "SumOfDurationInUsAsChildren", "Occurrences", "TotalTimeInUs", "TotalSelfTimeInUs", "HostTotalSelfTimeAsFractionOfAllOpTime", "HostCumulativeTotalSelfTimeAsFractionOfAllOpTime", "DeviceTotalSelfTimeAsFractionOfAllOpTime", "DeviceCumulativeTotalSelfTimeAsFractionOfAllOpTime", "TotalFlops", "TotalBytesAccessed", "Unit1OccupancyInUs", "Unit2OccupancyInUs", "TotalMemoryStallInUs", });
    internal_static_tensorflow_tpu_OpMetricsDbResult_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_tensorflow_tpu_OpMetricsDbResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_OpMetricsDbResult_descriptor,
        new java.lang.String[] { "MetricsDb", "TotalHostInfeedEnqDurationPs", "TotalHostInfeedEnqStartTimestampPsDiff", });
    internal_static_tensorflow_tpu_StepInfoResult_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_tensorflow_tpu_StepInfoResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_StepInfoResult_descriptor,
        new java.lang.String[] { "StepNum", "DurationPs", "InfeedDurationPs", "BeginPs", "WaitDurationPs", "CrsDurationPs", });
    internal_static_tensorflow_tpu_StepSequenceResult_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_tensorflow_tpu_StepSequenceResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_StepSequenceResult_descriptor,
        new java.lang.String[] { "StepSequence", });
    internal_static_tensorflow_tpu_StepDatabaseResult_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_tensorflow_tpu_StepDatabaseResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_StepDatabaseResult_descriptor,
        new java.lang.String[] { "StepSequencePerCore", });
    internal_static_tensorflow_tpu_StepDatabaseResult_StepSequencePerCoreEntry_descriptor =
      internal_static_tensorflow_tpu_StepDatabaseResult_descriptor.getNestedTypes().get(0);
    internal_static_tensorflow_tpu_StepDatabaseResult_StepSequencePerCoreEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_StepDatabaseResult_StepSequencePerCoreEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_tensorflow_tpu_LoopingResult_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_tensorflow_tpu_LoopingResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_LoopingResult_descriptor,
        new java.lang.String[] { "IterationTimeNs", "NumIterations", "ComputationTimeNs", "NumComputations", });
    internal_static_tensorflow_tpu_HloExtraInfoResult_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_tensorflow_tpu_HloExtraInfoResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_HloExtraInfoResult_descriptor,
        new java.lang.String[] { "Category", "LongName", "PerCoreBatchSize", });
    internal_static_tensorflow_tpu_HloExtraInfoMapResult_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_tensorflow_tpu_HloExtraInfoMapResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_HloExtraInfoMapResult_descriptor,
        new java.lang.String[] { "HloExtrainfoMap", });
    internal_static_tensorflow_tpu_HloExtraInfoMapResult_HloExtrainfoMapEntry_descriptor =
      internal_static_tensorflow_tpu_HloExtraInfoMapResult_descriptor.getNestedTypes().get(0);
    internal_static_tensorflow_tpu_HloExtraInfoMapResult_HloExtrainfoMapEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_HloExtraInfoMapResult_HloExtrainfoMapEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_tensorflow_tpu_HostIndependentJobInfoResult_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_tensorflow_tpu_HostIndependentJobInfoResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_HostIndependentJobInfoResult_descriptor,
        new java.lang.String[] { "ChangeList", "BuildTime", "BuildTarget", });
    internal_static_tensorflow_tpu_HostDependentJobInfoResult_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_tensorflow_tpu_HostDependentJobInfoResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_HostDependentJobInfoResult_descriptor,
        new java.lang.String[] { "HostId", "CommandLine", "StartTime", });
    internal_static_tensorflow_tpu_RunEnvironmentResult_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_tensorflow_tpu_RunEnvironmentResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_RunEnvironmentResult_descriptor,
        new java.lang.String[] { "HostCount", "TpuType", "TpuCoreCount", "PerCoreBatchSize", "HostIndependentJobInfo", "HostDependentJobInfo", });
    internal_static_tensorflow_tpu_HostOpsPerTpuStep_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_tensorflow_tpu_HostOpsPerTpuStep_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_HostOpsPerTpuStep_descriptor,
        new java.lang.String[] { "Valid", "TpuStepNum", "TpuStepBeginPs", "TpuStepEndPs", "StepDiffs", });
    internal_static_tensorflow_tpu_HostOpsPerTpuStep_StepDiffsEntry_descriptor =
      internal_static_tensorflow_tpu_HostOpsPerTpuStep_descriptor.getNestedTypes().get(0);
    internal_static_tensorflow_tpu_HostOpsPerTpuStep_StepDiffsEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_HostOpsPerTpuStep_StepDiffsEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_tensorflow_tpu_HostOpsDetailsPerCore_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_tensorflow_tpu_HostOpsDetailsPerCore_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_HostOpsDetailsPerCore_descriptor,
        new java.lang.String[] { "CoreMap", });
    internal_static_tensorflow_tpu_HostOpsDetailsPerCore_CoreMapEntry_descriptor =
      internal_static_tensorflow_tpu_HostOpsDetailsPerCore_descriptor.getNestedTypes().get(0);
    internal_static_tensorflow_tpu_HostOpsDetailsPerCore_CoreMapEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_HostOpsDetailsPerCore_CoreMapEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_tensorflow_tpu_HostOpsDetailsPerHost_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_tensorflow_tpu_HostOpsDetailsPerHost_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_HostOpsDetailsPerHost_descriptor,
        new java.lang.String[] { "HostMap", });
    internal_static_tensorflow_tpu_HostOpsDetailsPerHost_HostMapEntry_descriptor =
      internal_static_tensorflow_tpu_HostOpsDetailsPerHost_descriptor.getNestedTypes().get(0);
    internal_static_tensorflow_tpu_HostOpsDetailsPerHost_HostMapEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_HostOpsDetailsPerHost_HostMapEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_tensorflow_tpu_HostOpsResult_descriptor =
      getDescriptor().getMessageTypes().get(14);
    internal_static_tensorflow_tpu_HostOpsResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_HostOpsResult_descriptor,
        new java.lang.String[] { "HostopsDetails", });
    internal_static_tensorflow_tpu_TfOpStats_descriptor =
      getDescriptor().getMessageTypes().get(15);
    internal_static_tensorflow_tpu_TfOpStats_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_TfOpStats_descriptor,
        new java.lang.String[] { "TfMetricsDb", "HloMetricsDb", "StepDb", "Looping", "HloExtrainfoMap", "MatrixUnitUtilizationPercent", "RunEnvironment", "HostOps", "CoreIdToNameMap", });
    internal_static_tensorflow_tpu_TfOpStats_CoreIdToNameMapEntry_descriptor =
      internal_static_tensorflow_tpu_TfOpStats_descriptor.getNestedTypes().get(0);
    internal_static_tensorflow_tpu_TfOpStats_CoreIdToNameMapEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_tensorflow_tpu_TfOpStats_CoreIdToNameMapEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
