content: // 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 0;
      }
  
      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 0;
      }
      /**
       * <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 0;
        }
        /**
         * <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 0L;
      }
  
      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 0;
      }
  
      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)
  }
  