// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: CanalProtocol.proto

package com.alibaba.otter.canal.protocol;

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

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * Protobuf enum {@code com.alibaba.otter.canal.protocol.Compression}
   */
  public enum Compression
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>COMPRESSIONCOMPATIBLEPROTO2 = 0;</code>
     */
    COMPRESSIONCOMPATIBLEPROTO2(0),
    /**
     * <code>NONE = 1;</code>
     */
    NONE(1),
    /**
     * <code>ZLIB = 2;</code>
     */
    ZLIB(2),
    /**
     * <code>GZIP = 3;</code>
     */
    GZIP(3),
    /**
     * <code>LZF = 4;</code>
     */
    LZF(4),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>COMPRESSIONCOMPATIBLEPROTO2 = 0;</code>
     */
    public static final int COMPRESSIONCOMPATIBLEPROTO2_VALUE = 0;
    /**
     * <code>NONE = 1;</code>
     */
    public static final int NONE_VALUE = 1;
    /**
     * <code>ZLIB = 2;</code>
     */
    public static final int ZLIB_VALUE = 2;
    /**
     * <code>GZIP = 3;</code>
     */
    public static final int GZIP_VALUE = 3;
    /**
     * <code>LZF = 4;</code>
     */
    public static final int LZF_VALUE = 4;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

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

    public static Compression forNumber(int value) {
      switch (value) {
        case 0: return COMPRESSIONCOMPATIBLEPROTO2;
        case 1: return NONE;
        case 2: return ZLIB;
        case 3: return GZIP;
        case 4: return LZF;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<Compression>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        Compression> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<Compression>() {
            public Compression findValueByNumber(int number) {
              return Compression.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 com.alibaba.otter.canal.protocol.CanalPacket.getDescriptor().getEnumTypes().get(0);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:com.alibaba.otter.canal.protocol.Compression)
  }

  /**
   * Protobuf enum {@code com.alibaba.otter.canal.protocol.PacketType}
   */
  public enum PacketType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <pre>
     *compatible
     * </pre>
     *
     * <code>PACKAGETYPECOMPATIBLEPROTO2 = 0;</code>
     */
    PACKAGETYPECOMPATIBLEPROTO2(0),
    /**
     * <code>HANDSHAKE = 1;</code>
     */
    HANDSHAKE(1),
    /**
     * <code>CLIENTAUTHENTICATION = 2;</code>
     */
    CLIENTAUTHENTICATION(2),
    /**
     * <code>ACK = 3;</code>
     */
    ACK(3),
    /**
     * <code>SUBSCRIPTION = 4;</code>
     */
    SUBSCRIPTION(4),
    /**
     * <code>UNSUBSCRIPTION = 5;</code>
     */
    UNSUBSCRIPTION(5),
    /**
     * <code>GET = 6;</code>
     */
    GET(6),
    /**
     * <code>MESSAGES = 7;</code>
     */
    MESSAGES(7),
    /**
     * <code>CLIENTACK = 8;</code>
     */
    CLIENTACK(8),
    /**
     * <pre>
     * management part
     * </pre>
     *
     * <code>SHUTDOWN = 9;</code>
     */
    SHUTDOWN(9),
    /**
     * <pre>
     * integration
     * </pre>
     *
     * <code>DUMP = 10;</code>
     */
    DUMP(10),
    /**
     * <code>HEARTBEAT = 11;</code>
     */
    HEARTBEAT(11),
    /**
     * <code>CLIENTROLLBACK = 12;</code>
     */
    CLIENTROLLBACK(12),
    UNRECOGNIZED(-1),
    ;

    /**
     * <pre>
     *compatible
     * </pre>
     *
     * <code>PACKAGETYPECOMPATIBLEPROTO2 = 0;</code>
     */
    public static final int PACKAGETYPECOMPATIBLEPROTO2_VALUE = 0;
    /**
     * <code>HANDSHAKE = 1;</code>
     */
    public static final int HANDSHAKE_VALUE = 1;
    /**
     * <code>CLIENTAUTHENTICATION = 2;</code>
     */
    public static final int CLIENTAUTHENTICATION_VALUE = 2;
    /**
     * <code>ACK = 3;</code>
     */
    public static final int ACK_VALUE = 3;
    /**
     * <code>SUBSCRIPTION = 4;</code>
     */
    public static final int SUBSCRIPTION_VALUE = 4;
    /**
     * <code>UNSUBSCRIPTION = 5;</code>
     */
    public static final int UNSUBSCRIPTION_VALUE = 5;
    /**
     * <code>GET = 6;</code>
     */
    public static final int GET_VALUE = 6;
    /**
     * <code>MESSAGES = 7;</code>
     */
    public static final int MESSAGES_VALUE = 7;
    /**
     * <code>CLIENTACK = 8;</code>
     */
    public static final int CLIENTACK_VALUE = 8;
    /**
     * <pre>
     * management part
     * </pre>
     *
     * <code>SHUTDOWN = 9;</code>
     */
    public static final int SHUTDOWN_VALUE = 9;
    /**
     * <pre>
     * integration
     * </pre>
     *
     * <code>DUMP = 10;</code>
     */
    public static final int DUMP_VALUE = 10;
    /**
     * <code>HEARTBEAT = 11;</code>
     */
    public static final int HEARTBEAT_VALUE = 11;
    /**
     * <code>CLIENTROLLBACK = 12;</code>
     */
    public static final int CLIENTROLLBACK_VALUE = 12;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

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

    public static PacketType forNumber(int value) {
      switch (value) {
        case 0: return PACKAGETYPECOMPATIBLEPROTO2;
        case 1: return HANDSHAKE;
        case 2: return CLIENTAUTHENTICATION;
        case 3: return ACK;
        case 4: return SUBSCRIPTION;
        case 5: return UNSUBSCRIPTION;
        case 6: return GET;
        case 7: return MESSAGES;
        case 8: return CLIENTACK;
        case 9: return SHUTDOWN;
        case 10: return DUMP;
        case 11: return HEARTBEAT;
        case 12: return CLIENTROLLBACK;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<PacketType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        PacketType> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<PacketType>() {
            public PacketType findValueByNumber(int number) {
              return PacketType.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 com.alibaba.otter.canal.protocol.CanalPacket.getDescriptor().getEnumTypes().get(1);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:com.alibaba.otter.canal.protocol.PacketType)
  }

  public interface PacketOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Packet)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>int32 magic_number = 1;</code>
     */
    int getMagicNumber();

    /**
     * <code>int32 version = 2;</code>
     */
    int getVersion();

    /**
     * <code>.com.alibaba.otter.canal.protocol.PacketType type = 3;</code>
     */
    int getTypeValue();
    /**
     * <code>.com.alibaba.otter.canal.protocol.PacketType type = 3;</code>
     */
    com.alibaba.otter.canal.protocol.CanalPacket.PacketType getType();

    /**
     * <code>.com.alibaba.otter.canal.protocol.Compression compression = 4;</code>
     */
    int getCompressionValue();
    /**
     * <code>.com.alibaba.otter.canal.protocol.Compression compression = 4;</code>
     */
    com.alibaba.otter.canal.protocol.CanalPacket.Compression getCompression();

    /**
     * <code>bytes body = 5;</code>
     */
    com.google.protobuf.ByteString getBody();

    public com.alibaba.otter.canal.protocol.CanalPacket.Packet.MagicNumberPresentCase getMagicNumberPresentCase();

    public com.alibaba.otter.canal.protocol.CanalPacket.Packet.VersionPresentCase getVersionPresentCase();

    public com.alibaba.otter.canal.protocol.CanalPacket.Packet.CompressionPresentCase getCompressionPresentCase();
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.Packet}
   */
  public  static final class Packet extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Packet)
      PacketOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Packet.newBuilder() to construct.
    private Packet(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Packet() {
      type_ = 0;
      body_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Packet(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {
              magicNumberPresentCase_ = 1;
              magicNumberPresent_ = input.readInt32();
              break;
            }
            case 16: {
              versionPresentCase_ = 2;
              versionPresent_ = input.readInt32();
              break;
            }
            case 24: {
              int rawValue = input.readEnum();

              type_ = rawValue;
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
              compressionPresentCase_ = 4;
              compressionPresent_ = rawValue;
              break;
            }
            case 42: {

              body_ = input.readBytes();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              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 com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Packet_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Packet_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.alibaba.otter.canal.protocol.CanalPacket.Packet.class, com.alibaba.otter.canal.protocol.CanalPacket.Packet.Builder.class);
    }

    private int magicNumberPresentCase_ = 0;
    private java.lang.Object magicNumberPresent_;
    public enum MagicNumberPresentCase
        implements com.google.protobuf.Internal.EnumLite {
      MAGIC_NUMBER(1),
      MAGICNUMBERPRESENT_NOT_SET(0);
      private final int value;
      private MagicNumberPresentCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static MagicNumberPresentCase valueOf(int value) {
        return forNumber(value);
      }

      public static MagicNumberPresentCase forNumber(int value) {
        switch (value) {
          case 1: return MAGIC_NUMBER;
          case 0: return MAGICNUMBERPRESENT_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public MagicNumberPresentCase
    getMagicNumberPresentCase() {
      return MagicNumberPresentCase.forNumber(
          magicNumberPresentCase_);
    }

    private int versionPresentCase_ = 0;
    private java.lang.Object versionPresent_;
    public enum VersionPresentCase
        implements com.google.protobuf.Internal.EnumLite {
      VERSION(2),
      VERSIONPRESENT_NOT_SET(0);
      private final int value;
      private VersionPresentCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static VersionPresentCase valueOf(int value) {
        return forNumber(value);
      }

      public static VersionPresentCase forNumber(int value) {
        switch (value) {
          case 2: return VERSION;
          case 0: return VERSIONPRESENT_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public VersionPresentCase
    getVersionPresentCase() {
      return VersionPresentCase.forNumber(
          versionPresentCase_);
    }

    private int compressionPresentCase_ = 0;
    private java.lang.Object compressionPresent_;
    public enum CompressionPresentCase
        implements com.google.protobuf.Internal.EnumLite {
      COMPRESSION(4),
      COMPRESSIONPRESENT_NOT_SET(0);
      private final int value;
      private CompressionPresentCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static CompressionPresentCase valueOf(int value) {
        return forNumber(value);
      }

      public static CompressionPresentCase forNumber(int value) {
        switch (value) {
          case 4: return COMPRESSION;
          case 0: return COMPRESSIONPRESENT_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public CompressionPresentCase
    getCompressionPresentCase() {
      return CompressionPresentCase.forNumber(
          compressionPresentCase_);
    }

    public static final int MAGIC_NUMBER_FIELD_NUMBER = 1;
    /**
     * <code>int32 magic_number = 1;</code>
     */
    public int getMagicNumber() {
      if (magicNumberPresentCase_ == 1) {
        return (java.lang.Integer) magicNumberPresent_;
      }
      return 0;
    }

    public static final int VERSION_FIELD_NUMBER = 2;
    /**
     * <code>int32 version = 2;</code>
     */
    public int getVersion() {
      if (versionPresentCase_ == 2) {
        return (java.lang.Integer) versionPresent_;
      }
      return 1;
    }

    public static final int TYPE_FIELD_NUMBER = 3;
    private int type_;
    /**
     * <code>.com.alibaba.otter.canal.protocol.PacketType type = 3;</code>
     */
    public int getTypeValue() {
      return type_;
    }
    /**
     * <code>.com.alibaba.otter.canal.protocol.PacketType type = 3;</code>
     */
    public com.alibaba.otter.canal.protocol.CanalPacket.PacketType getType() {
      @SuppressWarnings("deprecation")
      com.alibaba.otter.canal.protocol.CanalPacket.PacketType result = com.alibaba.otter.canal.protocol.CanalPacket.PacketType.valueOf(type_);
      return result == null ? com.alibaba.otter.canal.protocol.CanalPacket.PacketType.UNRECOGNIZED : result;
    }

    public static final int COMPRESSION_FIELD_NUMBER = 4;
    /**
     * <code>.com.alibaba.otter.canal.protocol.Compression compression = 4;</code>
     */
    public int getCompressionValue() {
      if (compressionPresentCase_ == 4) {
        return (java.lang.Integer) compressionPresent_;
      }
      return Compression.NONE_VALUE;
    }
    /**
     * <code>.com.alibaba.otter.canal.protocol.Compression compression = 4;</code>
     */
    public com.alibaba.otter.canal.protocol.CanalPacket.Compression getCompression() {
      if (compressionPresentCase_ == 4) {
        @SuppressWarnings("deprecation")
        com.alibaba.otter.canal.protocol.CanalPacket.Compression result = com.alibaba.otter.canal.protocol.CanalPacket.Compression.valueOf(
            (java.lang.Integer) compressionPresent_);
        return result == null ? com.alibaba.otter.canal.protocol.CanalPacket.Compression.UNRECOGNIZED : result;
      }
      return com.alibaba.otter.canal.protocol.CanalPacket.Compression.COMPRESSIONCOMPATIBLEPROTO2;
    }

    public static final int BODY_FIELD_NUMBER = 5;
    private com.google.protobuf.ByteString body_;
    /**
     * <code>bytes body = 5;</code>
     */
    public com.google.protobuf.ByteString getBody() {
      return body_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (magicNumberPresentCase_ == 1) {
        output.writeInt32(
            1, (int)((java.lang.Integer) magicNumberPresent_));
      }
      if (versionPresentCase_ == 2) {
        output.writeInt32(
            2, (int)((java.lang.Integer) versionPresent_));
      }
      if (type_ != com.alibaba.otter.canal.protocol.CanalPacket.PacketType.PACKAGETYPECOMPATIBLEPROTO2.getNumber()) {
        output.writeEnum(3, type_);
      }
      if (compressionPresentCase_ == 4) {
        output.writeEnum(4, ((java.lang.Integer) compressionPresent_));
      }
      if (!body_.isEmpty()) {
        output.writeBytes(5, body_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (magicNumberPresentCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(
              1, (int)((java.lang.Integer) magicNumberPresent_));
      }
      if (versionPresentCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(
              2, (int)((java.lang.Integer) versionPresent_));
      }
      if (type_ != com.alibaba.otter.canal.protocol.CanalPacket.PacketType.PACKAGETYPECOMPATIBLEPROTO2.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, type_);
      }
      if (compressionPresentCase_ == 4) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, ((java.lang.Integer) compressionPresent_));
      }
      if (!body_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, body_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.alibaba.otter.canal.protocol.CanalPacket.Packet)) {
        return super.equals(obj);
      }
      com.alibaba.otter.canal.protocol.CanalPacket.Packet other = (com.alibaba.otter.canal.protocol.CanalPacket.Packet) obj;

      boolean result = true;
      result = result && type_ == other.type_;
      result = result && getBody()
          .equals(other.getBody());
      result = result && getMagicNumberPresentCase().equals(
          other.getMagicNumberPresentCase());
      if (!result) return false;
      switch (magicNumberPresentCase_) {
        case 1:
          result = result && (getMagicNumber()
              == other.getMagicNumber());
          break;
        case 0:
        default:
      }
      result = result && getVersionPresentCase().equals(
          other.getVersionPresentCase());
      if (!result) return false;
      switch (versionPresentCase_) {
        case 2:
          result = result && (getVersion()
              == other.getVersion());
          break;
        case 0:
        default:
      }
      result = result && getCompressionPresentCase().equals(
          other.getCompressionPresentCase());
      if (!result) return false;
      switch (compressionPresentCase_) {
        case 4:
          result = result && getCompressionValue()
              == other.getCompressionValue();
          break;
        case 0:
        default:
      }
      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();
      hash = (37 * hash) + TYPE_FIELD_NUMBER;
      hash = (53 * hash) + type_;
      hash = (37 * hash) + BODY_FIELD_NUMBER;
      hash = (53 * hash) + getBody().hashCode();
      switch (magicNumberPresentCase_) {
        case 1:
          hash = (37 * hash) + MAGIC_NUMBER_FIELD_NUMBER;
          hash = (53 * hash) + getMagicNumber();
          break;
        case 0:
        default:
      }
      switch (versionPresentCase_) {
        case 2:
          hash = (37 * hash) + VERSION_FIELD_NUMBER;
          hash = (53 * hash) + getVersion();
          break;
        case 0:
        default:
      }
      switch (compressionPresentCase_) {
        case 4:
          hash = (37 * hash) + COMPRESSION_FIELD_NUMBER;
          hash = (53 * hash) + getCompressionValue();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Packet parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Packet parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Packet parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Packet parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Packet parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Packet parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Packet parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Packet 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 com.alibaba.otter.canal.protocol.CanalPacket.Packet parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Packet 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 com.alibaba.otter.canal.protocol.CanalPacket.Packet parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Packet parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.alibaba.otter.canal.protocol.CanalPacket.Packet prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    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 com.alibaba.otter.canal.protocol.Packet}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Packet)
        com.alibaba.otter.canal.protocol.CanalPacket.PacketOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Packet_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Packet_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.alibaba.otter.canal.protocol.CanalPacket.Packet.class, com.alibaba.otter.canal.protocol.CanalPacket.Packet.Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalPacket.Packet.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        type_ = 0;

        body_ = com.google.protobuf.ByteString.EMPTY;

        magicNumberPresentCase_ = 0;
        magicNumberPresent_ = null;
        versionPresentCase_ = 0;
        versionPresent_ = null;
        compressionPresentCase_ = 0;
        compressionPresent_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Packet_descriptor;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Packet getDefaultInstanceForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.Packet.getDefaultInstance();
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Packet build() {
        com.alibaba.otter.canal.protocol.CanalPacket.Packet result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Packet buildPartial() {
        com.alibaba.otter.canal.protocol.CanalPacket.Packet result = new com.alibaba.otter.canal.protocol.CanalPacket.Packet(this);
        if (magicNumberPresentCase_ == 1) {
          result.magicNumberPresent_ = magicNumberPresent_;
        }
        if (versionPresentCase_ == 2) {
          result.versionPresent_ = versionPresent_;
        }
        result.type_ = type_;
        if (compressionPresentCase_ == 4) {
          result.compressionPresent_ = compressionPresent_;
        }
        result.body_ = body_;
        result.magicNumberPresentCase_ = magicNumberPresentCase_;
        result.versionPresentCase_ = versionPresentCase_;
        result.compressionPresentCase_ = compressionPresentCase_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.alibaba.otter.canal.protocol.CanalPacket.Packet) {
          return mergeFrom((com.alibaba.otter.canal.protocol.CanalPacket.Packet)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.alibaba.otter.canal.protocol.CanalPacket.Packet other) {
        if (other == com.alibaba.otter.canal.protocol.CanalPacket.Packet.getDefaultInstance()) return this;
        if (other.type_ != 0) {
          setTypeValue(other.getTypeValue());
        }
        if (other.getBody() != com.google.protobuf.ByteString.EMPTY) {
          setBody(other.getBody());
        }
        switch (other.getMagicNumberPresentCase()) {
          case MAGIC_NUMBER: {
            setMagicNumber(other.getMagicNumber());
            break;
          }
          case MAGICNUMBERPRESENT_NOT_SET: {
            break;
          }
        }
        switch (other.getVersionPresentCase()) {
          case VERSION: {
            setVersion(other.getVersion());
            break;
          }
          case VERSIONPRESENT_NOT_SET: {
            break;
          }
        }
        switch (other.getCompressionPresentCase()) {
          case COMPRESSION: {
            setCompressionValue(other.getCompressionValue());
            break;
          }
          case COMPRESSIONPRESENT_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.alibaba.otter.canal.protocol.CanalPacket.Packet parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.alibaba.otter.canal.protocol.CanalPacket.Packet) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int magicNumberPresentCase_ = 0;
      private java.lang.Object magicNumberPresent_;
      public MagicNumberPresentCase
          getMagicNumberPresentCase() {
        return MagicNumberPresentCase.forNumber(
            magicNumberPresentCase_);
      }

      public Builder clearMagicNumberPresent() {
        magicNumberPresentCase_ = 0;
        magicNumberPresent_ = null;
        onChanged();
        return this;
      }

      private int versionPresentCase_ = 0;
      private java.lang.Object versionPresent_;
      public VersionPresentCase
          getVersionPresentCase() {
        return VersionPresentCase.forNumber(
            versionPresentCase_);
      }

      public Builder clearVersionPresent() {
        versionPresentCase_ = 0;
        versionPresent_ = null;
        onChanged();
        return this;
      }

      private int compressionPresentCase_ = 0;
      private java.lang.Object compressionPresent_;
      public CompressionPresentCase
          getCompressionPresentCase() {
        return CompressionPresentCase.forNumber(
            compressionPresentCase_);
      }

      public Builder clearCompressionPresent() {
        compressionPresentCase_ = 0;
        compressionPresent_ = null;
        onChanged();
        return this;
      }


      /**
       * <code>int32 magic_number = 1;</code>
       */
      public int getMagicNumber() {
        if (magicNumberPresentCase_ == 1) {
          return (java.lang.Integer) magicNumberPresent_;
        }
        return 17;
      }
      /**
       * <code>int32 magic_number = 1;</code>
       */
      public Builder setMagicNumber(int value) {
        magicNumberPresentCase_ = 1;
        magicNumberPresent_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 magic_number = 1;</code>
       */
      public Builder clearMagicNumber() {
        if (magicNumberPresentCase_ == 1) {
          magicNumberPresentCase_ = 0;
          magicNumberPresent_ = null;
          onChanged();
        }
        return this;
      }

      /**
       * <code>int32 version = 2;</code>
       */
      public int getVersion() {
        if (versionPresentCase_ == 2) {
          return (java.lang.Integer) versionPresent_;
        }
        return 0;
      }
      /**
       * <code>int32 version = 2;</code>
       */
      public Builder setVersion(int value) {
        versionPresentCase_ = 2;
        versionPresent_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 version = 2;</code>
       */
      public Builder clearVersion() {
        if (versionPresentCase_ == 2) {
          versionPresentCase_ = 0;
          versionPresent_ = null;
          onChanged();
        }
        return this;
      }

      private int type_ = 0;
      /**
       * <code>.com.alibaba.otter.canal.protocol.PacketType type = 3;</code>
       */
      public int getTypeValue() {
        return type_;
      }
      /**
       * <code>.com.alibaba.otter.canal.protocol.PacketType type = 3;</code>
       */
      public Builder setTypeValue(int value) {
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.com.alibaba.otter.canal.protocol.PacketType type = 3;</code>
       */
      public com.alibaba.otter.canal.protocol.CanalPacket.PacketType getType() {
        @SuppressWarnings("deprecation")
        com.alibaba.otter.canal.protocol.CanalPacket.PacketType result = com.alibaba.otter.canal.protocol.CanalPacket.PacketType.valueOf(type_);
        return result == null ? com.alibaba.otter.canal.protocol.CanalPacket.PacketType.UNRECOGNIZED : result;
      }
      /**
       * <code>.com.alibaba.otter.canal.protocol.PacketType type = 3;</code>
       */
      public Builder setType(com.alibaba.otter.canal.protocol.CanalPacket.PacketType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        type_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.com.alibaba.otter.canal.protocol.PacketType type = 3;</code>
       */
      public Builder clearType() {
        
        type_ = 0;
        onChanged();
        return this;
      }

      /**
       * <code>.com.alibaba.otter.canal.protocol.Compression compression = 4;</code>
       */
      public int getCompressionValue() {
        if (compressionPresentCase_ == 4) {
          return ((java.lang.Integer) compressionPresent_).intValue();
        }
        return 0;
      }
      /**
       * <code>.com.alibaba.otter.canal.protocol.Compression compression = 4;</code>
       */
      public Builder setCompressionValue(int value) {
        compressionPresentCase_ = 4;
        compressionPresent_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.com.alibaba.otter.canal.protocol.Compression compression = 4;</code>
       */
      public com.alibaba.otter.canal.protocol.CanalPacket.Compression getCompression() {
        if (compressionPresentCase_ == 4) {
          @SuppressWarnings("deprecation")
          com.alibaba.otter.canal.protocol.CanalPacket.Compression result = com.alibaba.otter.canal.protocol.CanalPacket.Compression.valueOf(
              (java.lang.Integer) compressionPresent_);
          return result == null ? com.alibaba.otter.canal.protocol.CanalPacket.Compression.UNRECOGNIZED : result;
        }
        return com.alibaba.otter.canal.protocol.CanalPacket.Compression.COMPRESSIONCOMPATIBLEPROTO2;
      }
      /**
       * <code>.com.alibaba.otter.canal.protocol.Compression compression = 4;</code>
       */
      public Builder setCompression(com.alibaba.otter.canal.protocol.CanalPacket.Compression value) {
        if (value == null) {
          throw new NullPointerException();
        }
        compressionPresentCase_ = 4;
        compressionPresent_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.com.alibaba.otter.canal.protocol.Compression compression = 4;</code>
       */
      public Builder clearCompression() {
        if (compressionPresentCase_ == 4) {
          compressionPresentCase_ = 0;
          compressionPresent_ = null;
          onChanged();
        }
        return this;
      }

      private com.google.protobuf.ByteString body_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>bytes body = 5;</code>
       */
      public com.google.protobuf.ByteString getBody() {
        return body_;
      }
      /**
       * <code>bytes body = 5;</code>
       */
      public Builder setBody(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        body_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bytes body = 5;</code>
       */
      public Builder clearBody() {
        
        body_ = getDefaultInstance().getBody();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.Packet)
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.Packet)
    private static final com.alibaba.otter.canal.protocol.CanalPacket.Packet DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.alibaba.otter.canal.protocol.CanalPacket.Packet();
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Packet getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.alibaba.otter.canal.protocol.CanalPacket.Packet getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface HeartBeatOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.HeartBeat)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>int64 send_timestamp = 1;</code>
     */
    long getSendTimestamp();

    /**
     * <code>int64 start_timestamp = 2;</code>
     */
    long getStartTimestamp();
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.HeartBeat}
   */
  public  static final class HeartBeat extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.HeartBeat)
      HeartBeatOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use HeartBeat.newBuilder() to construct.
    private HeartBeat(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private HeartBeat() {
      sendTimestamp_ = 0L;
      startTimestamp_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HeartBeat(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {

              sendTimestamp_ = input.readInt64();
              break;
            }
            case 16: {

              startTimestamp_ = input.readInt64();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              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 com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_HeartBeat_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_HeartBeat_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat.class, com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat.Builder.class);
    }

    public static final int SEND_TIMESTAMP_FIELD_NUMBER = 1;
    private long sendTimestamp_;
    /**
     * <code>int64 send_timestamp = 1;</code>
     */
    public long getSendTimestamp() {
      return sendTimestamp_;
    }

    public static final int START_TIMESTAMP_FIELD_NUMBER = 2;
    private long startTimestamp_;
    /**
     * <code>int64 start_timestamp = 2;</code>
     */
    public long getStartTimestamp() {
      return startTimestamp_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (sendTimestamp_ != 0L) {
        output.writeInt64(1, sendTimestamp_);
      }
      if (startTimestamp_ != 0L) {
        output.writeInt64(2, startTimestamp_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (sendTimestamp_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, sendTimestamp_);
      }
      if (startTimestamp_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, startTimestamp_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat)) {
        return super.equals(obj);
      }
      com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat other = (com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat) obj;

      boolean result = true;
      result = result && (getSendTimestamp()
          == other.getSendTimestamp());
      result = result && (getStartTimestamp()
          == other.getStartTimestamp());
      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();
      hash = (37 * hash) + SEND_TIMESTAMP_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getSendTimestamp());
      hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getStartTimestamp());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat 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 com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat 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 com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    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 com.alibaba.otter.canal.protocol.HeartBeat}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.HeartBeat)
        com.alibaba.otter.canal.protocol.CanalPacket.HeartBeatOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_HeartBeat_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_HeartBeat_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat.class, com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat.Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        sendTimestamp_ = 0L;

        startTimestamp_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_HeartBeat_descriptor;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat getDefaultInstanceForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat.getDefaultInstance();
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat build() {
        com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat buildPartial() {
        com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat result = new com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat(this);
        result.sendTimestamp_ = sendTimestamp_;
        result.startTimestamp_ = startTimestamp_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat) {
          return mergeFrom((com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat other) {
        if (other == com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat.getDefaultInstance()) return this;
        if (other.getSendTimestamp() != 0L) {
          setSendTimestamp(other.getSendTimestamp());
        }
        if (other.getStartTimestamp() != 0L) {
          setStartTimestamp(other.getStartTimestamp());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private long sendTimestamp_ ;
      /**
       * <code>int64 send_timestamp = 1;</code>
       */
      public long getSendTimestamp() {
        return sendTimestamp_;
      }
      /**
       * <code>int64 send_timestamp = 1;</code>
       */
      public Builder setSendTimestamp(long value) {
        
        sendTimestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 send_timestamp = 1;</code>
       */
      public Builder clearSendTimestamp() {
        
        sendTimestamp_ = 0L;
        onChanged();
        return this;
      }

      private long startTimestamp_ ;
      /**
       * <code>int64 start_timestamp = 2;</code>
       */
      public long getStartTimestamp() {
        return startTimestamp_;
      }
      /**
       * <code>int64 start_timestamp = 2;</code>
       */
      public Builder setStartTimestamp(long value) {
        
        startTimestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 start_timestamp = 2;</code>
       */
      public Builder clearStartTimestamp() {
        
        startTimestamp_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.HeartBeat)
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.HeartBeat)
    private static final com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat();
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.alibaba.otter.canal.protocol.CanalPacket.HeartBeat getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface HandshakeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Handshake)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string communication_encoding = 1;</code>
     */
    java.lang.String getCommunicationEncoding();
    /**
     * <code>string communication_encoding = 1;</code>
     */
    com.google.protobuf.ByteString
        getCommunicationEncodingBytes();

    /**
     * <code>bytes seeds = 2;</code>
     */
    com.google.protobuf.ByteString getSeeds();

    /**
     * <code>.com.alibaba.otter.canal.protocol.Compression supported_compressions = 3;</code>
     */
    int getSupportedCompressionsValue();
    /**
     * <code>.com.alibaba.otter.canal.protocol.Compression supported_compressions = 3;</code>
     */
    com.alibaba.otter.canal.protocol.CanalPacket.Compression getSupportedCompressions();

    public com.alibaba.otter.canal.protocol.CanalPacket.Handshake.CommunicationEncodingPresentCase getCommunicationEncodingPresentCase();
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.Handshake}
   */
  public  static final class Handshake extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Handshake)
      HandshakeOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Handshake.newBuilder() to construct.
    private Handshake(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Handshake() {
      seeds_ = com.google.protobuf.ByteString.EMPTY;
      supportedCompressions_ = 0;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Handshake(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();
              communicationEncodingPresentCase_ = 1;
              communicationEncodingPresent_ = s;
              break;
            }
            case 18: {

              seeds_ = input.readBytes();
              break;
            }
            case 24: {
              int rawValue = input.readEnum();

              supportedCompressions_ = rawValue;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              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 com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Handshake_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Handshake_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.alibaba.otter.canal.protocol.CanalPacket.Handshake.class, com.alibaba.otter.canal.protocol.CanalPacket.Handshake.Builder.class);
    }

    private int communicationEncodingPresentCase_ = 0;
    private java.lang.Object communicationEncodingPresent_;
    public enum CommunicationEncodingPresentCase
        implements com.google.protobuf.Internal.EnumLite {
      COMMUNICATION_ENCODING(1),
      COMMUNICATIONENCODINGPRESENT_NOT_SET(0);
      private final int value;
      private CommunicationEncodingPresentCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static CommunicationEncodingPresentCase valueOf(int value) {
        return forNumber(value);
      }

      public static CommunicationEncodingPresentCase forNumber(int value) {
        switch (value) {
          case 1: return COMMUNICATION_ENCODING;
          case 0: return COMMUNICATIONENCODINGPRESENT_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public CommunicationEncodingPresentCase
    getCommunicationEncodingPresentCase() {
      return CommunicationEncodingPresentCase.forNumber(
          communicationEncodingPresentCase_);
    }

    public static final int COMMUNICATION_ENCODING_FIELD_NUMBER = 1;
    /**
     * <code>string communication_encoding = 1;</code>
     */
    public java.lang.String getCommunicationEncoding() {
      java.lang.Object ref = "";
      if (communicationEncodingPresentCase_ == 1) {
        ref = communicationEncodingPresent_;
      }
      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 (communicationEncodingPresentCase_ == 1) {
          communicationEncodingPresent_ = s;
        }
        return s;
      }
    }
    /**
     * <code>string communication_encoding = 1;</code>
     */
    public com.google.protobuf.ByteString
        getCommunicationEncodingBytes() {
      java.lang.Object ref = "";
      if (communicationEncodingPresentCase_ == 1) {
        ref = communicationEncodingPresent_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (communicationEncodingPresentCase_ == 1) {
          communicationEncodingPresent_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SEEDS_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString seeds_;
    /**
     * <code>bytes seeds = 2;</code>
     */
    public com.google.protobuf.ByteString getSeeds() {
      return seeds_;
    }

    public static final int SUPPORTED_COMPRESSIONS_FIELD_NUMBER = 3;
    private int supportedCompressions_;
    /**
     * <code>.com.alibaba.otter.canal.protocol.Compression supported_compressions = 3;</code>
     */
    public int getSupportedCompressionsValue() {
      return supportedCompressions_;
    }
    /**
     * <code>.com.alibaba.otter.canal.protocol.Compression supported_compressions = 3;</code>
     */
    public com.alibaba.otter.canal.protocol.CanalPacket.Compression getSupportedCompressions() {
      @SuppressWarnings("deprecation")
      com.alibaba.otter.canal.protocol.CanalPacket.Compression result = com.alibaba.otter.canal.protocol.CanalPacket.Compression.valueOf(supportedCompressions_);
      return result == null ? com.alibaba.otter.canal.protocol.CanalPacket.Compression.UNRECOGNIZED : result;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (communicationEncodingPresentCase_ == 1) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, communicationEncodingPresent_);
      }
      if (!seeds_.isEmpty()) {
        output.writeBytes(2, seeds_);
      }
      if (supportedCompressions_ != com.alibaba.otter.canal.protocol.CanalPacket.Compression.COMPRESSIONCOMPATIBLEPROTO2.getNumber()) {
        output.writeEnum(3, supportedCompressions_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (communicationEncodingPresentCase_ == 1) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, communicationEncodingPresent_);
      }
      if (!seeds_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, seeds_);
      }
      if (supportedCompressions_ != com.alibaba.otter.canal.protocol.CanalPacket.Compression.COMPRESSIONCOMPATIBLEPROTO2.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, supportedCompressions_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.alibaba.otter.canal.protocol.CanalPacket.Handshake)) {
        return super.equals(obj);
      }
      com.alibaba.otter.canal.protocol.CanalPacket.Handshake other = (com.alibaba.otter.canal.protocol.CanalPacket.Handshake) obj;

      boolean result = true;
      result = result && getSeeds()
          .equals(other.getSeeds());
      result = result && supportedCompressions_ == other.supportedCompressions_;
      result = result && getCommunicationEncodingPresentCase().equals(
          other.getCommunicationEncodingPresentCase());
      if (!result) return false;
      switch (communicationEncodingPresentCase_) {
        case 1:
          result = result && getCommunicationEncoding()
              .equals(other.getCommunicationEncoding());
          break;
        case 0:
        default:
      }
      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();
      hash = (37 * hash) + SEEDS_FIELD_NUMBER;
      hash = (53 * hash) + getSeeds().hashCode();
      hash = (37 * hash) + SUPPORTED_COMPRESSIONS_FIELD_NUMBER;
      hash = (53 * hash) + supportedCompressions_;
      switch (communicationEncodingPresentCase_) {
        case 1:
          hash = (37 * hash) + COMMUNICATION_ENCODING_FIELD_NUMBER;
          hash = (53 * hash) + getCommunicationEncoding().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Handshake parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Handshake parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Handshake parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Handshake parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Handshake parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Handshake parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Handshake parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Handshake 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 com.alibaba.otter.canal.protocol.CanalPacket.Handshake parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Handshake 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 com.alibaba.otter.canal.protocol.CanalPacket.Handshake parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Handshake parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.alibaba.otter.canal.protocol.CanalPacket.Handshake prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    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 com.alibaba.otter.canal.protocol.Handshake}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Handshake)
        com.alibaba.otter.canal.protocol.CanalPacket.HandshakeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Handshake_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Handshake_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.alibaba.otter.canal.protocol.CanalPacket.Handshake.class, com.alibaba.otter.canal.protocol.CanalPacket.Handshake.Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalPacket.Handshake.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        seeds_ = com.google.protobuf.ByteString.EMPTY;

        supportedCompressions_ = 0;

        communicationEncodingPresentCase_ = 0;
        communicationEncodingPresent_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Handshake_descriptor;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Handshake getDefaultInstanceForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.Handshake.getDefaultInstance();
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Handshake build() {
        com.alibaba.otter.canal.protocol.CanalPacket.Handshake result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Handshake buildPartial() {
        com.alibaba.otter.canal.protocol.CanalPacket.Handshake result = new com.alibaba.otter.canal.protocol.CanalPacket.Handshake(this);
        if (communicationEncodingPresentCase_ == 1) {
          result.communicationEncodingPresent_ = communicationEncodingPresent_;
        }
        result.seeds_ = seeds_;
        result.supportedCompressions_ = supportedCompressions_;
        result.communicationEncodingPresentCase_ = communicationEncodingPresentCase_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.alibaba.otter.canal.protocol.CanalPacket.Handshake) {
          return mergeFrom((com.alibaba.otter.canal.protocol.CanalPacket.Handshake)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.alibaba.otter.canal.protocol.CanalPacket.Handshake other) {
        if (other == com.alibaba.otter.canal.protocol.CanalPacket.Handshake.getDefaultInstance()) return this;
        if (other.getSeeds() != com.google.protobuf.ByteString.EMPTY) {
          setSeeds(other.getSeeds());
        }
        if (other.supportedCompressions_ != 0) {
          setSupportedCompressionsValue(other.getSupportedCompressionsValue());
        }
        switch (other.getCommunicationEncodingPresentCase()) {
          case COMMUNICATION_ENCODING: {
            communicationEncodingPresentCase_ = 1;
            communicationEncodingPresent_ = other.communicationEncodingPresent_;
            onChanged();
            break;
          }
          case COMMUNICATIONENCODINGPRESENT_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.alibaba.otter.canal.protocol.CanalPacket.Handshake parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.alibaba.otter.canal.protocol.CanalPacket.Handshake) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int communicationEncodingPresentCase_ = 0;
      private java.lang.Object communicationEncodingPresent_;
      public CommunicationEncodingPresentCase
          getCommunicationEncodingPresentCase() {
        return CommunicationEncodingPresentCase.forNumber(
            communicationEncodingPresentCase_);
      }

      public Builder clearCommunicationEncodingPresent() {
        communicationEncodingPresentCase_ = 0;
        communicationEncodingPresent_ = null;
        onChanged();
        return this;
      }


      /**
       * <code>string communication_encoding = 1;</code>
       */
      public java.lang.String getCommunicationEncoding() {
        java.lang.Object ref = "";
        if (communicationEncodingPresentCase_ == 1) {
          ref = communicationEncodingPresent_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (communicationEncodingPresentCase_ == 1) {
            communicationEncodingPresent_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string communication_encoding = 1;</code>
       */
      public com.google.protobuf.ByteString
          getCommunicationEncodingBytes() {
        java.lang.Object ref = "";
        if (communicationEncodingPresentCase_ == 1) {
          ref = communicationEncodingPresent_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (communicationEncodingPresentCase_ == 1) {
            communicationEncodingPresent_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string communication_encoding = 1;</code>
       */
      public Builder setCommunicationEncoding(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  communicationEncodingPresentCase_ = 1;
        communicationEncodingPresent_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string communication_encoding = 1;</code>
       */
      public Builder clearCommunicationEncoding() {
        if (communicationEncodingPresentCase_ == 1) {
          communicationEncodingPresentCase_ = 0;
          communicationEncodingPresent_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * <code>string communication_encoding = 1;</code>
       */
      public Builder setCommunicationEncodingBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        communicationEncodingPresentCase_ = 1;
        communicationEncodingPresent_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString seeds_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>bytes seeds = 2;</code>
       */
      public com.google.protobuf.ByteString getSeeds() {
        return seeds_;
      }
      /**
       * <code>bytes seeds = 2;</code>
       */
      public Builder setSeeds(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        seeds_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bytes seeds = 2;</code>
       */
      public Builder clearSeeds() {
        
        seeds_ = getDefaultInstance().getSeeds();
        onChanged();
        return this;
      }

      private int supportedCompressions_ = 0;
      /**
       * <code>.com.alibaba.otter.canal.protocol.Compression supported_compressions = 3;</code>
       */
      public int getSupportedCompressionsValue() {
        return supportedCompressions_;
      }
      /**
       * <code>.com.alibaba.otter.canal.protocol.Compression supported_compressions = 3;</code>
       */
      public Builder setSupportedCompressionsValue(int value) {
        supportedCompressions_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.com.alibaba.otter.canal.protocol.Compression supported_compressions = 3;</code>
       */
      public com.alibaba.otter.canal.protocol.CanalPacket.Compression getSupportedCompressions() {
        @SuppressWarnings("deprecation")
        com.alibaba.otter.canal.protocol.CanalPacket.Compression result = com.alibaba.otter.canal.protocol.CanalPacket.Compression.valueOf(supportedCompressions_);
        return result == null ? com.alibaba.otter.canal.protocol.CanalPacket.Compression.UNRECOGNIZED : result;
      }
      /**
       * <code>.com.alibaba.otter.canal.protocol.Compression supported_compressions = 3;</code>
       */
      public Builder setSupportedCompressions(com.alibaba.otter.canal.protocol.CanalPacket.Compression value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        supportedCompressions_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.com.alibaba.otter.canal.protocol.Compression supported_compressions = 3;</code>
       */
      public Builder clearSupportedCompressions() {
        
        supportedCompressions_ = 0;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.Handshake)
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.Handshake)
    private static final com.alibaba.otter.canal.protocol.CanalPacket.Handshake DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.alibaba.otter.canal.protocol.CanalPacket.Handshake();
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Handshake getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.alibaba.otter.canal.protocol.CanalPacket.Handshake getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ClientAuthOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.ClientAuth)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string username = 1;</code>
     */
    java.lang.String getUsername();
    /**
     * <code>string username = 1;</code>
     */
    com.google.protobuf.ByteString
        getUsernameBytes();

    /**
     * <pre>
     * hashed password with seeds from Handshake message
     * </pre>
     *
     * <code>bytes password = 2;</code>
     */
    com.google.protobuf.ByteString getPassword();

    /**
     * <pre>
     * in seconds
     * </pre>
     *
     * <code>int32 net_read_timeout = 3;</code>
     */
    int getNetReadTimeout();

    /**
     * <pre>
     * in seconds
     * </pre>
     *
     * <code>int32 net_write_timeout = 4;</code>
     */
    int getNetWriteTimeout();

    /**
     * <code>string destination = 5;</code>
     */
    java.lang.String getDestination();
    /**
     * <code>string destination = 5;</code>
     */
    com.google.protobuf.ByteString
        getDestinationBytes();

    /**
     * <code>string client_id = 6;</code>
     */
    java.lang.String getClientId();
    /**
     * <code>string client_id = 6;</code>
     */
    com.google.protobuf.ByteString
        getClientIdBytes();

    /**
     * <code>string filter = 7;</code>
     */
    java.lang.String getFilter();
    /**
     * <code>string filter = 7;</code>
     */
    com.google.protobuf.ByteString
        getFilterBytes();

    /**
     * <code>int64 start_timestamp = 8;</code>
     */
    long getStartTimestamp();

    public com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth.NetReadTimeoutPresentCase getNetReadTimeoutPresentCase();

    public com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth.NetWriteTimeoutPresentCase getNetWriteTimeoutPresentCase();
  }
  /**
   * <pre>
   * client authentication
   * </pre>
   *
   * Protobuf type {@code com.alibaba.otter.canal.protocol.ClientAuth}
   */
  public  static final class ClientAuth extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.ClientAuth)
      ClientAuthOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ClientAuth.newBuilder() to construct.
    private ClientAuth(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ClientAuth() {
      username_ = "";
      password_ = com.google.protobuf.ByteString.EMPTY;
      destination_ = "";
      clientId_ = "";
      filter_ = "";
      startTimestamp_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ClientAuth(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              username_ = s;
              break;
            }
            case 18: {

              password_ = input.readBytes();
              break;
            }
            case 24: {
              netReadTimeoutPresentCase_ = 3;
              netReadTimeoutPresent_ = input.readInt32();
              break;
            }
            case 32: {
              netWriteTimeoutPresentCase_ = 4;
              netWriteTimeoutPresent_ = input.readInt32();
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();

              destination_ = s;
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();

              clientId_ = s;
              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();

              filter_ = s;
              break;
            }
            case 64: {

              startTimestamp_ = input.readInt64();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              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 com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientAuth_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientAuth_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth.class, com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth.Builder.class);
    }

    private int netReadTimeoutPresentCase_ = 0;
    private java.lang.Object netReadTimeoutPresent_;
    public enum NetReadTimeoutPresentCase
        implements com.google.protobuf.Internal.EnumLite {
      NET_READ_TIMEOUT(3),
      NETREADTIMEOUTPRESENT_NOT_SET(0);
      private final int value;
      private NetReadTimeoutPresentCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static NetReadTimeoutPresentCase valueOf(int value) {
        return forNumber(value);
      }

      public static NetReadTimeoutPresentCase forNumber(int value) {
        switch (value) {
          case 3: return NET_READ_TIMEOUT;
          case 0: return NETREADTIMEOUTPRESENT_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public NetReadTimeoutPresentCase
    getNetReadTimeoutPresentCase() {
      return NetReadTimeoutPresentCase.forNumber(
          netReadTimeoutPresentCase_);
    }

    private int netWriteTimeoutPresentCase_ = 0;
    private java.lang.Object netWriteTimeoutPresent_;
    public enum NetWriteTimeoutPresentCase
        implements com.google.protobuf.Internal.EnumLite {
      NET_WRITE_TIMEOUT(4),
      NETWRITETIMEOUTPRESENT_NOT_SET(0);
      private final int value;
      private NetWriteTimeoutPresentCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static NetWriteTimeoutPresentCase valueOf(int value) {
        return forNumber(value);
      }

      public static NetWriteTimeoutPresentCase forNumber(int value) {
        switch (value) {
          case 4: return NET_WRITE_TIMEOUT;
          case 0: return NETWRITETIMEOUTPRESENT_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public NetWriteTimeoutPresentCase
    getNetWriteTimeoutPresentCase() {
      return NetWriteTimeoutPresentCase.forNumber(
          netWriteTimeoutPresentCase_);
    }

    public static final int USERNAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object username_;
    /**
     * <code>string username = 1;</code>
     */
    public java.lang.String getUsername() {
      java.lang.Object ref = username_;
      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();
        username_ = s;
        return s;
      }
    }
    /**
     * <code>string username = 1;</code>
     */
    public com.google.protobuf.ByteString
        getUsernameBytes() {
      java.lang.Object ref = username_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        username_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PASSWORD_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString password_;
    /**
     * <pre>
     * hashed password with seeds from Handshake message
     * </pre>
     *
     * <code>bytes password = 2;</code>
     */
    public com.google.protobuf.ByteString getPassword() {
      return password_;
    }

    public static final int NET_READ_TIMEOUT_FIELD_NUMBER = 3;
    /**
     * <pre>
     * in seconds
     * </pre>
     *
     * <code>int32 net_read_timeout = 3;</code>
     */
    public int getNetReadTimeout() {
      if (netReadTimeoutPresentCase_ == 3) {
        return (java.lang.Integer) netReadTimeoutPresent_;
      }
      return 0;
    }

    public static final int NET_WRITE_TIMEOUT_FIELD_NUMBER = 4;
    /**
     * <pre>
     * in seconds
     * </pre>
     *
     * <code>int32 net_write_timeout = 4;</code>
     */
    public int getNetWriteTimeout() {
      if (netWriteTimeoutPresentCase_ == 4) {
        return (java.lang.Integer) netWriteTimeoutPresent_;
      }
      return 0;
    }

    public static final int DESTINATION_FIELD_NUMBER = 5;
    private volatile java.lang.Object destination_;
    /**
     * <code>string destination = 5;</code>
     */
    public java.lang.String getDestination() {
      java.lang.Object ref = destination_;
      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();
        destination_ = s;
        return s;
      }
    }
    /**
     * <code>string destination = 5;</code>
     */
    public com.google.protobuf.ByteString
        getDestinationBytes() {
      java.lang.Object ref = destination_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        destination_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CLIENT_ID_FIELD_NUMBER = 6;
    private volatile java.lang.Object clientId_;
    /**
     * <code>string client_id = 6;</code>
     */
    public java.lang.String getClientId() {
      java.lang.Object ref = clientId_;
      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();
        clientId_ = s;
        return s;
      }
    }
    /**
     * <code>string client_id = 6;</code>
     */
    public com.google.protobuf.ByteString
        getClientIdBytes() {
      java.lang.Object ref = clientId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        clientId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FILTER_FIELD_NUMBER = 7;
    private volatile java.lang.Object filter_;
    /**
     * <code>string filter = 7;</code>
     */
    public java.lang.String getFilter() {
      java.lang.Object ref = filter_;
      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();
        filter_ = s;
        return s;
      }
    }
    /**
     * <code>string filter = 7;</code>
     */
    public com.google.protobuf.ByteString
        getFilterBytes() {
      java.lang.Object ref = filter_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        filter_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int START_TIMESTAMP_FIELD_NUMBER = 8;
    private long startTimestamp_;
    /**
     * <code>int64 start_timestamp = 8;</code>
     */
    public long getStartTimestamp() {
      return startTimestamp_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getUsernameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, username_);
      }
      if (!password_.isEmpty()) {
        output.writeBytes(2, password_);
      }
      if (netReadTimeoutPresentCase_ == 3) {
        output.writeInt32(
            3, (int)((java.lang.Integer) netReadTimeoutPresent_));
      }
      if (netWriteTimeoutPresentCase_ == 4) {
        output.writeInt32(
            4, (int)((java.lang.Integer) netWriteTimeoutPresent_));
      }
      if (!getDestinationBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, destination_);
      }
      if (!getClientIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, clientId_);
      }
      if (!getFilterBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, filter_);
      }
      if (startTimestamp_ != 0L) {
        output.writeInt64(8, startTimestamp_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getUsernameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, username_);
      }
      if (!password_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, password_);
      }
      if (netReadTimeoutPresentCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(
              3, (int)((java.lang.Integer) netReadTimeoutPresent_));
      }
      if (netWriteTimeoutPresentCase_ == 4) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(
              4, (int)((java.lang.Integer) netWriteTimeoutPresent_));
      }
      if (!getDestinationBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, destination_);
      }
      if (!getClientIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, clientId_);
      }
      if (!getFilterBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, filter_);
      }
      if (startTimestamp_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(8, startTimestamp_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth)) {
        return super.equals(obj);
      }
      com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth other = (com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth) obj;

      boolean result = true;
      result = result && getUsername()
          .equals(other.getUsername());
      result = result && getPassword()
          .equals(other.getPassword());
      result = result && getDestination()
          .equals(other.getDestination());
      result = result && getClientId()
          .equals(other.getClientId());
      result = result && getFilter()
          .equals(other.getFilter());
      result = result && (getStartTimestamp()
          == other.getStartTimestamp());
      result = result && getNetReadTimeoutPresentCase().equals(
          other.getNetReadTimeoutPresentCase());
      if (!result) return false;
      switch (netReadTimeoutPresentCase_) {
        case 3:
          result = result && (getNetReadTimeout()
              == other.getNetReadTimeout());
          break;
        case 0:
        default:
      }
      result = result && getNetWriteTimeoutPresentCase().equals(
          other.getNetWriteTimeoutPresentCase());
      if (!result) return false;
      switch (netWriteTimeoutPresentCase_) {
        case 4:
          result = result && (getNetWriteTimeout()
              == other.getNetWriteTimeout());
          break;
        case 0:
        default:
      }
      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();
      hash = (37 * hash) + USERNAME_FIELD_NUMBER;
      hash = (53 * hash) + getUsername().hashCode();
      hash = (37 * hash) + PASSWORD_FIELD_NUMBER;
      hash = (53 * hash) + getPassword().hashCode();
      hash = (37 * hash) + DESTINATION_FIELD_NUMBER;
      hash = (53 * hash) + getDestination().hashCode();
      hash = (37 * hash) + CLIENT_ID_FIELD_NUMBER;
      hash = (53 * hash) + getClientId().hashCode();
      hash = (37 * hash) + FILTER_FIELD_NUMBER;
      hash = (53 * hash) + getFilter().hashCode();
      hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getStartTimestamp());
      switch (netReadTimeoutPresentCase_) {
        case 3:
          hash = (37 * hash) + NET_READ_TIMEOUT_FIELD_NUMBER;
          hash = (53 * hash) + getNetReadTimeout();
          break;
        case 0:
        default:
      }
      switch (netWriteTimeoutPresentCase_) {
        case 4:
          hash = (37 * hash) + NET_WRITE_TIMEOUT_FIELD_NUMBER;
          hash = (53 * hash) + getNetWriteTimeout();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth 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 com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth 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 com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    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>
     * client authentication
     * </pre>
     *
     * Protobuf type {@code com.alibaba.otter.canal.protocol.ClientAuth}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.ClientAuth)
        com.alibaba.otter.canal.protocol.CanalPacket.ClientAuthOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientAuth_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientAuth_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth.class, com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth.Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        username_ = "";

        password_ = com.google.protobuf.ByteString.EMPTY;

        destination_ = "";

        clientId_ = "";

        filter_ = "";

        startTimestamp_ = 0L;

        netReadTimeoutPresentCase_ = 0;
        netReadTimeoutPresent_ = null;
        netWriteTimeoutPresentCase_ = 0;
        netWriteTimeoutPresent_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientAuth_descriptor;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth getDefaultInstanceForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth.getDefaultInstance();
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth build() {
        com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth buildPartial() {
        com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth result = new com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth(this);
        result.username_ = username_;
        result.password_ = password_;
        if (netReadTimeoutPresentCase_ == 3) {
          result.netReadTimeoutPresent_ = netReadTimeoutPresent_;
        }
        if (netWriteTimeoutPresentCase_ == 4) {
          result.netWriteTimeoutPresent_ = netWriteTimeoutPresent_;
        }
        result.destination_ = destination_;
        result.clientId_ = clientId_;
        result.filter_ = filter_;
        result.startTimestamp_ = startTimestamp_;
        result.netReadTimeoutPresentCase_ = netReadTimeoutPresentCase_;
        result.netWriteTimeoutPresentCase_ = netWriteTimeoutPresentCase_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth) {
          return mergeFrom((com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth other) {
        if (other == com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth.getDefaultInstance()) return this;
        if (!other.getUsername().isEmpty()) {
          username_ = other.username_;
          onChanged();
        }
        if (other.getPassword() != com.google.protobuf.ByteString.EMPTY) {
          setPassword(other.getPassword());
        }
        if (!other.getDestination().isEmpty()) {
          destination_ = other.destination_;
          onChanged();
        }
        if (!other.getClientId().isEmpty()) {
          clientId_ = other.clientId_;
          onChanged();
        }
        if (!other.getFilter().isEmpty()) {
          filter_ = other.filter_;
          onChanged();
        }
        if (other.getStartTimestamp() != 0L) {
          setStartTimestamp(other.getStartTimestamp());
        }
        switch (other.getNetReadTimeoutPresentCase()) {
          case NET_READ_TIMEOUT: {
            setNetReadTimeout(other.getNetReadTimeout());
            break;
          }
          case NETREADTIMEOUTPRESENT_NOT_SET: {
            break;
          }
        }
        switch (other.getNetWriteTimeoutPresentCase()) {
          case NET_WRITE_TIMEOUT: {
            setNetWriteTimeout(other.getNetWriteTimeout());
            break;
          }
          case NETWRITETIMEOUTPRESENT_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int netReadTimeoutPresentCase_ = 0;
      private java.lang.Object netReadTimeoutPresent_;
      public NetReadTimeoutPresentCase
          getNetReadTimeoutPresentCase() {
        return NetReadTimeoutPresentCase.forNumber(
            netReadTimeoutPresentCase_);
      }

      public Builder clearNetReadTimeoutPresent() {
        netReadTimeoutPresentCase_ = 0;
        netReadTimeoutPresent_ = null;
        onChanged();
        return this;
      }

      private int netWriteTimeoutPresentCase_ = 0;
      private java.lang.Object netWriteTimeoutPresent_;
      public NetWriteTimeoutPresentCase
          getNetWriteTimeoutPresentCase() {
        return NetWriteTimeoutPresentCase.forNumber(
            netWriteTimeoutPresentCase_);
      }

      public Builder clearNetWriteTimeoutPresent() {
        netWriteTimeoutPresentCase_ = 0;
        netWriteTimeoutPresent_ = null;
        onChanged();
        return this;
      }


      private java.lang.Object username_ = "";
      /**
       * <code>string username = 1;</code>
       */
      public java.lang.String getUsername() {
        java.lang.Object ref = username_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          username_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string username = 1;</code>
       */
      public com.google.protobuf.ByteString
          getUsernameBytes() {
        java.lang.Object ref = username_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          username_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string username = 1;</code>
       */
      public Builder setUsername(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        username_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string username = 1;</code>
       */
      public Builder clearUsername() {
        
        username_ = getDefaultInstance().getUsername();
        onChanged();
        return this;
      }
      /**
       * <code>string username = 1;</code>
       */
      public Builder setUsernameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        username_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString password_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       * hashed password with seeds from Handshake message
       * </pre>
       *
       * <code>bytes password = 2;</code>
       */
      public com.google.protobuf.ByteString getPassword() {
        return password_;
      }
      /**
       * <pre>
       * hashed password with seeds from Handshake message
       * </pre>
       *
       * <code>bytes password = 2;</code>
       */
      public Builder setPassword(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        password_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * hashed password with seeds from Handshake message
       * </pre>
       *
       * <code>bytes password = 2;</code>
       */
      public Builder clearPassword() {
        
        password_ = getDefaultInstance().getPassword();
        onChanged();
        return this;
      }

      /**
       * <pre>
       * in seconds
       * </pre>
       *
       * <code>int32 net_read_timeout = 3;</code>
       */
      public int getNetReadTimeout() {
        if (netReadTimeoutPresentCase_ == 3) {
          return (java.lang.Integer) netReadTimeoutPresent_;
        }
        return 0;
      }
      /**
       * <pre>
       * in seconds
       * </pre>
       *
       * <code>int32 net_read_timeout = 3;</code>
       */
      public Builder setNetReadTimeout(int value) {
        netReadTimeoutPresentCase_ = 3;
        netReadTimeoutPresent_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * in seconds
       * </pre>
       *
       * <code>int32 net_read_timeout = 3;</code>
       */
      public Builder clearNetReadTimeout() {
        if (netReadTimeoutPresentCase_ == 3) {
          netReadTimeoutPresentCase_ = 0;
          netReadTimeoutPresent_ = null;
          onChanged();
        }
        return this;
      }

      /**
       * <pre>
       * in seconds
       * </pre>
       *
       * <code>int32 net_write_timeout = 4;</code>
       */
      public int getNetWriteTimeout() {
        if (netWriteTimeoutPresentCase_ == 4) {
          return (java.lang.Integer) netWriteTimeoutPresent_;
        }
        return 0;
      }
      /**
       * <pre>
       * in seconds
       * </pre>
       *
       * <code>int32 net_write_timeout = 4;</code>
       */
      public Builder setNetWriteTimeout(int value) {
        netWriteTimeoutPresentCase_ = 4;
        netWriteTimeoutPresent_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * in seconds
       * </pre>
       *
       * <code>int32 net_write_timeout = 4;</code>
       */
      public Builder clearNetWriteTimeout() {
        if (netWriteTimeoutPresentCase_ == 4) {
          netWriteTimeoutPresentCase_ = 0;
          netWriteTimeoutPresent_ = null;
          onChanged();
        }
        return this;
      }

      private java.lang.Object destination_ = "";
      /**
       * <code>string destination = 5;</code>
       */
      public java.lang.String getDestination() {
        java.lang.Object ref = destination_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          destination_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string destination = 5;</code>
       */
      public com.google.protobuf.ByteString
          getDestinationBytes() {
        java.lang.Object ref = destination_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          destination_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string destination = 5;</code>
       */
      public Builder setDestination(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        destination_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string destination = 5;</code>
       */
      public Builder clearDestination() {
        
        destination_ = getDefaultInstance().getDestination();
        onChanged();
        return this;
      }
      /**
       * <code>string destination = 5;</code>
       */
      public Builder setDestinationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        destination_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object clientId_ = "";
      /**
       * <code>string client_id = 6;</code>
       */
      public java.lang.String getClientId() {
        java.lang.Object ref = clientId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          clientId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string client_id = 6;</code>
       */
      public com.google.protobuf.ByteString
          getClientIdBytes() {
        java.lang.Object ref = clientId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          clientId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string client_id = 6;</code>
       */
      public Builder setClientId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        clientId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 6;</code>
       */
      public Builder clearClientId() {
        
        clientId_ = getDefaultInstance().getClientId();
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 6;</code>
       */
      public Builder setClientIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        clientId_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object filter_ = "";
      /**
       * <code>string filter = 7;</code>
       */
      public java.lang.String getFilter() {
        java.lang.Object ref = filter_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          filter_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string filter = 7;</code>
       */
      public com.google.protobuf.ByteString
          getFilterBytes() {
        java.lang.Object ref = filter_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          filter_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string filter = 7;</code>
       */
      public Builder setFilter(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        filter_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string filter = 7;</code>
       */
      public Builder clearFilter() {
        
        filter_ = getDefaultInstance().getFilter();
        onChanged();
        return this;
      }
      /**
       * <code>string filter = 7;</code>
       */
      public Builder setFilterBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        filter_ = value;
        onChanged();
        return this;
      }

      private long startTimestamp_ ;
      /**
       * <code>int64 start_timestamp = 8;</code>
       */
      public long getStartTimestamp() {
        return startTimestamp_;
      }
      /**
       * <code>int64 start_timestamp = 8;</code>
       */
      public Builder setStartTimestamp(long value) {
        
        startTimestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 start_timestamp = 8;</code>
       */
      public Builder clearStartTimestamp() {
        
        startTimestamp_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.ClientAuth)
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.ClientAuth)
    private static final com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth();
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.alibaba.otter.canal.protocol.CanalPacket.ClientAuth getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AckOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Ack)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>int32 error_code = 1;</code>
     */
    int getErrorCode();

    /**
     * <pre>
     * if something like compression is not supported, erorr_message will tell about it.
     * </pre>
     *
     * <code>string error_message = 2;</code>
     */
    java.lang.String getErrorMessage();
    /**
     * <pre>
     * if something like compression is not supported, erorr_message will tell about it.
     * </pre>
     *
     * <code>string error_message = 2;</code>
     */
    com.google.protobuf.ByteString
        getErrorMessageBytes();

    public com.alibaba.otter.canal.protocol.CanalPacket.Ack.ErrorCodePresentCase getErrorCodePresentCase();
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.Ack}
   */
  public  static final class Ack extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Ack)
      AckOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Ack.newBuilder() to construct.
    private Ack(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Ack() {
      errorMessage_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Ack(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {
              errorCodePresentCase_ = 1;
              errorCodePresent_ = input.readInt32();
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              errorMessage_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              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 com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Ack_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Ack_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.alibaba.otter.canal.protocol.CanalPacket.Ack.class, com.alibaba.otter.canal.protocol.CanalPacket.Ack.Builder.class);
    }

    private int errorCodePresentCase_ = 0;
    private java.lang.Object errorCodePresent_;
    public enum ErrorCodePresentCase
        implements com.google.protobuf.Internal.EnumLite {
      ERROR_CODE(1),
      ERRORCODEPRESENT_NOT_SET(0);
      private final int value;
      private ErrorCodePresentCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ErrorCodePresentCase valueOf(int value) {
        return forNumber(value);
      }

      public static ErrorCodePresentCase forNumber(int value) {
        switch (value) {
          case 1: return ERROR_CODE;
          case 0: return ERRORCODEPRESENT_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public ErrorCodePresentCase
    getErrorCodePresentCase() {
      return ErrorCodePresentCase.forNumber(
          errorCodePresentCase_);
    }

    public static final int ERROR_CODE_FIELD_NUMBER = 1;
    /**
     * <code>int32 error_code = 1;</code>
     */
    public int getErrorCode() {
      if (errorCodePresentCase_ == 1) {
        return (java.lang.Integer) errorCodePresent_;
      }
      return 0;
    }

    public static final int ERROR_MESSAGE_FIELD_NUMBER = 2;
    private volatile java.lang.Object errorMessage_;
    /**
     * <pre>
     * if something like compression is not supported, erorr_message will tell about it.
     * </pre>
     *
     * <code>string error_message = 2;</code>
     */
    public java.lang.String getErrorMessage() {
      java.lang.Object ref = errorMessage_;
      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();
        errorMessage_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * if something like compression is not supported, erorr_message will tell about it.
     * </pre>
     *
     * <code>string error_message = 2;</code>
     */
    public com.google.protobuf.ByteString
        getErrorMessageBytes() {
      java.lang.Object ref = errorMessage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        errorMessage_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (errorCodePresentCase_ == 1) {
        output.writeInt32(
            1, (int)((java.lang.Integer) errorCodePresent_));
      }
      if (!getErrorMessageBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, errorMessage_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (errorCodePresentCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(
              1, (int)((java.lang.Integer) errorCodePresent_));
      }
      if (!getErrorMessageBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, errorMessage_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.alibaba.otter.canal.protocol.CanalPacket.Ack)) {
        return super.equals(obj);
      }
      com.alibaba.otter.canal.protocol.CanalPacket.Ack other = (com.alibaba.otter.canal.protocol.CanalPacket.Ack) obj;

      boolean result = true;
      result = result && getErrorMessage()
          .equals(other.getErrorMessage());
      result = result && getErrorCodePresentCase().equals(
          other.getErrorCodePresentCase());
      if (!result) return false;
      switch (errorCodePresentCase_) {
        case 1:
          result = result && (getErrorCode()
              == other.getErrorCode());
          break;
        case 0:
        default:
      }
      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();
      hash = (37 * hash) + ERROR_MESSAGE_FIELD_NUMBER;
      hash = (53 * hash) + getErrorMessage().hashCode();
      switch (errorCodePresentCase_) {
        case 1:
          hash = (37 * hash) + ERROR_CODE_FIELD_NUMBER;
          hash = (53 * hash) + getErrorCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Ack parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Ack parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Ack parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Ack parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Ack parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Ack parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Ack parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Ack 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 com.alibaba.otter.canal.protocol.CanalPacket.Ack parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Ack 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 com.alibaba.otter.canal.protocol.CanalPacket.Ack parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Ack parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.alibaba.otter.canal.protocol.CanalPacket.Ack prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    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 com.alibaba.otter.canal.protocol.Ack}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Ack)
        com.alibaba.otter.canal.protocol.CanalPacket.AckOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Ack_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Ack_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.alibaba.otter.canal.protocol.CanalPacket.Ack.class, com.alibaba.otter.canal.protocol.CanalPacket.Ack.Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalPacket.Ack.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        errorMessage_ = "";

        errorCodePresentCase_ = 0;
        errorCodePresent_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Ack_descriptor;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Ack getDefaultInstanceForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.Ack.getDefaultInstance();
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Ack build() {
        com.alibaba.otter.canal.protocol.CanalPacket.Ack result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Ack buildPartial() {
        com.alibaba.otter.canal.protocol.CanalPacket.Ack result = new com.alibaba.otter.canal.protocol.CanalPacket.Ack(this);
        if (errorCodePresentCase_ == 1) {
          result.errorCodePresent_ = errorCodePresent_;
        }
        result.errorMessage_ = errorMessage_;
        result.errorCodePresentCase_ = errorCodePresentCase_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.alibaba.otter.canal.protocol.CanalPacket.Ack) {
          return mergeFrom((com.alibaba.otter.canal.protocol.CanalPacket.Ack)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.alibaba.otter.canal.protocol.CanalPacket.Ack other) {
        if (other == com.alibaba.otter.canal.protocol.CanalPacket.Ack.getDefaultInstance()) return this;
        if (!other.getErrorMessage().isEmpty()) {
          errorMessage_ = other.errorMessage_;
          onChanged();
        }
        switch (other.getErrorCodePresentCase()) {
          case ERROR_CODE: {
            setErrorCode(other.getErrorCode());
            break;
          }
          case ERRORCODEPRESENT_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.alibaba.otter.canal.protocol.CanalPacket.Ack parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.alibaba.otter.canal.protocol.CanalPacket.Ack) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int errorCodePresentCase_ = 0;
      private java.lang.Object errorCodePresent_;
      public ErrorCodePresentCase
          getErrorCodePresentCase() {
        return ErrorCodePresentCase.forNumber(
            errorCodePresentCase_);
      }

      public Builder clearErrorCodePresent() {
        errorCodePresentCase_ = 0;
        errorCodePresent_ = null;
        onChanged();
        return this;
      }


      /**
       * <code>int32 error_code = 1;</code>
       */
      public int getErrorCode() {
        if (errorCodePresentCase_ == 1) {
          return (java.lang.Integer) errorCodePresent_;
        }
        return 0;
      }
      /**
       * <code>int32 error_code = 1;</code>
       */
      public Builder setErrorCode(int value) {
        errorCodePresentCase_ = 1;
        errorCodePresent_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 error_code = 1;</code>
       */
      public Builder clearErrorCode() {
        if (errorCodePresentCase_ == 1) {
          errorCodePresentCase_ = 0;
          errorCodePresent_ = null;
          onChanged();
        }
        return this;
      }

      private java.lang.Object errorMessage_ = "";
      /**
       * <pre>
       * if something like compression is not supported, erorr_message will tell about it.
       * </pre>
       *
       * <code>string error_message = 2;</code>
       */
      public java.lang.String getErrorMessage() {
        java.lang.Object ref = errorMessage_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          errorMessage_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * if something like compression is not supported, erorr_message will tell about it.
       * </pre>
       *
       * <code>string error_message = 2;</code>
       */
      public com.google.protobuf.ByteString
          getErrorMessageBytes() {
        java.lang.Object ref = errorMessage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          errorMessage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * if something like compression is not supported, erorr_message will tell about it.
       * </pre>
       *
       * <code>string error_message = 2;</code>
       */
      public Builder setErrorMessage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        errorMessage_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if something like compression is not supported, erorr_message will tell about it.
       * </pre>
       *
       * <code>string error_message = 2;</code>
       */
      public Builder clearErrorMessage() {
        
        errorMessage_ = getDefaultInstance().getErrorMessage();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if something like compression is not supported, erorr_message will tell about it.
       * </pre>
       *
       * <code>string error_message = 2;</code>
       */
      public Builder setErrorMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        errorMessage_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.Ack)
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.Ack)
    private static final com.alibaba.otter.canal.protocol.CanalPacket.Ack DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.alibaba.otter.canal.protocol.CanalPacket.Ack();
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Ack getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.alibaba.otter.canal.protocol.CanalPacket.Ack getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ClientAckOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.ClientAck)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string destination = 1;</code>
     */
    java.lang.String getDestination();
    /**
     * <code>string destination = 1;</code>
     */
    com.google.protobuf.ByteString
        getDestinationBytes();

    /**
     * <code>string client_id = 2;</code>
     */
    java.lang.String getClientId();
    /**
     * <code>string client_id = 2;</code>
     */
    com.google.protobuf.ByteString
        getClientIdBytes();

    /**
     * <code>int64 batch_id = 3;</code>
     */
    long getBatchId();
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.ClientAck}
   */
  public  static final class ClientAck extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.ClientAck)
      ClientAckOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ClientAck.newBuilder() to construct.
    private ClientAck(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ClientAck() {
      destination_ = "";
      clientId_ = "";
      batchId_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ClientAck(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              destination_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              clientId_ = s;
              break;
            }
            case 24: {

              batchId_ = input.readInt64();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              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 com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientAck_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientAck_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.alibaba.otter.canal.protocol.CanalPacket.ClientAck.class, com.alibaba.otter.canal.protocol.CanalPacket.ClientAck.Builder.class);
    }

    public static final int DESTINATION_FIELD_NUMBER = 1;
    private volatile java.lang.Object destination_;
    /**
     * <code>string destination = 1;</code>
     */
    public java.lang.String getDestination() {
      java.lang.Object ref = destination_;
      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();
        destination_ = s;
        return s;
      }
    }
    /**
     * <code>string destination = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDestinationBytes() {
      java.lang.Object ref = destination_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        destination_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CLIENT_ID_FIELD_NUMBER = 2;
    private volatile java.lang.Object clientId_;
    /**
     * <code>string client_id = 2;</code>
     */
    public java.lang.String getClientId() {
      java.lang.Object ref = clientId_;
      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();
        clientId_ = s;
        return s;
      }
    }
    /**
     * <code>string client_id = 2;</code>
     */
    public com.google.protobuf.ByteString
        getClientIdBytes() {
      java.lang.Object ref = clientId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        clientId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int BATCH_ID_FIELD_NUMBER = 3;
    private long batchId_;
    /**
     * <code>int64 batch_id = 3;</code>
     */
    public long getBatchId() {
      return batchId_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getDestinationBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, destination_);
      }
      if (!getClientIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, clientId_);
      }
      if (batchId_ != 0L) {
        output.writeInt64(3, batchId_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getDestinationBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, destination_);
      }
      if (!getClientIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, clientId_);
      }
      if (batchId_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, batchId_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.alibaba.otter.canal.protocol.CanalPacket.ClientAck)) {
        return super.equals(obj);
      }
      com.alibaba.otter.canal.protocol.CanalPacket.ClientAck other = (com.alibaba.otter.canal.protocol.CanalPacket.ClientAck) obj;

      boolean result = true;
      result = result && getDestination()
          .equals(other.getDestination());
      result = result && getClientId()
          .equals(other.getClientId());
      result = result && (getBatchId()
          == other.getBatchId());
      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();
      hash = (37 * hash) + DESTINATION_FIELD_NUMBER;
      hash = (53 * hash) + getDestination().hashCode();
      hash = (37 * hash) + CLIENT_ID_FIELD_NUMBER;
      hash = (53 * hash) + getClientId().hashCode();
      hash = (37 * hash) + BATCH_ID_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getBatchId());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAck parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAck parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAck parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAck parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAck parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAck parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAck parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAck 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 com.alibaba.otter.canal.protocol.CanalPacket.ClientAck parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAck 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 com.alibaba.otter.canal.protocol.CanalPacket.ClientAck parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAck parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.alibaba.otter.canal.protocol.CanalPacket.ClientAck prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    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 com.alibaba.otter.canal.protocol.ClientAck}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.ClientAck)
        com.alibaba.otter.canal.protocol.CanalPacket.ClientAckOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientAck_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientAck_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.alibaba.otter.canal.protocol.CanalPacket.ClientAck.class, com.alibaba.otter.canal.protocol.CanalPacket.ClientAck.Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalPacket.ClientAck.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        destination_ = "";

        clientId_ = "";

        batchId_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientAck_descriptor;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.ClientAck getDefaultInstanceForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.ClientAck.getDefaultInstance();
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.ClientAck build() {
        com.alibaba.otter.canal.protocol.CanalPacket.ClientAck result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.ClientAck buildPartial() {
        com.alibaba.otter.canal.protocol.CanalPacket.ClientAck result = new com.alibaba.otter.canal.protocol.CanalPacket.ClientAck(this);
        result.destination_ = destination_;
        result.clientId_ = clientId_;
        result.batchId_ = batchId_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.alibaba.otter.canal.protocol.CanalPacket.ClientAck) {
          return mergeFrom((com.alibaba.otter.canal.protocol.CanalPacket.ClientAck)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.alibaba.otter.canal.protocol.CanalPacket.ClientAck other) {
        if (other == com.alibaba.otter.canal.protocol.CanalPacket.ClientAck.getDefaultInstance()) return this;
        if (!other.getDestination().isEmpty()) {
          destination_ = other.destination_;
          onChanged();
        }
        if (!other.getClientId().isEmpty()) {
          clientId_ = other.clientId_;
          onChanged();
        }
        if (other.getBatchId() != 0L) {
          setBatchId(other.getBatchId());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.alibaba.otter.canal.protocol.CanalPacket.ClientAck parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.alibaba.otter.canal.protocol.CanalPacket.ClientAck) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object destination_ = "";
      /**
       * <code>string destination = 1;</code>
       */
      public java.lang.String getDestination() {
        java.lang.Object ref = destination_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          destination_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string destination = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDestinationBytes() {
        java.lang.Object ref = destination_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          destination_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder setDestination(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        destination_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder clearDestination() {
        
        destination_ = getDefaultInstance().getDestination();
        onChanged();
        return this;
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder setDestinationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        destination_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object clientId_ = "";
      /**
       * <code>string client_id = 2;</code>
       */
      public java.lang.String getClientId() {
        java.lang.Object ref = clientId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          clientId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public com.google.protobuf.ByteString
          getClientIdBytes() {
        java.lang.Object ref = clientId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          clientId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder setClientId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        clientId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder clearClientId() {
        
        clientId_ = getDefaultInstance().getClientId();
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder setClientIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        clientId_ = value;
        onChanged();
        return this;
      }

      private long batchId_ ;
      /**
       * <code>int64 batch_id = 3;</code>
       */
      public long getBatchId() {
        return batchId_;
      }
      /**
       * <code>int64 batch_id = 3;</code>
       */
      public Builder setBatchId(long value) {
        
        batchId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 batch_id = 3;</code>
       */
      public Builder clearBatchId() {
        
        batchId_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.ClientAck)
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.ClientAck)
    private static final com.alibaba.otter.canal.protocol.CanalPacket.ClientAck DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.alibaba.otter.canal.protocol.CanalPacket.ClientAck();
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientAck getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.alibaba.otter.canal.protocol.CanalPacket.ClientAck getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SubOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Sub)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string destination = 1;</code>
     */
    java.lang.String getDestination();
    /**
     * <code>string destination = 1;</code>
     */
    com.google.protobuf.ByteString
        getDestinationBytes();

    /**
     * <code>string client_id = 2;</code>
     */
    java.lang.String getClientId();
    /**
     * <code>string client_id = 2;</code>
     */
    com.google.protobuf.ByteString
        getClientIdBytes();

    /**
     * <code>string filter = 7;</code>
     */
    java.lang.String getFilter();
    /**
     * <code>string filter = 7;</code>
     */
    com.google.protobuf.ByteString
        getFilterBytes();
  }
  /**
   * <pre>
   * subscription
   * </pre>
   *
   * Protobuf type {@code com.alibaba.otter.canal.protocol.Sub}
   */
  public  static final class Sub extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Sub)
      SubOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Sub.newBuilder() to construct.
    private Sub(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Sub() {
      destination_ = "";
      clientId_ = "";
      filter_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Sub(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              destination_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              clientId_ = s;
              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();

              filter_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              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 com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Sub_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Sub_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.alibaba.otter.canal.protocol.CanalPacket.Sub.class, com.alibaba.otter.canal.protocol.CanalPacket.Sub.Builder.class);
    }

    public static final int DESTINATION_FIELD_NUMBER = 1;
    private volatile java.lang.Object destination_;
    /**
     * <code>string destination = 1;</code>
     */
    public java.lang.String getDestination() {
      java.lang.Object ref = destination_;
      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();
        destination_ = s;
        return s;
      }
    }
    /**
     * <code>string destination = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDestinationBytes() {
      java.lang.Object ref = destination_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        destination_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CLIENT_ID_FIELD_NUMBER = 2;
    private volatile java.lang.Object clientId_;
    /**
     * <code>string client_id = 2;</code>
     */
    public java.lang.String getClientId() {
      java.lang.Object ref = clientId_;
      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();
        clientId_ = s;
        return s;
      }
    }
    /**
     * <code>string client_id = 2;</code>
     */
    public com.google.protobuf.ByteString
        getClientIdBytes() {
      java.lang.Object ref = clientId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        clientId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FILTER_FIELD_NUMBER = 7;
    private volatile java.lang.Object filter_;
    /**
     * <code>string filter = 7;</code>
     */
    public java.lang.String getFilter() {
      java.lang.Object ref = filter_;
      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();
        filter_ = s;
        return s;
      }
    }
    /**
     * <code>string filter = 7;</code>
     */
    public com.google.protobuf.ByteString
        getFilterBytes() {
      java.lang.Object ref = filter_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        filter_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getDestinationBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, destination_);
      }
      if (!getClientIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, clientId_);
      }
      if (!getFilterBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, filter_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getDestinationBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, destination_);
      }
      if (!getClientIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, clientId_);
      }
      if (!getFilterBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, filter_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.alibaba.otter.canal.protocol.CanalPacket.Sub)) {
        return super.equals(obj);
      }
      com.alibaba.otter.canal.protocol.CanalPacket.Sub other = (com.alibaba.otter.canal.protocol.CanalPacket.Sub) obj;

      boolean result = true;
      result = result && getDestination()
          .equals(other.getDestination());
      result = result && getClientId()
          .equals(other.getClientId());
      result = result && getFilter()
          .equals(other.getFilter());
      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();
      hash = (37 * hash) + DESTINATION_FIELD_NUMBER;
      hash = (53 * hash) + getDestination().hashCode();
      hash = (37 * hash) + CLIENT_ID_FIELD_NUMBER;
      hash = (53 * hash) + getClientId().hashCode();
      hash = (37 * hash) + FILTER_FIELD_NUMBER;
      hash = (53 * hash) + getFilter().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Sub parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Sub parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Sub parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Sub parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Sub parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Sub parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Sub parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Sub 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 com.alibaba.otter.canal.protocol.CanalPacket.Sub parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Sub 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 com.alibaba.otter.canal.protocol.CanalPacket.Sub parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Sub parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.alibaba.otter.canal.protocol.CanalPacket.Sub prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    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>
     * subscription
     * </pre>
     *
     * Protobuf type {@code com.alibaba.otter.canal.protocol.Sub}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Sub)
        com.alibaba.otter.canal.protocol.CanalPacket.SubOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Sub_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Sub_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.alibaba.otter.canal.protocol.CanalPacket.Sub.class, com.alibaba.otter.canal.protocol.CanalPacket.Sub.Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalPacket.Sub.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        destination_ = "";

        clientId_ = "";

        filter_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Sub_descriptor;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Sub getDefaultInstanceForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.Sub.getDefaultInstance();
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Sub build() {
        com.alibaba.otter.canal.protocol.CanalPacket.Sub result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Sub buildPartial() {
        com.alibaba.otter.canal.protocol.CanalPacket.Sub result = new com.alibaba.otter.canal.protocol.CanalPacket.Sub(this);
        result.destination_ = destination_;
        result.clientId_ = clientId_;
        result.filter_ = filter_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.alibaba.otter.canal.protocol.CanalPacket.Sub) {
          return mergeFrom((com.alibaba.otter.canal.protocol.CanalPacket.Sub)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.alibaba.otter.canal.protocol.CanalPacket.Sub other) {
        if (other == com.alibaba.otter.canal.protocol.CanalPacket.Sub.getDefaultInstance()) return this;
        if (!other.getDestination().isEmpty()) {
          destination_ = other.destination_;
          onChanged();
        }
        if (!other.getClientId().isEmpty()) {
          clientId_ = other.clientId_;
          onChanged();
        }
        if (!other.getFilter().isEmpty()) {
          filter_ = other.filter_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.alibaba.otter.canal.protocol.CanalPacket.Sub parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.alibaba.otter.canal.protocol.CanalPacket.Sub) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object destination_ = "";
      /**
       * <code>string destination = 1;</code>
       */
      public java.lang.String getDestination() {
        java.lang.Object ref = destination_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          destination_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string destination = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDestinationBytes() {
        java.lang.Object ref = destination_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          destination_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder setDestination(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        destination_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder clearDestination() {
        
        destination_ = getDefaultInstance().getDestination();
        onChanged();
        return this;
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder setDestinationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        destination_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object clientId_ = "";
      /**
       * <code>string client_id = 2;</code>
       */
      public java.lang.String getClientId() {
        java.lang.Object ref = clientId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          clientId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public com.google.protobuf.ByteString
          getClientIdBytes() {
        java.lang.Object ref = clientId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          clientId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder setClientId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        clientId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder clearClientId() {
        
        clientId_ = getDefaultInstance().getClientId();
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder setClientIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        clientId_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object filter_ = "";
      /**
       * <code>string filter = 7;</code>
       */
      public java.lang.String getFilter() {
        java.lang.Object ref = filter_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          filter_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string filter = 7;</code>
       */
      public com.google.protobuf.ByteString
          getFilterBytes() {
        java.lang.Object ref = filter_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          filter_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string filter = 7;</code>
       */
      public Builder setFilter(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        filter_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string filter = 7;</code>
       */
      public Builder clearFilter() {
        
        filter_ = getDefaultInstance().getFilter();
        onChanged();
        return this;
      }
      /**
       * <code>string filter = 7;</code>
       */
      public Builder setFilterBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        filter_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.Sub)
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.Sub)
    private static final com.alibaba.otter.canal.protocol.CanalPacket.Sub DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.alibaba.otter.canal.protocol.CanalPacket.Sub();
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Sub getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.alibaba.otter.canal.protocol.CanalPacket.Sub getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface UnsubOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Unsub)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string destination = 1;</code>
     */
    java.lang.String getDestination();
    /**
     * <code>string destination = 1;</code>
     */
    com.google.protobuf.ByteString
        getDestinationBytes();

    /**
     * <code>string client_id = 2;</code>
     */
    java.lang.String getClientId();
    /**
     * <code>string client_id = 2;</code>
     */
    com.google.protobuf.ByteString
        getClientIdBytes();

    /**
     * <code>string filter = 7;</code>
     */
    java.lang.String getFilter();
    /**
     * <code>string filter = 7;</code>
     */
    com.google.protobuf.ByteString
        getFilterBytes();
  }
  /**
   * <pre>
   * Unsubscription
   * </pre>
   *
   * Protobuf type {@code com.alibaba.otter.canal.protocol.Unsub}
   */
  public  static final class Unsub extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Unsub)
      UnsubOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Unsub.newBuilder() to construct.
    private Unsub(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Unsub() {
      destination_ = "";
      clientId_ = "";
      filter_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Unsub(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              destination_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              clientId_ = s;
              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();

              filter_ = s;
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              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 com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Unsub_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Unsub_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.alibaba.otter.canal.protocol.CanalPacket.Unsub.class, com.alibaba.otter.canal.protocol.CanalPacket.Unsub.Builder.class);
    }

    public static final int DESTINATION_FIELD_NUMBER = 1;
    private volatile java.lang.Object destination_;
    /**
     * <code>string destination = 1;</code>
     */
    public java.lang.String getDestination() {
      java.lang.Object ref = destination_;
      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();
        destination_ = s;
        return s;
      }
    }
    /**
     * <code>string destination = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDestinationBytes() {
      java.lang.Object ref = destination_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        destination_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CLIENT_ID_FIELD_NUMBER = 2;
    private volatile java.lang.Object clientId_;
    /**
     * <code>string client_id = 2;</code>
     */
    public java.lang.String getClientId() {
      java.lang.Object ref = clientId_;
      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();
        clientId_ = s;
        return s;
      }
    }
    /**
     * <code>string client_id = 2;</code>
     */
    public com.google.protobuf.ByteString
        getClientIdBytes() {
      java.lang.Object ref = clientId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        clientId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FILTER_FIELD_NUMBER = 7;
    private volatile java.lang.Object filter_;
    /**
     * <code>string filter = 7;</code>
     */
    public java.lang.String getFilter() {
      java.lang.Object ref = filter_;
      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();
        filter_ = s;
        return s;
      }
    }
    /**
     * <code>string filter = 7;</code>
     */
    public com.google.protobuf.ByteString
        getFilterBytes() {
      java.lang.Object ref = filter_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        filter_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getDestinationBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, destination_);
      }
      if (!getClientIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, clientId_);
      }
      if (!getFilterBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, filter_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getDestinationBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, destination_);
      }
      if (!getClientIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, clientId_);
      }
      if (!getFilterBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, filter_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.alibaba.otter.canal.protocol.CanalPacket.Unsub)) {
        return super.equals(obj);
      }
      com.alibaba.otter.canal.protocol.CanalPacket.Unsub other = (com.alibaba.otter.canal.protocol.CanalPacket.Unsub) obj;

      boolean result = true;
      result = result && getDestination()
          .equals(other.getDestination());
      result = result && getClientId()
          .equals(other.getClientId());
      result = result && getFilter()
          .equals(other.getFilter());
      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();
      hash = (37 * hash) + DESTINATION_FIELD_NUMBER;
      hash = (53 * hash) + getDestination().hashCode();
      hash = (37 * hash) + CLIENT_ID_FIELD_NUMBER;
      hash = (53 * hash) + getClientId().hashCode();
      hash = (37 * hash) + FILTER_FIELD_NUMBER;
      hash = (53 * hash) + getFilter().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Unsub parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Unsub parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Unsub parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Unsub parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Unsub parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Unsub parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Unsub parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Unsub 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 com.alibaba.otter.canal.protocol.CanalPacket.Unsub parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Unsub 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 com.alibaba.otter.canal.protocol.CanalPacket.Unsub parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Unsub parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.alibaba.otter.canal.protocol.CanalPacket.Unsub prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    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>
     * Unsubscription
     * </pre>
     *
     * Protobuf type {@code com.alibaba.otter.canal.protocol.Unsub}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Unsub)
        com.alibaba.otter.canal.protocol.CanalPacket.UnsubOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Unsub_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Unsub_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.alibaba.otter.canal.protocol.CanalPacket.Unsub.class, com.alibaba.otter.canal.protocol.CanalPacket.Unsub.Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalPacket.Unsub.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        destination_ = "";

        clientId_ = "";

        filter_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Unsub_descriptor;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Unsub getDefaultInstanceForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.Unsub.getDefaultInstance();
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Unsub build() {
        com.alibaba.otter.canal.protocol.CanalPacket.Unsub result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Unsub buildPartial() {
        com.alibaba.otter.canal.protocol.CanalPacket.Unsub result = new com.alibaba.otter.canal.protocol.CanalPacket.Unsub(this);
        result.destination_ = destination_;
        result.clientId_ = clientId_;
        result.filter_ = filter_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.alibaba.otter.canal.protocol.CanalPacket.Unsub) {
          return mergeFrom((com.alibaba.otter.canal.protocol.CanalPacket.Unsub)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.alibaba.otter.canal.protocol.CanalPacket.Unsub other) {
        if (other == com.alibaba.otter.canal.protocol.CanalPacket.Unsub.getDefaultInstance()) return this;
        if (!other.getDestination().isEmpty()) {
          destination_ = other.destination_;
          onChanged();
        }
        if (!other.getClientId().isEmpty()) {
          clientId_ = other.clientId_;
          onChanged();
        }
        if (!other.getFilter().isEmpty()) {
          filter_ = other.filter_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.alibaba.otter.canal.protocol.CanalPacket.Unsub parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.alibaba.otter.canal.protocol.CanalPacket.Unsub) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object destination_ = "";
      /**
       * <code>string destination = 1;</code>
       */
      public java.lang.String getDestination() {
        java.lang.Object ref = destination_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          destination_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string destination = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDestinationBytes() {
        java.lang.Object ref = destination_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          destination_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder setDestination(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        destination_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder clearDestination() {
        
        destination_ = getDefaultInstance().getDestination();
        onChanged();
        return this;
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder setDestinationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        destination_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object clientId_ = "";
      /**
       * <code>string client_id = 2;</code>
       */
      public java.lang.String getClientId() {
        java.lang.Object ref = clientId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          clientId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public com.google.protobuf.ByteString
          getClientIdBytes() {
        java.lang.Object ref = clientId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          clientId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder setClientId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        clientId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder clearClientId() {
        
        clientId_ = getDefaultInstance().getClientId();
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder setClientIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        clientId_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object filter_ = "";
      /**
       * <code>string filter = 7;</code>
       */
      public java.lang.String getFilter() {
        java.lang.Object ref = filter_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          filter_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string filter = 7;</code>
       */
      public com.google.protobuf.ByteString
          getFilterBytes() {
        java.lang.Object ref = filter_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          filter_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string filter = 7;</code>
       */
      public Builder setFilter(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        filter_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string filter = 7;</code>
       */
      public Builder clearFilter() {
        
        filter_ = getDefaultInstance().getFilter();
        onChanged();
        return this;
      }
      /**
       * <code>string filter = 7;</code>
       */
      public Builder setFilterBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        filter_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.Unsub)
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.Unsub)
    private static final com.alibaba.otter.canal.protocol.CanalPacket.Unsub DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.alibaba.otter.canal.protocol.CanalPacket.Unsub();
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Unsub getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.alibaba.otter.canal.protocol.CanalPacket.Unsub getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Get)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string destination = 1;</code>
     */
    java.lang.String getDestination();
    /**
     * <code>string destination = 1;</code>
     */
    com.google.protobuf.ByteString
        getDestinationBytes();

    /**
     * <code>string client_id = 2;</code>
     */
    java.lang.String getClientId();
    /**
     * <code>string client_id = 2;</code>
     */
    com.google.protobuf.ByteString
        getClientIdBytes();

    /**
     * <code>int32 fetch_size = 3;</code>
     */
    int getFetchSize();

    /**
     * <pre>
     * 默认-1时代表不控制
     * </pre>
     *
     * <code>int64 timeout = 4;</code>
     */
    long getTimeout();

    /**
     * <pre>
     * 数字类型，0:纳秒,1:毫秒,2:微秒,3:秒,4:分钟,5:小时,6:天
     * </pre>
     *
     * <code>int32 unit = 5;</code>
     */
    int getUnit();

    /**
     * <pre>
     * 是否自动ack
     * </pre>
     *
     * <code>bool auto_ack = 6;</code>
     */
    boolean getAutoAck();

    public com.alibaba.otter.canal.protocol.CanalPacket.Get.TimeoutPresentCase getTimeoutPresentCase();

    public com.alibaba.otter.canal.protocol.CanalPacket.Get.UnitPresentCase getUnitPresentCase();

    public com.alibaba.otter.canal.protocol.CanalPacket.Get.AutoAckPresentCase getAutoAckPresentCase();
  }
  /**
   * <pre>
   *  PullRequest
   * </pre>
   *
   * Protobuf type {@code com.alibaba.otter.canal.protocol.Get}
   */
  public  static final class Get extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Get)
      GetOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Get.newBuilder() to construct.
    private Get(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Get() {
      destination_ = "";
      clientId_ = "";
      fetchSize_ = 0;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Get(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              destination_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              clientId_ = s;
              break;
            }
            case 24: {

              fetchSize_ = input.readInt32();
              break;
            }
            case 32: {
              timeoutPresentCase_ = 4;
              timeoutPresent_ = input.readInt64();
              break;
            }
            case 40: {
              unitPresentCase_ = 5;
              unitPresent_ = input.readInt32();
              break;
            }
            case 48: {
              autoAckPresentCase_ = 6;
              autoAckPresent_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              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 com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Get_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Get_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.alibaba.otter.canal.protocol.CanalPacket.Get.class, com.alibaba.otter.canal.protocol.CanalPacket.Get.Builder.class);
    }

    private int timeoutPresentCase_ = 0;
    private java.lang.Object timeoutPresent_;
    public enum TimeoutPresentCase
        implements com.google.protobuf.Internal.EnumLite {
      TIMEOUT(4),
      TIMEOUTPRESENT_NOT_SET(0);
      private final int value;
      private TimeoutPresentCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static TimeoutPresentCase valueOf(int value) {
        return forNumber(value);
      }

      public static TimeoutPresentCase forNumber(int value) {
        switch (value) {
          case 4: return TIMEOUT;
          case 0: return TIMEOUTPRESENT_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public TimeoutPresentCase
    getTimeoutPresentCase() {
      return TimeoutPresentCase.forNumber(
          timeoutPresentCase_);
    }

    private int unitPresentCase_ = 0;
    private java.lang.Object unitPresent_;
    public enum UnitPresentCase
        implements com.google.protobuf.Internal.EnumLite {
      UNIT(5),
      UNITPRESENT_NOT_SET(0);
      private final int value;
      private UnitPresentCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static UnitPresentCase valueOf(int value) {
        return forNumber(value);
      }

      public static UnitPresentCase forNumber(int value) {
        switch (value) {
          case 5: return UNIT;
          case 0: return UNITPRESENT_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public UnitPresentCase
    getUnitPresentCase() {
      return UnitPresentCase.forNumber(
          unitPresentCase_);
    }

    private int autoAckPresentCase_ = 0;
    private java.lang.Object autoAckPresent_;
    public enum AutoAckPresentCase
        implements com.google.protobuf.Internal.EnumLite {
      AUTO_ACK(6),
      AUTOACKPRESENT_NOT_SET(0);
      private final int value;
      private AutoAckPresentCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static AutoAckPresentCase valueOf(int value) {
        return forNumber(value);
      }

      public static AutoAckPresentCase forNumber(int value) {
        switch (value) {
          case 6: return AUTO_ACK;
          case 0: return AUTOACKPRESENT_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public AutoAckPresentCase
    getAutoAckPresentCase() {
      return AutoAckPresentCase.forNumber(
          autoAckPresentCase_);
    }

    public static final int DESTINATION_FIELD_NUMBER = 1;
    private volatile java.lang.Object destination_;
    /**
     * <code>string destination = 1;</code>
     */
    public java.lang.String getDestination() {
      java.lang.Object ref = destination_;
      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();
        destination_ = s;
        return s;
      }
    }
    /**
     * <code>string destination = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDestinationBytes() {
      java.lang.Object ref = destination_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        destination_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CLIENT_ID_FIELD_NUMBER = 2;
    private volatile java.lang.Object clientId_;
    /**
     * <code>string client_id = 2;</code>
     */
    public java.lang.String getClientId() {
      java.lang.Object ref = clientId_;
      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();
        clientId_ = s;
        return s;
      }
    }
    /**
     * <code>string client_id = 2;</code>
     */
    public com.google.protobuf.ByteString
        getClientIdBytes() {
      java.lang.Object ref = clientId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        clientId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FETCH_SIZE_FIELD_NUMBER = 3;
    private int fetchSize_;
    /**
     * <code>int32 fetch_size = 3;</code>
     */
    public int getFetchSize() {
      return fetchSize_;
    }

    public static final int TIMEOUT_FIELD_NUMBER = 4;
    /**
     * <pre>
     * 默认-1时代表不控制
     * </pre>
     *
     * <code>int64 timeout = 4;</code>
     */
    public long getTimeout() {
      if (timeoutPresentCase_ == 4) {
        return (java.lang.Long) timeoutPresent_;
      }
      return -1L;
    }

    public static final int UNIT_FIELD_NUMBER = 5;
    /**
     * <pre>
     * 数字类型，0:纳秒,1:毫秒,2:微秒,3:秒,4:分钟,5:小时,6:天
     * </pre>
     *
     * <code>int32 unit = 5;</code>
     */
    public int getUnit() {
      if (unitPresentCase_ == 5) {
        return (java.lang.Integer) unitPresent_;
      }
      return 2;
    }

    public static final int AUTO_ACK_FIELD_NUMBER = 6;
    /**
     * <pre>
     * 是否自动ack
     * </pre>
     *
     * <code>bool auto_ack = 6;</code>
     */
    public boolean getAutoAck() {
      if (autoAckPresentCase_ == 6) {
        return (java.lang.Boolean) autoAckPresent_;
      }
      return false;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getDestinationBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, destination_);
      }
      if (!getClientIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, clientId_);
      }
      if (fetchSize_ != 0) {
        output.writeInt32(3, fetchSize_);
      }
      if (timeoutPresentCase_ == 4) {
        output.writeInt64(
            4, (long)((java.lang.Long) timeoutPresent_));
      }
      if (unitPresentCase_ == 5) {
        output.writeInt32(
            5, (int)((java.lang.Integer) unitPresent_));
      }
      if (autoAckPresentCase_ == 6) {
        output.writeBool(
            6, (boolean)((java.lang.Boolean) autoAckPresent_));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getDestinationBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, destination_);
      }
      if (!getClientIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, clientId_);
      }
      if (fetchSize_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, fetchSize_);
      }
      if (timeoutPresentCase_ == 4) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(
              4, (long)((java.lang.Long) timeoutPresent_));
      }
      if (unitPresentCase_ == 5) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(
              5, (int)((java.lang.Integer) unitPresent_));
      }
      if (autoAckPresentCase_ == 6) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(
              6, (boolean)((java.lang.Boolean) autoAckPresent_));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.alibaba.otter.canal.protocol.CanalPacket.Get)) {
        return super.equals(obj);
      }
      com.alibaba.otter.canal.protocol.CanalPacket.Get other = (com.alibaba.otter.canal.protocol.CanalPacket.Get) obj;

      boolean result = true;
      result = result && getDestination()
          .equals(other.getDestination());
      result = result && getClientId()
          .equals(other.getClientId());
      result = result && (getFetchSize()
          == other.getFetchSize());
      result = result && getTimeoutPresentCase().equals(
          other.getTimeoutPresentCase());
      if (!result) return false;
      switch (timeoutPresentCase_) {
        case 4:
          result = result && (getTimeout()
              == other.getTimeout());
          break;
        case 0:
        default:
      }
      result = result && getUnitPresentCase().equals(
          other.getUnitPresentCase());
      if (!result) return false;
      switch (unitPresentCase_) {
        case 5:
          result = result && (getUnit()
              == other.getUnit());
          break;
        case 0:
        default:
      }
      result = result && getAutoAckPresentCase().equals(
          other.getAutoAckPresentCase());
      if (!result) return false;
      switch (autoAckPresentCase_) {
        case 6:
          result = result && (getAutoAck()
              == other.getAutoAck());
          break;
        case 0:
        default:
      }
      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();
      hash = (37 * hash) + DESTINATION_FIELD_NUMBER;
      hash = (53 * hash) + getDestination().hashCode();
      hash = (37 * hash) + CLIENT_ID_FIELD_NUMBER;
      hash = (53 * hash) + getClientId().hashCode();
      hash = (37 * hash) + FETCH_SIZE_FIELD_NUMBER;
      hash = (53 * hash) + getFetchSize();
      switch (timeoutPresentCase_) {
        case 4:
          hash = (37 * hash) + TIMEOUT_FIELD_NUMBER;
          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
              getTimeout());
          break;
        case 0:
        default:
      }
      switch (unitPresentCase_) {
        case 5:
          hash = (37 * hash) + UNIT_FIELD_NUMBER;
          hash = (53 * hash) + getUnit();
          break;
        case 0:
        default:
      }
      switch (autoAckPresentCase_) {
        case 6:
          hash = (37 * hash) + AUTO_ACK_FIELD_NUMBER;
          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
              getAutoAck());
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Get parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Get parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Get parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Get parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Get parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Get parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Get parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Get 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 com.alibaba.otter.canal.protocol.CanalPacket.Get parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Get 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 com.alibaba.otter.canal.protocol.CanalPacket.Get parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Get parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.alibaba.otter.canal.protocol.CanalPacket.Get prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    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>
     *  PullRequest
     * </pre>
     *
     * Protobuf type {@code com.alibaba.otter.canal.protocol.Get}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Get)
        com.alibaba.otter.canal.protocol.CanalPacket.GetOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Get_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Get_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.alibaba.otter.canal.protocol.CanalPacket.Get.class, com.alibaba.otter.canal.protocol.CanalPacket.Get.Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalPacket.Get.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        destination_ = "";

        clientId_ = "";

        fetchSize_ = 0;

        timeoutPresentCase_ = 0;
        timeoutPresent_ = null;
        unitPresentCase_ = 0;
        unitPresent_ = null;
        autoAckPresentCase_ = 0;
        autoAckPresent_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Get_descriptor;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Get getDefaultInstanceForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.Get.getDefaultInstance();
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Get build() {
        com.alibaba.otter.canal.protocol.CanalPacket.Get result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Get buildPartial() {
        com.alibaba.otter.canal.protocol.CanalPacket.Get result = new com.alibaba.otter.canal.protocol.CanalPacket.Get(this);
        result.destination_ = destination_;
        result.clientId_ = clientId_;
        result.fetchSize_ = fetchSize_;
        if (timeoutPresentCase_ == 4) {
          result.timeoutPresent_ = timeoutPresent_;
        }
        if (unitPresentCase_ == 5) {
          result.unitPresent_ = unitPresent_;
        }
        if (autoAckPresentCase_ == 6) {
          result.autoAckPresent_ = autoAckPresent_;
        }
        result.timeoutPresentCase_ = timeoutPresentCase_;
        result.unitPresentCase_ = unitPresentCase_;
        result.autoAckPresentCase_ = autoAckPresentCase_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.alibaba.otter.canal.protocol.CanalPacket.Get) {
          return mergeFrom((com.alibaba.otter.canal.protocol.CanalPacket.Get)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.alibaba.otter.canal.protocol.CanalPacket.Get other) {
        if (other == com.alibaba.otter.canal.protocol.CanalPacket.Get.getDefaultInstance()) return this;
        if (!other.getDestination().isEmpty()) {
          destination_ = other.destination_;
          onChanged();
        }
        if (!other.getClientId().isEmpty()) {
          clientId_ = other.clientId_;
          onChanged();
        }
        if (other.getFetchSize() != 0) {
          setFetchSize(other.getFetchSize());
        }
        switch (other.getTimeoutPresentCase()) {
          case TIMEOUT: {
            setTimeout(other.getTimeout());
            break;
          }
          case TIMEOUTPRESENT_NOT_SET: {
            break;
          }
        }
        switch (other.getUnitPresentCase()) {
          case UNIT: {
            setUnit(other.getUnit());
            break;
          }
          case UNITPRESENT_NOT_SET: {
            break;
          }
        }
        switch (other.getAutoAckPresentCase()) {
          case AUTO_ACK: {
            setAutoAck(other.getAutoAck());
            break;
          }
          case AUTOACKPRESENT_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.alibaba.otter.canal.protocol.CanalPacket.Get parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.alibaba.otter.canal.protocol.CanalPacket.Get) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int timeoutPresentCase_ = 0;
      private java.lang.Object timeoutPresent_;
      public TimeoutPresentCase
          getTimeoutPresentCase() {
        return TimeoutPresentCase.forNumber(
            timeoutPresentCase_);
      }

      public Builder clearTimeoutPresent() {
        timeoutPresentCase_ = 0;
        timeoutPresent_ = null;
        onChanged();
        return this;
      }

      private int unitPresentCase_ = 0;
      private java.lang.Object unitPresent_;
      public UnitPresentCase
          getUnitPresentCase() {
        return UnitPresentCase.forNumber(
            unitPresentCase_);
      }

      public Builder clearUnitPresent() {
        unitPresentCase_ = 0;
        unitPresent_ = null;
        onChanged();
        return this;
      }

      private int autoAckPresentCase_ = 0;
      private java.lang.Object autoAckPresent_;
      public AutoAckPresentCase
          getAutoAckPresentCase() {
        return AutoAckPresentCase.forNumber(
            autoAckPresentCase_);
      }

      public Builder clearAutoAckPresent() {
        autoAckPresentCase_ = 0;
        autoAckPresent_ = null;
        onChanged();
        return this;
      }


      private java.lang.Object destination_ = "";
      /**
       * <code>string destination = 1;</code>
       */
      public java.lang.String getDestination() {
        java.lang.Object ref = destination_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          destination_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string destination = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDestinationBytes() {
        java.lang.Object ref = destination_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          destination_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder setDestination(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        destination_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder clearDestination() {
        
        destination_ = getDefaultInstance().getDestination();
        onChanged();
        return this;
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder setDestinationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        destination_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object clientId_ = "";
      /**
       * <code>string client_id = 2;</code>
       */
      public java.lang.String getClientId() {
        java.lang.Object ref = clientId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          clientId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public com.google.protobuf.ByteString
          getClientIdBytes() {
        java.lang.Object ref = clientId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          clientId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder setClientId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        clientId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder clearClientId() {
        
        clientId_ = getDefaultInstance().getClientId();
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder setClientIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        clientId_ = value;
        onChanged();
        return this;
      }

      private int fetchSize_ ;
      /**
       * <code>int32 fetch_size = 3;</code>
       */
      public int getFetchSize() {
        return fetchSize_;
      }
      /**
       * <code>int32 fetch_size = 3;</code>
       */
      public Builder setFetchSize(int value) {
        
        fetchSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 fetch_size = 3;</code>
       */
      public Builder clearFetchSize() {
        
        fetchSize_ = 0;
        onChanged();
        return this;
      }

      /**
       * <pre>
       * 默认-1时代表不控制
       * </pre>
       *
       * <code>int64 timeout = 4;</code>
       */
      public long getTimeout() {
        if (timeoutPresentCase_ == 4) {
          return (java.lang.Long) timeoutPresent_;
        }
        return 0L;
      }
      /**
       * <pre>
       * 默认-1时代表不控制
       * </pre>
       *
       * <code>int64 timeout = 4;</code>
       */
      public Builder setTimeout(long value) {
        timeoutPresentCase_ = 4;
        timeoutPresent_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 默认-1时代表不控制
       * </pre>
       *
       * <code>int64 timeout = 4;</code>
       */
      public Builder clearTimeout() {
        if (timeoutPresentCase_ == 4) {
          timeoutPresentCase_ = 0;
          timeoutPresent_ = null;
          onChanged();
        }
        return this;
      }

      /**
       * <pre>
       * 数字类型，0:纳秒,1:毫秒,2:微秒,3:秒,4:分钟,5:小时,6:天
       * </pre>
       *
       * <code>int32 unit = 5;</code>
       */
      public int getUnit() {
        if (unitPresentCase_ == 5) {
          return (java.lang.Integer) unitPresent_;
        }
        return 0;
      }
      /**
       * <pre>
       * 数字类型，0:纳秒,1:毫秒,2:微秒,3:秒,4:分钟,5:小时,6:天
       * </pre>
       *
       * <code>int32 unit = 5;</code>
       */
      public Builder setUnit(int value) {
        unitPresentCase_ = 5;
        unitPresent_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 数字类型，0:纳秒,1:毫秒,2:微秒,3:秒,4:分钟,5:小时,6:天
       * </pre>
       *
       * <code>int32 unit = 5;</code>
       */
      public Builder clearUnit() {
        if (unitPresentCase_ == 5) {
          unitPresentCase_ = 0;
          unitPresent_ = null;
          onChanged();
        }
        return this;
      }

      /**
       * <pre>
       * 是否自动ack
       * </pre>
       *
       * <code>bool auto_ack = 6;</code>
       */
      public boolean getAutoAck() {
        if (autoAckPresentCase_ == 6) {
          return (java.lang.Boolean) autoAckPresent_;
        }
        return false;
      }
      /**
       * <pre>
       * 是否自动ack
       * </pre>
       *
       * <code>bool auto_ack = 6;</code>
       */
      public Builder setAutoAck(boolean value) {
        autoAckPresentCase_ = 6;
        autoAckPresent_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 是否自动ack
       * </pre>
       *
       * <code>bool auto_ack = 6;</code>
       */
      public Builder clearAutoAck() {
        if (autoAckPresentCase_ == 6) {
          autoAckPresentCase_ = 0;
          autoAckPresent_ = null;
          onChanged();
        }
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.Get)
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.Get)
    private static final com.alibaba.otter.canal.protocol.CanalPacket.Get DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.alibaba.otter.canal.protocol.CanalPacket.Get();
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Get getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.alibaba.otter.canal.protocol.CanalPacket.Get getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MessagesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Messages)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>int64 batch_id = 1;</code>
     */
    long getBatchId();

    /**
     * <code>repeated bytes messages = 2;</code>
     */
    java.util.List<com.google.protobuf.ByteString> getMessagesList();
    /**
     * <code>repeated bytes messages = 2;</code>
     */
    int getMessagesCount();
    /**
     * <code>repeated bytes messages = 2;</code>
     */
    com.google.protobuf.ByteString getMessages(int index);
  }
  /**
   * <pre>
   * </pre>
   *
   * Protobuf type {@code com.alibaba.otter.canal.protocol.Messages}
   */
  public  static final class Messages extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Messages)
      MessagesOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Messages.newBuilder() to construct.
    private Messages(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Messages() {
      batchId_ = 0L;
      messages_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Messages(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {

              batchId_ = input.readInt64();
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                messages_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
                mutable_bitField0_ |= 0x00000002;
              }
              messages_.add(input.readBytes());
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              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_ & 0x00000002) == 0x00000002)) {
          messages_ = java.util.Collections.unmodifiableList(messages_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Messages_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Messages_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.alibaba.otter.canal.protocol.CanalPacket.Messages.class, com.alibaba.otter.canal.protocol.CanalPacket.Messages.Builder.class);
    }

    private int bitField0_;
    public static final int BATCH_ID_FIELD_NUMBER = 1;
    private long batchId_;
    /**
     * <code>int64 batch_id = 1;</code>
     */
    public long getBatchId() {
      return batchId_;
    }

    public static final int MESSAGES_FIELD_NUMBER = 2;
    private java.util.List<com.google.protobuf.ByteString> messages_;
    /**
     * <code>repeated bytes messages = 2;</code>
     */
    public java.util.List<com.google.protobuf.ByteString>
        getMessagesList() {
      return messages_;
    }
    /**
     * <code>repeated bytes messages = 2;</code>
     */
    public int getMessagesCount() {
      return messages_.size();
    }
    /**
     * <code>repeated bytes messages = 2;</code>
     */
    public com.google.protobuf.ByteString getMessages(int index) {
      return messages_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (batchId_ != 0L) {
        output.writeInt64(1, batchId_);
      }
      for (int i = 0; i < messages_.size(); i++) {
        output.writeBytes(2, messages_.get(i));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (batchId_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, batchId_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < messages_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(messages_.get(i));
        }
        size += dataSize;
        size += 1 * getMessagesList().size();
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.alibaba.otter.canal.protocol.CanalPacket.Messages)) {
        return super.equals(obj);
      }
      com.alibaba.otter.canal.protocol.CanalPacket.Messages other = (com.alibaba.otter.canal.protocol.CanalPacket.Messages) obj;

      boolean result = true;
      result = result && (getBatchId()
          == other.getBatchId());
      result = result && getMessagesList()
          .equals(other.getMessagesList());
      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();
      hash = (37 * hash) + BATCH_ID_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getBatchId());
      if (getMessagesCount() > 0) {
        hash = (37 * hash) + MESSAGES_FIELD_NUMBER;
        hash = (53 * hash) + getMessagesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Messages parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Messages parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Messages parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Messages parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Messages parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Messages parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Messages parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Messages 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 com.alibaba.otter.canal.protocol.CanalPacket.Messages parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Messages 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 com.alibaba.otter.canal.protocol.CanalPacket.Messages parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Messages parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.alibaba.otter.canal.protocol.CanalPacket.Messages prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    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>
     * </pre>
     *
     * Protobuf type {@code com.alibaba.otter.canal.protocol.Messages}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Messages)
        com.alibaba.otter.canal.protocol.CanalPacket.MessagesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Messages_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Messages_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.alibaba.otter.canal.protocol.CanalPacket.Messages.class, com.alibaba.otter.canal.protocol.CanalPacket.Messages.Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalPacket.Messages.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        batchId_ = 0L;

        messages_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Messages_descriptor;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Messages getDefaultInstanceForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.Messages.getDefaultInstance();
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Messages build() {
        com.alibaba.otter.canal.protocol.CanalPacket.Messages result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Messages buildPartial() {
        com.alibaba.otter.canal.protocol.CanalPacket.Messages result = new com.alibaba.otter.canal.protocol.CanalPacket.Messages(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.batchId_ = batchId_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          messages_ = java.util.Collections.unmodifiableList(messages_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.messages_ = messages_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.alibaba.otter.canal.protocol.CanalPacket.Messages) {
          return mergeFrom((com.alibaba.otter.canal.protocol.CanalPacket.Messages)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.alibaba.otter.canal.protocol.CanalPacket.Messages other) {
        if (other == com.alibaba.otter.canal.protocol.CanalPacket.Messages.getDefaultInstance()) return this;
        if (other.getBatchId() != 0L) {
          setBatchId(other.getBatchId());
        }
        if (!other.messages_.isEmpty()) {
          if (messages_.isEmpty()) {
            messages_ = other.messages_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureMessagesIsMutable();
            messages_.addAll(other.messages_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.alibaba.otter.canal.protocol.CanalPacket.Messages parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.alibaba.otter.canal.protocol.CanalPacket.Messages) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long batchId_ ;
      /**
       * <code>int64 batch_id = 1;</code>
       */
      public long getBatchId() {
        return batchId_;
      }
      /**
       * <code>int64 batch_id = 1;</code>
       */
      public Builder setBatchId(long value) {
        
        batchId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 batch_id = 1;</code>
       */
      public Builder clearBatchId() {
        
        batchId_ = 0L;
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.ByteString> messages_ = java.util.Collections.emptyList();
      private void ensureMessagesIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          messages_ = new java.util.ArrayList<com.google.protobuf.ByteString>(messages_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated bytes messages = 2;</code>
       */
      public java.util.List<com.google.protobuf.ByteString>
          getMessagesList() {
        return java.util.Collections.unmodifiableList(messages_);
      }
      /**
       * <code>repeated bytes messages = 2;</code>
       */
      public int getMessagesCount() {
        return messages_.size();
      }
      /**
       * <code>repeated bytes messages = 2;</code>
       */
      public com.google.protobuf.ByteString getMessages(int index) {
        return messages_.get(index);
      }
      /**
       * <code>repeated bytes messages = 2;</code>
       */
      public Builder setMessages(
          int index, com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMessagesIsMutable();
        messages_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bytes messages = 2;</code>
       */
      public Builder addMessages(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMessagesIsMutable();
        messages_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bytes messages = 2;</code>
       */
      public Builder addAllMessages(
          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
        ensureMessagesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, messages_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bytes messages = 2;</code>
       */
      public Builder clearMessages() {
        messages_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.Messages)
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.Messages)
    private static final com.alibaba.otter.canal.protocol.CanalPacket.Messages DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.alibaba.otter.canal.protocol.CanalPacket.Messages();
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Messages getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.alibaba.otter.canal.protocol.CanalPacket.Messages getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DumpOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.Dump)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string journal = 1;</code>
     */
    java.lang.String getJournal();
    /**
     * <code>string journal = 1;</code>
     */
    com.google.protobuf.ByteString
        getJournalBytes();

    /**
     * <code>int64 position = 2;</code>
     */
    long getPosition();

    /**
     * <code>int64 timestamp = 3;</code>
     */
    long getTimestamp();

    public com.alibaba.otter.canal.protocol.CanalPacket.Dump.TimestampPresentCase getTimestampPresentCase();
  }
  /**
   * <pre>
   * TBD when new packets are required
   * </pre>
   *
   * Protobuf type {@code com.alibaba.otter.canal.protocol.Dump}
   */
  public  static final class Dump extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.Dump)
      DumpOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Dump.newBuilder() to construct.
    private Dump(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Dump() {
      journal_ = "";
      position_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Dump(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              journal_ = s;
              break;
            }
            case 16: {

              position_ = input.readInt64();
              break;
            }
            case 24: {
              timestampPresentCase_ = 3;
              timestampPresent_ = input.readInt64();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              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 com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Dump_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Dump_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.alibaba.otter.canal.protocol.CanalPacket.Dump.class, com.alibaba.otter.canal.protocol.CanalPacket.Dump.Builder.class);
    }

    private int timestampPresentCase_ = 0;
    private java.lang.Object timestampPresent_;
    public enum TimestampPresentCase
        implements com.google.protobuf.Internal.EnumLite {
      TIMESTAMP(3),
      TIMESTAMPPRESENT_NOT_SET(0);
      private final int value;
      private TimestampPresentCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static TimestampPresentCase valueOf(int value) {
        return forNumber(value);
      }

      public static TimestampPresentCase forNumber(int value) {
        switch (value) {
          case 3: return TIMESTAMP;
          case 0: return TIMESTAMPPRESENT_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public TimestampPresentCase
    getTimestampPresentCase() {
      return TimestampPresentCase.forNumber(
          timestampPresentCase_);
    }

    public static final int JOURNAL_FIELD_NUMBER = 1;
    private volatile java.lang.Object journal_;
    /**
     * <code>string journal = 1;</code>
     */
    public java.lang.String getJournal() {
      java.lang.Object ref = journal_;
      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();
        journal_ = s;
        return s;
      }
    }
    /**
     * <code>string journal = 1;</code>
     */
    public com.google.protobuf.ByteString
        getJournalBytes() {
      java.lang.Object ref = journal_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        journal_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int POSITION_FIELD_NUMBER = 2;
    private long position_;
    /**
     * <code>int64 position = 2;</code>
     */
    public long getPosition() {
      return position_;
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 3;
    /**
     * <code>int64 timestamp = 3;</code>
     */
    public long getTimestamp() {
      if (timestampPresentCase_ == 3) {
        return (java.lang.Long) timestampPresent_;
      }
      return 0L;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getJournalBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, journal_);
      }
      if (position_ != 0L) {
        output.writeInt64(2, position_);
      }
      if (timestampPresentCase_ == 3) {
        output.writeInt64(
            3, (long)((java.lang.Long) timestampPresent_));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getJournalBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, journal_);
      }
      if (position_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, position_);
      }
      if (timestampPresentCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(
              3, (long)((java.lang.Long) timestampPresent_));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.alibaba.otter.canal.protocol.CanalPacket.Dump)) {
        return super.equals(obj);
      }
      com.alibaba.otter.canal.protocol.CanalPacket.Dump other = (com.alibaba.otter.canal.protocol.CanalPacket.Dump) obj;

      boolean result = true;
      result = result && getJournal()
          .equals(other.getJournal());
      result = result && (getPosition()
          == other.getPosition());
      result = result && getTimestampPresentCase().equals(
          other.getTimestampPresentCase());
      if (!result) return false;
      switch (timestampPresentCase_) {
        case 3:
          result = result && (getTimestamp()
              == other.getTimestamp());
          break;
        case 0:
        default:
      }
      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();
      hash = (37 * hash) + JOURNAL_FIELD_NUMBER;
      hash = (53 * hash) + getJournal().hashCode();
      hash = (37 * hash) + POSITION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getPosition());
      switch (timestampPresentCase_) {
        case 3:
          hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
              getTimestamp());
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Dump parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Dump parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Dump parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Dump parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Dump parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Dump parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Dump parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Dump 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 com.alibaba.otter.canal.protocol.CanalPacket.Dump parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Dump 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 com.alibaba.otter.canal.protocol.CanalPacket.Dump parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.Dump parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.alibaba.otter.canal.protocol.CanalPacket.Dump prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    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>
     * TBD when new packets are required
     * </pre>
     *
     * Protobuf type {@code com.alibaba.otter.canal.protocol.Dump}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.Dump)
        com.alibaba.otter.canal.protocol.CanalPacket.DumpOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Dump_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Dump_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.alibaba.otter.canal.protocol.CanalPacket.Dump.class, com.alibaba.otter.canal.protocol.CanalPacket.Dump.Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalPacket.Dump.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        journal_ = "";

        position_ = 0L;

        timestampPresentCase_ = 0;
        timestampPresent_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_Dump_descriptor;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Dump getDefaultInstanceForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.Dump.getDefaultInstance();
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Dump build() {
        com.alibaba.otter.canal.protocol.CanalPacket.Dump result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.Dump buildPartial() {
        com.alibaba.otter.canal.protocol.CanalPacket.Dump result = new com.alibaba.otter.canal.protocol.CanalPacket.Dump(this);
        result.journal_ = journal_;
        result.position_ = position_;
        if (timestampPresentCase_ == 3) {
          result.timestampPresent_ = timestampPresent_;
        }
        result.timestampPresentCase_ = timestampPresentCase_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.alibaba.otter.canal.protocol.CanalPacket.Dump) {
          return mergeFrom((com.alibaba.otter.canal.protocol.CanalPacket.Dump)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.alibaba.otter.canal.protocol.CanalPacket.Dump other) {
        if (other == com.alibaba.otter.canal.protocol.CanalPacket.Dump.getDefaultInstance()) return this;
        if (!other.getJournal().isEmpty()) {
          journal_ = other.journal_;
          onChanged();
        }
        if (other.getPosition() != 0L) {
          setPosition(other.getPosition());
        }
        switch (other.getTimestampPresentCase()) {
          case TIMESTAMP: {
            setTimestamp(other.getTimestamp());
            break;
          }
          case TIMESTAMPPRESENT_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.alibaba.otter.canal.protocol.CanalPacket.Dump parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.alibaba.otter.canal.protocol.CanalPacket.Dump) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int timestampPresentCase_ = 0;
      private java.lang.Object timestampPresent_;
      public TimestampPresentCase
          getTimestampPresentCase() {
        return TimestampPresentCase.forNumber(
            timestampPresentCase_);
      }

      public Builder clearTimestampPresent() {
        timestampPresentCase_ = 0;
        timestampPresent_ = null;
        onChanged();
        return this;
      }


      private java.lang.Object journal_ = "";
      /**
       * <code>string journal = 1;</code>
       */
      public java.lang.String getJournal() {
        java.lang.Object ref = journal_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          journal_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string journal = 1;</code>
       */
      public com.google.protobuf.ByteString
          getJournalBytes() {
        java.lang.Object ref = journal_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          journal_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string journal = 1;</code>
       */
      public Builder setJournal(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        journal_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string journal = 1;</code>
       */
      public Builder clearJournal() {
        
        journal_ = getDefaultInstance().getJournal();
        onChanged();
        return this;
      }
      /**
       * <code>string journal = 1;</code>
       */
      public Builder setJournalBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        journal_ = value;
        onChanged();
        return this;
      }

      private long position_ ;
      /**
       * <code>int64 position = 2;</code>
       */
      public long getPosition() {
        return position_;
      }
      /**
       * <code>int64 position = 2;</code>
       */
      public Builder setPosition(long value) {
        
        position_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 position = 2;</code>
       */
      public Builder clearPosition() {
        
        position_ = 0L;
        onChanged();
        return this;
      }

      /**
       * <code>int64 timestamp = 3;</code>
       */
      public long getTimestamp() {
        if (timestampPresentCase_ == 3) {
          return (java.lang.Long) timestampPresent_;
        }
        return 0L;
      }
      /**
       * <code>int64 timestamp = 3;</code>
       */
      public Builder setTimestamp(long value) {
        timestampPresentCase_ = 3;
        timestampPresent_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 timestamp = 3;</code>
       */
      public Builder clearTimestamp() {
        if (timestampPresentCase_ == 3) {
          timestampPresentCase_ = 0;
          timestampPresent_ = null;
          onChanged();
        }
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.Dump)
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.Dump)
    private static final com.alibaba.otter.canal.protocol.CanalPacket.Dump DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.alibaba.otter.canal.protocol.CanalPacket.Dump();
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.Dump getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.alibaba.otter.canal.protocol.CanalPacket.Dump getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ClientRollbackOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.alibaba.otter.canal.protocol.ClientRollback)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string destination = 1;</code>
     */
    java.lang.String getDestination();
    /**
     * <code>string destination = 1;</code>
     */
    com.google.protobuf.ByteString
        getDestinationBytes();

    /**
     * <code>string client_id = 2;</code>
     */
    java.lang.String getClientId();
    /**
     * <code>string client_id = 2;</code>
     */
    com.google.protobuf.ByteString
        getClientIdBytes();

    /**
     * <code>int64 batch_id = 3;</code>
     */
    long getBatchId();
  }
  /**
   * Protobuf type {@code com.alibaba.otter.canal.protocol.ClientRollback}
   */
  public  static final class ClientRollback extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.alibaba.otter.canal.protocol.ClientRollback)
      ClientRollbackOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ClientRollback.newBuilder() to construct.
    private ClientRollback(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ClientRollback() {
      destination_ = "";
      clientId_ = "";
      batchId_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ClientRollback(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              destination_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              clientId_ = s;
              break;
            }
            case 24: {

              batchId_ = input.readInt64();
              break;
            }
            default: {
              if (!parseUnknownFieldProto3(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              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 com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientRollback_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientRollback_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback.class, com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback.Builder.class);
    }

    public static final int DESTINATION_FIELD_NUMBER = 1;
    private volatile java.lang.Object destination_;
    /**
     * <code>string destination = 1;</code>
     */
    public java.lang.String getDestination() {
      java.lang.Object ref = destination_;
      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();
        destination_ = s;
        return s;
      }
    }
    /**
     * <code>string destination = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDestinationBytes() {
      java.lang.Object ref = destination_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        destination_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CLIENT_ID_FIELD_NUMBER = 2;
    private volatile java.lang.Object clientId_;
    /**
     * <code>string client_id = 2;</code>
     */
    public java.lang.String getClientId() {
      java.lang.Object ref = clientId_;
      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();
        clientId_ = s;
        return s;
      }
    }
    /**
     * <code>string client_id = 2;</code>
     */
    public com.google.protobuf.ByteString
        getClientIdBytes() {
      java.lang.Object ref = clientId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        clientId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int BATCH_ID_FIELD_NUMBER = 3;
    private long batchId_;
    /**
     * <code>int64 batch_id = 3;</code>
     */
    public long getBatchId() {
      return batchId_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getDestinationBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, destination_);
      }
      if (!getClientIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, clientId_);
      }
      if (batchId_ != 0L) {
        output.writeInt64(3, batchId_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getDestinationBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, destination_);
      }
      if (!getClientIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, clientId_);
      }
      if (batchId_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, batchId_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback)) {
        return super.equals(obj);
      }
      com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback other = (com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback) obj;

      boolean result = true;
      result = result && getDestination()
          .equals(other.getDestination());
      result = result && getClientId()
          .equals(other.getClientId());
      result = result && (getBatchId()
          == other.getBatchId());
      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();
      hash = (37 * hash) + DESTINATION_FIELD_NUMBER;
      hash = (53 * hash) + getDestination().hashCode();
      hash = (37 * hash) + CLIENT_ID_FIELD_NUMBER;
      hash = (53 * hash) + getClientId().hashCode();
      hash = (37 * hash) + BATCH_ID_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getBatchId());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback 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 com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback 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 com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    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 com.alibaba.otter.canal.protocol.ClientRollback}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.alibaba.otter.canal.protocol.ClientRollback)
        com.alibaba.otter.canal.protocol.CanalPacket.ClientRollbackOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientRollback_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientRollback_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback.class, com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback.Builder.class);
      }

      // Construct using com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        destination_ = "";

        clientId_ = "";

        batchId_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.internal_static_com_alibaba_otter_canal_protocol_ClientRollback_descriptor;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback getDefaultInstanceForType() {
        return com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback.getDefaultInstance();
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback build() {
        com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback buildPartial() {
        com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback result = new com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback(this);
        result.destination_ = destination_;
        result.clientId_ = clientId_;
        result.batchId_ = batchId_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback) {
          return mergeFrom((com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback other) {
        if (other == com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback.getDefaultInstance()) return this;
        if (!other.getDestination().isEmpty()) {
          destination_ = other.destination_;
          onChanged();
        }
        if (!other.getClientId().isEmpty()) {
          clientId_ = other.clientId_;
          onChanged();
        }
        if (other.getBatchId() != 0L) {
          setBatchId(other.getBatchId());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object destination_ = "";
      /**
       * <code>string destination = 1;</code>
       */
      public java.lang.String getDestination() {
        java.lang.Object ref = destination_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          destination_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string destination = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDestinationBytes() {
        java.lang.Object ref = destination_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          destination_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder setDestination(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        destination_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder clearDestination() {
        
        destination_ = getDefaultInstance().getDestination();
        onChanged();
        return this;
      }
      /**
       * <code>string destination = 1;</code>
       */
      public Builder setDestinationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        destination_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object clientId_ = "";
      /**
       * <code>string client_id = 2;</code>
       */
      public java.lang.String getClientId() {
        java.lang.Object ref = clientId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          clientId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public com.google.protobuf.ByteString
          getClientIdBytes() {
        java.lang.Object ref = clientId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          clientId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder setClientId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        clientId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder clearClientId() {
        
        clientId_ = getDefaultInstance().getClientId();
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 2;</code>
       */
      public Builder setClientIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        clientId_ = value;
        onChanged();
        return this;
      }

      private long batchId_ ;
      /**
       * <code>int64 batch_id = 3;</code>
       */
      public long getBatchId() {
        return batchId_;
      }
      /**
       * <code>int64 batch_id = 3;</code>
       */
      public Builder setBatchId(long value) {
        
        batchId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 batch_id = 3;</code>
       */
      public Builder clearBatchId() {
        
        batchId_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.alibaba.otter.canal.protocol.ClientRollback)
    }

    // @@protoc_insertion_point(class_scope:com.alibaba.otter.canal.protocol.ClientRollback)
    private static final com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback();
    }

    public static com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.alibaba.otter.canal.protocol.CanalPacket.ClientRollback getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_Packet_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_Packet_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_HeartBeat_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_HeartBeat_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_Handshake_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_Handshake_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_ClientAuth_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_ClientAuth_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_Ack_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_Ack_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_ClientAck_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_ClientAck_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_Sub_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_Sub_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_Unsub_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_Unsub_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_Get_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_Get_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_Messages_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_Messages_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_Dump_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_Dump_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_alibaba_otter_canal_protocol_ClientRollback_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_alibaba_otter_canal_protocol_ClientRollback_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\023CanalProtocol.proto\022 com.alibaba.otter" +
      ".canal.protocol\"\205\002\n\006Packet\022\026\n\014magic_numb" +
      "er\030\001 \001(\005H\000\022\021\n\007version\030\002 \001(\005H\001\022:\n\004type\030\003 " +
      "\001(\0162,.com.alibaba.otter.canal.protocol.P" +
      "acketType\022D\n\013compression\030\004 \001(\0162-.com.ali" +
      "baba.otter.canal.protocol.CompressionH\002\022" +
      "\014\n\004body\030\005 \001(\014B\026\n\024magic_number_presentB\021\n" +
      "\017version_presentB\025\n\023compression_present\"" +
      "<\n\tHeartBeat\022\026\n\016send_timestamp\030\001 \001(\003\022\027\n\017" +
      "start_timestamp\030\002 \001(\003\"\255\001\n\tHandshake\022 \n\026c" +
      "ommunication_encoding\030\001 \001(\tH\000\022\r\n\005seeds\030\002" +
      " \001(\014\022M\n\026supported_compressions\030\003 \001(\0162-.c" +
      "om.alibaba.otter.canal.protocol.Compress" +
      "ionB \n\036communication_encoding_present\"\363\001" +
      "\n\nClientAuth\022\020\n\010username\030\001 \001(\t\022\020\n\010passwo" +
      "rd\030\002 \001(\014\022\032\n\020net_read_timeout\030\003 \001(\005H\000\022\033\n\021" +
      "net_write_timeout\030\004 \001(\005H\001\022\023\n\013destination" +
      "\030\005 \001(\t\022\021\n\tclient_id\030\006 \001(\t\022\016\n\006filter\030\007 \001(" +
      "\t\022\027\n\017start_timestamp\030\010 \001(\003B\032\n\030net_read_t" +
      "imeout_presentB\033\n\031net_write_timeout_pres" +
      "ent\"H\n\003Ack\022\024\n\nerror_code\030\001 \001(\005H\000\022\025\n\rerro" +
      "r_message\030\002 \001(\tB\024\n\022error_code_present\"E\n" +
      "\tClientAck\022\023\n\013destination\030\001 \001(\t\022\021\n\tclien" +
      "t_id\030\002 \001(\t\022\020\n\010batch_id\030\003 \001(\003\"=\n\003Sub\022\023\n\013d" +
      "estination\030\001 \001(\t\022\021\n\tclient_id\030\002 \001(\t\022\016\n\006f" +
      "ilter\030\007 \001(\t\"?\n\005Unsub\022\023\n\013destination\030\001 \001(" +
      "\t\022\021\n\tclient_id\030\002 \001(\t\022\016\n\006filter\030\007 \001(\t\"\257\001\n" +
      "\003Get\022\023\n\013destination\030\001 \001(\t\022\021\n\tclient_id\030\002" +
      " \001(\t\022\022\n\nfetch_size\030\003 \001(\005\022\021\n\007timeout\030\004 \001(" +
      "\003H\000\022\016\n\004unit\030\005 \001(\005H\001\022\022\n\010auto_ack\030\006 \001(\010H\002B" +
      "\021\n\017timeout_presentB\016\n\014unit_presentB\022\n\020au" +
      "to_ack_present\".\n\010Messages\022\020\n\010batch_id\030\001" +
      " \001(\003\022\020\n\010messages\030\002 \003(\014\"S\n\004Dump\022\017\n\007journa" +
      "l\030\001 \001(\t\022\020\n\010position\030\002 \001(\003\022\023\n\ttimestamp\030\003" +
      " \001(\003H\000B\023\n\021timestamp_present\"J\n\016ClientRol" +
      "lback\022\023\n\013destination\030\001 \001(\t\022\021\n\tclient_id\030" +
      "\002 \001(\t\022\020\n\010batch_id\030\003 \001(\003*U\n\013Compression\022\037" +
      "\n\033COMPRESSIONCOMPATIBLEPROTO2\020\000\022\010\n\004NONE\020" +
      "\001\022\010\n\004ZLIB\020\002\022\010\n\004GZIP\020\003\022\007\n\003LZF\020\004*\346\001\n\nPacke" +
      "tType\022\037\n\033PACKAGETYPECOMPATIBLEPROTO2\020\000\022\r" +
      "\n\tHANDSHAKE\020\001\022\030\n\024CLIENTAUTHENTICATION\020\002\022" +
      "\007\n\003ACK\020\003\022\020\n\014SUBSCRIPTION\020\004\022\022\n\016UNSUBSCRIP" +
      "TION\020\005\022\007\n\003GET\020\006\022\014\n\010MESSAGES\020\007\022\r\n\tCLIENTA" +
      "CK\020\010\022\014\n\010SHUTDOWN\020\t\022\010\n\004DUMP\020\n\022\r\n\tHEARTBEA" +
      "T\020\013\022\022\n\016CLIENTROLLBACK\020\014B1\n com.alibaba.o" +
      "tter.canal.protocolB\013CanalPacketH\001b\006prot" +
      "o3"
    };
    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_com_alibaba_otter_canal_protocol_Packet_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_com_alibaba_otter_canal_protocol_Packet_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_Packet_descriptor,
        new java.lang.String[] { "MagicNumber", "Version", "Type", "Compression", "Body", "MagicNumberPresent", "VersionPresent", "CompressionPresent", });
    internal_static_com_alibaba_otter_canal_protocol_HeartBeat_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_com_alibaba_otter_canal_protocol_HeartBeat_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_HeartBeat_descriptor,
        new java.lang.String[] { "SendTimestamp", "StartTimestamp", });
    internal_static_com_alibaba_otter_canal_protocol_Handshake_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_com_alibaba_otter_canal_protocol_Handshake_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_Handshake_descriptor,
        new java.lang.String[] { "CommunicationEncoding", "Seeds", "SupportedCompressions", "CommunicationEncodingPresent", });
    internal_static_com_alibaba_otter_canal_protocol_ClientAuth_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_com_alibaba_otter_canal_protocol_ClientAuth_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_ClientAuth_descriptor,
        new java.lang.String[] { "Username", "Password", "NetReadTimeout", "NetWriteTimeout", "Destination", "ClientId", "Filter", "StartTimestamp", "NetReadTimeoutPresent", "NetWriteTimeoutPresent", });
    internal_static_com_alibaba_otter_canal_protocol_Ack_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_com_alibaba_otter_canal_protocol_Ack_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_Ack_descriptor,
        new java.lang.String[] { "ErrorCode", "ErrorMessage", "ErrorCodePresent", });
    internal_static_com_alibaba_otter_canal_protocol_ClientAck_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_com_alibaba_otter_canal_protocol_ClientAck_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_ClientAck_descriptor,
        new java.lang.String[] { "Destination", "ClientId", "BatchId", });
    internal_static_com_alibaba_otter_canal_protocol_Sub_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_com_alibaba_otter_canal_protocol_Sub_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_Sub_descriptor,
        new java.lang.String[] { "Destination", "ClientId", "Filter", });
    internal_static_com_alibaba_otter_canal_protocol_Unsub_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_com_alibaba_otter_canal_protocol_Unsub_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_Unsub_descriptor,
        new java.lang.String[] { "Destination", "ClientId", "Filter", });
    internal_static_com_alibaba_otter_canal_protocol_Get_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_com_alibaba_otter_canal_protocol_Get_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_Get_descriptor,
        new java.lang.String[] { "Destination", "ClientId", "FetchSize", "Timeout", "Unit", "AutoAck", "TimeoutPresent", "UnitPresent", "AutoAckPresent", });
    internal_static_com_alibaba_otter_canal_protocol_Messages_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_com_alibaba_otter_canal_protocol_Messages_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_Messages_descriptor,
        new java.lang.String[] { "BatchId", "Messages", });
    internal_static_com_alibaba_otter_canal_protocol_Dump_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_com_alibaba_otter_canal_protocol_Dump_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_Dump_descriptor,
        new java.lang.String[] { "Journal", "Position", "Timestamp", "TimestampPresent", });
    internal_static_com_alibaba_otter_canal_protocol_ClientRollback_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_com_alibaba_otter_canal_protocol_ClientRollback_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_alibaba_otter_canal_protocol_ClientRollback_descriptor,
        new java.lang.String[] { "Destination", "ClientId", "BatchId", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
