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

package org.session.libsignal.service.internal.push;

public final class SignalServiceProtos {
  private SignalServiceProtos() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
  }
  public interface EnvelopeOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required .signalservice.Envelope.Type type = 1;
    /**
     * <code>required .signalservice.Envelope.Type type = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasType();
    /**
     * <code>required .signalservice.Envelope.Type type = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Type getType();

    // optional string source = 2;
    /**
     * <code>optional string source = 2;</code>
     */
    boolean hasSource();
    /**
     * <code>optional string source = 2;</code>
     */
    java.lang.String getSource();
    /**
     * <code>optional string source = 2;</code>
     */
    com.google.protobuf.ByteString
        getSourceBytes();

    // optional uint32 sourceDevice = 7;
    /**
     * <code>optional uint32 sourceDevice = 7;</code>
     */
    boolean hasSourceDevice();
    /**
     * <code>optional uint32 sourceDevice = 7;</code>
     */
    int getSourceDevice();

    // optional uint64 timestamp = 5;
    /**
     * <code>optional uint64 timestamp = 5;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasTimestamp();
    /**
     * <code>optional uint64 timestamp = 5;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    long getTimestamp();

    // optional bytes content = 8;
    /**
     * <code>optional bytes content = 8;</code>
     */
    boolean hasContent();
    /**
     * <code>optional bytes content = 8;</code>
     */
    com.google.protobuf.ByteString getContent();

    // optional uint64 serverTimestamp = 10;
    /**
     * <code>optional uint64 serverTimestamp = 10;</code>
     */
    boolean hasServerTimestamp();
    /**
     * <code>optional uint64 serverTimestamp = 10;</code>
     */
    long getServerTimestamp();
  }
  /**
   * Protobuf type {@code signalservice.Envelope}
   */
  public static final class Envelope extends
      com.google.protobuf.GeneratedMessage
      implements EnvelopeOrBuilder {
    // Use Envelope.newBuilder() to construct.
    private Envelope(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Envelope(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Envelope defaultInstance;
    public static Envelope getDefaultInstance() {
      return defaultInstance;
    }

    public Envelope getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Envelope(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Type value = org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                type_ = value;
              }
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              source_ = input.readBytes();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000008;
              timestamp_ = input.readUInt64();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000004;
              sourceDevice_ = input.readUInt32();
              break;
            }
            case 66: {
              bitField0_ |= 0x00000010;
              content_ = input.readBytes();
              break;
            }
            case 80: {
              bitField0_ |= 0x00000020;
              serverTimestamp_ = input.readUInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_Envelope_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_Envelope_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.class, org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Builder.class);
    }

    public static com.google.protobuf.Parser<Envelope> PARSER =
        new com.google.protobuf.AbstractParser<Envelope>() {
      public Envelope parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Envelope(input, extensionRegistry);
      }
    };

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

    /**
     * Protobuf enum {@code signalservice.Envelope.Type}
     */
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNIDENTIFIED_SENDER = 6;</code>
       */
      UNIDENTIFIED_SENDER(0, 6),
      /**
       * <code>CLOSED_GROUP_CIPHERTEXT = 7;</code>
       */
      CLOSED_GROUP_CIPHERTEXT(1, 7),
      ;

      /**
       * <code>UNIDENTIFIED_SENDER = 6;</code>
       */
      public static final int UNIDENTIFIED_SENDER_VALUE = 6;
      /**
       * <code>CLOSED_GROUP_CIPHERTEXT = 7;</code>
       */
      public static final int CLOSED_GROUP_CIPHERTEXT_VALUE = 7;


      public final int getNumber() { return value; }

      public static Type valueOf(int value) {
        switch (value) {
          case 6: return UNIDENTIFIED_SENDER;
          case 7: return CLOSED_GROUP_CIPHERTEXT;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.getDescriptor().getEnumTypes().get(0);
      }

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

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

      private final int index;
      private final int value;

      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:signalservice.Envelope.Type)
    }

    private int bitField0_;
    // required .signalservice.Envelope.Type type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Type type_;
    /**
     * <code>required .signalservice.Envelope.Type type = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required .signalservice.Envelope.Type type = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Type getType() {
      return type_;
    }

    // optional string source = 2;
    public static final int SOURCE_FIELD_NUMBER = 2;
    private java.lang.Object source_;
    /**
     * <code>optional string source = 2;</code>
     */
    public boolean hasSource() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string source = 2;</code>
     */
    public java.lang.String getSource() {
      java.lang.Object ref = source_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          source_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string source = 2;</code>
     */
    public com.google.protobuf.ByteString
        getSourceBytes() {
      java.lang.Object ref = source_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        source_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional uint32 sourceDevice = 7;
    public static final int SOURCEDEVICE_FIELD_NUMBER = 7;
    private int sourceDevice_;
    /**
     * <code>optional uint32 sourceDevice = 7;</code>
     */
    public boolean hasSourceDevice() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional uint32 sourceDevice = 7;</code>
     */
    public int getSourceDevice() {
      return sourceDevice_;
    }

    // optional uint64 timestamp = 5;
    public static final int TIMESTAMP_FIELD_NUMBER = 5;
    private long timestamp_;
    /**
     * <code>optional uint64 timestamp = 5;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional uint64 timestamp = 5;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public long getTimestamp() {
      return timestamp_;
    }

    // optional bytes content = 8;
    public static final int CONTENT_FIELD_NUMBER = 8;
    private com.google.protobuf.ByteString content_;
    /**
     * <code>optional bytes content = 8;</code>
     */
    public boolean hasContent() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional bytes content = 8;</code>
     */
    public com.google.protobuf.ByteString getContent() {
      return content_;
    }

    // optional uint64 serverTimestamp = 10;
    public static final int SERVERTIMESTAMP_FIELD_NUMBER = 10;
    private long serverTimestamp_;
    /**
     * <code>optional uint64 serverTimestamp = 10;</code>
     */
    public boolean hasServerTimestamp() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional uint64 serverTimestamp = 10;</code>
     */
    public long getServerTimestamp() {
      return serverTimestamp_;
    }

    private void initFields() {
      type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Type.UNIDENTIFIED_SENDER;
      source_ = "";
      sourceDevice_ = 0;
      timestamp_ = 0L;
      content_ = com.google.protobuf.ByteString.EMPTY;
      serverTimestamp_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getSourceBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt64(5, timestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt32(7, sourceDevice_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(8, content_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeUInt64(10, serverTimestamp_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getSourceBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(5, timestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, sourceDevice_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, content_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(10, serverTimestamp_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code signalservice.Envelope}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.session.libsignal.service.internal.push.SignalServiceProtos.EnvelopeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_Envelope_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_Envelope_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.class, org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Builder.class);
      }

      // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Type.UNIDENTIFIED_SENDER;
        bitField0_ = (bitField0_ & ~0x00000001);
        source_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        sourceDevice_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        content_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        serverTimestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_Envelope_descriptor;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope getDefaultInstanceForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.getDefaultInstance();
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope build() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope buildPartial() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope result = new org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.source_ = source_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.sourceDevice_ = sourceDevice_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.timestamp_ = timestamp_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.content_ = content_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.serverTimestamp_ = serverTimestamp_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope) {
          return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope other) {
        if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasSource()) {
          bitField0_ |= 0x00000002;
          source_ = other.source_;
          onChanged();
        }
        if (other.hasSourceDevice()) {
          setSourceDevice(other.getSourceDevice());
        }
        if (other.hasTimestamp()) {
          setTimestamp(other.getTimestamp());
        }
        if (other.hasContent()) {
          setContent(other.getContent());
        }
        if (other.hasServerTimestamp()) {
          setServerTimestamp(other.getServerTimestamp());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasType()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required .signalservice.Envelope.Type type = 1;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Type type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Type.UNIDENTIFIED_SENDER;
      /**
       * <code>required .signalservice.Envelope.Type type = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required .signalservice.Envelope.Type type = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Type getType() {
        return type_;
      }
      /**
       * <code>required .signalservice.Envelope.Type type = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setType(org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required .signalservice.Envelope.Type type = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.Envelope.Type.UNIDENTIFIED_SENDER;
        onChanged();
        return this;
      }

      // optional string source = 2;
      private java.lang.Object source_ = "";
      /**
       * <code>optional string source = 2;</code>
       */
      public boolean hasSource() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string source = 2;</code>
       */
      public java.lang.String getSource() {
        java.lang.Object ref = source_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          source_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string source = 2;</code>
       */
      public com.google.protobuf.ByteString
          getSourceBytes() {
        java.lang.Object ref = source_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          source_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string source = 2;</code>
       */
      public Builder setSource(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        source_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string source = 2;</code>
       */
      public Builder clearSource() {
        bitField0_ = (bitField0_ & ~0x00000002);
        source_ = getDefaultInstance().getSource();
        onChanged();
        return this;
      }
      /**
       * <code>optional string source = 2;</code>
       */
      public Builder setSourceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        source_ = value;
        onChanged();
        return this;
      }

      // optional uint32 sourceDevice = 7;
      private int sourceDevice_ ;
      /**
       * <code>optional uint32 sourceDevice = 7;</code>
       */
      public boolean hasSourceDevice() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional uint32 sourceDevice = 7;</code>
       */
      public int getSourceDevice() {
        return sourceDevice_;
      }
      /**
       * <code>optional uint32 sourceDevice = 7;</code>
       */
      public Builder setSourceDevice(int value) {
        bitField0_ |= 0x00000004;
        sourceDevice_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 sourceDevice = 7;</code>
       */
      public Builder clearSourceDevice() {
        bitField0_ = (bitField0_ & ~0x00000004);
        sourceDevice_ = 0;
        onChanged();
        return this;
      }

      // optional uint64 timestamp = 5;
      private long timestamp_ ;
      /**
       * <code>optional uint64 timestamp = 5;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional uint64 timestamp = 5;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>optional uint64 timestamp = 5;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000008;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 timestamp = 5;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000008);
        timestamp_ = 0L;
        onChanged();
        return this;
      }

      // optional bytes content = 8;
      private com.google.protobuf.ByteString content_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes content = 8;</code>
       */
      public boolean hasContent() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bytes content = 8;</code>
       */
      public com.google.protobuf.ByteString getContent() {
        return content_;
      }
      /**
       * <code>optional bytes content = 8;</code>
       */
      public Builder setContent(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        content_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes content = 8;</code>
       */
      public Builder clearContent() {
        bitField0_ = (bitField0_ & ~0x00000010);
        content_ = getDefaultInstance().getContent();
        onChanged();
        return this;
      }

      // optional uint64 serverTimestamp = 10;
      private long serverTimestamp_ ;
      /**
       * <code>optional uint64 serverTimestamp = 10;</code>
       */
      public boolean hasServerTimestamp() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional uint64 serverTimestamp = 10;</code>
       */
      public long getServerTimestamp() {
        return serverTimestamp_;
      }
      /**
       * <code>optional uint64 serverTimestamp = 10;</code>
       */
      public Builder setServerTimestamp(long value) {
        bitField0_ |= 0x00000020;
        serverTimestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 serverTimestamp = 10;</code>
       */
      public Builder clearServerTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000020);
        serverTimestamp_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:signalservice.Envelope)
    }

    static {
      defaultInstance = new Envelope(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:signalservice.Envelope)
  }

  public interface TypingMessageOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional uint64 timestamp = 1;
    /**
     * <code>optional uint64 timestamp = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasTimestamp();
    /**
     * <code>optional uint64 timestamp = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    long getTimestamp();

    // optional .signalservice.TypingMessage.Action action = 2;
    /**
     * <code>optional .signalservice.TypingMessage.Action action = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasAction();
    /**
     * <code>optional .signalservice.TypingMessage.Action action = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Action getAction();
  }
  /**
   * Protobuf type {@code signalservice.TypingMessage}
   */
  public static final class TypingMessage extends
      com.google.protobuf.GeneratedMessage
      implements TypingMessageOrBuilder {
    // Use TypingMessage.newBuilder() to construct.
    private TypingMessage(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TypingMessage(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TypingMessage defaultInstance;
    public static TypingMessage getDefaultInstance() {
      return defaultInstance;
    }

    public TypingMessage getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TypingMessage(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              timestamp_ = input.readUInt64();
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Action value = org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Action.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                action_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_TypingMessage_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_TypingMessage_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.class, org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Builder.class);
    }

    public static com.google.protobuf.Parser<TypingMessage> PARSER =
        new com.google.protobuf.AbstractParser<TypingMessage>() {
      public TypingMessage parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TypingMessage(input, extensionRegistry);
      }
    };

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

    /**
     * Protobuf enum {@code signalservice.TypingMessage.Action}
     */
    public enum Action
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>STARTED = 0;</code>
       */
      STARTED(0, 0),
      /**
       * <code>STOPPED = 1;</code>
       */
      STOPPED(1, 1),
      ;

      /**
       * <code>STARTED = 0;</code>
       */
      public static final int STARTED_VALUE = 0;
      /**
       * <code>STOPPED = 1;</code>
       */
      public static final int STOPPED_VALUE = 1;


      public final int getNumber() { return value; }

      public static Action valueOf(int value) {
        switch (value) {
          case 0: return STARTED;
          case 1: return STOPPED;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.getDescriptor().getEnumTypes().get(0);
      }

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

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

      private final int index;
      private final int value;

      private Action(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:signalservice.TypingMessage.Action)
    }

    private int bitField0_;
    // optional uint64 timestamp = 1;
    public static final int TIMESTAMP_FIELD_NUMBER = 1;
    private long timestamp_;
    /**
     * <code>optional uint64 timestamp = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional uint64 timestamp = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public long getTimestamp() {
      return timestamp_;
    }

    // optional .signalservice.TypingMessage.Action action = 2;
    public static final int ACTION_FIELD_NUMBER = 2;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Action action_;
    /**
     * <code>optional .signalservice.TypingMessage.Action action = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasAction() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .signalservice.TypingMessage.Action action = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Action getAction() {
      return action_;
    }

    private void initFields() {
      timestamp_ = 0L;
      action_ = org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Action.STARTED;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt64(1, timestamp_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, action_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(1, timestamp_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, action_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code signalservice.TypingMessage}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_TypingMessage_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_TypingMessage_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.class, org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Builder.class);
      }

      // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        action_ = org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Action.STARTED;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_TypingMessage_descriptor;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage getDefaultInstanceForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.getDefaultInstance();
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage build() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage buildPartial() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage result = new org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.timestamp_ = timestamp_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.action_ = action_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage) {
          return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage other) {
        if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.getDefaultInstance()) return this;
        if (other.hasTimestamp()) {
          setTimestamp(other.getTimestamp());
        }
        if (other.hasAction()) {
          setAction(other.getAction());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional uint64 timestamp = 1;
      private long timestamp_ ;
      /**
       * <code>optional uint64 timestamp = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional uint64 timestamp = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>optional uint64 timestamp = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000001;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 timestamp = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000001);
        timestamp_ = 0L;
        onChanged();
        return this;
      }

      // optional .signalservice.TypingMessage.Action action = 2;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Action action_ = org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Action.STARTED;
      /**
       * <code>optional .signalservice.TypingMessage.Action action = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasAction() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .signalservice.TypingMessage.Action action = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Action getAction() {
        return action_;
      }
      /**
       * <code>optional .signalservice.TypingMessage.Action action = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setAction(org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Action value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        action_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .signalservice.TypingMessage.Action action = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearAction() {
        bitField0_ = (bitField0_ & ~0x00000002);
        action_ = org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Action.STARTED;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:signalservice.TypingMessage)
    }

    static {
      defaultInstance = new TypingMessage(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:signalservice.TypingMessage)
  }

  public interface ContentOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .signalservice.DataMessage dataMessage = 1;
    /**
     * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
     */
    boolean hasDataMessage();
    /**
     * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage getDataMessage();
    /**
     * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessageOrBuilder getDataMessageOrBuilder();

    // optional .signalservice.ReceiptMessage receiptMessage = 5;
    /**
     * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
     */
    boolean hasReceiptMessage();
    /**
     * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage getReceiptMessage();
    /**
     * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessageOrBuilder getReceiptMessageOrBuilder();

    // optional .signalservice.TypingMessage typingMessage = 6;
    /**
     * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
     */
    boolean hasTypingMessage();
    /**
     * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage getTypingMessage();
    /**
     * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessageOrBuilder getTypingMessageOrBuilder();

    // optional .signalservice.ConfigurationMessage configurationMessage = 7;
    /**
     * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
     */
    boolean hasConfigurationMessage();
    /**
     * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage getConfigurationMessage();
    /**
     * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessageOrBuilder getConfigurationMessageOrBuilder();
  }
  /**
   * Protobuf type {@code signalservice.Content}
   */
  public static final class Content extends
      com.google.protobuf.GeneratedMessage
      implements ContentOrBuilder {
    // Use Content.newBuilder() to construct.
    private Content(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Content(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Content defaultInstance;
    public static Content getDefaultInstance() {
      return defaultInstance;
    }

    public Content getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Content(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = dataMessage_.toBuilder();
              }
              dataMessage_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(dataMessage_);
                dataMessage_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 42: {
              org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = receiptMessage_.toBuilder();
              }
              receiptMessage_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(receiptMessage_);
                receiptMessage_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 50: {
              org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = typingMessage_.toBuilder();
              }
              typingMessage_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(typingMessage_);
                typingMessage_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 58: {
              org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = configurationMessage_.toBuilder();
              }
              configurationMessage_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(configurationMessage_);
                configurationMessage_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_Content_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_Content_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.session.libsignal.service.internal.push.SignalServiceProtos.Content.class, org.session.libsignal.service.internal.push.SignalServiceProtos.Content.Builder.class);
    }

    public static com.google.protobuf.Parser<Content> PARSER =
        new com.google.protobuf.AbstractParser<Content>() {
      public Content parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Content(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // optional .signalservice.DataMessage dataMessage = 1;
    public static final int DATAMESSAGE_FIELD_NUMBER = 1;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage dataMessage_;
    /**
     * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
     */
    public boolean hasDataMessage() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage getDataMessage() {
      return dataMessage_;
    }
    /**
     * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessageOrBuilder getDataMessageOrBuilder() {
      return dataMessage_;
    }

    // optional .signalservice.ReceiptMessage receiptMessage = 5;
    public static final int RECEIPTMESSAGE_FIELD_NUMBER = 5;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage receiptMessage_;
    /**
     * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
     */
    public boolean hasReceiptMessage() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage getReceiptMessage() {
      return receiptMessage_;
    }
    /**
     * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessageOrBuilder getReceiptMessageOrBuilder() {
      return receiptMessage_;
    }

    // optional .signalservice.TypingMessage typingMessage = 6;
    public static final int TYPINGMESSAGE_FIELD_NUMBER = 6;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage typingMessage_;
    /**
     * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
     */
    public boolean hasTypingMessage() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage getTypingMessage() {
      return typingMessage_;
    }
    /**
     * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessageOrBuilder getTypingMessageOrBuilder() {
      return typingMessage_;
    }

    // optional .signalservice.ConfigurationMessage configurationMessage = 7;
    public static final int CONFIGURATIONMESSAGE_FIELD_NUMBER = 7;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage configurationMessage_;
    /**
     * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
     */
    public boolean hasConfigurationMessage() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage getConfigurationMessage() {
      return configurationMessage_;
    }
    /**
     * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessageOrBuilder getConfigurationMessageOrBuilder() {
      return configurationMessage_;
    }

    private void initFields() {
      dataMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.getDefaultInstance();
      receiptMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.getDefaultInstance();
      typingMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.getDefaultInstance();
      configurationMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasDataMessage()) {
        if (!getDataMessage().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasConfigurationMessage()) {
        if (!getConfigurationMessage().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, dataMessage_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(5, receiptMessage_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(6, typingMessage_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(7, configurationMessage_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, dataMessage_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, receiptMessage_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, typingMessage_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, configurationMessage_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Content parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Content parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Content parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Content parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Content parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Content parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Content parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Content parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Content parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.Content parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.Content prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code signalservice.Content}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.session.libsignal.service.internal.push.SignalServiceProtos.ContentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_Content_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_Content_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.Content.class, org.session.libsignal.service.internal.push.SignalServiceProtos.Content.Builder.class);
      }

      // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.Content.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getDataMessageFieldBuilder();
          getReceiptMessageFieldBuilder();
          getTypingMessageFieldBuilder();
          getConfigurationMessageFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (dataMessageBuilder_ == null) {
          dataMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.getDefaultInstance();
        } else {
          dataMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (receiptMessageBuilder_ == null) {
          receiptMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.getDefaultInstance();
        } else {
          receiptMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (typingMessageBuilder_ == null) {
          typingMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.getDefaultInstance();
        } else {
          typingMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (configurationMessageBuilder_ == null) {
          configurationMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.getDefaultInstance();
        } else {
          configurationMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_Content_descriptor;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.Content getDefaultInstanceForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.Content.getDefaultInstance();
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.Content build() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.Content result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.Content buildPartial() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.Content result = new org.session.libsignal.service.internal.push.SignalServiceProtos.Content(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (dataMessageBuilder_ == null) {
          result.dataMessage_ = dataMessage_;
        } else {
          result.dataMessage_ = dataMessageBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (receiptMessageBuilder_ == null) {
          result.receiptMessage_ = receiptMessage_;
        } else {
          result.receiptMessage_ = receiptMessageBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (typingMessageBuilder_ == null) {
          result.typingMessage_ = typingMessage_;
        } else {
          result.typingMessage_ = typingMessageBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (configurationMessageBuilder_ == null) {
          result.configurationMessage_ = configurationMessage_;
        } else {
          result.configurationMessage_ = configurationMessageBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.Content) {
          return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.Content)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.Content other) {
        if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.Content.getDefaultInstance()) return this;
        if (other.hasDataMessage()) {
          mergeDataMessage(other.getDataMessage());
        }
        if (other.hasReceiptMessage()) {
          mergeReceiptMessage(other.getReceiptMessage());
        }
        if (other.hasTypingMessage()) {
          mergeTypingMessage(other.getTypingMessage());
        }
        if (other.hasConfigurationMessage()) {
          mergeConfigurationMessage(other.getConfigurationMessage());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasDataMessage()) {
          if (!getDataMessage().isInitialized()) {
            
            return false;
          }
        }
        if (hasConfigurationMessage()) {
          if (!getConfigurationMessage().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.session.libsignal.service.internal.push.SignalServiceProtos.Content parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.Content) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .signalservice.DataMessage dataMessage = 1;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage dataMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessageOrBuilder> dataMessageBuilder_;
      /**
       * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
       */
      public boolean hasDataMessage() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage getDataMessage() {
        if (dataMessageBuilder_ == null) {
          return dataMessage_;
        } else {
          return dataMessageBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
       */
      public Builder setDataMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage value) {
        if (dataMessageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          dataMessage_ = value;
          onChanged();
        } else {
          dataMessageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
       */
      public Builder setDataMessage(
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Builder builderForValue) {
        if (dataMessageBuilder_ == null) {
          dataMessage_ = builderForValue.build();
          onChanged();
        } else {
          dataMessageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
       */
      public Builder mergeDataMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage value) {
        if (dataMessageBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              dataMessage_ != org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.getDefaultInstance()) {
            dataMessage_ =
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.newBuilder(dataMessage_).mergeFrom(value).buildPartial();
          } else {
            dataMessage_ = value;
          }
          onChanged();
        } else {
          dataMessageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
       */
      public Builder clearDataMessage() {
        if (dataMessageBuilder_ == null) {
          dataMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.getDefaultInstance();
          onChanged();
        } else {
          dataMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Builder getDataMessageBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getDataMessageFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessageOrBuilder getDataMessageOrBuilder() {
        if (dataMessageBuilder_ != null) {
          return dataMessageBuilder_.getMessageOrBuilder();
        } else {
          return dataMessage_;
        }
      }
      /**
       * <code>optional .signalservice.DataMessage dataMessage = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessageOrBuilder> 
          getDataMessageFieldBuilder() {
        if (dataMessageBuilder_ == null) {
          dataMessageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessageOrBuilder>(
                  dataMessage_,
                  getParentForChildren(),
                  isClean());
          dataMessage_ = null;
        }
        return dataMessageBuilder_;
      }

      // optional .signalservice.ReceiptMessage receiptMessage = 5;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage receiptMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessageOrBuilder> receiptMessageBuilder_;
      /**
       * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
       */
      public boolean hasReceiptMessage() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage getReceiptMessage() {
        if (receiptMessageBuilder_ == null) {
          return receiptMessage_;
        } else {
          return receiptMessageBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
       */
      public Builder setReceiptMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage value) {
        if (receiptMessageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          receiptMessage_ = value;
          onChanged();
        } else {
          receiptMessageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
       */
      public Builder setReceiptMessage(
          org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Builder builderForValue) {
        if (receiptMessageBuilder_ == null) {
          receiptMessage_ = builderForValue.build();
          onChanged();
        } else {
          receiptMessageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
       */
      public Builder mergeReceiptMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage value) {
        if (receiptMessageBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              receiptMessage_ != org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.getDefaultInstance()) {
            receiptMessage_ =
              org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.newBuilder(receiptMessage_).mergeFrom(value).buildPartial();
          } else {
            receiptMessage_ = value;
          }
          onChanged();
        } else {
          receiptMessageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
       */
      public Builder clearReceiptMessage() {
        if (receiptMessageBuilder_ == null) {
          receiptMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.getDefaultInstance();
          onChanged();
        } else {
          receiptMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Builder getReceiptMessageBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getReceiptMessageFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessageOrBuilder getReceiptMessageOrBuilder() {
        if (receiptMessageBuilder_ != null) {
          return receiptMessageBuilder_.getMessageOrBuilder();
        } else {
          return receiptMessage_;
        }
      }
      /**
       * <code>optional .signalservice.ReceiptMessage receiptMessage = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessageOrBuilder> 
          getReceiptMessageFieldBuilder() {
        if (receiptMessageBuilder_ == null) {
          receiptMessageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessageOrBuilder>(
                  receiptMessage_,
                  getParentForChildren(),
                  isClean());
          receiptMessage_ = null;
        }
        return receiptMessageBuilder_;
      }

      // optional .signalservice.TypingMessage typingMessage = 6;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage typingMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessageOrBuilder> typingMessageBuilder_;
      /**
       * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
       */
      public boolean hasTypingMessage() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage getTypingMessage() {
        if (typingMessageBuilder_ == null) {
          return typingMessage_;
        } else {
          return typingMessageBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
       */
      public Builder setTypingMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage value) {
        if (typingMessageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          typingMessage_ = value;
          onChanged();
        } else {
          typingMessageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
       */
      public Builder setTypingMessage(
          org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Builder builderForValue) {
        if (typingMessageBuilder_ == null) {
          typingMessage_ = builderForValue.build();
          onChanged();
        } else {
          typingMessageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
       */
      public Builder mergeTypingMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage value) {
        if (typingMessageBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              typingMessage_ != org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.getDefaultInstance()) {
            typingMessage_ =
              org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.newBuilder(typingMessage_).mergeFrom(value).buildPartial();
          } else {
            typingMessage_ = value;
          }
          onChanged();
        } else {
          typingMessageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
       */
      public Builder clearTypingMessage() {
        if (typingMessageBuilder_ == null) {
          typingMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.getDefaultInstance();
          onChanged();
        } else {
          typingMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Builder getTypingMessageBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getTypingMessageFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessageOrBuilder getTypingMessageOrBuilder() {
        if (typingMessageBuilder_ != null) {
          return typingMessageBuilder_.getMessageOrBuilder();
        } else {
          return typingMessage_;
        }
      }
      /**
       * <code>optional .signalservice.TypingMessage typingMessage = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessageOrBuilder> 
          getTypingMessageFieldBuilder() {
        if (typingMessageBuilder_ == null) {
          typingMessageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.TypingMessageOrBuilder>(
                  typingMessage_,
                  getParentForChildren(),
                  isClean());
          typingMessage_ = null;
        }
        return typingMessageBuilder_;
      }

      // optional .signalservice.ConfigurationMessage configurationMessage = 7;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage configurationMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessageOrBuilder> configurationMessageBuilder_;
      /**
       * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
       */
      public boolean hasConfigurationMessage() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage getConfigurationMessage() {
        if (configurationMessageBuilder_ == null) {
          return configurationMessage_;
        } else {
          return configurationMessageBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
       */
      public Builder setConfigurationMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage value) {
        if (configurationMessageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          configurationMessage_ = value;
          onChanged();
        } else {
          configurationMessageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
       */
      public Builder setConfigurationMessage(
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Builder builderForValue) {
        if (configurationMessageBuilder_ == null) {
          configurationMessage_ = builderForValue.build();
          onChanged();
        } else {
          configurationMessageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
       */
      public Builder mergeConfigurationMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage value) {
        if (configurationMessageBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              configurationMessage_ != org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.getDefaultInstance()) {
            configurationMessage_ =
              org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.newBuilder(configurationMessage_).mergeFrom(value).buildPartial();
          } else {
            configurationMessage_ = value;
          }
          onChanged();
        } else {
          configurationMessageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
       */
      public Builder clearConfigurationMessage() {
        if (configurationMessageBuilder_ == null) {
          configurationMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.getDefaultInstance();
          onChanged();
        } else {
          configurationMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Builder getConfigurationMessageBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getConfigurationMessageFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessageOrBuilder getConfigurationMessageOrBuilder() {
        if (configurationMessageBuilder_ != null) {
          return configurationMessageBuilder_.getMessageOrBuilder();
        } else {
          return configurationMessage_;
        }
      }
      /**
       * <code>optional .signalservice.ConfigurationMessage configurationMessage = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessageOrBuilder> 
          getConfigurationMessageFieldBuilder() {
        if (configurationMessageBuilder_ == null) {
          configurationMessageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessageOrBuilder>(
                  configurationMessage_,
                  getParentForChildren(),
                  isClean());
          configurationMessage_ = null;
        }
        return configurationMessageBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:signalservice.Content)
    }

    static {
      defaultInstance = new Content(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:signalservice.Content)
  }

  public interface ClosedGroupCiphertextMessageWrapperOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bytes ciphertext = 1;
    /**
     * <code>optional bytes ciphertext = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasCiphertext();
    /**
     * <code>optional bytes ciphertext = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    com.google.protobuf.ByteString getCiphertext();

    // optional bytes ephemeralPublicKey = 2;
    /**
     * <code>optional bytes ephemeralPublicKey = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasEphemeralPublicKey();
    /**
     * <code>optional bytes ephemeralPublicKey = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    com.google.protobuf.ByteString getEphemeralPublicKey();
  }
  /**
   * Protobuf type {@code signalservice.ClosedGroupCiphertextMessageWrapper}
   */
  public static final class ClosedGroupCiphertextMessageWrapper extends
      com.google.protobuf.GeneratedMessage
      implements ClosedGroupCiphertextMessageWrapperOrBuilder {
    // Use ClosedGroupCiphertextMessageWrapper.newBuilder() to construct.
    private ClosedGroupCiphertextMessageWrapper(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ClosedGroupCiphertextMessageWrapper(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ClosedGroupCiphertextMessageWrapper defaultInstance;
    public static ClosedGroupCiphertextMessageWrapper getDefaultInstance() {
      return defaultInstance;
    }

    public ClosedGroupCiphertextMessageWrapper getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ClosedGroupCiphertextMessageWrapper(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              ciphertext_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              ephemeralPublicKey_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ClosedGroupCiphertextMessageWrapper_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ClosedGroupCiphertextMessageWrapper_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper.Builder.class);
    }

    public static com.google.protobuf.Parser<ClosedGroupCiphertextMessageWrapper> PARSER =
        new com.google.protobuf.AbstractParser<ClosedGroupCiphertextMessageWrapper>() {
      public ClosedGroupCiphertextMessageWrapper parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ClosedGroupCiphertextMessageWrapper(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // optional bytes ciphertext = 1;
    public static final int CIPHERTEXT_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString ciphertext_;
    /**
     * <code>optional bytes ciphertext = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasCiphertext() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bytes ciphertext = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public com.google.protobuf.ByteString getCiphertext() {
      return ciphertext_;
    }

    // optional bytes ephemeralPublicKey = 2;
    public static final int EPHEMERALPUBLICKEY_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString ephemeralPublicKey_;
    /**
     * <code>optional bytes ephemeralPublicKey = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasEphemeralPublicKey() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bytes ephemeralPublicKey = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public com.google.protobuf.ByteString getEphemeralPublicKey() {
      return ephemeralPublicKey_;
    }

    private void initFields() {
      ciphertext_ = com.google.protobuf.ByteString.EMPTY;
      ephemeralPublicKey_ = com.google.protobuf.ByteString.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, ciphertext_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, ephemeralPublicKey_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, ciphertext_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, ephemeralPublicKey_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code signalservice.ClosedGroupCiphertextMessageWrapper}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapperOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ClosedGroupCiphertextMessageWrapper_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ClosedGroupCiphertextMessageWrapper_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper.Builder.class);
      }

      // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        ciphertext_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        ephemeralPublicKey_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ClosedGroupCiphertextMessageWrapper_descriptor;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper getDefaultInstanceForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper.getDefaultInstance();
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper build() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper buildPartial() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper result = new org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.ciphertext_ = ciphertext_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.ephemeralPublicKey_ = ephemeralPublicKey_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper) {
          return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper other) {
        if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper.getDefaultInstance()) return this;
        if (other.hasCiphertext()) {
          setCiphertext(other.getCiphertext());
        }
        if (other.hasEphemeralPublicKey()) {
          setEphemeralPublicKey(other.getEphemeralPublicKey());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.ClosedGroupCiphertextMessageWrapper) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bytes ciphertext = 1;
      private com.google.protobuf.ByteString ciphertext_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes ciphertext = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasCiphertext() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bytes ciphertext = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public com.google.protobuf.ByteString getCiphertext() {
        return ciphertext_;
      }
      /**
       * <code>optional bytes ciphertext = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setCiphertext(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        ciphertext_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes ciphertext = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearCiphertext() {
        bitField0_ = (bitField0_ & ~0x00000001);
        ciphertext_ = getDefaultInstance().getCiphertext();
        onChanged();
        return this;
      }

      // optional bytes ephemeralPublicKey = 2;
      private com.google.protobuf.ByteString ephemeralPublicKey_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes ephemeralPublicKey = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasEphemeralPublicKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bytes ephemeralPublicKey = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public com.google.protobuf.ByteString getEphemeralPublicKey() {
        return ephemeralPublicKey_;
      }
      /**
       * <code>optional bytes ephemeralPublicKey = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setEphemeralPublicKey(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        ephemeralPublicKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes ephemeralPublicKey = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearEphemeralPublicKey() {
        bitField0_ = (bitField0_ & ~0x00000002);
        ephemeralPublicKey_ = getDefaultInstance().getEphemeralPublicKey();
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:signalservice.ClosedGroupCiphertextMessageWrapper)
    }

    static {
      defaultInstance = new ClosedGroupCiphertextMessageWrapper(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:signalservice.ClosedGroupCiphertextMessageWrapper)
  }

  public interface KeyPairOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required bytes publicKey = 1;
    /**
     * <code>required bytes publicKey = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasPublicKey();
    /**
     * <code>required bytes publicKey = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    com.google.protobuf.ByteString getPublicKey();

    // required bytes privateKey = 2;
    /**
     * <code>required bytes privateKey = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasPrivateKey();
    /**
     * <code>required bytes privateKey = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    com.google.protobuf.ByteString getPrivateKey();
  }
  /**
   * Protobuf type {@code signalservice.KeyPair}
   */
  public static final class KeyPair extends
      com.google.protobuf.GeneratedMessage
      implements KeyPairOrBuilder {
    // Use KeyPair.newBuilder() to construct.
    private KeyPair(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private KeyPair(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final KeyPair defaultInstance;
    public static KeyPair getDefaultInstance() {
      return defaultInstance;
    }

    public KeyPair getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private KeyPair(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              publicKey_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              privateKey_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_KeyPair_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_KeyPair_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.class, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder.class);
    }

    public static com.google.protobuf.Parser<KeyPair> PARSER =
        new com.google.protobuf.AbstractParser<KeyPair>() {
      public KeyPair parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new KeyPair(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // required bytes publicKey = 1;
    public static final int PUBLICKEY_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString publicKey_;
    /**
     * <code>required bytes publicKey = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasPublicKey() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required bytes publicKey = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public com.google.protobuf.ByteString getPublicKey() {
      return publicKey_;
    }

    // required bytes privateKey = 2;
    public static final int PRIVATEKEY_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString privateKey_;
    /**
     * <code>required bytes privateKey = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasPrivateKey() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>required bytes privateKey = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public com.google.protobuf.ByteString getPrivateKey() {
      return privateKey_;
    }

    private void initFields() {
      publicKey_ = com.google.protobuf.ByteString.EMPTY;
      privateKey_ = com.google.protobuf.ByteString.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasPublicKey()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasPrivateKey()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, publicKey_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, privateKey_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, publicKey_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, privateKey_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code signalservice.KeyPair}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPairOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_KeyPair_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_KeyPair_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.class, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder.class);
      }

      // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        publicKey_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        privateKey_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_KeyPair_descriptor;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair getDefaultInstanceForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.getDefaultInstance();
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair build() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair buildPartial() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair result = new org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.publicKey_ = publicKey_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.privateKey_ = privateKey_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair) {
          return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair other) {
        if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.getDefaultInstance()) return this;
        if (other.hasPublicKey()) {
          setPublicKey(other.getPublicKey());
        }
        if (other.hasPrivateKey()) {
          setPrivateKey(other.getPrivateKey());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasPublicKey()) {
          
          return false;
        }
        if (!hasPrivateKey()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required bytes publicKey = 1;
      private com.google.protobuf.ByteString publicKey_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes publicKey = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasPublicKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required bytes publicKey = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public com.google.protobuf.ByteString getPublicKey() {
        return publicKey_;
      }
      /**
       * <code>required bytes publicKey = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setPublicKey(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        publicKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes publicKey = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearPublicKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        publicKey_ = getDefaultInstance().getPublicKey();
        onChanged();
        return this;
      }

      // required bytes privateKey = 2;
      private com.google.protobuf.ByteString privateKey_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes privateKey = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasPrivateKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required bytes privateKey = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public com.google.protobuf.ByteString getPrivateKey() {
        return privateKey_;
      }
      /**
       * <code>required bytes privateKey = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setPrivateKey(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        privateKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes privateKey = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearPrivateKey() {
        bitField0_ = (bitField0_ & ~0x00000002);
        privateKey_ = getDefaultInstance().getPrivateKey();
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:signalservice.KeyPair)
    }

    static {
      defaultInstance = new KeyPair(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:signalservice.KeyPair)
  }

  public interface DataMessageOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string body = 1;
    /**
     * <code>optional string body = 1;</code>
     */
    boolean hasBody();
    /**
     * <code>optional string body = 1;</code>
     */
    java.lang.String getBody();
    /**
     * <code>optional string body = 1;</code>
     */
    com.google.protobuf.ByteString
        getBodyBytes();

    // repeated .signalservice.AttachmentPointer attachments = 2;
    /**
     * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
     */
    java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer> 
        getAttachmentsList();
    /**
     * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getAttachments(int index);
    /**
     * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
     */
    int getAttachmentsCount();
    /**
     * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
     */
    java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder> 
        getAttachmentsOrBuilderList();
    /**
     * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getAttachmentsOrBuilder(
        int index);

    // optional .signalservice.GroupContext group = 3;
    /**
     * <code>optional .signalservice.GroupContext group = 3;</code>
     */
    boolean hasGroup();
    /**
     * <code>optional .signalservice.GroupContext group = 3;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext getGroup();
    /**
     * <code>optional .signalservice.GroupContext group = 3;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContextOrBuilder getGroupOrBuilder();

    // optional uint32 flags = 4;
    /**
     * <code>optional uint32 flags = 4;</code>
     */
    boolean hasFlags();
    /**
     * <code>optional uint32 flags = 4;</code>
     */
    int getFlags();

    // optional uint32 expireTimer = 5;
    /**
     * <code>optional uint32 expireTimer = 5;</code>
     */
    boolean hasExpireTimer();
    /**
     * <code>optional uint32 expireTimer = 5;</code>
     */
    int getExpireTimer();

    // optional bytes profileKey = 6;
    /**
     * <code>optional bytes profileKey = 6;</code>
     */
    boolean hasProfileKey();
    /**
     * <code>optional bytes profileKey = 6;</code>
     */
    com.google.protobuf.ByteString getProfileKey();

    // optional uint64 timestamp = 7;
    /**
     * <code>optional uint64 timestamp = 7;</code>
     */
    boolean hasTimestamp();
    /**
     * <code>optional uint64 timestamp = 7;</code>
     */
    long getTimestamp();

    // optional .signalservice.DataMessage.Quote quote = 8;
    /**
     * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
     */
    boolean hasQuote();
    /**
     * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote getQuote();
    /**
     * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.QuoteOrBuilder getQuoteOrBuilder();

    // repeated .signalservice.DataMessage.Contact contact = 9;
    /**
     * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
     */
    java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact> 
        getContactList();
    /**
     * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact getContact(int index);
    /**
     * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
     */
    int getContactCount();
    /**
     * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
     */
    java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ContactOrBuilder> 
        getContactOrBuilderList();
    /**
     * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ContactOrBuilder getContactOrBuilder(
        int index);

    // repeated .signalservice.DataMessage.Preview preview = 10;
    /**
     * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
     */
    java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview> 
        getPreviewList();
    /**
     * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview getPreview(int index);
    /**
     * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
     */
    int getPreviewCount();
    /**
     * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
     */
    java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.PreviewOrBuilder> 
        getPreviewOrBuilderList();
    /**
     * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.PreviewOrBuilder getPreviewOrBuilder(
        int index);

    // optional .signalservice.DataMessage.LokiProfile profile = 101;
    /**
     * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
     */
    boolean hasProfile();
    /**
     * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile getProfile();
    /**
     * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfileOrBuilder getProfileOrBuilder();

    // optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;
    /**
     * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
     */
    boolean hasClosedGroupControlMessage();
    /**
     * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage getClosedGroupControlMessage();
    /**
     * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessageOrBuilder getClosedGroupControlMessageOrBuilder();

    // optional string syncTarget = 105;
    /**
     * <code>optional string syncTarget = 105;</code>
     */
    boolean hasSyncTarget();
    /**
     * <code>optional string syncTarget = 105;</code>
     */
    java.lang.String getSyncTarget();
    /**
     * <code>optional string syncTarget = 105;</code>
     */
    com.google.protobuf.ByteString
        getSyncTargetBytes();

    // optional .signalservice.PublicChatInfo publicChatInfo = 999;
    /**
     * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
     */
    boolean hasPublicChatInfo();
    /**
     * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo getPublicChatInfo();
    /**
     * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfoOrBuilder getPublicChatInfoOrBuilder();
  }
  /**
   * Protobuf type {@code signalservice.DataMessage}
   */
  public static final class DataMessage extends
      com.google.protobuf.GeneratedMessage
      implements DataMessageOrBuilder {
    // Use DataMessage.newBuilder() to construct.
    private DataMessage(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DataMessage(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final DataMessage defaultInstance;
    public static DataMessage getDefaultInstance() {
      return defaultInstance;
    }

    public DataMessage getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DataMessage(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              body_ = input.readBytes();
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                attachments_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer>();
                mutable_bitField0_ |= 0x00000002;
              }
              attachments_.add(input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.PARSER, extensionRegistry));
              break;
            }
            case 26: {
              org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = group_.toBuilder();
              }
              group_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(group_);
                group_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 32: {
              bitField0_ |= 0x00000004;
              flags_ = input.readUInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000008;
              expireTimer_ = input.readUInt32();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000010;
              profileKey_ = input.readBytes();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000020;
              timestamp_ = input.readUInt64();
              break;
            }
            case 66: {
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = quote_.toBuilder();
              }
              quote_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(quote_);
                quote_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 74: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                contact_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact>();
                mutable_bitField0_ |= 0x00000100;
              }
              contact_.add(input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PARSER, extensionRegistry));
              break;
            }
            case 82: {
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                preview_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview>();
                mutable_bitField0_ |= 0x00000200;
              }
              preview_.add(input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.PARSER, extensionRegistry));
              break;
            }
            case 810: {
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = profile_.toBuilder();
              }
              profile_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(profile_);
                profile_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 834: {
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = closedGroupControlMessage_.toBuilder();
              }
              closedGroupControlMessage_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(closedGroupControlMessage_);
                closedGroupControlMessage_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 842: {
              bitField0_ |= 0x00000200;
              syncTarget_ = input.readBytes();
              break;
            }
            case 7994: {
              org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000400) == 0x00000400)) {
                subBuilder = publicChatInfo_.toBuilder();
              }
              publicChatInfo_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(publicChatInfo_);
                publicChatInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000400;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          attachments_ = java.util.Collections.unmodifiableList(attachments_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          contact_ = java.util.Collections.unmodifiableList(contact_);
        }
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          preview_ = java.util.Collections.unmodifiableList(preview_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Builder.class);
    }

    public static com.google.protobuf.Parser<DataMessage> PARSER =
        new com.google.protobuf.AbstractParser<DataMessage>() {
      public DataMessage parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DataMessage(input, extensionRegistry);
      }
    };

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

    /**
     * Protobuf enum {@code signalservice.DataMessage.Flags}
     */
    public enum Flags
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>EXPIRATION_TIMER_UPDATE = 2;</code>
       */
      EXPIRATION_TIMER_UPDATE(0, 2),
      ;

      /**
       * <code>EXPIRATION_TIMER_UPDATE = 2;</code>
       */
      public static final int EXPIRATION_TIMER_UPDATE_VALUE = 2;


      public final int getNumber() { return value; }

      public static Flags valueOf(int value) {
        switch (value) {
          case 2: return EXPIRATION_TIMER_UPDATE;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.getDescriptor().getEnumTypes().get(0);
      }

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

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

      private final int index;
      private final int value;

      private Flags(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:signalservice.DataMessage.Flags)
    }

    public interface QuoteOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // optional uint64 id = 1;
      /**
       * <code>optional uint64 id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      boolean hasId();
      /**
       * <code>optional uint64 id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      long getId();

      // optional string author = 2;
      /**
       * <code>optional string author = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      boolean hasAuthor();
      /**
       * <code>optional string author = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      java.lang.String getAuthor();
      /**
       * <code>optional string author = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      com.google.protobuf.ByteString
          getAuthorBytes();

      // optional string text = 3;
      /**
       * <code>optional string text = 3;</code>
       */
      boolean hasText();
      /**
       * <code>optional string text = 3;</code>
       */
      java.lang.String getText();
      /**
       * <code>optional string text = 3;</code>
       */
      com.google.protobuf.ByteString
          getTextBytes();

      // repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;
      /**
       * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
       */
      java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment> 
          getAttachmentsList();
      /**
       * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment getAttachments(int index);
      /**
       * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
       */
      int getAttachmentsCount();
      /**
       * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
       */
      java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachmentOrBuilder> 
          getAttachmentsOrBuilderList();
      /**
       * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachmentOrBuilder getAttachmentsOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code signalservice.DataMessage.Quote}
     */
    public static final class Quote extends
        com.google.protobuf.GeneratedMessage
        implements QuoteOrBuilder {
      // Use Quote.newBuilder() to construct.
      private Quote(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Quote(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final Quote defaultInstance;
      public static Quote getDefaultInstance() {
        return defaultInstance;
      }

      public Quote getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Quote(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 8: {
                bitField0_ |= 0x00000001;
                id_ = input.readUInt64();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                author_ = input.readBytes();
                break;
              }
              case 26: {
                bitField0_ |= 0x00000004;
                text_ = input.readBytes();
                break;
              }
              case 34: {
                if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                  attachments_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment>();
                  mutable_bitField0_ |= 0x00000008;
                }
                attachments_.add(input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.PARSER, extensionRegistry));
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
            attachments_ = java.util.Collections.unmodifiableList(attachments_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Quote_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Quote_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.Builder.class);
      }

      public static com.google.protobuf.Parser<Quote> PARSER =
          new com.google.protobuf.AbstractParser<Quote>() {
        public Quote parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Quote(input, extensionRegistry);
        }
      };

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

      public interface QuotedAttachmentOrBuilder
          extends com.google.protobuf.MessageOrBuilder {

        // optional string contentType = 1;
        /**
         * <code>optional string contentType = 1;</code>
         */
        boolean hasContentType();
        /**
         * <code>optional string contentType = 1;</code>
         */
        java.lang.String getContentType();
        /**
         * <code>optional string contentType = 1;</code>
         */
        com.google.protobuf.ByteString
            getContentTypeBytes();

        // optional string fileName = 2;
        /**
         * <code>optional string fileName = 2;</code>
         */
        boolean hasFileName();
        /**
         * <code>optional string fileName = 2;</code>
         */
        java.lang.String getFileName();
        /**
         * <code>optional string fileName = 2;</code>
         */
        com.google.protobuf.ByteString
            getFileNameBytes();

        // optional .signalservice.AttachmentPointer thumbnail = 3;
        /**
         * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
         */
        boolean hasThumbnail();
        /**
         * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
         */
        org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getThumbnail();
        /**
         * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
         */
        org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getThumbnailOrBuilder();

        // optional uint32 flags = 4;
        /**
         * <code>optional uint32 flags = 4;</code>
         */
        boolean hasFlags();
        /**
         * <code>optional uint32 flags = 4;</code>
         */
        int getFlags();
      }
      /**
       * Protobuf type {@code signalservice.DataMessage.Quote.QuotedAttachment}
       */
      public static final class QuotedAttachment extends
          com.google.protobuf.GeneratedMessage
          implements QuotedAttachmentOrBuilder {
        // Use QuotedAttachment.newBuilder() to construct.
        private QuotedAttachment(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
          super(builder);
          this.unknownFields = builder.getUnknownFields();
        }
        private QuotedAttachment(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final QuotedAttachment defaultInstance;
        public static QuotedAttachment getDefaultInstance() {
          return defaultInstance;
        }

        public QuotedAttachment getDefaultInstanceForType() {
          return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
            getUnknownFields() {
          return this.unknownFields;
        }
        private QuotedAttachment(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          initFields();
          int mutable_bitField0_ = 0;
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
              com.google.protobuf.UnknownFieldSet.newBuilder();
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                default: {
                  if (!parseUnknownField(input, unknownFields,
                                         extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
                case 10: {
                  bitField0_ |= 0x00000001;
                  contentType_ = input.readBytes();
                  break;
                }
                case 18: {
                  bitField0_ |= 0x00000002;
                  fileName_ = input.readBytes();
                  break;
                }
                case 26: {
                  org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder subBuilder = null;
                  if (((bitField0_ & 0x00000004) == 0x00000004)) {
                    subBuilder = thumbnail_.toBuilder();
                  }
                  thumbnail_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.PARSER, extensionRegistry);
                  if (subBuilder != null) {
                    subBuilder.mergeFrom(thumbnail_);
                    thumbnail_ = subBuilder.buildPartial();
                  }
                  bitField0_ |= 0x00000004;
                  break;
                }
                case 32: {
                  bitField0_ |= 0x00000008;
                  flags_ = input.readUInt32();
                  break;
                }
              }
            }
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(this);
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(
                e.getMessage()).setUnfinishedMessage(this);
          } finally {
            this.unknownFields = unknownFields.build();
            makeExtensionsImmutable();
          }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Quote_QuotedAttachment_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Quote_QuotedAttachment_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.Builder.class);
        }

        public static com.google.protobuf.Parser<QuotedAttachment> PARSER =
            new com.google.protobuf.AbstractParser<QuotedAttachment>() {
          public QuotedAttachment parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new QuotedAttachment(input, extensionRegistry);
          }
        };

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

        /**
         * Protobuf enum {@code signalservice.DataMessage.Quote.QuotedAttachment.Flags}
         */
        public enum Flags
            implements com.google.protobuf.ProtocolMessageEnum {
          /**
           * <code>VOICE_MESSAGE = 1;</code>
           */
          VOICE_MESSAGE(0, 1),
          ;

          /**
           * <code>VOICE_MESSAGE = 1;</code>
           */
          public static final int VOICE_MESSAGE_VALUE = 1;


          public final int getNumber() { return value; }

          public static Flags valueOf(int value) {
            switch (value) {
              case 1: return VOICE_MESSAGE;
              default: return null;
            }
          }

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

          public final com.google.protobuf.Descriptors.EnumValueDescriptor
              getValueDescriptor() {
            return getDescriptor().getValues().get(index);
          }
          public final com.google.protobuf.Descriptors.EnumDescriptor
              getDescriptorForType() {
            return getDescriptor();
          }
          public static final com.google.protobuf.Descriptors.EnumDescriptor
              getDescriptor() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.getDescriptor().getEnumTypes().get(0);
          }

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

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

          private final int index;
          private final int value;

          private Flags(int index, int value) {
            this.index = index;
            this.value = value;
          }

          // @@protoc_insertion_point(enum_scope:signalservice.DataMessage.Quote.QuotedAttachment.Flags)
        }

        private int bitField0_;
        // optional string contentType = 1;
        public static final int CONTENTTYPE_FIELD_NUMBER = 1;
        private java.lang.Object contentType_;
        /**
         * <code>optional string contentType = 1;</code>
         */
        public boolean hasContentType() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string contentType = 1;</code>
         */
        public java.lang.String getContentType() {
          java.lang.Object ref = contentType_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              contentType_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string contentType = 1;</code>
         */
        public com.google.protobuf.ByteString
            getContentTypeBytes() {
          java.lang.Object ref = contentType_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            contentType_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string fileName = 2;
        public static final int FILENAME_FIELD_NUMBER = 2;
        private java.lang.Object fileName_;
        /**
         * <code>optional string fileName = 2;</code>
         */
        public boolean hasFileName() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string fileName = 2;</code>
         */
        public java.lang.String getFileName() {
          java.lang.Object ref = fileName_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              fileName_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string fileName = 2;</code>
         */
        public com.google.protobuf.ByteString
            getFileNameBytes() {
          java.lang.Object ref = fileName_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            fileName_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional .signalservice.AttachmentPointer thumbnail = 3;
        public static final int THUMBNAIL_FIELD_NUMBER = 3;
        private org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer thumbnail_;
        /**
         * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
         */
        public boolean hasThumbnail() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getThumbnail() {
          return thumbnail_;
        }
        /**
         * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getThumbnailOrBuilder() {
          return thumbnail_;
        }

        // optional uint32 flags = 4;
        public static final int FLAGS_FIELD_NUMBER = 4;
        private int flags_;
        /**
         * <code>optional uint32 flags = 4;</code>
         */
        public boolean hasFlags() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional uint32 flags = 4;</code>
         */
        public int getFlags() {
          return flags_;
        }

        private void initFields() {
          contentType_ = "";
          fileName_ = "";
          thumbnail_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
          flags_ = 0;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
          byte isInitialized = memoizedIsInitialized;
          if (isInitialized != -1) return isInitialized == 1;

          memoizedIsInitialized = 1;
          return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          getSerializedSize();
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            output.writeBytes(1, getContentTypeBytes());
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            output.writeBytes(2, getFileNameBytes());
          }
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            output.writeMessage(3, thumbnail_);
          }
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            output.writeUInt32(4, flags_);
          }
          getUnknownFields().writeTo(output);
        }

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

          size = 0;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(1, getContentTypeBytes());
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(2, getFileNameBytes());
          }
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            size += com.google.protobuf.CodedOutputStream
              .computeMessageSize(3, thumbnail_);
          }
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            size += com.google.protobuf.CodedOutputStream
              .computeUInt32Size(4, flags_);
          }
          size += getUnknownFields().getSerializedSize();
          memoizedSerializedSize = size;
          return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
            throws java.io.ObjectStreamException {
          return super.writeReplace();
        }

        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment parseFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment parseDelimitedFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment parseFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment prototype) {
          return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          Builder builder = new Builder(parent);
          return builder;
        }
        /**
         * Protobuf type {@code signalservice.DataMessage.Quote.QuotedAttachment}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessage.Builder<Builder>
           implements org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachmentOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Quote_QuotedAttachment_descriptor;
          }

          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Quote_QuotedAttachment_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.Builder.class);
          }

          // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.newBuilder()
          private Builder() {
            maybeForceBuilderInitialization();
          }

          private Builder(
              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            super(parent);
            maybeForceBuilderInitialization();
          }
          private void maybeForceBuilderInitialization() {
            if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
              getThumbnailFieldBuilder();
            }
          }
          private static Builder create() {
            return new Builder();
          }

          public Builder clear() {
            super.clear();
            contentType_ = "";
            bitField0_ = (bitField0_ & ~0x00000001);
            fileName_ = "";
            bitField0_ = (bitField0_ & ~0x00000002);
            if (thumbnailBuilder_ == null) {
              thumbnail_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
            } else {
              thumbnailBuilder_.clear();
            }
            bitField0_ = (bitField0_ & ~0x00000004);
            flags_ = 0;
            bitField0_ = (bitField0_ & ~0x00000008);
            return this;
          }

          public Builder clone() {
            return create().mergeFrom(buildPartial());
          }

          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Quote_QuotedAttachment_descriptor;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment getDefaultInstanceForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.getDefaultInstance();
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment build() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment buildPartial() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment result = new org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment(this);
            int from_bitField0_ = bitField0_;
            int to_bitField0_ = 0;
            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
              to_bitField0_ |= 0x00000001;
            }
            result.contentType_ = contentType_;
            if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
              to_bitField0_ |= 0x00000002;
            }
            result.fileName_ = fileName_;
            if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
              to_bitField0_ |= 0x00000004;
            }
            if (thumbnailBuilder_ == null) {
              result.thumbnail_ = thumbnail_;
            } else {
              result.thumbnail_ = thumbnailBuilder_.build();
            }
            if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
              to_bitField0_ |= 0x00000008;
            }
            result.flags_ = flags_;
            result.bitField0_ = to_bitField0_;
            onBuilt();
            return result;
          }

          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment) {
              return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }

          public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment other) {
            if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.getDefaultInstance()) return this;
            if (other.hasContentType()) {
              bitField0_ |= 0x00000001;
              contentType_ = other.contentType_;
              onChanged();
            }
            if (other.hasFileName()) {
              bitField0_ |= 0x00000002;
              fileName_ = other.fileName_;
              onChanged();
            }
            if (other.hasThumbnail()) {
              mergeThumbnail(other.getThumbnail());
            }
            if (other.hasFlags()) {
              setFlags(other.getFlags());
            }
            this.mergeUnknownFields(other.getUnknownFields());
            return this;
          }

          public final boolean isInitialized() {
            return true;
          }

          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment parsedMessage = null;
            try {
              parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment) e.getUnfinishedMessage();
              throw e;
            } finally {
              if (parsedMessage != null) {
                mergeFrom(parsedMessage);
              }
            }
            return this;
          }
          private int bitField0_;

          // optional string contentType = 1;
          private java.lang.Object contentType_ = "";
          /**
           * <code>optional string contentType = 1;</code>
           */
          public boolean hasContentType() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
          }
          /**
           * <code>optional string contentType = 1;</code>
           */
          public java.lang.String getContentType() {
            java.lang.Object ref = contentType_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              contentType_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string contentType = 1;</code>
           */
          public com.google.protobuf.ByteString
              getContentTypeBytes() {
            java.lang.Object ref = contentType_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              contentType_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string contentType = 1;</code>
           */
          public Builder setContentType(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
            contentType_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string contentType = 1;</code>
           */
          public Builder clearContentType() {
            bitField0_ = (bitField0_ & ~0x00000001);
            contentType_ = getDefaultInstance().getContentType();
            onChanged();
            return this;
          }
          /**
           * <code>optional string contentType = 1;</code>
           */
          public Builder setContentTypeBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
            contentType_ = value;
            onChanged();
            return this;
          }

          // optional string fileName = 2;
          private java.lang.Object fileName_ = "";
          /**
           * <code>optional string fileName = 2;</code>
           */
          public boolean hasFileName() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
          }
          /**
           * <code>optional string fileName = 2;</code>
           */
          public java.lang.String getFileName() {
            java.lang.Object ref = fileName_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              fileName_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string fileName = 2;</code>
           */
          public com.google.protobuf.ByteString
              getFileNameBytes() {
            java.lang.Object ref = fileName_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              fileName_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string fileName = 2;</code>
           */
          public Builder setFileName(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
            fileName_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string fileName = 2;</code>
           */
          public Builder clearFileName() {
            bitField0_ = (bitField0_ & ~0x00000002);
            fileName_ = getDefaultInstance().getFileName();
            onChanged();
            return this;
          }
          /**
           * <code>optional string fileName = 2;</code>
           */
          public Builder setFileNameBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
            fileName_ = value;
            onChanged();
            return this;
          }

          // optional .signalservice.AttachmentPointer thumbnail = 3;
          private org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer thumbnail_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
          private com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder> thumbnailBuilder_;
          /**
           * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
           */
          public boolean hasThumbnail() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
          }
          /**
           * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
           */
          public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getThumbnail() {
            if (thumbnailBuilder_ == null) {
              return thumbnail_;
            } else {
              return thumbnailBuilder_.getMessage();
            }
          }
          /**
           * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
           */
          public Builder setThumbnail(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer value) {
            if (thumbnailBuilder_ == null) {
              if (value == null) {
                throw new NullPointerException();
              }
              thumbnail_ = value;
              onChanged();
            } else {
              thumbnailBuilder_.setMessage(value);
            }
            bitField0_ |= 0x00000004;
            return this;
          }
          /**
           * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
           */
          public Builder setThumbnail(
              org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder builderForValue) {
            if (thumbnailBuilder_ == null) {
              thumbnail_ = builderForValue.build();
              onChanged();
            } else {
              thumbnailBuilder_.setMessage(builderForValue.build());
            }
            bitField0_ |= 0x00000004;
            return this;
          }
          /**
           * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
           */
          public Builder mergeThumbnail(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer value) {
            if (thumbnailBuilder_ == null) {
              if (((bitField0_ & 0x00000004) == 0x00000004) &&
                  thumbnail_ != org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance()) {
                thumbnail_ =
                  org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.newBuilder(thumbnail_).mergeFrom(value).buildPartial();
              } else {
                thumbnail_ = value;
              }
              onChanged();
            } else {
              thumbnailBuilder_.mergeFrom(value);
            }
            bitField0_ |= 0x00000004;
            return this;
          }
          /**
           * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
           */
          public Builder clearThumbnail() {
            if (thumbnailBuilder_ == null) {
              thumbnail_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
              onChanged();
            } else {
              thumbnailBuilder_.clear();
            }
            bitField0_ = (bitField0_ & ~0x00000004);
            return this;
          }
          /**
           * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
           */
          public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder getThumbnailBuilder() {
            bitField0_ |= 0x00000004;
            onChanged();
            return getThumbnailFieldBuilder().getBuilder();
          }
          /**
           * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
           */
          public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getThumbnailOrBuilder() {
            if (thumbnailBuilder_ != null) {
              return thumbnailBuilder_.getMessageOrBuilder();
            } else {
              return thumbnail_;
            }
          }
          /**
           * <code>optional .signalservice.AttachmentPointer thumbnail = 3;</code>
           */
          private com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder> 
              getThumbnailFieldBuilder() {
            if (thumbnailBuilder_ == null) {
              thumbnailBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                  org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder>(
                      thumbnail_,
                      getParentForChildren(),
                      isClean());
              thumbnail_ = null;
            }
            return thumbnailBuilder_;
          }

          // optional uint32 flags = 4;
          private int flags_ ;
          /**
           * <code>optional uint32 flags = 4;</code>
           */
          public boolean hasFlags() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
          }
          /**
           * <code>optional uint32 flags = 4;</code>
           */
          public int getFlags() {
            return flags_;
          }
          /**
           * <code>optional uint32 flags = 4;</code>
           */
          public Builder setFlags(int value) {
            bitField0_ |= 0x00000008;
            flags_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional uint32 flags = 4;</code>
           */
          public Builder clearFlags() {
            bitField0_ = (bitField0_ & ~0x00000008);
            flags_ = 0;
            onChanged();
            return this;
          }

          // @@protoc_insertion_point(builder_scope:signalservice.DataMessage.Quote.QuotedAttachment)
        }

        static {
          defaultInstance = new QuotedAttachment(true);
          defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:signalservice.DataMessage.Quote.QuotedAttachment)
      }

      private int bitField0_;
      // optional uint64 id = 1;
      public static final int ID_FIELD_NUMBER = 1;
      private long id_;
      /**
       * <code>optional uint64 id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional uint64 id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public long getId() {
        return id_;
      }

      // optional string author = 2;
      public static final int AUTHOR_FIELD_NUMBER = 2;
      private java.lang.Object author_;
      /**
       * <code>optional string author = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasAuthor() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string author = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public java.lang.String getAuthor() {
        java.lang.Object ref = author_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            author_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string author = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public com.google.protobuf.ByteString
          getAuthorBytes() {
        java.lang.Object ref = author_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          author_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // optional string text = 3;
      public static final int TEXT_FIELD_NUMBER = 3;
      private java.lang.Object text_;
      /**
       * <code>optional string text = 3;</code>
       */
      public boolean hasText() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string text = 3;</code>
       */
      public java.lang.String getText() {
        java.lang.Object ref = text_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            text_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string text = 3;</code>
       */
      public com.google.protobuf.ByteString
          getTextBytes() {
        java.lang.Object ref = text_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          text_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;
      public static final int ATTACHMENTS_FIELD_NUMBER = 4;
      private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment> attachments_;
      /**
       * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment> getAttachmentsList() {
        return attachments_;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
       */
      public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachmentOrBuilder> 
          getAttachmentsOrBuilderList() {
        return attachments_;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
       */
      public int getAttachmentsCount() {
        return attachments_.size();
      }
      /**
       * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment getAttachments(int index) {
        return attachments_.get(index);
      }
      /**
       * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachmentOrBuilder getAttachmentsOrBuilder(
          int index) {
        return attachments_.get(index);
      }

      private void initFields() {
        id_ = 0L;
        author_ = "";
        text_ = "";
        attachments_ = java.util.Collections.emptyList();
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeUInt64(1, id_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, getAuthorBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeBytes(3, getTextBytes());
        }
        for (int i = 0; i < attachments_.size(); i++) {
          output.writeMessage(4, attachments_.get(i));
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt64Size(1, id_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, getAuthorBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(3, getTextBytes());
        }
        for (int i = 0; i < attachments_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(4, attachments_.get(i));
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code signalservice.DataMessage.Quote}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.QuoteOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Quote_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Quote_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.Builder.class);
        }

        // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getAttachmentsFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          id_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000001);
          author_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          text_ = "";
          bitField0_ = (bitField0_ & ~0x00000004);
          if (attachmentsBuilder_ == null) {
            attachments_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            attachmentsBuilder_.clear();
          }
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Quote_descriptor;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote getDefaultInstanceForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.getDefaultInstance();
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote build() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote buildPartial() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote result = new org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.id_ = id_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.author_ = author_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          result.text_ = text_;
          if (attachmentsBuilder_ == null) {
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
              attachments_ = java.util.Collections.unmodifiableList(attachments_);
              bitField0_ = (bitField0_ & ~0x00000008);
            }
            result.attachments_ = attachments_;
          } else {
            result.attachments_ = attachmentsBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote) {
            return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote other) {
          if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.getDefaultInstance()) return this;
          if (other.hasId()) {
            setId(other.getId());
          }
          if (other.hasAuthor()) {
            bitField0_ |= 0x00000002;
            author_ = other.author_;
            onChanged();
          }
          if (other.hasText()) {
            bitField0_ |= 0x00000004;
            text_ = other.text_;
            onChanged();
          }
          if (attachmentsBuilder_ == null) {
            if (!other.attachments_.isEmpty()) {
              if (attachments_.isEmpty()) {
                attachments_ = other.attachments_;
                bitField0_ = (bitField0_ & ~0x00000008);
              } else {
                ensureAttachmentsIsMutable();
                attachments_.addAll(other.attachments_);
              }
              onChanged();
            }
          } else {
            if (!other.attachments_.isEmpty()) {
              if (attachmentsBuilder_.isEmpty()) {
                attachmentsBuilder_.dispose();
                attachmentsBuilder_ = null;
                attachments_ = other.attachments_;
                bitField0_ = (bitField0_ & ~0x00000008);
                attachmentsBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getAttachmentsFieldBuilder() : null;
              } else {
                attachmentsBuilder_.addAllMessages(other.attachments_);
              }
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        // optional uint64 id = 1;
        private long id_ ;
        /**
         * <code>optional uint64 id = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public boolean hasId() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional uint64 id = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public long getId() {
          return id_;
        }
        /**
         * <code>optional uint64 id = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public Builder setId(long value) {
          bitField0_ |= 0x00000001;
          id_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional uint64 id = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public Builder clearId() {
          bitField0_ = (bitField0_ & ~0x00000001);
          id_ = 0L;
          onChanged();
          return this;
        }

        // optional string author = 2;
        private java.lang.Object author_ = "";
        /**
         * <code>optional string author = 2;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public boolean hasAuthor() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string author = 2;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public java.lang.String getAuthor() {
          java.lang.Object ref = author_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            author_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string author = 2;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public com.google.protobuf.ByteString
            getAuthorBytes() {
          java.lang.Object ref = author_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            author_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string author = 2;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public Builder setAuthor(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          author_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string author = 2;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public Builder clearAuthor() {
          bitField0_ = (bitField0_ & ~0x00000002);
          author_ = getDefaultInstance().getAuthor();
          onChanged();
          return this;
        }
        /**
         * <code>optional string author = 2;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public Builder setAuthorBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          author_ = value;
          onChanged();
          return this;
        }

        // optional string text = 3;
        private java.lang.Object text_ = "";
        /**
         * <code>optional string text = 3;</code>
         */
        public boolean hasText() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional string text = 3;</code>
         */
        public java.lang.String getText() {
          java.lang.Object ref = text_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            text_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string text = 3;</code>
         */
        public com.google.protobuf.ByteString
            getTextBytes() {
          java.lang.Object ref = text_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            text_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string text = 3;</code>
         */
        public Builder setText(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
          text_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string text = 3;</code>
         */
        public Builder clearText() {
          bitField0_ = (bitField0_ & ~0x00000004);
          text_ = getDefaultInstance().getText();
          onChanged();
          return this;
        }
        /**
         * <code>optional string text = 3;</code>
         */
        public Builder setTextBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
          text_ = value;
          onChanged();
          return this;
        }

        // repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;
        private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment> attachments_ =
          java.util.Collections.emptyList();
        private void ensureAttachmentsIsMutable() {
          if (!((bitField0_ & 0x00000008) == 0x00000008)) {
            attachments_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment>(attachments_);
            bitField0_ |= 0x00000008;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachmentOrBuilder> attachmentsBuilder_;

        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment> getAttachmentsList() {
          if (attachmentsBuilder_ == null) {
            return java.util.Collections.unmodifiableList(attachments_);
          } else {
            return attachmentsBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public int getAttachmentsCount() {
          if (attachmentsBuilder_ == null) {
            return attachments_.size();
          } else {
            return attachmentsBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment getAttachments(int index) {
          if (attachmentsBuilder_ == null) {
            return attachments_.get(index);
          } else {
            return attachmentsBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public Builder setAttachments(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment value) {
          if (attachmentsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAttachmentsIsMutable();
            attachments_.set(index, value);
            onChanged();
          } else {
            attachmentsBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public Builder setAttachments(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.Builder builderForValue) {
          if (attachmentsBuilder_ == null) {
            ensureAttachmentsIsMutable();
            attachments_.set(index, builderForValue.build());
            onChanged();
          } else {
            attachmentsBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public Builder addAttachments(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment value) {
          if (attachmentsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAttachmentsIsMutable();
            attachments_.add(value);
            onChanged();
          } else {
            attachmentsBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public Builder addAttachments(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment value) {
          if (attachmentsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAttachmentsIsMutable();
            attachments_.add(index, value);
            onChanged();
          } else {
            attachmentsBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public Builder addAttachments(
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.Builder builderForValue) {
          if (attachmentsBuilder_ == null) {
            ensureAttachmentsIsMutable();
            attachments_.add(builderForValue.build());
            onChanged();
          } else {
            attachmentsBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public Builder addAttachments(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.Builder builderForValue) {
          if (attachmentsBuilder_ == null) {
            ensureAttachmentsIsMutable();
            attachments_.add(index, builderForValue.build());
            onChanged();
          } else {
            attachmentsBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public Builder addAllAttachments(
            java.lang.Iterable<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment> values) {
          if (attachmentsBuilder_ == null) {
            ensureAttachmentsIsMutable();
            super.addAll(values, attachments_);
            onChanged();
          } else {
            attachmentsBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public Builder clearAttachments() {
          if (attachmentsBuilder_ == null) {
            attachments_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000008);
            onChanged();
          } else {
            attachmentsBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public Builder removeAttachments(int index) {
          if (attachmentsBuilder_ == null) {
            ensureAttachmentsIsMutable();
            attachments_.remove(index);
            onChanged();
          } else {
            attachmentsBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.Builder getAttachmentsBuilder(
            int index) {
          return getAttachmentsFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachmentOrBuilder getAttachmentsOrBuilder(
            int index) {
          if (attachmentsBuilder_ == null) {
            return attachments_.get(index);  } else {
            return attachmentsBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachmentOrBuilder> 
             getAttachmentsOrBuilderList() {
          if (attachmentsBuilder_ != null) {
            return attachmentsBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(attachments_);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.Builder addAttachmentsBuilder() {
          return getAttachmentsFieldBuilder().addBuilder(
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.getDefaultInstance());
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.Builder addAttachmentsBuilder(
            int index) {
          return getAttachmentsFieldBuilder().addBuilder(
              index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.getDefaultInstance());
        }
        /**
         * <code>repeated .signalservice.DataMessage.Quote.QuotedAttachment attachments = 4;</code>
         */
        public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.Builder> 
             getAttachmentsBuilderList() {
          return getAttachmentsFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachmentOrBuilder> 
            getAttachmentsFieldBuilder() {
          if (attachmentsBuilder_ == null) {
            attachmentsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachment.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.QuotedAttachmentOrBuilder>(
                    attachments_,
                    ((bitField0_ & 0x00000008) == 0x00000008),
                    getParentForChildren(),
                    isClean());
            attachments_ = null;
          }
          return attachmentsBuilder_;
        }

        // @@protoc_insertion_point(builder_scope:signalservice.DataMessage.Quote)
      }

      static {
        defaultInstance = new Quote(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:signalservice.DataMessage.Quote)
    }

    public interface ContactOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // optional .signalservice.DataMessage.Contact.Name name = 1;
      /**
       * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
       */
      boolean hasName();
      /**
       * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name getName();
      /**
       * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.NameOrBuilder getNameOrBuilder();

      // repeated .signalservice.DataMessage.Contact.Phone number = 3;
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
       */
      java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone> 
          getNumberList();
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone getNumber(int index);
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
       */
      int getNumberCount();
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
       */
      java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PhoneOrBuilder> 
          getNumberOrBuilderList();
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PhoneOrBuilder getNumberOrBuilder(
          int index);

      // repeated .signalservice.DataMessage.Contact.Email email = 4;
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
       */
      java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email> 
          getEmailList();
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email getEmail(int index);
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
       */
      int getEmailCount();
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
       */
      java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.EmailOrBuilder> 
          getEmailOrBuilderList();
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.EmailOrBuilder getEmailOrBuilder(
          int index);

      // repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;
      /**
       * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
       */
      java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress> 
          getAddressList();
      /**
       * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress getAddress(int index);
      /**
       * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
       */
      int getAddressCount();
      /**
       * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
       */
      java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddressOrBuilder> 
          getAddressOrBuilderList();
      /**
       * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddressOrBuilder getAddressOrBuilder(
          int index);

      // optional .signalservice.DataMessage.Contact.Avatar avatar = 6;
      /**
       * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
       */
      boolean hasAvatar();
      /**
       * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar getAvatar();
      /**
       * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.AvatarOrBuilder getAvatarOrBuilder();

      // optional string organization = 7;
      /**
       * <code>optional string organization = 7;</code>
       */
      boolean hasOrganization();
      /**
       * <code>optional string organization = 7;</code>
       */
      java.lang.String getOrganization();
      /**
       * <code>optional string organization = 7;</code>
       */
      com.google.protobuf.ByteString
          getOrganizationBytes();
    }
    /**
     * Protobuf type {@code signalservice.DataMessage.Contact}
     */
    public static final class Contact extends
        com.google.protobuf.GeneratedMessage
        implements ContactOrBuilder {
      // Use Contact.newBuilder() to construct.
      private Contact(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Contact(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final Contact defaultInstance;
      public static Contact getDefaultInstance() {
        return defaultInstance;
      }

      public Contact getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Contact(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.Builder subBuilder = null;
                if (((bitField0_ & 0x00000001) == 0x00000001)) {
                  subBuilder = name_.toBuilder();
                }
                name_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(name_);
                  name_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000001;
                break;
              }
              case 26: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  number_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone>();
                  mutable_bitField0_ |= 0x00000002;
                }
                number_.add(input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.PARSER, extensionRegistry));
                break;
              }
              case 34: {
                if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                  email_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email>();
                  mutable_bitField0_ |= 0x00000004;
                }
                email_.add(input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.PARSER, extensionRegistry));
                break;
              }
              case 42: {
                if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                  address_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress>();
                  mutable_bitField0_ |= 0x00000008;
                }
                address_.add(input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.PARSER, extensionRegistry));
                break;
              }
              case 50: {
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.Builder subBuilder = null;
                if (((bitField0_ & 0x00000002) == 0x00000002)) {
                  subBuilder = avatar_.toBuilder();
                }
                avatar_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(avatar_);
                  avatar_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000002;
                break;
              }
              case 58: {
                bitField0_ |= 0x00000004;
                organization_ = input.readBytes();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
            number_ = java.util.Collections.unmodifiableList(number_);
          }
          if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
            email_ = java.util.Collections.unmodifiableList(email_);
          }
          if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
            address_ = java.util.Collections.unmodifiableList(address_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Builder.class);
      }

      public static com.google.protobuf.Parser<Contact> PARSER =
          new com.google.protobuf.AbstractParser<Contact>() {
        public Contact parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Contact(input, extensionRegistry);
        }
      };

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

      public interface NameOrBuilder
          extends com.google.protobuf.MessageOrBuilder {

        // optional string givenName = 1;
        /**
         * <code>optional string givenName = 1;</code>
         */
        boolean hasGivenName();
        /**
         * <code>optional string givenName = 1;</code>
         */
        java.lang.String getGivenName();
        /**
         * <code>optional string givenName = 1;</code>
         */
        com.google.protobuf.ByteString
            getGivenNameBytes();

        // optional string familyName = 2;
        /**
         * <code>optional string familyName = 2;</code>
         */
        boolean hasFamilyName();
        /**
         * <code>optional string familyName = 2;</code>
         */
        java.lang.String getFamilyName();
        /**
         * <code>optional string familyName = 2;</code>
         */
        com.google.protobuf.ByteString
            getFamilyNameBytes();

        // optional string prefix = 3;
        /**
         * <code>optional string prefix = 3;</code>
         */
        boolean hasPrefix();
        /**
         * <code>optional string prefix = 3;</code>
         */
        java.lang.String getPrefix();
        /**
         * <code>optional string prefix = 3;</code>
         */
        com.google.protobuf.ByteString
            getPrefixBytes();

        // optional string suffix = 4;
        /**
         * <code>optional string suffix = 4;</code>
         */
        boolean hasSuffix();
        /**
         * <code>optional string suffix = 4;</code>
         */
        java.lang.String getSuffix();
        /**
         * <code>optional string suffix = 4;</code>
         */
        com.google.protobuf.ByteString
            getSuffixBytes();

        // optional string middleName = 5;
        /**
         * <code>optional string middleName = 5;</code>
         */
        boolean hasMiddleName();
        /**
         * <code>optional string middleName = 5;</code>
         */
        java.lang.String getMiddleName();
        /**
         * <code>optional string middleName = 5;</code>
         */
        com.google.protobuf.ByteString
            getMiddleNameBytes();

        // optional string displayName = 6;
        /**
         * <code>optional string displayName = 6;</code>
         */
        boolean hasDisplayName();
        /**
         * <code>optional string displayName = 6;</code>
         */
        java.lang.String getDisplayName();
        /**
         * <code>optional string displayName = 6;</code>
         */
        com.google.protobuf.ByteString
            getDisplayNameBytes();
      }
      /**
       * Protobuf type {@code signalservice.DataMessage.Contact.Name}
       */
      public static final class Name extends
          com.google.protobuf.GeneratedMessage
          implements NameOrBuilder {
        // Use Name.newBuilder() to construct.
        private Name(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
          super(builder);
          this.unknownFields = builder.getUnknownFields();
        }
        private Name(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final Name defaultInstance;
        public static Name getDefaultInstance() {
          return defaultInstance;
        }

        public Name getDefaultInstanceForType() {
          return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
            getUnknownFields() {
          return this.unknownFields;
        }
        private Name(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          initFields();
          int mutable_bitField0_ = 0;
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
              com.google.protobuf.UnknownFieldSet.newBuilder();
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                default: {
                  if (!parseUnknownField(input, unknownFields,
                                         extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
                case 10: {
                  bitField0_ |= 0x00000001;
                  givenName_ = input.readBytes();
                  break;
                }
                case 18: {
                  bitField0_ |= 0x00000002;
                  familyName_ = input.readBytes();
                  break;
                }
                case 26: {
                  bitField0_ |= 0x00000004;
                  prefix_ = input.readBytes();
                  break;
                }
                case 34: {
                  bitField0_ |= 0x00000008;
                  suffix_ = input.readBytes();
                  break;
                }
                case 42: {
                  bitField0_ |= 0x00000010;
                  middleName_ = input.readBytes();
                  break;
                }
                case 50: {
                  bitField0_ |= 0x00000020;
                  displayName_ = input.readBytes();
                  break;
                }
              }
            }
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(this);
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(
                e.getMessage()).setUnfinishedMessage(this);
          } finally {
            this.unknownFields = unknownFields.build();
            makeExtensionsImmutable();
          }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Name_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Name_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.Builder.class);
        }

        public static com.google.protobuf.Parser<Name> PARSER =
            new com.google.protobuf.AbstractParser<Name>() {
          public Name parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new Name(input, extensionRegistry);
          }
        };

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

        private int bitField0_;
        // optional string givenName = 1;
        public static final int GIVENNAME_FIELD_NUMBER = 1;
        private java.lang.Object givenName_;
        /**
         * <code>optional string givenName = 1;</code>
         */
        public boolean hasGivenName() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string givenName = 1;</code>
         */
        public java.lang.String getGivenName() {
          java.lang.Object ref = givenName_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              givenName_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string givenName = 1;</code>
         */
        public com.google.protobuf.ByteString
            getGivenNameBytes() {
          java.lang.Object ref = givenName_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            givenName_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string familyName = 2;
        public static final int FAMILYNAME_FIELD_NUMBER = 2;
        private java.lang.Object familyName_;
        /**
         * <code>optional string familyName = 2;</code>
         */
        public boolean hasFamilyName() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string familyName = 2;</code>
         */
        public java.lang.String getFamilyName() {
          java.lang.Object ref = familyName_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              familyName_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string familyName = 2;</code>
         */
        public com.google.protobuf.ByteString
            getFamilyNameBytes() {
          java.lang.Object ref = familyName_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            familyName_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string prefix = 3;
        public static final int PREFIX_FIELD_NUMBER = 3;
        private java.lang.Object prefix_;
        /**
         * <code>optional string prefix = 3;</code>
         */
        public boolean hasPrefix() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional string prefix = 3;</code>
         */
        public java.lang.String getPrefix() {
          java.lang.Object ref = prefix_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              prefix_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string prefix = 3;</code>
         */
        public com.google.protobuf.ByteString
            getPrefixBytes() {
          java.lang.Object ref = prefix_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            prefix_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string suffix = 4;
        public static final int SUFFIX_FIELD_NUMBER = 4;
        private java.lang.Object suffix_;
        /**
         * <code>optional string suffix = 4;</code>
         */
        public boolean hasSuffix() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional string suffix = 4;</code>
         */
        public java.lang.String getSuffix() {
          java.lang.Object ref = suffix_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              suffix_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string suffix = 4;</code>
         */
        public com.google.protobuf.ByteString
            getSuffixBytes() {
          java.lang.Object ref = suffix_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            suffix_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string middleName = 5;
        public static final int MIDDLENAME_FIELD_NUMBER = 5;
        private java.lang.Object middleName_;
        /**
         * <code>optional string middleName = 5;</code>
         */
        public boolean hasMiddleName() {
          return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional string middleName = 5;</code>
         */
        public java.lang.String getMiddleName() {
          java.lang.Object ref = middleName_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              middleName_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string middleName = 5;</code>
         */
        public com.google.protobuf.ByteString
            getMiddleNameBytes() {
          java.lang.Object ref = middleName_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            middleName_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string displayName = 6;
        public static final int DISPLAYNAME_FIELD_NUMBER = 6;
        private java.lang.Object displayName_;
        /**
         * <code>optional string displayName = 6;</code>
         */
        public boolean hasDisplayName() {
          return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional string displayName = 6;</code>
         */
        public java.lang.String getDisplayName() {
          java.lang.Object ref = displayName_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              displayName_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string displayName = 6;</code>
         */
        public com.google.protobuf.ByteString
            getDisplayNameBytes() {
          java.lang.Object ref = displayName_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            displayName_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        private void initFields() {
          givenName_ = "";
          familyName_ = "";
          prefix_ = "";
          suffix_ = "";
          middleName_ = "";
          displayName_ = "";
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
          byte isInitialized = memoizedIsInitialized;
          if (isInitialized != -1) return isInitialized == 1;

          memoizedIsInitialized = 1;
          return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          getSerializedSize();
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            output.writeBytes(1, getGivenNameBytes());
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            output.writeBytes(2, getFamilyNameBytes());
          }
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            output.writeBytes(3, getPrefixBytes());
          }
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            output.writeBytes(4, getSuffixBytes());
          }
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            output.writeBytes(5, getMiddleNameBytes());
          }
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            output.writeBytes(6, getDisplayNameBytes());
          }
          getUnknownFields().writeTo(output);
        }

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

          size = 0;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(1, getGivenNameBytes());
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(2, getFamilyNameBytes());
          }
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(3, getPrefixBytes());
          }
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(4, getSuffixBytes());
          }
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(5, getMiddleNameBytes());
          }
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(6, getDisplayNameBytes());
          }
          size += getUnknownFields().getSerializedSize();
          memoizedSerializedSize = size;
          return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
            throws java.io.ObjectStreamException {
          return super.writeReplace();
        }

        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name parseFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name parseDelimitedFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name parseFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name prototype) {
          return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          Builder builder = new Builder(parent);
          return builder;
        }
        /**
         * Protobuf type {@code signalservice.DataMessage.Contact.Name}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessage.Builder<Builder>
           implements org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.NameOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Name_descriptor;
          }

          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Name_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.Builder.class);
          }

          // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.newBuilder()
          private Builder() {
            maybeForceBuilderInitialization();
          }

          private Builder(
              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            super(parent);
            maybeForceBuilderInitialization();
          }
          private void maybeForceBuilderInitialization() {
            if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            }
          }
          private static Builder create() {
            return new Builder();
          }

          public Builder clear() {
            super.clear();
            givenName_ = "";
            bitField0_ = (bitField0_ & ~0x00000001);
            familyName_ = "";
            bitField0_ = (bitField0_ & ~0x00000002);
            prefix_ = "";
            bitField0_ = (bitField0_ & ~0x00000004);
            suffix_ = "";
            bitField0_ = (bitField0_ & ~0x00000008);
            middleName_ = "";
            bitField0_ = (bitField0_ & ~0x00000010);
            displayName_ = "";
            bitField0_ = (bitField0_ & ~0x00000020);
            return this;
          }

          public Builder clone() {
            return create().mergeFrom(buildPartial());
          }

          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Name_descriptor;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name getDefaultInstanceForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.getDefaultInstance();
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name build() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name buildPartial() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name result = new org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name(this);
            int from_bitField0_ = bitField0_;
            int to_bitField0_ = 0;
            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
              to_bitField0_ |= 0x00000001;
            }
            result.givenName_ = givenName_;
            if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
              to_bitField0_ |= 0x00000002;
            }
            result.familyName_ = familyName_;
            if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
              to_bitField0_ |= 0x00000004;
            }
            result.prefix_ = prefix_;
            if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
              to_bitField0_ |= 0x00000008;
            }
            result.suffix_ = suffix_;
            if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
              to_bitField0_ |= 0x00000010;
            }
            result.middleName_ = middleName_;
            if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
              to_bitField0_ |= 0x00000020;
            }
            result.displayName_ = displayName_;
            result.bitField0_ = to_bitField0_;
            onBuilt();
            return result;
          }

          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name) {
              return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }

          public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name other) {
            if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.getDefaultInstance()) return this;
            if (other.hasGivenName()) {
              bitField0_ |= 0x00000001;
              givenName_ = other.givenName_;
              onChanged();
            }
            if (other.hasFamilyName()) {
              bitField0_ |= 0x00000002;
              familyName_ = other.familyName_;
              onChanged();
            }
            if (other.hasPrefix()) {
              bitField0_ |= 0x00000004;
              prefix_ = other.prefix_;
              onChanged();
            }
            if (other.hasSuffix()) {
              bitField0_ |= 0x00000008;
              suffix_ = other.suffix_;
              onChanged();
            }
            if (other.hasMiddleName()) {
              bitField0_ |= 0x00000010;
              middleName_ = other.middleName_;
              onChanged();
            }
            if (other.hasDisplayName()) {
              bitField0_ |= 0x00000020;
              displayName_ = other.displayName_;
              onChanged();
            }
            this.mergeUnknownFields(other.getUnknownFields());
            return this;
          }

          public final boolean isInitialized() {
            return true;
          }

          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name parsedMessage = null;
            try {
              parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name) e.getUnfinishedMessage();
              throw e;
            } finally {
              if (parsedMessage != null) {
                mergeFrom(parsedMessage);
              }
            }
            return this;
          }
          private int bitField0_;

          // optional string givenName = 1;
          private java.lang.Object givenName_ = "";
          /**
           * <code>optional string givenName = 1;</code>
           */
          public boolean hasGivenName() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
          }
          /**
           * <code>optional string givenName = 1;</code>
           */
          public java.lang.String getGivenName() {
            java.lang.Object ref = givenName_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              givenName_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string givenName = 1;</code>
           */
          public com.google.protobuf.ByteString
              getGivenNameBytes() {
            java.lang.Object ref = givenName_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              givenName_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string givenName = 1;</code>
           */
          public Builder setGivenName(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
            givenName_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string givenName = 1;</code>
           */
          public Builder clearGivenName() {
            bitField0_ = (bitField0_ & ~0x00000001);
            givenName_ = getDefaultInstance().getGivenName();
            onChanged();
            return this;
          }
          /**
           * <code>optional string givenName = 1;</code>
           */
          public Builder setGivenNameBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
            givenName_ = value;
            onChanged();
            return this;
          }

          // optional string familyName = 2;
          private java.lang.Object familyName_ = "";
          /**
           * <code>optional string familyName = 2;</code>
           */
          public boolean hasFamilyName() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
          }
          /**
           * <code>optional string familyName = 2;</code>
           */
          public java.lang.String getFamilyName() {
            java.lang.Object ref = familyName_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              familyName_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string familyName = 2;</code>
           */
          public com.google.protobuf.ByteString
              getFamilyNameBytes() {
            java.lang.Object ref = familyName_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              familyName_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string familyName = 2;</code>
           */
          public Builder setFamilyName(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
            familyName_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string familyName = 2;</code>
           */
          public Builder clearFamilyName() {
            bitField0_ = (bitField0_ & ~0x00000002);
            familyName_ = getDefaultInstance().getFamilyName();
            onChanged();
            return this;
          }
          /**
           * <code>optional string familyName = 2;</code>
           */
          public Builder setFamilyNameBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
            familyName_ = value;
            onChanged();
            return this;
          }

          // optional string prefix = 3;
          private java.lang.Object prefix_ = "";
          /**
           * <code>optional string prefix = 3;</code>
           */
          public boolean hasPrefix() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
          }
          /**
           * <code>optional string prefix = 3;</code>
           */
          public java.lang.String getPrefix() {
            java.lang.Object ref = prefix_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              prefix_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string prefix = 3;</code>
           */
          public com.google.protobuf.ByteString
              getPrefixBytes() {
            java.lang.Object ref = prefix_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              prefix_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string prefix = 3;</code>
           */
          public Builder setPrefix(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
            prefix_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string prefix = 3;</code>
           */
          public Builder clearPrefix() {
            bitField0_ = (bitField0_ & ~0x00000004);
            prefix_ = getDefaultInstance().getPrefix();
            onChanged();
            return this;
          }
          /**
           * <code>optional string prefix = 3;</code>
           */
          public Builder setPrefixBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
            prefix_ = value;
            onChanged();
            return this;
          }

          // optional string suffix = 4;
          private java.lang.Object suffix_ = "";
          /**
           * <code>optional string suffix = 4;</code>
           */
          public boolean hasSuffix() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
          }
          /**
           * <code>optional string suffix = 4;</code>
           */
          public java.lang.String getSuffix() {
            java.lang.Object ref = suffix_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              suffix_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string suffix = 4;</code>
           */
          public com.google.protobuf.ByteString
              getSuffixBytes() {
            java.lang.Object ref = suffix_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              suffix_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string suffix = 4;</code>
           */
          public Builder setSuffix(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
            suffix_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string suffix = 4;</code>
           */
          public Builder clearSuffix() {
            bitField0_ = (bitField0_ & ~0x00000008);
            suffix_ = getDefaultInstance().getSuffix();
            onChanged();
            return this;
          }
          /**
           * <code>optional string suffix = 4;</code>
           */
          public Builder setSuffixBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
            suffix_ = value;
            onChanged();
            return this;
          }

          // optional string middleName = 5;
          private java.lang.Object middleName_ = "";
          /**
           * <code>optional string middleName = 5;</code>
           */
          public boolean hasMiddleName() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
          }
          /**
           * <code>optional string middleName = 5;</code>
           */
          public java.lang.String getMiddleName() {
            java.lang.Object ref = middleName_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              middleName_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string middleName = 5;</code>
           */
          public com.google.protobuf.ByteString
              getMiddleNameBytes() {
            java.lang.Object ref = middleName_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              middleName_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string middleName = 5;</code>
           */
          public Builder setMiddleName(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
            middleName_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string middleName = 5;</code>
           */
          public Builder clearMiddleName() {
            bitField0_ = (bitField0_ & ~0x00000010);
            middleName_ = getDefaultInstance().getMiddleName();
            onChanged();
            return this;
          }
          /**
           * <code>optional string middleName = 5;</code>
           */
          public Builder setMiddleNameBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
            middleName_ = value;
            onChanged();
            return this;
          }

          // optional string displayName = 6;
          private java.lang.Object displayName_ = "";
          /**
           * <code>optional string displayName = 6;</code>
           */
          public boolean hasDisplayName() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
          }
          /**
           * <code>optional string displayName = 6;</code>
           */
          public java.lang.String getDisplayName() {
            java.lang.Object ref = displayName_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              displayName_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string displayName = 6;</code>
           */
          public com.google.protobuf.ByteString
              getDisplayNameBytes() {
            java.lang.Object ref = displayName_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              displayName_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string displayName = 6;</code>
           */
          public Builder setDisplayName(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
            displayName_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string displayName = 6;</code>
           */
          public Builder clearDisplayName() {
            bitField0_ = (bitField0_ & ~0x00000020);
            displayName_ = getDefaultInstance().getDisplayName();
            onChanged();
            return this;
          }
          /**
           * <code>optional string displayName = 6;</code>
           */
          public Builder setDisplayNameBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
            displayName_ = value;
            onChanged();
            return this;
          }

          // @@protoc_insertion_point(builder_scope:signalservice.DataMessage.Contact.Name)
        }

        static {
          defaultInstance = new Name(true);
          defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:signalservice.DataMessage.Contact.Name)
      }

      public interface PhoneOrBuilder
          extends com.google.protobuf.MessageOrBuilder {

        // optional string value = 1;
        /**
         * <code>optional string value = 1;</code>
         */
        boolean hasValue();
        /**
         * <code>optional string value = 1;</code>
         */
        java.lang.String getValue();
        /**
         * <code>optional string value = 1;</code>
         */
        com.google.protobuf.ByteString
            getValueBytes();

        // optional .signalservice.DataMessage.Contact.Phone.Type type = 2;
        /**
         * <code>optional .signalservice.DataMessage.Contact.Phone.Type type = 2;</code>
         */
        boolean hasType();
        /**
         * <code>optional .signalservice.DataMessage.Contact.Phone.Type type = 2;</code>
         */
        org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Type getType();

        // optional string label = 3;
        /**
         * <code>optional string label = 3;</code>
         */
        boolean hasLabel();
        /**
         * <code>optional string label = 3;</code>
         */
        java.lang.String getLabel();
        /**
         * <code>optional string label = 3;</code>
         */
        com.google.protobuf.ByteString
            getLabelBytes();
      }
      /**
       * Protobuf type {@code signalservice.DataMessage.Contact.Phone}
       */
      public static final class Phone extends
          com.google.protobuf.GeneratedMessage
          implements PhoneOrBuilder {
        // Use Phone.newBuilder() to construct.
        private Phone(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
          super(builder);
          this.unknownFields = builder.getUnknownFields();
        }
        private Phone(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final Phone defaultInstance;
        public static Phone getDefaultInstance() {
          return defaultInstance;
        }

        public Phone getDefaultInstanceForType() {
          return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
            getUnknownFields() {
          return this.unknownFields;
        }
        private Phone(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          initFields();
          int mutable_bitField0_ = 0;
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
              com.google.protobuf.UnknownFieldSet.newBuilder();
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                default: {
                  if (!parseUnknownField(input, unknownFields,
                                         extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
                case 10: {
                  bitField0_ |= 0x00000001;
                  value_ = input.readBytes();
                  break;
                }
                case 16: {
                  int rawValue = input.readEnum();
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Type value = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Type.valueOf(rawValue);
                  if (value == null) {
                    unknownFields.mergeVarintField(2, rawValue);
                  } else {
                    bitField0_ |= 0x00000002;
                    type_ = value;
                  }
                  break;
                }
                case 26: {
                  bitField0_ |= 0x00000004;
                  label_ = input.readBytes();
                  break;
                }
              }
            }
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(this);
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(
                e.getMessage()).setUnfinishedMessage(this);
          } finally {
            this.unknownFields = unknownFields.build();
            makeExtensionsImmutable();
          }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Phone_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Phone_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Builder.class);
        }

        public static com.google.protobuf.Parser<Phone> PARSER =
            new com.google.protobuf.AbstractParser<Phone>() {
          public Phone parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new Phone(input, extensionRegistry);
          }
        };

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

        /**
         * Protobuf enum {@code signalservice.DataMessage.Contact.Phone.Type}
         */
        public enum Type
            implements com.google.protobuf.ProtocolMessageEnum {
          /**
           * <code>HOME = 1;</code>
           */
          HOME(0, 1),
          /**
           * <code>MOBILE = 2;</code>
           */
          MOBILE(1, 2),
          /**
           * <code>WORK = 3;</code>
           */
          WORK(2, 3),
          /**
           * <code>CUSTOM = 4;</code>
           */
          CUSTOM(3, 4),
          ;

          /**
           * <code>HOME = 1;</code>
           */
          public static final int HOME_VALUE = 1;
          /**
           * <code>MOBILE = 2;</code>
           */
          public static final int MOBILE_VALUE = 2;
          /**
           * <code>WORK = 3;</code>
           */
          public static final int WORK_VALUE = 3;
          /**
           * <code>CUSTOM = 4;</code>
           */
          public static final int CUSTOM_VALUE = 4;


          public final int getNumber() { return value; }

          public static Type valueOf(int value) {
            switch (value) {
              case 1: return HOME;
              case 2: return MOBILE;
              case 3: return WORK;
              case 4: return CUSTOM;
              default: return null;
            }
          }

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

          public final com.google.protobuf.Descriptors.EnumValueDescriptor
              getValueDescriptor() {
            return getDescriptor().getValues().get(index);
          }
          public final com.google.protobuf.Descriptors.EnumDescriptor
              getDescriptorForType() {
            return getDescriptor();
          }
          public static final com.google.protobuf.Descriptors.EnumDescriptor
              getDescriptor() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.getDescriptor().getEnumTypes().get(0);
          }

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

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

          private final int index;
          private final int value;

          private Type(int index, int value) {
            this.index = index;
            this.value = value;
          }

          // @@protoc_insertion_point(enum_scope:signalservice.DataMessage.Contact.Phone.Type)
        }

        private int bitField0_;
        // optional string value = 1;
        public static final int VALUE_FIELD_NUMBER = 1;
        private java.lang.Object value_;
        /**
         * <code>optional string value = 1;</code>
         */
        public boolean hasValue() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string value = 1;</code>
         */
        public java.lang.String getValue() {
          java.lang.Object ref = value_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              value_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string value = 1;</code>
         */
        public com.google.protobuf.ByteString
            getValueBytes() {
          java.lang.Object ref = value_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            value_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional .signalservice.DataMessage.Contact.Phone.Type type = 2;
        public static final int TYPE_FIELD_NUMBER = 2;
        private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Type type_;
        /**
         * <code>optional .signalservice.DataMessage.Contact.Phone.Type type = 2;</code>
         */
        public boolean hasType() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Phone.Type type = 2;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Type getType() {
          return type_;
        }

        // optional string label = 3;
        public static final int LABEL_FIELD_NUMBER = 3;
        private java.lang.Object label_;
        /**
         * <code>optional string label = 3;</code>
         */
        public boolean hasLabel() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional string label = 3;</code>
         */
        public java.lang.String getLabel() {
          java.lang.Object ref = label_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              label_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string label = 3;</code>
         */
        public com.google.protobuf.ByteString
            getLabelBytes() {
          java.lang.Object ref = label_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            label_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        private void initFields() {
          value_ = "";
          type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Type.HOME;
          label_ = "";
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
          byte isInitialized = memoizedIsInitialized;
          if (isInitialized != -1) return isInitialized == 1;

          memoizedIsInitialized = 1;
          return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          getSerializedSize();
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            output.writeBytes(1, getValueBytes());
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            output.writeEnum(2, type_.getNumber());
          }
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            output.writeBytes(3, getLabelBytes());
          }
          getUnknownFields().writeTo(output);
        }

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

          size = 0;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(1, getValueBytes());
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            size += com.google.protobuf.CodedOutputStream
              .computeEnumSize(2, type_.getNumber());
          }
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(3, getLabelBytes());
          }
          size += getUnknownFields().getSerializedSize();
          memoizedSerializedSize = size;
          return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
            throws java.io.ObjectStreamException {
          return super.writeReplace();
        }

        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone parseFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone parseDelimitedFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone parseFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone prototype) {
          return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          Builder builder = new Builder(parent);
          return builder;
        }
        /**
         * Protobuf type {@code signalservice.DataMessage.Contact.Phone}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessage.Builder<Builder>
           implements org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PhoneOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Phone_descriptor;
          }

          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Phone_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Builder.class);
          }

          // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.newBuilder()
          private Builder() {
            maybeForceBuilderInitialization();
          }

          private Builder(
              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            super(parent);
            maybeForceBuilderInitialization();
          }
          private void maybeForceBuilderInitialization() {
            if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            }
          }
          private static Builder create() {
            return new Builder();
          }

          public Builder clear() {
            super.clear();
            value_ = "";
            bitField0_ = (bitField0_ & ~0x00000001);
            type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Type.HOME;
            bitField0_ = (bitField0_ & ~0x00000002);
            label_ = "";
            bitField0_ = (bitField0_ & ~0x00000004);
            return this;
          }

          public Builder clone() {
            return create().mergeFrom(buildPartial());
          }

          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Phone_descriptor;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone getDefaultInstanceForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.getDefaultInstance();
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone build() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone buildPartial() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone result = new org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone(this);
            int from_bitField0_ = bitField0_;
            int to_bitField0_ = 0;
            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
              to_bitField0_ |= 0x00000001;
            }
            result.value_ = value_;
            if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
              to_bitField0_ |= 0x00000002;
            }
            result.type_ = type_;
            if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
              to_bitField0_ |= 0x00000004;
            }
            result.label_ = label_;
            result.bitField0_ = to_bitField0_;
            onBuilt();
            return result;
          }

          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone) {
              return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }

          public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone other) {
            if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.getDefaultInstance()) return this;
            if (other.hasValue()) {
              bitField0_ |= 0x00000001;
              value_ = other.value_;
              onChanged();
            }
            if (other.hasType()) {
              setType(other.getType());
            }
            if (other.hasLabel()) {
              bitField0_ |= 0x00000004;
              label_ = other.label_;
              onChanged();
            }
            this.mergeUnknownFields(other.getUnknownFields());
            return this;
          }

          public final boolean isInitialized() {
            return true;
          }

          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone parsedMessage = null;
            try {
              parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone) e.getUnfinishedMessage();
              throw e;
            } finally {
              if (parsedMessage != null) {
                mergeFrom(parsedMessage);
              }
            }
            return this;
          }
          private int bitField0_;

          // optional string value = 1;
          private java.lang.Object value_ = "";
          /**
           * <code>optional string value = 1;</code>
           */
          public boolean hasValue() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
          }
          /**
           * <code>optional string value = 1;</code>
           */
          public java.lang.String getValue() {
            java.lang.Object ref = value_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              value_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string value = 1;</code>
           */
          public com.google.protobuf.ByteString
              getValueBytes() {
            java.lang.Object ref = value_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              value_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string value = 1;</code>
           */
          public Builder setValue(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
            value_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string value = 1;</code>
           */
          public Builder clearValue() {
            bitField0_ = (bitField0_ & ~0x00000001);
            value_ = getDefaultInstance().getValue();
            onChanged();
            return this;
          }
          /**
           * <code>optional string value = 1;</code>
           */
          public Builder setValueBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
            value_ = value;
            onChanged();
            return this;
          }

          // optional .signalservice.DataMessage.Contact.Phone.Type type = 2;
          private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Type type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Type.HOME;
          /**
           * <code>optional .signalservice.DataMessage.Contact.Phone.Type type = 2;</code>
           */
          public boolean hasType() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
          }
          /**
           * <code>optional .signalservice.DataMessage.Contact.Phone.Type type = 2;</code>
           */
          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Type getType() {
            return type_;
          }
          /**
           * <code>optional .signalservice.DataMessage.Contact.Phone.Type type = 2;</code>
           */
          public Builder setType(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Type value) {
            if (value == null) {
              throw new NullPointerException();
            }
            bitField0_ |= 0x00000002;
            type_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional .signalservice.DataMessage.Contact.Phone.Type type = 2;</code>
           */
          public Builder clearType() {
            bitField0_ = (bitField0_ & ~0x00000002);
            type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Type.HOME;
            onChanged();
            return this;
          }

          // optional string label = 3;
          private java.lang.Object label_ = "";
          /**
           * <code>optional string label = 3;</code>
           */
          public boolean hasLabel() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
          }
          /**
           * <code>optional string label = 3;</code>
           */
          public java.lang.String getLabel() {
            java.lang.Object ref = label_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              label_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string label = 3;</code>
           */
          public com.google.protobuf.ByteString
              getLabelBytes() {
            java.lang.Object ref = label_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              label_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string label = 3;</code>
           */
          public Builder setLabel(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
            label_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string label = 3;</code>
           */
          public Builder clearLabel() {
            bitField0_ = (bitField0_ & ~0x00000004);
            label_ = getDefaultInstance().getLabel();
            onChanged();
            return this;
          }
          /**
           * <code>optional string label = 3;</code>
           */
          public Builder setLabelBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
            label_ = value;
            onChanged();
            return this;
          }

          // @@protoc_insertion_point(builder_scope:signalservice.DataMessage.Contact.Phone)
        }

        static {
          defaultInstance = new Phone(true);
          defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:signalservice.DataMessage.Contact.Phone)
      }

      public interface EmailOrBuilder
          extends com.google.protobuf.MessageOrBuilder {

        // optional string value = 1;
        /**
         * <code>optional string value = 1;</code>
         */
        boolean hasValue();
        /**
         * <code>optional string value = 1;</code>
         */
        java.lang.String getValue();
        /**
         * <code>optional string value = 1;</code>
         */
        com.google.protobuf.ByteString
            getValueBytes();

        // optional .signalservice.DataMessage.Contact.Email.Type type = 2;
        /**
         * <code>optional .signalservice.DataMessage.Contact.Email.Type type = 2;</code>
         */
        boolean hasType();
        /**
         * <code>optional .signalservice.DataMessage.Contact.Email.Type type = 2;</code>
         */
        org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Type getType();

        // optional string label = 3;
        /**
         * <code>optional string label = 3;</code>
         */
        boolean hasLabel();
        /**
         * <code>optional string label = 3;</code>
         */
        java.lang.String getLabel();
        /**
         * <code>optional string label = 3;</code>
         */
        com.google.protobuf.ByteString
            getLabelBytes();
      }
      /**
       * Protobuf type {@code signalservice.DataMessage.Contact.Email}
       */
      public static final class Email extends
          com.google.protobuf.GeneratedMessage
          implements EmailOrBuilder {
        // Use Email.newBuilder() to construct.
        private Email(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
          super(builder);
          this.unknownFields = builder.getUnknownFields();
        }
        private Email(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final Email defaultInstance;
        public static Email getDefaultInstance() {
          return defaultInstance;
        }

        public Email getDefaultInstanceForType() {
          return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
            getUnknownFields() {
          return this.unknownFields;
        }
        private Email(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          initFields();
          int mutable_bitField0_ = 0;
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
              com.google.protobuf.UnknownFieldSet.newBuilder();
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                default: {
                  if (!parseUnknownField(input, unknownFields,
                                         extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
                case 10: {
                  bitField0_ |= 0x00000001;
                  value_ = input.readBytes();
                  break;
                }
                case 16: {
                  int rawValue = input.readEnum();
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Type value = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Type.valueOf(rawValue);
                  if (value == null) {
                    unknownFields.mergeVarintField(2, rawValue);
                  } else {
                    bitField0_ |= 0x00000002;
                    type_ = value;
                  }
                  break;
                }
                case 26: {
                  bitField0_ |= 0x00000004;
                  label_ = input.readBytes();
                  break;
                }
              }
            }
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(this);
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(
                e.getMessage()).setUnfinishedMessage(this);
          } finally {
            this.unknownFields = unknownFields.build();
            makeExtensionsImmutable();
          }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Email_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Email_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Builder.class);
        }

        public static com.google.protobuf.Parser<Email> PARSER =
            new com.google.protobuf.AbstractParser<Email>() {
          public Email parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new Email(input, extensionRegistry);
          }
        };

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

        /**
         * Protobuf enum {@code signalservice.DataMessage.Contact.Email.Type}
         */
        public enum Type
            implements com.google.protobuf.ProtocolMessageEnum {
          /**
           * <code>HOME = 1;</code>
           */
          HOME(0, 1),
          /**
           * <code>MOBILE = 2;</code>
           */
          MOBILE(1, 2),
          /**
           * <code>WORK = 3;</code>
           */
          WORK(2, 3),
          /**
           * <code>CUSTOM = 4;</code>
           */
          CUSTOM(3, 4),
          ;

          /**
           * <code>HOME = 1;</code>
           */
          public static final int HOME_VALUE = 1;
          /**
           * <code>MOBILE = 2;</code>
           */
          public static final int MOBILE_VALUE = 2;
          /**
           * <code>WORK = 3;</code>
           */
          public static final int WORK_VALUE = 3;
          /**
           * <code>CUSTOM = 4;</code>
           */
          public static final int CUSTOM_VALUE = 4;


          public final int getNumber() { return value; }

          public static Type valueOf(int value) {
            switch (value) {
              case 1: return HOME;
              case 2: return MOBILE;
              case 3: return WORK;
              case 4: return CUSTOM;
              default: return null;
            }
          }

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

          public final com.google.protobuf.Descriptors.EnumValueDescriptor
              getValueDescriptor() {
            return getDescriptor().getValues().get(index);
          }
          public final com.google.protobuf.Descriptors.EnumDescriptor
              getDescriptorForType() {
            return getDescriptor();
          }
          public static final com.google.protobuf.Descriptors.EnumDescriptor
              getDescriptor() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.getDescriptor().getEnumTypes().get(0);
          }

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

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

          private final int index;
          private final int value;

          private Type(int index, int value) {
            this.index = index;
            this.value = value;
          }

          // @@protoc_insertion_point(enum_scope:signalservice.DataMessage.Contact.Email.Type)
        }

        private int bitField0_;
        // optional string value = 1;
        public static final int VALUE_FIELD_NUMBER = 1;
        private java.lang.Object value_;
        /**
         * <code>optional string value = 1;</code>
         */
        public boolean hasValue() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string value = 1;</code>
         */
        public java.lang.String getValue() {
          java.lang.Object ref = value_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              value_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string value = 1;</code>
         */
        public com.google.protobuf.ByteString
            getValueBytes() {
          java.lang.Object ref = value_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            value_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional .signalservice.DataMessage.Contact.Email.Type type = 2;
        public static final int TYPE_FIELD_NUMBER = 2;
        private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Type type_;
        /**
         * <code>optional .signalservice.DataMessage.Contact.Email.Type type = 2;</code>
         */
        public boolean hasType() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Email.Type type = 2;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Type getType() {
          return type_;
        }

        // optional string label = 3;
        public static final int LABEL_FIELD_NUMBER = 3;
        private java.lang.Object label_;
        /**
         * <code>optional string label = 3;</code>
         */
        public boolean hasLabel() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional string label = 3;</code>
         */
        public java.lang.String getLabel() {
          java.lang.Object ref = label_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              label_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string label = 3;</code>
         */
        public com.google.protobuf.ByteString
            getLabelBytes() {
          java.lang.Object ref = label_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            label_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        private void initFields() {
          value_ = "";
          type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Type.HOME;
          label_ = "";
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
          byte isInitialized = memoizedIsInitialized;
          if (isInitialized != -1) return isInitialized == 1;

          memoizedIsInitialized = 1;
          return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          getSerializedSize();
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            output.writeBytes(1, getValueBytes());
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            output.writeEnum(2, type_.getNumber());
          }
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            output.writeBytes(3, getLabelBytes());
          }
          getUnknownFields().writeTo(output);
        }

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

          size = 0;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(1, getValueBytes());
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            size += com.google.protobuf.CodedOutputStream
              .computeEnumSize(2, type_.getNumber());
          }
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(3, getLabelBytes());
          }
          size += getUnknownFields().getSerializedSize();
          memoizedSerializedSize = size;
          return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
            throws java.io.ObjectStreamException {
          return super.writeReplace();
        }

        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email parseFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email parseDelimitedFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email parseFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email prototype) {
          return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          Builder builder = new Builder(parent);
          return builder;
        }
        /**
         * Protobuf type {@code signalservice.DataMessage.Contact.Email}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessage.Builder<Builder>
           implements org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.EmailOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Email_descriptor;
          }

          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Email_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Builder.class);
          }

          // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.newBuilder()
          private Builder() {
            maybeForceBuilderInitialization();
          }

          private Builder(
              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            super(parent);
            maybeForceBuilderInitialization();
          }
          private void maybeForceBuilderInitialization() {
            if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            }
          }
          private static Builder create() {
            return new Builder();
          }

          public Builder clear() {
            super.clear();
            value_ = "";
            bitField0_ = (bitField0_ & ~0x00000001);
            type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Type.HOME;
            bitField0_ = (bitField0_ & ~0x00000002);
            label_ = "";
            bitField0_ = (bitField0_ & ~0x00000004);
            return this;
          }

          public Builder clone() {
            return create().mergeFrom(buildPartial());
          }

          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Email_descriptor;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email getDefaultInstanceForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.getDefaultInstance();
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email build() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email buildPartial() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email result = new org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email(this);
            int from_bitField0_ = bitField0_;
            int to_bitField0_ = 0;
            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
              to_bitField0_ |= 0x00000001;
            }
            result.value_ = value_;
            if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
              to_bitField0_ |= 0x00000002;
            }
            result.type_ = type_;
            if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
              to_bitField0_ |= 0x00000004;
            }
            result.label_ = label_;
            result.bitField0_ = to_bitField0_;
            onBuilt();
            return result;
          }

          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email) {
              return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }

          public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email other) {
            if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.getDefaultInstance()) return this;
            if (other.hasValue()) {
              bitField0_ |= 0x00000001;
              value_ = other.value_;
              onChanged();
            }
            if (other.hasType()) {
              setType(other.getType());
            }
            if (other.hasLabel()) {
              bitField0_ |= 0x00000004;
              label_ = other.label_;
              onChanged();
            }
            this.mergeUnknownFields(other.getUnknownFields());
            return this;
          }

          public final boolean isInitialized() {
            return true;
          }

          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email parsedMessage = null;
            try {
              parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email) e.getUnfinishedMessage();
              throw e;
            } finally {
              if (parsedMessage != null) {
                mergeFrom(parsedMessage);
              }
            }
            return this;
          }
          private int bitField0_;

          // optional string value = 1;
          private java.lang.Object value_ = "";
          /**
           * <code>optional string value = 1;</code>
           */
          public boolean hasValue() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
          }
          /**
           * <code>optional string value = 1;</code>
           */
          public java.lang.String getValue() {
            java.lang.Object ref = value_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              value_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string value = 1;</code>
           */
          public com.google.protobuf.ByteString
              getValueBytes() {
            java.lang.Object ref = value_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              value_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string value = 1;</code>
           */
          public Builder setValue(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
            value_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string value = 1;</code>
           */
          public Builder clearValue() {
            bitField0_ = (bitField0_ & ~0x00000001);
            value_ = getDefaultInstance().getValue();
            onChanged();
            return this;
          }
          /**
           * <code>optional string value = 1;</code>
           */
          public Builder setValueBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
            value_ = value;
            onChanged();
            return this;
          }

          // optional .signalservice.DataMessage.Contact.Email.Type type = 2;
          private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Type type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Type.HOME;
          /**
           * <code>optional .signalservice.DataMessage.Contact.Email.Type type = 2;</code>
           */
          public boolean hasType() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
          }
          /**
           * <code>optional .signalservice.DataMessage.Contact.Email.Type type = 2;</code>
           */
          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Type getType() {
            return type_;
          }
          /**
           * <code>optional .signalservice.DataMessage.Contact.Email.Type type = 2;</code>
           */
          public Builder setType(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Type value) {
            if (value == null) {
              throw new NullPointerException();
            }
            bitField0_ |= 0x00000002;
            type_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional .signalservice.DataMessage.Contact.Email.Type type = 2;</code>
           */
          public Builder clearType() {
            bitField0_ = (bitField0_ & ~0x00000002);
            type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Type.HOME;
            onChanged();
            return this;
          }

          // optional string label = 3;
          private java.lang.Object label_ = "";
          /**
           * <code>optional string label = 3;</code>
           */
          public boolean hasLabel() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
          }
          /**
           * <code>optional string label = 3;</code>
           */
          public java.lang.String getLabel() {
            java.lang.Object ref = label_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              label_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string label = 3;</code>
           */
          public com.google.protobuf.ByteString
              getLabelBytes() {
            java.lang.Object ref = label_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              label_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string label = 3;</code>
           */
          public Builder setLabel(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
            label_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string label = 3;</code>
           */
          public Builder clearLabel() {
            bitField0_ = (bitField0_ & ~0x00000004);
            label_ = getDefaultInstance().getLabel();
            onChanged();
            return this;
          }
          /**
           * <code>optional string label = 3;</code>
           */
          public Builder setLabelBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
            label_ = value;
            onChanged();
            return this;
          }

          // @@protoc_insertion_point(builder_scope:signalservice.DataMessage.Contact.Email)
        }

        static {
          defaultInstance = new Email(true);
          defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:signalservice.DataMessage.Contact.Email)
      }

      public interface PostalAddressOrBuilder
          extends com.google.protobuf.MessageOrBuilder {

        // optional .signalservice.DataMessage.Contact.PostalAddress.Type type = 1;
        /**
         * <code>optional .signalservice.DataMessage.Contact.PostalAddress.Type type = 1;</code>
         */
        boolean hasType();
        /**
         * <code>optional .signalservice.DataMessage.Contact.PostalAddress.Type type = 1;</code>
         */
        org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Type getType();

        // optional string label = 2;
        /**
         * <code>optional string label = 2;</code>
         */
        boolean hasLabel();
        /**
         * <code>optional string label = 2;</code>
         */
        java.lang.String getLabel();
        /**
         * <code>optional string label = 2;</code>
         */
        com.google.protobuf.ByteString
            getLabelBytes();

        // optional string street = 3;
        /**
         * <code>optional string street = 3;</code>
         */
        boolean hasStreet();
        /**
         * <code>optional string street = 3;</code>
         */
        java.lang.String getStreet();
        /**
         * <code>optional string street = 3;</code>
         */
        com.google.protobuf.ByteString
            getStreetBytes();

        // optional string pobox = 4;
        /**
         * <code>optional string pobox = 4;</code>
         */
        boolean hasPobox();
        /**
         * <code>optional string pobox = 4;</code>
         */
        java.lang.String getPobox();
        /**
         * <code>optional string pobox = 4;</code>
         */
        com.google.protobuf.ByteString
            getPoboxBytes();

        // optional string neighborhood = 5;
        /**
         * <code>optional string neighborhood = 5;</code>
         */
        boolean hasNeighborhood();
        /**
         * <code>optional string neighborhood = 5;</code>
         */
        java.lang.String getNeighborhood();
        /**
         * <code>optional string neighborhood = 5;</code>
         */
        com.google.protobuf.ByteString
            getNeighborhoodBytes();

        // optional string city = 6;
        /**
         * <code>optional string city = 6;</code>
         */
        boolean hasCity();
        /**
         * <code>optional string city = 6;</code>
         */
        java.lang.String getCity();
        /**
         * <code>optional string city = 6;</code>
         */
        com.google.protobuf.ByteString
            getCityBytes();

        // optional string region = 7;
        /**
         * <code>optional string region = 7;</code>
         */
        boolean hasRegion();
        /**
         * <code>optional string region = 7;</code>
         */
        java.lang.String getRegion();
        /**
         * <code>optional string region = 7;</code>
         */
        com.google.protobuf.ByteString
            getRegionBytes();

        // optional string postcode = 8;
        /**
         * <code>optional string postcode = 8;</code>
         */
        boolean hasPostcode();
        /**
         * <code>optional string postcode = 8;</code>
         */
        java.lang.String getPostcode();
        /**
         * <code>optional string postcode = 8;</code>
         */
        com.google.protobuf.ByteString
            getPostcodeBytes();

        // optional string country = 9;
        /**
         * <code>optional string country = 9;</code>
         */
        boolean hasCountry();
        /**
         * <code>optional string country = 9;</code>
         */
        java.lang.String getCountry();
        /**
         * <code>optional string country = 9;</code>
         */
        com.google.protobuf.ByteString
            getCountryBytes();
      }
      /**
       * Protobuf type {@code signalservice.DataMessage.Contact.PostalAddress}
       */
      public static final class PostalAddress extends
          com.google.protobuf.GeneratedMessage
          implements PostalAddressOrBuilder {
        // Use PostalAddress.newBuilder() to construct.
        private PostalAddress(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
          super(builder);
          this.unknownFields = builder.getUnknownFields();
        }
        private PostalAddress(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final PostalAddress defaultInstance;
        public static PostalAddress getDefaultInstance() {
          return defaultInstance;
        }

        public PostalAddress getDefaultInstanceForType() {
          return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
            getUnknownFields() {
          return this.unknownFields;
        }
        private PostalAddress(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          initFields();
          int mutable_bitField0_ = 0;
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
              com.google.protobuf.UnknownFieldSet.newBuilder();
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                default: {
                  if (!parseUnknownField(input, unknownFields,
                                         extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
                case 8: {
                  int rawValue = input.readEnum();
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Type value = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Type.valueOf(rawValue);
                  if (value == null) {
                    unknownFields.mergeVarintField(1, rawValue);
                  } else {
                    bitField0_ |= 0x00000001;
                    type_ = value;
                  }
                  break;
                }
                case 18: {
                  bitField0_ |= 0x00000002;
                  label_ = input.readBytes();
                  break;
                }
                case 26: {
                  bitField0_ |= 0x00000004;
                  street_ = input.readBytes();
                  break;
                }
                case 34: {
                  bitField0_ |= 0x00000008;
                  pobox_ = input.readBytes();
                  break;
                }
                case 42: {
                  bitField0_ |= 0x00000010;
                  neighborhood_ = input.readBytes();
                  break;
                }
                case 50: {
                  bitField0_ |= 0x00000020;
                  city_ = input.readBytes();
                  break;
                }
                case 58: {
                  bitField0_ |= 0x00000040;
                  region_ = input.readBytes();
                  break;
                }
                case 66: {
                  bitField0_ |= 0x00000080;
                  postcode_ = input.readBytes();
                  break;
                }
                case 74: {
                  bitField0_ |= 0x00000100;
                  country_ = input.readBytes();
                  break;
                }
              }
            }
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(this);
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(
                e.getMessage()).setUnfinishedMessage(this);
          } finally {
            this.unknownFields = unknownFields.build();
            makeExtensionsImmutable();
          }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_PostalAddress_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_PostalAddress_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Builder.class);
        }

        public static com.google.protobuf.Parser<PostalAddress> PARSER =
            new com.google.protobuf.AbstractParser<PostalAddress>() {
          public PostalAddress parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new PostalAddress(input, extensionRegistry);
          }
        };

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

        /**
         * Protobuf enum {@code signalservice.DataMessage.Contact.PostalAddress.Type}
         */
        public enum Type
            implements com.google.protobuf.ProtocolMessageEnum {
          /**
           * <code>HOME = 1;</code>
           */
          HOME(0, 1),
          /**
           * <code>WORK = 2;</code>
           */
          WORK(1, 2),
          /**
           * <code>CUSTOM = 3;</code>
           */
          CUSTOM(2, 3),
          ;

          /**
           * <code>HOME = 1;</code>
           */
          public static final int HOME_VALUE = 1;
          /**
           * <code>WORK = 2;</code>
           */
          public static final int WORK_VALUE = 2;
          /**
           * <code>CUSTOM = 3;</code>
           */
          public static final int CUSTOM_VALUE = 3;


          public final int getNumber() { return value; }

          public static Type valueOf(int value) {
            switch (value) {
              case 1: return HOME;
              case 2: return WORK;
              case 3: return CUSTOM;
              default: return null;
            }
          }

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

          public final com.google.protobuf.Descriptors.EnumValueDescriptor
              getValueDescriptor() {
            return getDescriptor().getValues().get(index);
          }
          public final com.google.protobuf.Descriptors.EnumDescriptor
              getDescriptorForType() {
            return getDescriptor();
          }
          public static final com.google.protobuf.Descriptors.EnumDescriptor
              getDescriptor() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.getDescriptor().getEnumTypes().get(0);
          }

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

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

          private final int index;
          private final int value;

          private Type(int index, int value) {
            this.index = index;
            this.value = value;
          }

          // @@protoc_insertion_point(enum_scope:signalservice.DataMessage.Contact.PostalAddress.Type)
        }

        private int bitField0_;
        // optional .signalservice.DataMessage.Contact.PostalAddress.Type type = 1;
        public static final int TYPE_FIELD_NUMBER = 1;
        private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Type type_;
        /**
         * <code>optional .signalservice.DataMessage.Contact.PostalAddress.Type type = 1;</code>
         */
        public boolean hasType() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.PostalAddress.Type type = 1;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Type getType() {
          return type_;
        }

        // optional string label = 2;
        public static final int LABEL_FIELD_NUMBER = 2;
        private java.lang.Object label_;
        /**
         * <code>optional string label = 2;</code>
         */
        public boolean hasLabel() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string label = 2;</code>
         */
        public java.lang.String getLabel() {
          java.lang.Object ref = label_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              label_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string label = 2;</code>
         */
        public com.google.protobuf.ByteString
            getLabelBytes() {
          java.lang.Object ref = label_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            label_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string street = 3;
        public static final int STREET_FIELD_NUMBER = 3;
        private java.lang.Object street_;
        /**
         * <code>optional string street = 3;</code>
         */
        public boolean hasStreet() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional string street = 3;</code>
         */
        public java.lang.String getStreet() {
          java.lang.Object ref = street_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              street_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string street = 3;</code>
         */
        public com.google.protobuf.ByteString
            getStreetBytes() {
          java.lang.Object ref = street_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            street_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string pobox = 4;
        public static final int POBOX_FIELD_NUMBER = 4;
        private java.lang.Object pobox_;
        /**
         * <code>optional string pobox = 4;</code>
         */
        public boolean hasPobox() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional string pobox = 4;</code>
         */
        public java.lang.String getPobox() {
          java.lang.Object ref = pobox_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              pobox_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string pobox = 4;</code>
         */
        public com.google.protobuf.ByteString
            getPoboxBytes() {
          java.lang.Object ref = pobox_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            pobox_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string neighborhood = 5;
        public static final int NEIGHBORHOOD_FIELD_NUMBER = 5;
        private java.lang.Object neighborhood_;
        /**
         * <code>optional string neighborhood = 5;</code>
         */
        public boolean hasNeighborhood() {
          return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional string neighborhood = 5;</code>
         */
        public java.lang.String getNeighborhood() {
          java.lang.Object ref = neighborhood_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              neighborhood_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string neighborhood = 5;</code>
         */
        public com.google.protobuf.ByteString
            getNeighborhoodBytes() {
          java.lang.Object ref = neighborhood_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            neighborhood_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string city = 6;
        public static final int CITY_FIELD_NUMBER = 6;
        private java.lang.Object city_;
        /**
         * <code>optional string city = 6;</code>
         */
        public boolean hasCity() {
          return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional string city = 6;</code>
         */
        public java.lang.String getCity() {
          java.lang.Object ref = city_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              city_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string city = 6;</code>
         */
        public com.google.protobuf.ByteString
            getCityBytes() {
          java.lang.Object ref = city_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            city_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string region = 7;
        public static final int REGION_FIELD_NUMBER = 7;
        private java.lang.Object region_;
        /**
         * <code>optional string region = 7;</code>
         */
        public boolean hasRegion() {
          return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional string region = 7;</code>
         */
        public java.lang.String getRegion() {
          java.lang.Object ref = region_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              region_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string region = 7;</code>
         */
        public com.google.protobuf.ByteString
            getRegionBytes() {
          java.lang.Object ref = region_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            region_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string postcode = 8;
        public static final int POSTCODE_FIELD_NUMBER = 8;
        private java.lang.Object postcode_;
        /**
         * <code>optional string postcode = 8;</code>
         */
        public boolean hasPostcode() {
          return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>optional string postcode = 8;</code>
         */
        public java.lang.String getPostcode() {
          java.lang.Object ref = postcode_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              postcode_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string postcode = 8;</code>
         */
        public com.google.protobuf.ByteString
            getPostcodeBytes() {
          java.lang.Object ref = postcode_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            postcode_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string country = 9;
        public static final int COUNTRY_FIELD_NUMBER = 9;
        private java.lang.Object country_;
        /**
         * <code>optional string country = 9;</code>
         */
        public boolean hasCountry() {
          return ((bitField0_ & 0x00000100) == 0x00000100);
        }
        /**
         * <code>optional string country = 9;</code>
         */
        public java.lang.String getCountry() {
          java.lang.Object ref = country_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              country_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string country = 9;</code>
         */
        public com.google.protobuf.ByteString
            getCountryBytes() {
          java.lang.Object ref = country_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            country_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        private void initFields() {
          type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Type.HOME;
          label_ = "";
          street_ = "";
          pobox_ = "";
          neighborhood_ = "";
          city_ = "";
          region_ = "";
          postcode_ = "";
          country_ = "";
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
          byte isInitialized = memoizedIsInitialized;
          if (isInitialized != -1) return isInitialized == 1;

          memoizedIsInitialized = 1;
          return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          getSerializedSize();
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            output.writeEnum(1, type_.getNumber());
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            output.writeBytes(2, getLabelBytes());
          }
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            output.writeBytes(3, getStreetBytes());
          }
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            output.writeBytes(4, getPoboxBytes());
          }
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            output.writeBytes(5, getNeighborhoodBytes());
          }
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            output.writeBytes(6, getCityBytes());
          }
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            output.writeBytes(7, getRegionBytes());
          }
          if (((bitField0_ & 0x00000080) == 0x00000080)) {
            output.writeBytes(8, getPostcodeBytes());
          }
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            output.writeBytes(9, getCountryBytes());
          }
          getUnknownFields().writeTo(output);
        }

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

          size = 0;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            size += com.google.protobuf.CodedOutputStream
              .computeEnumSize(1, type_.getNumber());
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(2, getLabelBytes());
          }
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(3, getStreetBytes());
          }
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(4, getPoboxBytes());
          }
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(5, getNeighborhoodBytes());
          }
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(6, getCityBytes());
          }
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(7, getRegionBytes());
          }
          if (((bitField0_ & 0x00000080) == 0x00000080)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(8, getPostcodeBytes());
          }
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(9, getCountryBytes());
          }
          size += getUnknownFields().getSerializedSize();
          memoizedSerializedSize = size;
          return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
            throws java.io.ObjectStreamException {
          return super.writeReplace();
        }

        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress parseFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress parseDelimitedFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress parseFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress prototype) {
          return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          Builder builder = new Builder(parent);
          return builder;
        }
        /**
         * Protobuf type {@code signalservice.DataMessage.Contact.PostalAddress}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessage.Builder<Builder>
           implements org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddressOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_PostalAddress_descriptor;
          }

          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_PostalAddress_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Builder.class);
          }

          // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.newBuilder()
          private Builder() {
            maybeForceBuilderInitialization();
          }

          private Builder(
              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            super(parent);
            maybeForceBuilderInitialization();
          }
          private void maybeForceBuilderInitialization() {
            if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            }
          }
          private static Builder create() {
            return new Builder();
          }

          public Builder clear() {
            super.clear();
            type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Type.HOME;
            bitField0_ = (bitField0_ & ~0x00000001);
            label_ = "";
            bitField0_ = (bitField0_ & ~0x00000002);
            street_ = "";
            bitField0_ = (bitField0_ & ~0x00000004);
            pobox_ = "";
            bitField0_ = (bitField0_ & ~0x00000008);
            neighborhood_ = "";
            bitField0_ = (bitField0_ & ~0x00000010);
            city_ = "";
            bitField0_ = (bitField0_ & ~0x00000020);
            region_ = "";
            bitField0_ = (bitField0_ & ~0x00000040);
            postcode_ = "";
            bitField0_ = (bitField0_ & ~0x00000080);
            country_ = "";
            bitField0_ = (bitField0_ & ~0x00000100);
            return this;
          }

          public Builder clone() {
            return create().mergeFrom(buildPartial());
          }

          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_PostalAddress_descriptor;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress getDefaultInstanceForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.getDefaultInstance();
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress build() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress buildPartial() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress result = new org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress(this);
            int from_bitField0_ = bitField0_;
            int to_bitField0_ = 0;
            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
              to_bitField0_ |= 0x00000001;
            }
            result.type_ = type_;
            if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
              to_bitField0_ |= 0x00000002;
            }
            result.label_ = label_;
            if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
              to_bitField0_ |= 0x00000004;
            }
            result.street_ = street_;
            if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
              to_bitField0_ |= 0x00000008;
            }
            result.pobox_ = pobox_;
            if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
              to_bitField0_ |= 0x00000010;
            }
            result.neighborhood_ = neighborhood_;
            if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
              to_bitField0_ |= 0x00000020;
            }
            result.city_ = city_;
            if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
              to_bitField0_ |= 0x00000040;
            }
            result.region_ = region_;
            if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
              to_bitField0_ |= 0x00000080;
            }
            result.postcode_ = postcode_;
            if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
              to_bitField0_ |= 0x00000100;
            }
            result.country_ = country_;
            result.bitField0_ = to_bitField0_;
            onBuilt();
            return result;
          }

          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress) {
              return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }

          public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress other) {
            if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.getDefaultInstance()) return this;
            if (other.hasType()) {
              setType(other.getType());
            }
            if (other.hasLabel()) {
              bitField0_ |= 0x00000002;
              label_ = other.label_;
              onChanged();
            }
            if (other.hasStreet()) {
              bitField0_ |= 0x00000004;
              street_ = other.street_;
              onChanged();
            }
            if (other.hasPobox()) {
              bitField0_ |= 0x00000008;
              pobox_ = other.pobox_;
              onChanged();
            }
            if (other.hasNeighborhood()) {
              bitField0_ |= 0x00000010;
              neighborhood_ = other.neighborhood_;
              onChanged();
            }
            if (other.hasCity()) {
              bitField0_ |= 0x00000020;
              city_ = other.city_;
              onChanged();
            }
            if (other.hasRegion()) {
              bitField0_ |= 0x00000040;
              region_ = other.region_;
              onChanged();
            }
            if (other.hasPostcode()) {
              bitField0_ |= 0x00000080;
              postcode_ = other.postcode_;
              onChanged();
            }
            if (other.hasCountry()) {
              bitField0_ |= 0x00000100;
              country_ = other.country_;
              onChanged();
            }
            this.mergeUnknownFields(other.getUnknownFields());
            return this;
          }

          public final boolean isInitialized() {
            return true;
          }

          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress parsedMessage = null;
            try {
              parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress) e.getUnfinishedMessage();
              throw e;
            } finally {
              if (parsedMessage != null) {
                mergeFrom(parsedMessage);
              }
            }
            return this;
          }
          private int bitField0_;

          // optional .signalservice.DataMessage.Contact.PostalAddress.Type type = 1;
          private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Type type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Type.HOME;
          /**
           * <code>optional .signalservice.DataMessage.Contact.PostalAddress.Type type = 1;</code>
           */
          public boolean hasType() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
          }
          /**
           * <code>optional .signalservice.DataMessage.Contact.PostalAddress.Type type = 1;</code>
           */
          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Type getType() {
            return type_;
          }
          /**
           * <code>optional .signalservice.DataMessage.Contact.PostalAddress.Type type = 1;</code>
           */
          public Builder setType(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Type value) {
            if (value == null) {
              throw new NullPointerException();
            }
            bitField0_ |= 0x00000001;
            type_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional .signalservice.DataMessage.Contact.PostalAddress.Type type = 1;</code>
           */
          public Builder clearType() {
            bitField0_ = (bitField0_ & ~0x00000001);
            type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Type.HOME;
            onChanged();
            return this;
          }

          // optional string label = 2;
          private java.lang.Object label_ = "";
          /**
           * <code>optional string label = 2;</code>
           */
          public boolean hasLabel() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
          }
          /**
           * <code>optional string label = 2;</code>
           */
          public java.lang.String getLabel() {
            java.lang.Object ref = label_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              label_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string label = 2;</code>
           */
          public com.google.protobuf.ByteString
              getLabelBytes() {
            java.lang.Object ref = label_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              label_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string label = 2;</code>
           */
          public Builder setLabel(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
            label_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string label = 2;</code>
           */
          public Builder clearLabel() {
            bitField0_ = (bitField0_ & ~0x00000002);
            label_ = getDefaultInstance().getLabel();
            onChanged();
            return this;
          }
          /**
           * <code>optional string label = 2;</code>
           */
          public Builder setLabelBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
            label_ = value;
            onChanged();
            return this;
          }

          // optional string street = 3;
          private java.lang.Object street_ = "";
          /**
           * <code>optional string street = 3;</code>
           */
          public boolean hasStreet() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
          }
          /**
           * <code>optional string street = 3;</code>
           */
          public java.lang.String getStreet() {
            java.lang.Object ref = street_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              street_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string street = 3;</code>
           */
          public com.google.protobuf.ByteString
              getStreetBytes() {
            java.lang.Object ref = street_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              street_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string street = 3;</code>
           */
          public Builder setStreet(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
            street_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string street = 3;</code>
           */
          public Builder clearStreet() {
            bitField0_ = (bitField0_ & ~0x00000004);
            street_ = getDefaultInstance().getStreet();
            onChanged();
            return this;
          }
          /**
           * <code>optional string street = 3;</code>
           */
          public Builder setStreetBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
            street_ = value;
            onChanged();
            return this;
          }

          // optional string pobox = 4;
          private java.lang.Object pobox_ = "";
          /**
           * <code>optional string pobox = 4;</code>
           */
          public boolean hasPobox() {
            return ((bitField0_ & 0x00000008) == 0x00000008);
          }
          /**
           * <code>optional string pobox = 4;</code>
           */
          public java.lang.String getPobox() {
            java.lang.Object ref = pobox_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              pobox_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string pobox = 4;</code>
           */
          public com.google.protobuf.ByteString
              getPoboxBytes() {
            java.lang.Object ref = pobox_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              pobox_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string pobox = 4;</code>
           */
          public Builder setPobox(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
            pobox_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string pobox = 4;</code>
           */
          public Builder clearPobox() {
            bitField0_ = (bitField0_ & ~0x00000008);
            pobox_ = getDefaultInstance().getPobox();
            onChanged();
            return this;
          }
          /**
           * <code>optional string pobox = 4;</code>
           */
          public Builder setPoboxBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
            pobox_ = value;
            onChanged();
            return this;
          }

          // optional string neighborhood = 5;
          private java.lang.Object neighborhood_ = "";
          /**
           * <code>optional string neighborhood = 5;</code>
           */
          public boolean hasNeighborhood() {
            return ((bitField0_ & 0x00000010) == 0x00000010);
          }
          /**
           * <code>optional string neighborhood = 5;</code>
           */
          public java.lang.String getNeighborhood() {
            java.lang.Object ref = neighborhood_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              neighborhood_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string neighborhood = 5;</code>
           */
          public com.google.protobuf.ByteString
              getNeighborhoodBytes() {
            java.lang.Object ref = neighborhood_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              neighborhood_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string neighborhood = 5;</code>
           */
          public Builder setNeighborhood(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
            neighborhood_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string neighborhood = 5;</code>
           */
          public Builder clearNeighborhood() {
            bitField0_ = (bitField0_ & ~0x00000010);
            neighborhood_ = getDefaultInstance().getNeighborhood();
            onChanged();
            return this;
          }
          /**
           * <code>optional string neighborhood = 5;</code>
           */
          public Builder setNeighborhoodBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
            neighborhood_ = value;
            onChanged();
            return this;
          }

          // optional string city = 6;
          private java.lang.Object city_ = "";
          /**
           * <code>optional string city = 6;</code>
           */
          public boolean hasCity() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
          }
          /**
           * <code>optional string city = 6;</code>
           */
          public java.lang.String getCity() {
            java.lang.Object ref = city_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              city_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string city = 6;</code>
           */
          public com.google.protobuf.ByteString
              getCityBytes() {
            java.lang.Object ref = city_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              city_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string city = 6;</code>
           */
          public Builder setCity(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
            city_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string city = 6;</code>
           */
          public Builder clearCity() {
            bitField0_ = (bitField0_ & ~0x00000020);
            city_ = getDefaultInstance().getCity();
            onChanged();
            return this;
          }
          /**
           * <code>optional string city = 6;</code>
           */
          public Builder setCityBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
            city_ = value;
            onChanged();
            return this;
          }

          // optional string region = 7;
          private java.lang.Object region_ = "";
          /**
           * <code>optional string region = 7;</code>
           */
          public boolean hasRegion() {
            return ((bitField0_ & 0x00000040) == 0x00000040);
          }
          /**
           * <code>optional string region = 7;</code>
           */
          public java.lang.String getRegion() {
            java.lang.Object ref = region_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              region_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string region = 7;</code>
           */
          public com.google.protobuf.ByteString
              getRegionBytes() {
            java.lang.Object ref = region_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              region_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string region = 7;</code>
           */
          public Builder setRegion(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
            region_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string region = 7;</code>
           */
          public Builder clearRegion() {
            bitField0_ = (bitField0_ & ~0x00000040);
            region_ = getDefaultInstance().getRegion();
            onChanged();
            return this;
          }
          /**
           * <code>optional string region = 7;</code>
           */
          public Builder setRegionBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
            region_ = value;
            onChanged();
            return this;
          }

          // optional string postcode = 8;
          private java.lang.Object postcode_ = "";
          /**
           * <code>optional string postcode = 8;</code>
           */
          public boolean hasPostcode() {
            return ((bitField0_ & 0x00000080) == 0x00000080);
          }
          /**
           * <code>optional string postcode = 8;</code>
           */
          public java.lang.String getPostcode() {
            java.lang.Object ref = postcode_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              postcode_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string postcode = 8;</code>
           */
          public com.google.protobuf.ByteString
              getPostcodeBytes() {
            java.lang.Object ref = postcode_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              postcode_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string postcode = 8;</code>
           */
          public Builder setPostcode(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
            postcode_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string postcode = 8;</code>
           */
          public Builder clearPostcode() {
            bitField0_ = (bitField0_ & ~0x00000080);
            postcode_ = getDefaultInstance().getPostcode();
            onChanged();
            return this;
          }
          /**
           * <code>optional string postcode = 8;</code>
           */
          public Builder setPostcodeBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
            postcode_ = value;
            onChanged();
            return this;
          }

          // optional string country = 9;
          private java.lang.Object country_ = "";
          /**
           * <code>optional string country = 9;</code>
           */
          public boolean hasCountry() {
            return ((bitField0_ & 0x00000100) == 0x00000100);
          }
          /**
           * <code>optional string country = 9;</code>
           */
          public java.lang.String getCountry() {
            java.lang.Object ref = country_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              country_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string country = 9;</code>
           */
          public com.google.protobuf.ByteString
              getCountryBytes() {
            java.lang.Object ref = country_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              country_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string country = 9;</code>
           */
          public Builder setCountry(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
            country_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string country = 9;</code>
           */
          public Builder clearCountry() {
            bitField0_ = (bitField0_ & ~0x00000100);
            country_ = getDefaultInstance().getCountry();
            onChanged();
            return this;
          }
          /**
           * <code>optional string country = 9;</code>
           */
          public Builder setCountryBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
            country_ = value;
            onChanged();
            return this;
          }

          // @@protoc_insertion_point(builder_scope:signalservice.DataMessage.Contact.PostalAddress)
        }

        static {
          defaultInstance = new PostalAddress(true);
          defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:signalservice.DataMessage.Contact.PostalAddress)
      }

      public interface AvatarOrBuilder
          extends com.google.protobuf.MessageOrBuilder {

        // optional .signalservice.AttachmentPointer avatar = 1;
        /**
         * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
         */
        boolean hasAvatar();
        /**
         * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
         */
        org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getAvatar();
        /**
         * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
         */
        org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getAvatarOrBuilder();

        // optional bool isProfile = 2;
        /**
         * <code>optional bool isProfile = 2;</code>
         */
        boolean hasIsProfile();
        /**
         * <code>optional bool isProfile = 2;</code>
         */
        boolean getIsProfile();
      }
      /**
       * Protobuf type {@code signalservice.DataMessage.Contact.Avatar}
       */
      public static final class Avatar extends
          com.google.protobuf.GeneratedMessage
          implements AvatarOrBuilder {
        // Use Avatar.newBuilder() to construct.
        private Avatar(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
          super(builder);
          this.unknownFields = builder.getUnknownFields();
        }
        private Avatar(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final Avatar defaultInstance;
        public static Avatar getDefaultInstance() {
          return defaultInstance;
        }

        public Avatar getDefaultInstanceForType() {
          return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
            getUnknownFields() {
          return this.unknownFields;
        }
        private Avatar(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          initFields();
          int mutable_bitField0_ = 0;
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
              com.google.protobuf.UnknownFieldSet.newBuilder();
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                default: {
                  if (!parseUnknownField(input, unknownFields,
                                         extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
                case 10: {
                  org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder subBuilder = null;
                  if (((bitField0_ & 0x00000001) == 0x00000001)) {
                    subBuilder = avatar_.toBuilder();
                  }
                  avatar_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.PARSER, extensionRegistry);
                  if (subBuilder != null) {
                    subBuilder.mergeFrom(avatar_);
                    avatar_ = subBuilder.buildPartial();
                  }
                  bitField0_ |= 0x00000001;
                  break;
                }
                case 16: {
                  bitField0_ |= 0x00000002;
                  isProfile_ = input.readBool();
                  break;
                }
              }
            }
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(this);
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(
                e.getMessage()).setUnfinishedMessage(this);
          } finally {
            this.unknownFields = unknownFields.build();
            makeExtensionsImmutable();
          }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Avatar_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Avatar_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.Builder.class);
        }

        public static com.google.protobuf.Parser<Avatar> PARSER =
            new com.google.protobuf.AbstractParser<Avatar>() {
          public Avatar parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new Avatar(input, extensionRegistry);
          }
        };

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

        private int bitField0_;
        // optional .signalservice.AttachmentPointer avatar = 1;
        public static final int AVATAR_FIELD_NUMBER = 1;
        private org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer avatar_;
        /**
         * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
         */
        public boolean hasAvatar() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getAvatar() {
          return avatar_;
        }
        /**
         * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getAvatarOrBuilder() {
          return avatar_;
        }

        // optional bool isProfile = 2;
        public static final int ISPROFILE_FIELD_NUMBER = 2;
        private boolean isProfile_;
        /**
         * <code>optional bool isProfile = 2;</code>
         */
        public boolean hasIsProfile() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional bool isProfile = 2;</code>
         */
        public boolean getIsProfile() {
          return isProfile_;
        }

        private void initFields() {
          avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
          isProfile_ = false;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
          byte isInitialized = memoizedIsInitialized;
          if (isInitialized != -1) return isInitialized == 1;

          memoizedIsInitialized = 1;
          return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          getSerializedSize();
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            output.writeMessage(1, avatar_);
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            output.writeBool(2, isProfile_);
          }
          getUnknownFields().writeTo(output);
        }

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

          size = 0;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            size += com.google.protobuf.CodedOutputStream
              .computeMessageSize(1, avatar_);
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBoolSize(2, isProfile_);
          }
          size += getUnknownFields().getSerializedSize();
          memoizedSerializedSize = size;
          return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
            throws java.io.ObjectStreamException {
          return super.writeReplace();
        }

        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar parseFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar parseDelimitedFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar parseFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar prototype) {
          return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          Builder builder = new Builder(parent);
          return builder;
        }
        /**
         * Protobuf type {@code signalservice.DataMessage.Contact.Avatar}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessage.Builder<Builder>
           implements org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.AvatarOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Avatar_descriptor;
          }

          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Avatar_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.Builder.class);
          }

          // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.newBuilder()
          private Builder() {
            maybeForceBuilderInitialization();
          }

          private Builder(
              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            super(parent);
            maybeForceBuilderInitialization();
          }
          private void maybeForceBuilderInitialization() {
            if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
              getAvatarFieldBuilder();
            }
          }
          private static Builder create() {
            return new Builder();
          }

          public Builder clear() {
            super.clear();
            if (avatarBuilder_ == null) {
              avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
            } else {
              avatarBuilder_.clear();
            }
            bitField0_ = (bitField0_ & ~0x00000001);
            isProfile_ = false;
            bitField0_ = (bitField0_ & ~0x00000002);
            return this;
          }

          public Builder clone() {
            return create().mergeFrom(buildPartial());
          }

          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_Avatar_descriptor;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar getDefaultInstanceForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.getDefaultInstance();
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar build() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar buildPartial() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar result = new org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar(this);
            int from_bitField0_ = bitField0_;
            int to_bitField0_ = 0;
            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
              to_bitField0_ |= 0x00000001;
            }
            if (avatarBuilder_ == null) {
              result.avatar_ = avatar_;
            } else {
              result.avatar_ = avatarBuilder_.build();
            }
            if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
              to_bitField0_ |= 0x00000002;
            }
            result.isProfile_ = isProfile_;
            result.bitField0_ = to_bitField0_;
            onBuilt();
            return result;
          }

          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar) {
              return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }

          public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar other) {
            if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.getDefaultInstance()) return this;
            if (other.hasAvatar()) {
              mergeAvatar(other.getAvatar());
            }
            if (other.hasIsProfile()) {
              setIsProfile(other.getIsProfile());
            }
            this.mergeUnknownFields(other.getUnknownFields());
            return this;
          }

          public final boolean isInitialized() {
            return true;
          }

          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar parsedMessage = null;
            try {
              parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar) e.getUnfinishedMessage();
              throw e;
            } finally {
              if (parsedMessage != null) {
                mergeFrom(parsedMessage);
              }
            }
            return this;
          }
          private int bitField0_;

          // optional .signalservice.AttachmentPointer avatar = 1;
          private org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
          private com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder> avatarBuilder_;
          /**
           * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
           */
          public boolean hasAvatar() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
          }
          /**
           * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
           */
          public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getAvatar() {
            if (avatarBuilder_ == null) {
              return avatar_;
            } else {
              return avatarBuilder_.getMessage();
            }
          }
          /**
           * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
           */
          public Builder setAvatar(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer value) {
            if (avatarBuilder_ == null) {
              if (value == null) {
                throw new NullPointerException();
              }
              avatar_ = value;
              onChanged();
            } else {
              avatarBuilder_.setMessage(value);
            }
            bitField0_ |= 0x00000001;
            return this;
          }
          /**
           * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
           */
          public Builder setAvatar(
              org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder builderForValue) {
            if (avatarBuilder_ == null) {
              avatar_ = builderForValue.build();
              onChanged();
            } else {
              avatarBuilder_.setMessage(builderForValue.build());
            }
            bitField0_ |= 0x00000001;
            return this;
          }
          /**
           * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
           */
          public Builder mergeAvatar(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer value) {
            if (avatarBuilder_ == null) {
              if (((bitField0_ & 0x00000001) == 0x00000001) &&
                  avatar_ != org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance()) {
                avatar_ =
                  org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.newBuilder(avatar_).mergeFrom(value).buildPartial();
              } else {
                avatar_ = value;
              }
              onChanged();
            } else {
              avatarBuilder_.mergeFrom(value);
            }
            bitField0_ |= 0x00000001;
            return this;
          }
          /**
           * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
           */
          public Builder clearAvatar() {
            if (avatarBuilder_ == null) {
              avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
              onChanged();
            } else {
              avatarBuilder_.clear();
            }
            bitField0_ = (bitField0_ & ~0x00000001);
            return this;
          }
          /**
           * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
           */
          public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder getAvatarBuilder() {
            bitField0_ |= 0x00000001;
            onChanged();
            return getAvatarFieldBuilder().getBuilder();
          }
          /**
           * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
           */
          public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getAvatarOrBuilder() {
            if (avatarBuilder_ != null) {
              return avatarBuilder_.getMessageOrBuilder();
            } else {
              return avatar_;
            }
          }
          /**
           * <code>optional .signalservice.AttachmentPointer avatar = 1;</code>
           */
          private com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder> 
              getAvatarFieldBuilder() {
            if (avatarBuilder_ == null) {
              avatarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                  org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder>(
                      avatar_,
                      getParentForChildren(),
                      isClean());
              avatar_ = null;
            }
            return avatarBuilder_;
          }

          // optional bool isProfile = 2;
          private boolean isProfile_ ;
          /**
           * <code>optional bool isProfile = 2;</code>
           */
          public boolean hasIsProfile() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
          }
          /**
           * <code>optional bool isProfile = 2;</code>
           */
          public boolean getIsProfile() {
            return isProfile_;
          }
          /**
           * <code>optional bool isProfile = 2;</code>
           */
          public Builder setIsProfile(boolean value) {
            bitField0_ |= 0x00000002;
            isProfile_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional bool isProfile = 2;</code>
           */
          public Builder clearIsProfile() {
            bitField0_ = (bitField0_ & ~0x00000002);
            isProfile_ = false;
            onChanged();
            return this;
          }

          // @@protoc_insertion_point(builder_scope:signalservice.DataMessage.Contact.Avatar)
        }

        static {
          defaultInstance = new Avatar(true);
          defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:signalservice.DataMessage.Contact.Avatar)
      }

      private int bitField0_;
      // optional .signalservice.DataMessage.Contact.Name name = 1;
      public static final int NAME_FIELD_NUMBER = 1;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name name_;
      /**
       * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name getName() {
        return name_;
      }
      /**
       * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.NameOrBuilder getNameOrBuilder() {
        return name_;
      }

      // repeated .signalservice.DataMessage.Contact.Phone number = 3;
      public static final int NUMBER_FIELD_NUMBER = 3;
      private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone> number_;
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone> getNumberList() {
        return number_;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
       */
      public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PhoneOrBuilder> 
          getNumberOrBuilderList() {
        return number_;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
       */
      public int getNumberCount() {
        return number_.size();
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone getNumber(int index) {
        return number_.get(index);
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PhoneOrBuilder getNumberOrBuilder(
          int index) {
        return number_.get(index);
      }

      // repeated .signalservice.DataMessage.Contact.Email email = 4;
      public static final int EMAIL_FIELD_NUMBER = 4;
      private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email> email_;
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email> getEmailList() {
        return email_;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
       */
      public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.EmailOrBuilder> 
          getEmailOrBuilderList() {
        return email_;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
       */
      public int getEmailCount() {
        return email_.size();
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email getEmail(int index) {
        return email_.get(index);
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.EmailOrBuilder getEmailOrBuilder(
          int index) {
        return email_.get(index);
      }

      // repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;
      public static final int ADDRESS_FIELD_NUMBER = 5;
      private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress> address_;
      /**
       * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress> getAddressList() {
        return address_;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
       */
      public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddressOrBuilder> 
          getAddressOrBuilderList() {
        return address_;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
       */
      public int getAddressCount() {
        return address_.size();
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress getAddress(int index) {
        return address_.get(index);
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddressOrBuilder getAddressOrBuilder(
          int index) {
        return address_.get(index);
      }

      // optional .signalservice.DataMessage.Contact.Avatar avatar = 6;
      public static final int AVATAR_FIELD_NUMBER = 6;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar avatar_;
      /**
       * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
       */
      public boolean hasAvatar() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar getAvatar() {
        return avatar_;
      }
      /**
       * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.AvatarOrBuilder getAvatarOrBuilder() {
        return avatar_;
      }

      // optional string organization = 7;
      public static final int ORGANIZATION_FIELD_NUMBER = 7;
      private java.lang.Object organization_;
      /**
       * <code>optional string organization = 7;</code>
       */
      public boolean hasOrganization() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string organization = 7;</code>
       */
      public java.lang.String getOrganization() {
        java.lang.Object ref = organization_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            organization_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string organization = 7;</code>
       */
      public com.google.protobuf.ByteString
          getOrganizationBytes() {
        java.lang.Object ref = organization_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          organization_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private void initFields() {
        name_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.getDefaultInstance();
        number_ = java.util.Collections.emptyList();
        email_ = java.util.Collections.emptyList();
        address_ = java.util.Collections.emptyList();
        avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.getDefaultInstance();
        organization_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeMessage(1, name_);
        }
        for (int i = 0; i < number_.size(); i++) {
          output.writeMessage(3, number_.get(i));
        }
        for (int i = 0; i < email_.size(); i++) {
          output.writeMessage(4, email_.get(i));
        }
        for (int i = 0; i < address_.size(); i++) {
          output.writeMessage(5, address_.get(i));
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeMessage(6, avatar_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeBytes(7, getOrganizationBytes());
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, name_);
        }
        for (int i = 0; i < number_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(3, number_.get(i));
        }
        for (int i = 0; i < email_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(4, email_.get(i));
        }
        for (int i = 0; i < address_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(5, address_.get(i));
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(6, avatar_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(7, getOrganizationBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code signalservice.DataMessage.Contact}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ContactOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Builder.class);
        }

        // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getNameFieldBuilder();
            getNumberFieldBuilder();
            getEmailFieldBuilder();
            getAddressFieldBuilder();
            getAvatarFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          if (nameBuilder_ == null) {
            name_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.getDefaultInstance();
          } else {
            nameBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          if (numberBuilder_ == null) {
            number_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            numberBuilder_.clear();
          }
          if (emailBuilder_ == null) {
            email_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            emailBuilder_.clear();
          }
          if (addressBuilder_ == null) {
            address_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            addressBuilder_.clear();
          }
          if (avatarBuilder_ == null) {
            avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.getDefaultInstance();
          } else {
            avatarBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000010);
          organization_ = "";
          bitField0_ = (bitField0_ & ~0x00000020);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Contact_descriptor;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact getDefaultInstanceForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.getDefaultInstance();
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact build() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact buildPartial() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact result = new org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          if (nameBuilder_ == null) {
            result.name_ = name_;
          } else {
            result.name_ = nameBuilder_.build();
          }
          if (numberBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              number_ = java.util.Collections.unmodifiableList(number_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.number_ = number_;
          } else {
            result.number_ = numberBuilder_.build();
          }
          if (emailBuilder_ == null) {
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
              email_ = java.util.Collections.unmodifiableList(email_);
              bitField0_ = (bitField0_ & ~0x00000004);
            }
            result.email_ = email_;
          } else {
            result.email_ = emailBuilder_.build();
          }
          if (addressBuilder_ == null) {
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
              address_ = java.util.Collections.unmodifiableList(address_);
              bitField0_ = (bitField0_ & ~0x00000008);
            }
            result.address_ = address_;
          } else {
            result.address_ = addressBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
            to_bitField0_ |= 0x00000002;
          }
          if (avatarBuilder_ == null) {
            result.avatar_ = avatar_;
          } else {
            result.avatar_ = avatarBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
            to_bitField0_ |= 0x00000004;
          }
          result.organization_ = organization_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact) {
            return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact other) {
          if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.getDefaultInstance()) return this;
          if (other.hasName()) {
            mergeName(other.getName());
          }
          if (numberBuilder_ == null) {
            if (!other.number_.isEmpty()) {
              if (number_.isEmpty()) {
                number_ = other.number_;
                bitField0_ = (bitField0_ & ~0x00000002);
              } else {
                ensureNumberIsMutable();
                number_.addAll(other.number_);
              }
              onChanged();
            }
          } else {
            if (!other.number_.isEmpty()) {
              if (numberBuilder_.isEmpty()) {
                numberBuilder_.dispose();
                numberBuilder_ = null;
                number_ = other.number_;
                bitField0_ = (bitField0_ & ~0x00000002);
                numberBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getNumberFieldBuilder() : null;
              } else {
                numberBuilder_.addAllMessages(other.number_);
              }
            }
          }
          if (emailBuilder_ == null) {
            if (!other.email_.isEmpty()) {
              if (email_.isEmpty()) {
                email_ = other.email_;
                bitField0_ = (bitField0_ & ~0x00000004);
              } else {
                ensureEmailIsMutable();
                email_.addAll(other.email_);
              }
              onChanged();
            }
          } else {
            if (!other.email_.isEmpty()) {
              if (emailBuilder_.isEmpty()) {
                emailBuilder_.dispose();
                emailBuilder_ = null;
                email_ = other.email_;
                bitField0_ = (bitField0_ & ~0x00000004);
                emailBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getEmailFieldBuilder() : null;
              } else {
                emailBuilder_.addAllMessages(other.email_);
              }
            }
          }
          if (addressBuilder_ == null) {
            if (!other.address_.isEmpty()) {
              if (address_.isEmpty()) {
                address_ = other.address_;
                bitField0_ = (bitField0_ & ~0x00000008);
              } else {
                ensureAddressIsMutable();
                address_.addAll(other.address_);
              }
              onChanged();
            }
          } else {
            if (!other.address_.isEmpty()) {
              if (addressBuilder_.isEmpty()) {
                addressBuilder_.dispose();
                addressBuilder_ = null;
                address_ = other.address_;
                bitField0_ = (bitField0_ & ~0x00000008);
                addressBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getAddressFieldBuilder() : null;
              } else {
                addressBuilder_.addAllMessages(other.address_);
              }
            }
          }
          if (other.hasAvatar()) {
            mergeAvatar(other.getAvatar());
          }
          if (other.hasOrganization()) {
            bitField0_ |= 0x00000020;
            organization_ = other.organization_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        // optional .signalservice.DataMessage.Contact.Name name = 1;
        private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name name_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.NameOrBuilder> nameBuilder_;
        /**
         * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
         */
        public boolean hasName() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name getName() {
          if (nameBuilder_ == null) {
            return name_;
          } else {
            return nameBuilder_.getMessage();
          }
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
         */
        public Builder setName(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name value) {
          if (nameBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            name_ = value;
            onChanged();
          } else {
            nameBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
         */
        public Builder setName(
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.Builder builderForValue) {
          if (nameBuilder_ == null) {
            name_ = builderForValue.build();
            onChanged();
          } else {
            nameBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
         */
        public Builder mergeName(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name value) {
          if (nameBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001) &&
                name_ != org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.getDefaultInstance()) {
              name_ =
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.newBuilder(name_).mergeFrom(value).buildPartial();
            } else {
              name_ = value;
            }
            onChanged();
          } else {
            nameBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
         */
        public Builder clearName() {
          if (nameBuilder_ == null) {
            name_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.getDefaultInstance();
            onChanged();
          } else {
            nameBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.Builder getNameBuilder() {
          bitField0_ |= 0x00000001;
          onChanged();
          return getNameFieldBuilder().getBuilder();
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.NameOrBuilder getNameOrBuilder() {
          if (nameBuilder_ != null) {
            return nameBuilder_.getMessageOrBuilder();
          } else {
            return name_;
          }
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Name name = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.NameOrBuilder> 
            getNameFieldBuilder() {
          if (nameBuilder_ == null) {
            nameBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Name.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.NameOrBuilder>(
                    name_,
                    getParentForChildren(),
                    isClean());
            name_ = null;
          }
          return nameBuilder_;
        }

        // repeated .signalservice.DataMessage.Contact.Phone number = 3;
        private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone> number_ =
          java.util.Collections.emptyList();
        private void ensureNumberIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            number_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone>(number_);
            bitField0_ |= 0x00000002;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PhoneOrBuilder> numberBuilder_;

        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone> getNumberList() {
          if (numberBuilder_ == null) {
            return java.util.Collections.unmodifiableList(number_);
          } else {
            return numberBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public int getNumberCount() {
          if (numberBuilder_ == null) {
            return number_.size();
          } else {
            return numberBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone getNumber(int index) {
          if (numberBuilder_ == null) {
            return number_.get(index);
          } else {
            return numberBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public Builder setNumber(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone value) {
          if (numberBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureNumberIsMutable();
            number_.set(index, value);
            onChanged();
          } else {
            numberBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public Builder setNumber(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Builder builderForValue) {
          if (numberBuilder_ == null) {
            ensureNumberIsMutable();
            number_.set(index, builderForValue.build());
            onChanged();
          } else {
            numberBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public Builder addNumber(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone value) {
          if (numberBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureNumberIsMutable();
            number_.add(value);
            onChanged();
          } else {
            numberBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public Builder addNumber(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone value) {
          if (numberBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureNumberIsMutable();
            number_.add(index, value);
            onChanged();
          } else {
            numberBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public Builder addNumber(
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Builder builderForValue) {
          if (numberBuilder_ == null) {
            ensureNumberIsMutable();
            number_.add(builderForValue.build());
            onChanged();
          } else {
            numberBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public Builder addNumber(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Builder builderForValue) {
          if (numberBuilder_ == null) {
            ensureNumberIsMutable();
            number_.add(index, builderForValue.build());
            onChanged();
          } else {
            numberBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public Builder addAllNumber(
            java.lang.Iterable<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone> values) {
          if (numberBuilder_ == null) {
            ensureNumberIsMutable();
            super.addAll(values, number_);
            onChanged();
          } else {
            numberBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public Builder clearNumber() {
          if (numberBuilder_ == null) {
            number_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            numberBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public Builder removeNumber(int index) {
          if (numberBuilder_ == null) {
            ensureNumberIsMutable();
            number_.remove(index);
            onChanged();
          } else {
            numberBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Builder getNumberBuilder(
            int index) {
          return getNumberFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PhoneOrBuilder getNumberOrBuilder(
            int index) {
          if (numberBuilder_ == null) {
            return number_.get(index);  } else {
            return numberBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PhoneOrBuilder> 
             getNumberOrBuilderList() {
          if (numberBuilder_ != null) {
            return numberBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(number_);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Builder addNumberBuilder() {
          return getNumberFieldBuilder().addBuilder(
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.getDefaultInstance());
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Builder addNumberBuilder(
            int index) {
          return getNumberFieldBuilder().addBuilder(
              index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.getDefaultInstance());
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Phone number = 3;</code>
         */
        public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Builder> 
             getNumberBuilderList() {
          return getNumberFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PhoneOrBuilder> 
            getNumberFieldBuilder() {
          if (numberBuilder_ == null) {
            numberBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Phone.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PhoneOrBuilder>(
                    number_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            number_ = null;
          }
          return numberBuilder_;
        }

        // repeated .signalservice.DataMessage.Contact.Email email = 4;
        private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email> email_ =
          java.util.Collections.emptyList();
        private void ensureEmailIsMutable() {
          if (!((bitField0_ & 0x00000004) == 0x00000004)) {
            email_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email>(email_);
            bitField0_ |= 0x00000004;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.EmailOrBuilder> emailBuilder_;

        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email> getEmailList() {
          if (emailBuilder_ == null) {
            return java.util.Collections.unmodifiableList(email_);
          } else {
            return emailBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public int getEmailCount() {
          if (emailBuilder_ == null) {
            return email_.size();
          } else {
            return emailBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email getEmail(int index) {
          if (emailBuilder_ == null) {
            return email_.get(index);
          } else {
            return emailBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public Builder setEmail(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email value) {
          if (emailBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEmailIsMutable();
            email_.set(index, value);
            onChanged();
          } else {
            emailBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public Builder setEmail(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Builder builderForValue) {
          if (emailBuilder_ == null) {
            ensureEmailIsMutable();
            email_.set(index, builderForValue.build());
            onChanged();
          } else {
            emailBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public Builder addEmail(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email value) {
          if (emailBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEmailIsMutable();
            email_.add(value);
            onChanged();
          } else {
            emailBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public Builder addEmail(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email value) {
          if (emailBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEmailIsMutable();
            email_.add(index, value);
            onChanged();
          } else {
            emailBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public Builder addEmail(
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Builder builderForValue) {
          if (emailBuilder_ == null) {
            ensureEmailIsMutable();
            email_.add(builderForValue.build());
            onChanged();
          } else {
            emailBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public Builder addEmail(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Builder builderForValue) {
          if (emailBuilder_ == null) {
            ensureEmailIsMutable();
            email_.add(index, builderForValue.build());
            onChanged();
          } else {
            emailBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public Builder addAllEmail(
            java.lang.Iterable<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email> values) {
          if (emailBuilder_ == null) {
            ensureEmailIsMutable();
            super.addAll(values, email_);
            onChanged();
          } else {
            emailBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public Builder clearEmail() {
          if (emailBuilder_ == null) {
            email_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
            onChanged();
          } else {
            emailBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public Builder removeEmail(int index) {
          if (emailBuilder_ == null) {
            ensureEmailIsMutable();
            email_.remove(index);
            onChanged();
          } else {
            emailBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Builder getEmailBuilder(
            int index) {
          return getEmailFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.EmailOrBuilder getEmailOrBuilder(
            int index) {
          if (emailBuilder_ == null) {
            return email_.get(index);  } else {
            return emailBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.EmailOrBuilder> 
             getEmailOrBuilderList() {
          if (emailBuilder_ != null) {
            return emailBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(email_);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Builder addEmailBuilder() {
          return getEmailFieldBuilder().addBuilder(
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.getDefaultInstance());
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Builder addEmailBuilder(
            int index) {
          return getEmailFieldBuilder().addBuilder(
              index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.getDefaultInstance());
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.Email email = 4;</code>
         */
        public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Builder> 
             getEmailBuilderList() {
          return getEmailFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.EmailOrBuilder> 
            getEmailFieldBuilder() {
          if (emailBuilder_ == null) {
            emailBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Email.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.EmailOrBuilder>(
                    email_,
                    ((bitField0_ & 0x00000004) == 0x00000004),
                    getParentForChildren(),
                    isClean());
            email_ = null;
          }
          return emailBuilder_;
        }

        // repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;
        private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress> address_ =
          java.util.Collections.emptyList();
        private void ensureAddressIsMutable() {
          if (!((bitField0_ & 0x00000008) == 0x00000008)) {
            address_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress>(address_);
            bitField0_ |= 0x00000008;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddressOrBuilder> addressBuilder_;

        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress> getAddressList() {
          if (addressBuilder_ == null) {
            return java.util.Collections.unmodifiableList(address_);
          } else {
            return addressBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public int getAddressCount() {
          if (addressBuilder_ == null) {
            return address_.size();
          } else {
            return addressBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress getAddress(int index) {
          if (addressBuilder_ == null) {
            return address_.get(index);
          } else {
            return addressBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public Builder setAddress(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress value) {
          if (addressBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAddressIsMutable();
            address_.set(index, value);
            onChanged();
          } else {
            addressBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public Builder setAddress(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Builder builderForValue) {
          if (addressBuilder_ == null) {
            ensureAddressIsMutable();
            address_.set(index, builderForValue.build());
            onChanged();
          } else {
            addressBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public Builder addAddress(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress value) {
          if (addressBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAddressIsMutable();
            address_.add(value);
            onChanged();
          } else {
            addressBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public Builder addAddress(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress value) {
          if (addressBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAddressIsMutable();
            address_.add(index, value);
            onChanged();
          } else {
            addressBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public Builder addAddress(
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Builder builderForValue) {
          if (addressBuilder_ == null) {
            ensureAddressIsMutable();
            address_.add(builderForValue.build());
            onChanged();
          } else {
            addressBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public Builder addAddress(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Builder builderForValue) {
          if (addressBuilder_ == null) {
            ensureAddressIsMutable();
            address_.add(index, builderForValue.build());
            onChanged();
          } else {
            addressBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public Builder addAllAddress(
            java.lang.Iterable<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress> values) {
          if (addressBuilder_ == null) {
            ensureAddressIsMutable();
            super.addAll(values, address_);
            onChanged();
          } else {
            addressBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public Builder clearAddress() {
          if (addressBuilder_ == null) {
            address_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000008);
            onChanged();
          } else {
            addressBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public Builder removeAddress(int index) {
          if (addressBuilder_ == null) {
            ensureAddressIsMutable();
            address_.remove(index);
            onChanged();
          } else {
            addressBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Builder getAddressBuilder(
            int index) {
          return getAddressFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddressOrBuilder getAddressOrBuilder(
            int index) {
          if (addressBuilder_ == null) {
            return address_.get(index);  } else {
            return addressBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddressOrBuilder> 
             getAddressOrBuilderList() {
          if (addressBuilder_ != null) {
            return addressBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(address_);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Builder addAddressBuilder() {
          return getAddressFieldBuilder().addBuilder(
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.getDefaultInstance());
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Builder addAddressBuilder(
            int index) {
          return getAddressFieldBuilder().addBuilder(
              index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.getDefaultInstance());
        }
        /**
         * <code>repeated .signalservice.DataMessage.Contact.PostalAddress address = 5;</code>
         */
        public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Builder> 
             getAddressBuilderList() {
          return getAddressFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddressOrBuilder> 
            getAddressFieldBuilder() {
          if (addressBuilder_ == null) {
            addressBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddress.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.PostalAddressOrBuilder>(
                    address_,
                    ((bitField0_ & 0x00000008) == 0x00000008),
                    getParentForChildren(),
                    isClean());
            address_ = null;
          }
          return addressBuilder_;
        }

        // optional .signalservice.DataMessage.Contact.Avatar avatar = 6;
        private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.AvatarOrBuilder> avatarBuilder_;
        /**
         * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
         */
        public boolean hasAvatar() {
          return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar getAvatar() {
          if (avatarBuilder_ == null) {
            return avatar_;
          } else {
            return avatarBuilder_.getMessage();
          }
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
         */
        public Builder setAvatar(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar value) {
          if (avatarBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            avatar_ = value;
            onChanged();
          } else {
            avatarBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000010;
          return this;
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
         */
        public Builder setAvatar(
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.Builder builderForValue) {
          if (avatarBuilder_ == null) {
            avatar_ = builderForValue.build();
            onChanged();
          } else {
            avatarBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000010;
          return this;
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
         */
        public Builder mergeAvatar(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar value) {
          if (avatarBuilder_ == null) {
            if (((bitField0_ & 0x00000010) == 0x00000010) &&
                avatar_ != org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.getDefaultInstance()) {
              avatar_ =
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.newBuilder(avatar_).mergeFrom(value).buildPartial();
            } else {
              avatar_ = value;
            }
            onChanged();
          } else {
            avatarBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000010;
          return this;
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
         */
        public Builder clearAvatar() {
          if (avatarBuilder_ == null) {
            avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.getDefaultInstance();
            onChanged();
          } else {
            avatarBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000010);
          return this;
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.Builder getAvatarBuilder() {
          bitField0_ |= 0x00000010;
          onChanged();
          return getAvatarFieldBuilder().getBuilder();
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.AvatarOrBuilder getAvatarOrBuilder() {
          if (avatarBuilder_ != null) {
            return avatarBuilder_.getMessageOrBuilder();
          } else {
            return avatar_;
          }
        }
        /**
         * <code>optional .signalservice.DataMessage.Contact.Avatar avatar = 6;</code>
         */
        private com.google.protobuf.SingleFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.AvatarOrBuilder> 
            getAvatarFieldBuilder() {
          if (avatarBuilder_ == null) {
            avatarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Avatar.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.AvatarOrBuilder>(
                    avatar_,
                    getParentForChildren(),
                    isClean());
            avatar_ = null;
          }
          return avatarBuilder_;
        }

        // optional string organization = 7;
        private java.lang.Object organization_ = "";
        /**
         * <code>optional string organization = 7;</code>
         */
        public boolean hasOrganization() {
          return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional string organization = 7;</code>
         */
        public java.lang.String getOrganization() {
          java.lang.Object ref = organization_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            organization_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string organization = 7;</code>
         */
        public com.google.protobuf.ByteString
            getOrganizationBytes() {
          java.lang.Object ref = organization_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            organization_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string organization = 7;</code>
         */
        public Builder setOrganization(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
          organization_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string organization = 7;</code>
         */
        public Builder clearOrganization() {
          bitField0_ = (bitField0_ & ~0x00000020);
          organization_ = getDefaultInstance().getOrganization();
          onChanged();
          return this;
        }
        /**
         * <code>optional string organization = 7;</code>
         */
        public Builder setOrganizationBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
          organization_ = value;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:signalservice.DataMessage.Contact)
      }

      static {
        defaultInstance = new Contact(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:signalservice.DataMessage.Contact)
    }

    public interface PreviewOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // optional string url = 1;
      /**
       * <code>optional string url = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      boolean hasUrl();
      /**
       * <code>optional string url = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      java.lang.String getUrl();
      /**
       * <code>optional string url = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      com.google.protobuf.ByteString
          getUrlBytes();

      // optional string title = 2;
      /**
       * <code>optional string title = 2;</code>
       */
      boolean hasTitle();
      /**
       * <code>optional string title = 2;</code>
       */
      java.lang.String getTitle();
      /**
       * <code>optional string title = 2;</code>
       */
      com.google.protobuf.ByteString
          getTitleBytes();

      // optional .signalservice.AttachmentPointer image = 3;
      /**
       * <code>optional .signalservice.AttachmentPointer image = 3;</code>
       */
      boolean hasImage();
      /**
       * <code>optional .signalservice.AttachmentPointer image = 3;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getImage();
      /**
       * <code>optional .signalservice.AttachmentPointer image = 3;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getImageOrBuilder();
    }
    /**
     * Protobuf type {@code signalservice.DataMessage.Preview}
     */
    public static final class Preview extends
        com.google.protobuf.GeneratedMessage
        implements PreviewOrBuilder {
      // Use Preview.newBuilder() to construct.
      private Preview(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Preview(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final Preview defaultInstance;
      public static Preview getDefaultInstance() {
        return defaultInstance;
      }

      public Preview getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Preview(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                url_ = input.readBytes();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                title_ = input.readBytes();
                break;
              }
              case 26: {
                org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder subBuilder = null;
                if (((bitField0_ & 0x00000004) == 0x00000004)) {
                  subBuilder = image_.toBuilder();
                }
                image_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(image_);
                  image_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000004;
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Preview_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Preview_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.Builder.class);
      }

      public static com.google.protobuf.Parser<Preview> PARSER =
          new com.google.protobuf.AbstractParser<Preview>() {
        public Preview parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Preview(input, extensionRegistry);
        }
      };

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

      private int bitField0_;
      // optional string url = 1;
      public static final int URL_FIELD_NUMBER = 1;
      private java.lang.Object url_;
      /**
       * <code>optional string url = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasUrl() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string url = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public java.lang.String getUrl() {
        java.lang.Object ref = url_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            url_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string url = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public com.google.protobuf.ByteString
          getUrlBytes() {
        java.lang.Object ref = url_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          url_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // optional string title = 2;
      public static final int TITLE_FIELD_NUMBER = 2;
      private java.lang.Object title_;
      /**
       * <code>optional string title = 2;</code>
       */
      public boolean hasTitle() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string title = 2;</code>
       */
      public java.lang.String getTitle() {
        java.lang.Object ref = title_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            title_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string title = 2;</code>
       */
      public com.google.protobuf.ByteString
          getTitleBytes() {
        java.lang.Object ref = title_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          title_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // optional .signalservice.AttachmentPointer image = 3;
      public static final int IMAGE_FIELD_NUMBER = 3;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer image_;
      /**
       * <code>optional .signalservice.AttachmentPointer image = 3;</code>
       */
      public boolean hasImage() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .signalservice.AttachmentPointer image = 3;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getImage() {
        return image_;
      }
      /**
       * <code>optional .signalservice.AttachmentPointer image = 3;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getImageOrBuilder() {
        return image_;
      }

      private void initFields() {
        url_ = "";
        title_ = "";
        image_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, getUrlBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, getTitleBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeMessage(3, image_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, getUrlBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, getTitleBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(3, image_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code signalservice.DataMessage.Preview}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.PreviewOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Preview_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Preview_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.Builder.class);
        }

        // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getImageFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          url_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          title_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          if (imageBuilder_ == null) {
            image_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
          } else {
            imageBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000004);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_Preview_descriptor;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview getDefaultInstanceForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.getDefaultInstance();
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview build() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview buildPartial() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview result = new org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.url_ = url_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.title_ = title_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          if (imageBuilder_ == null) {
            result.image_ = image_;
          } else {
            result.image_ = imageBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview) {
            return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview other) {
          if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.getDefaultInstance()) return this;
          if (other.hasUrl()) {
            bitField0_ |= 0x00000001;
            url_ = other.url_;
            onChanged();
          }
          if (other.hasTitle()) {
            bitField0_ |= 0x00000002;
            title_ = other.title_;
            onChanged();
          }
          if (other.hasImage()) {
            mergeImage(other.getImage());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        // optional string url = 1;
        private java.lang.Object url_ = "";
        /**
         * <code>optional string url = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public boolean hasUrl() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string url = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public java.lang.String getUrl() {
          java.lang.Object ref = url_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            url_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string url = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public com.google.protobuf.ByteString
            getUrlBytes() {
          java.lang.Object ref = url_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            url_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string url = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public Builder setUrl(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          url_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string url = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public Builder clearUrl() {
          bitField0_ = (bitField0_ & ~0x00000001);
          url_ = getDefaultInstance().getUrl();
          onChanged();
          return this;
        }
        /**
         * <code>optional string url = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public Builder setUrlBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          url_ = value;
          onChanged();
          return this;
        }

        // optional string title = 2;
        private java.lang.Object title_ = "";
        /**
         * <code>optional string title = 2;</code>
         */
        public boolean hasTitle() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string title = 2;</code>
         */
        public java.lang.String getTitle() {
          java.lang.Object ref = title_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            title_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string title = 2;</code>
         */
        public com.google.protobuf.ByteString
            getTitleBytes() {
          java.lang.Object ref = title_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            title_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string title = 2;</code>
         */
        public Builder setTitle(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          title_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string title = 2;</code>
         */
        public Builder clearTitle() {
          bitField0_ = (bitField0_ & ~0x00000002);
          title_ = getDefaultInstance().getTitle();
          onChanged();
          return this;
        }
        /**
         * <code>optional string title = 2;</code>
         */
        public Builder setTitleBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          title_ = value;
          onChanged();
          return this;
        }

        // optional .signalservice.AttachmentPointer image = 3;
        private org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer image_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder> imageBuilder_;
        /**
         * <code>optional .signalservice.AttachmentPointer image = 3;</code>
         */
        public boolean hasImage() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional .signalservice.AttachmentPointer image = 3;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getImage() {
          if (imageBuilder_ == null) {
            return image_;
          } else {
            return imageBuilder_.getMessage();
          }
        }
        /**
         * <code>optional .signalservice.AttachmentPointer image = 3;</code>
         */
        public Builder setImage(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer value) {
          if (imageBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            image_ = value;
            onChanged();
          } else {
            imageBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000004;
          return this;
        }
        /**
         * <code>optional .signalservice.AttachmentPointer image = 3;</code>
         */
        public Builder setImage(
            org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder builderForValue) {
          if (imageBuilder_ == null) {
            image_ = builderForValue.build();
            onChanged();
          } else {
            imageBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000004;
          return this;
        }
        /**
         * <code>optional .signalservice.AttachmentPointer image = 3;</code>
         */
        public Builder mergeImage(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer value) {
          if (imageBuilder_ == null) {
            if (((bitField0_ & 0x00000004) == 0x00000004) &&
                image_ != org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance()) {
              image_ =
                org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.newBuilder(image_).mergeFrom(value).buildPartial();
            } else {
              image_ = value;
            }
            onChanged();
          } else {
            imageBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000004;
          return this;
        }
        /**
         * <code>optional .signalservice.AttachmentPointer image = 3;</code>
         */
        public Builder clearImage() {
          if (imageBuilder_ == null) {
            image_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
            onChanged();
          } else {
            imageBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000004);
          return this;
        }
        /**
         * <code>optional .signalservice.AttachmentPointer image = 3;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder getImageBuilder() {
          bitField0_ |= 0x00000004;
          onChanged();
          return getImageFieldBuilder().getBuilder();
        }
        /**
         * <code>optional .signalservice.AttachmentPointer image = 3;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getImageOrBuilder() {
          if (imageBuilder_ != null) {
            return imageBuilder_.getMessageOrBuilder();
          } else {
            return image_;
          }
        }
        /**
         * <code>optional .signalservice.AttachmentPointer image = 3;</code>
         */
        private com.google.protobuf.SingleFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder> 
            getImageFieldBuilder() {
          if (imageBuilder_ == null) {
            imageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder>(
                    image_,
                    getParentForChildren(),
                    isClean());
            image_ = null;
          }
          return imageBuilder_;
        }

        // @@protoc_insertion_point(builder_scope:signalservice.DataMessage.Preview)
      }

      static {
        defaultInstance = new Preview(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:signalservice.DataMessage.Preview)
    }

    public interface LokiProfileOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // optional string displayName = 1;
      /**
       * <code>optional string displayName = 1;</code>
       */
      boolean hasDisplayName();
      /**
       * <code>optional string displayName = 1;</code>
       */
      java.lang.String getDisplayName();
      /**
       * <code>optional string displayName = 1;</code>
       */
      com.google.protobuf.ByteString
          getDisplayNameBytes();

      // optional string profilePicture = 2;
      /**
       * <code>optional string profilePicture = 2;</code>
       */
      boolean hasProfilePicture();
      /**
       * <code>optional string profilePicture = 2;</code>
       */
      java.lang.String getProfilePicture();
      /**
       * <code>optional string profilePicture = 2;</code>
       */
      com.google.protobuf.ByteString
          getProfilePictureBytes();
    }
    /**
     * Protobuf type {@code signalservice.DataMessage.LokiProfile}
     */
    public static final class LokiProfile extends
        com.google.protobuf.GeneratedMessage
        implements LokiProfileOrBuilder {
      // Use LokiProfile.newBuilder() to construct.
      private LokiProfile(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private LokiProfile(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final LokiProfile defaultInstance;
      public static LokiProfile getDefaultInstance() {
        return defaultInstance;
      }

      public LokiProfile getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private LokiProfile(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                displayName_ = input.readBytes();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                profilePicture_ = input.readBytes();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_LokiProfile_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_LokiProfile_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.Builder.class);
      }

      public static com.google.protobuf.Parser<LokiProfile> PARSER =
          new com.google.protobuf.AbstractParser<LokiProfile>() {
        public LokiProfile parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new LokiProfile(input, extensionRegistry);
        }
      };

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

      private int bitField0_;
      // optional string displayName = 1;
      public static final int DISPLAYNAME_FIELD_NUMBER = 1;
      private java.lang.Object displayName_;
      /**
       * <code>optional string displayName = 1;</code>
       */
      public boolean hasDisplayName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string displayName = 1;</code>
       */
      public java.lang.String getDisplayName() {
        java.lang.Object ref = displayName_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            displayName_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string displayName = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDisplayNameBytes() {
        java.lang.Object ref = displayName_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          displayName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // optional string profilePicture = 2;
      public static final int PROFILEPICTURE_FIELD_NUMBER = 2;
      private java.lang.Object profilePicture_;
      /**
       * <code>optional string profilePicture = 2;</code>
       */
      public boolean hasProfilePicture() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string profilePicture = 2;</code>
       */
      public java.lang.String getProfilePicture() {
        java.lang.Object ref = profilePicture_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            profilePicture_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string profilePicture = 2;</code>
       */
      public com.google.protobuf.ByteString
          getProfilePictureBytes() {
        java.lang.Object ref = profilePicture_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          profilePicture_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private void initFields() {
        displayName_ = "";
        profilePicture_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, getDisplayNameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, getProfilePictureBytes());
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, getDisplayNameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, getProfilePictureBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code signalservice.DataMessage.LokiProfile}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfileOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_LokiProfile_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_LokiProfile_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.Builder.class);
        }

        // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          displayName_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          profilePicture_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_LokiProfile_descriptor;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile getDefaultInstanceForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.getDefaultInstance();
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile build() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile buildPartial() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile result = new org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.displayName_ = displayName_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.profilePicture_ = profilePicture_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile) {
            return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile other) {
          if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.getDefaultInstance()) return this;
          if (other.hasDisplayName()) {
            bitField0_ |= 0x00000001;
            displayName_ = other.displayName_;
            onChanged();
          }
          if (other.hasProfilePicture()) {
            bitField0_ |= 0x00000002;
            profilePicture_ = other.profilePicture_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        // optional string displayName = 1;
        private java.lang.Object displayName_ = "";
        /**
         * <code>optional string displayName = 1;</code>
         */
        public boolean hasDisplayName() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string displayName = 1;</code>
         */
        public java.lang.String getDisplayName() {
          java.lang.Object ref = displayName_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            displayName_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string displayName = 1;</code>
         */
        public com.google.protobuf.ByteString
            getDisplayNameBytes() {
          java.lang.Object ref = displayName_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            displayName_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string displayName = 1;</code>
         */
        public Builder setDisplayName(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          displayName_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string displayName = 1;</code>
         */
        public Builder clearDisplayName() {
          bitField0_ = (bitField0_ & ~0x00000001);
          displayName_ = getDefaultInstance().getDisplayName();
          onChanged();
          return this;
        }
        /**
         * <code>optional string displayName = 1;</code>
         */
        public Builder setDisplayNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          displayName_ = value;
          onChanged();
          return this;
        }

        // optional string profilePicture = 2;
        private java.lang.Object profilePicture_ = "";
        /**
         * <code>optional string profilePicture = 2;</code>
         */
        public boolean hasProfilePicture() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string profilePicture = 2;</code>
         */
        public java.lang.String getProfilePicture() {
          java.lang.Object ref = profilePicture_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            profilePicture_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string profilePicture = 2;</code>
         */
        public com.google.protobuf.ByteString
            getProfilePictureBytes() {
          java.lang.Object ref = profilePicture_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            profilePicture_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string profilePicture = 2;</code>
         */
        public Builder setProfilePicture(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          profilePicture_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string profilePicture = 2;</code>
         */
        public Builder clearProfilePicture() {
          bitField0_ = (bitField0_ & ~0x00000002);
          profilePicture_ = getDefaultInstance().getProfilePicture();
          onChanged();
          return this;
        }
        /**
         * <code>optional string profilePicture = 2;</code>
         */
        public Builder setProfilePictureBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          profilePicture_ = value;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:signalservice.DataMessage.LokiProfile)
      }

      static {
        defaultInstance = new LokiProfile(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:signalservice.DataMessage.LokiProfile)
    }

    public interface ClosedGroupControlMessageOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // required .signalservice.DataMessage.ClosedGroupControlMessage.Type type = 1;
      /**
       * <code>required .signalservice.DataMessage.ClosedGroupControlMessage.Type type = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      boolean hasType();
      /**
       * <code>required .signalservice.DataMessage.ClosedGroupControlMessage.Type type = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Type getType();

      // optional bytes publicKey = 2;
      /**
       * <code>optional bytes publicKey = 2;</code>
       */
      boolean hasPublicKey();
      /**
       * <code>optional bytes publicKey = 2;</code>
       */
      com.google.protobuf.ByteString getPublicKey();

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

      // optional .signalservice.KeyPair encryptionKeyPair = 4;
      /**
       * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
       */
      boolean hasEncryptionKeyPair();
      /**
       * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair getEncryptionKeyPair();
      /**
       * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPairOrBuilder getEncryptionKeyPairOrBuilder();

      // repeated bytes members = 5;
      /**
       * <code>repeated bytes members = 5;</code>
       */
      java.util.List<com.google.protobuf.ByteString> getMembersList();
      /**
       * <code>repeated bytes members = 5;</code>
       */
      int getMembersCount();
      /**
       * <code>repeated bytes members = 5;</code>
       */
      com.google.protobuf.ByteString getMembers(int index);

      // repeated bytes admins = 6;
      /**
       * <code>repeated bytes admins = 6;</code>
       */
      java.util.List<com.google.protobuf.ByteString> getAdminsList();
      /**
       * <code>repeated bytes admins = 6;</code>
       */
      int getAdminsCount();
      /**
       * <code>repeated bytes admins = 6;</code>
       */
      com.google.protobuf.ByteString getAdmins(int index);

      // repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;
      /**
       * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
       */
      java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper> 
          getWrappersList();
      /**
       * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper getWrappers(int index);
      /**
       * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
       */
      int getWrappersCount();
      /**
       * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
       */
      java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapperOrBuilder> 
          getWrappersOrBuilderList();
      /**
       * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapperOrBuilder getWrappersOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code signalservice.DataMessage.ClosedGroupControlMessage}
     */
    public static final class ClosedGroupControlMessage extends
        com.google.protobuf.GeneratedMessage
        implements ClosedGroupControlMessageOrBuilder {
      // Use ClosedGroupControlMessage.newBuilder() to construct.
      private ClosedGroupControlMessage(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private ClosedGroupControlMessage(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final ClosedGroupControlMessage defaultInstance;
      public static ClosedGroupControlMessage getDefaultInstance() {
        return defaultInstance;
      }

      public ClosedGroupControlMessage getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private ClosedGroupControlMessage(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 8: {
                int rawValue = input.readEnum();
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Type value = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Type.valueOf(rawValue);
                if (value == null) {
                  unknownFields.mergeVarintField(1, rawValue);
                } else {
                  bitField0_ |= 0x00000001;
                  type_ = value;
                }
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                publicKey_ = input.readBytes();
                break;
              }
              case 26: {
                bitField0_ |= 0x00000004;
                name_ = input.readBytes();
                break;
              }
              case 34: {
                org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder subBuilder = null;
                if (((bitField0_ & 0x00000008) == 0x00000008)) {
                  subBuilder = encryptionKeyPair_.toBuilder();
                }
                encryptionKeyPair_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(encryptionKeyPair_);
                  encryptionKeyPair_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000008;
                break;
              }
              case 42: {
                if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                  members_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
                  mutable_bitField0_ |= 0x00000010;
                }
                members_.add(input.readBytes());
                break;
              }
              case 50: {
                if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                  admins_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
                  mutable_bitField0_ |= 0x00000020;
                }
                admins_.add(input.readBytes());
                break;
              }
              case 58: {
                if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                  wrappers_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper>();
                  mutable_bitField0_ |= 0x00000040;
                }
                wrappers_.add(input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.PARSER, extensionRegistry));
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
            members_ = java.util.Collections.unmodifiableList(members_);
          }
          if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
            admins_ = java.util.Collections.unmodifiableList(admins_);
          }
          if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
            wrappers_ = java.util.Collections.unmodifiableList(wrappers_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_ClosedGroupControlMessage_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_ClosedGroupControlMessage_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Builder.class);
      }

      public static com.google.protobuf.Parser<ClosedGroupControlMessage> PARSER =
          new com.google.protobuf.AbstractParser<ClosedGroupControlMessage>() {
        public ClosedGroupControlMessage parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new ClosedGroupControlMessage(input, extensionRegistry);
        }
      };

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

      /**
       * Protobuf enum {@code signalservice.DataMessage.ClosedGroupControlMessage.Type}
       */
      public enum Type
          implements com.google.protobuf.ProtocolMessageEnum {
        /**
         * <code>NEW = 1;</code>
         *
         * <pre>
         * publicKey, name, encryptionKeyPair, members, admins
         * </pre>
         */
        NEW(0, 1),
        /**
         * <code>UPDATE = 2;</code>
         *
         * <pre>
         * name, members
         * </pre>
         */
        UPDATE(1, 2),
        /**
         * <code>ENCRYPTION_KEY_PAIR = 3;</code>
         *
         * <pre>
         * publicKey, wrappers
         * </pre>
         */
        ENCRYPTION_KEY_PAIR(2, 3),
        /**
         * <code>NAME_CHANGE = 4;</code>
         *
         * <pre>
         * name
         * </pre>
         */
        NAME_CHANGE(3, 4),
        /**
         * <code>MEMBERS_ADDED = 5;</code>
         *
         * <pre>
         * members
         * </pre>
         */
        MEMBERS_ADDED(4, 5),
        /**
         * <code>MEMBERS_REMOVED = 6;</code>
         *
         * <pre>
         * members
         * </pre>
         */
        MEMBERS_REMOVED(5, 6),
        /**
         * <code>MEMBER_LEFT = 7;</code>
         */
        MEMBER_LEFT(6, 7),
        /**
         * <code>ENCRYPTION_KEY_PAIR_REQUEST = 8;</code>
         */
        ENCRYPTION_KEY_PAIR_REQUEST(7, 8),
        ;

        /**
         * <code>NEW = 1;</code>
         *
         * <pre>
         * publicKey, name, encryptionKeyPair, members, admins
         * </pre>
         */
        public static final int NEW_VALUE = 1;
        /**
         * <code>UPDATE = 2;</code>
         *
         * <pre>
         * name, members
         * </pre>
         */
        public static final int UPDATE_VALUE = 2;
        /**
         * <code>ENCRYPTION_KEY_PAIR = 3;</code>
         *
         * <pre>
         * publicKey, wrappers
         * </pre>
         */
        public static final int ENCRYPTION_KEY_PAIR_VALUE = 3;
        /**
         * <code>NAME_CHANGE = 4;</code>
         *
         * <pre>
         * name
         * </pre>
         */
        public static final int NAME_CHANGE_VALUE = 4;
        /**
         * <code>MEMBERS_ADDED = 5;</code>
         *
         * <pre>
         * members
         * </pre>
         */
        public static final int MEMBERS_ADDED_VALUE = 5;
        /**
         * <code>MEMBERS_REMOVED = 6;</code>
         *
         * <pre>
         * members
         * </pre>
         */
        public static final int MEMBERS_REMOVED_VALUE = 6;
        /**
         * <code>MEMBER_LEFT = 7;</code>
         */
        public static final int MEMBER_LEFT_VALUE = 7;
        /**
         * <code>ENCRYPTION_KEY_PAIR_REQUEST = 8;</code>
         */
        public static final int ENCRYPTION_KEY_PAIR_REQUEST_VALUE = 8;


        public final int getNumber() { return value; }

        public static Type valueOf(int value) {
          switch (value) {
            case 1: return NEW;
            case 2: return UPDATE;
            case 3: return ENCRYPTION_KEY_PAIR;
            case 4: return NAME_CHANGE;
            case 5: return MEMBERS_ADDED;
            case 6: return MEMBERS_REMOVED;
            case 7: return MEMBER_LEFT;
            case 8: return ENCRYPTION_KEY_PAIR_REQUEST;
            default: return null;
          }
        }

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

        public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
          return getDescriptor().getValues().get(index);
        }
        public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
          return getDescriptor();
        }
        public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.getDescriptor().getEnumTypes().get(0);
        }

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

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

        private final int index;
        private final int value;

        private Type(int index, int value) {
          this.index = index;
          this.value = value;
        }

        // @@protoc_insertion_point(enum_scope:signalservice.DataMessage.ClosedGroupControlMessage.Type)
      }

      public interface KeyPairWrapperOrBuilder
          extends com.google.protobuf.MessageOrBuilder {

        // required bytes publicKey = 1;
        /**
         * <code>required bytes publicKey = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        boolean hasPublicKey();
        /**
         * <code>required bytes publicKey = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        com.google.protobuf.ByteString getPublicKey();

        // required bytes encryptedKeyPair = 2;
        /**
         * <code>required bytes encryptedKeyPair = 2;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        boolean hasEncryptedKeyPair();
        /**
         * <code>required bytes encryptedKeyPair = 2;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        com.google.protobuf.ByteString getEncryptedKeyPair();
      }
      /**
       * Protobuf type {@code signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper}
       */
      public static final class KeyPairWrapper extends
          com.google.protobuf.GeneratedMessage
          implements KeyPairWrapperOrBuilder {
        // Use KeyPairWrapper.newBuilder() to construct.
        private KeyPairWrapper(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
          super(builder);
          this.unknownFields = builder.getUnknownFields();
        }
        private KeyPairWrapper(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

        private static final KeyPairWrapper defaultInstance;
        public static KeyPairWrapper getDefaultInstance() {
          return defaultInstance;
        }

        public KeyPairWrapper getDefaultInstanceForType() {
          return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
            getUnknownFields() {
          return this.unknownFields;
        }
        private KeyPairWrapper(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          initFields();
          int mutable_bitField0_ = 0;
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
              com.google.protobuf.UnknownFieldSet.newBuilder();
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                default: {
                  if (!parseUnknownField(input, unknownFields,
                                         extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
                case 10: {
                  bitField0_ |= 0x00000001;
                  publicKey_ = input.readBytes();
                  break;
                }
                case 18: {
                  bitField0_ |= 0x00000002;
                  encryptedKeyPair_ = input.readBytes();
                  break;
                }
              }
            }
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(this);
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(
                e.getMessage()).setUnfinishedMessage(this);
          } finally {
            this.unknownFields = unknownFields.build();
            makeExtensionsImmutable();
          }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_ClosedGroupControlMessage_KeyPairWrapper_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_ClosedGroupControlMessage_KeyPairWrapper_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.Builder.class);
        }

        public static com.google.protobuf.Parser<KeyPairWrapper> PARSER =
            new com.google.protobuf.AbstractParser<KeyPairWrapper>() {
          public KeyPairWrapper parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new KeyPairWrapper(input, extensionRegistry);
          }
        };

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

        private int bitField0_;
        // required bytes publicKey = 1;
        public static final int PUBLICKEY_FIELD_NUMBER = 1;
        private com.google.protobuf.ByteString publicKey_;
        /**
         * <code>required bytes publicKey = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public boolean hasPublicKey() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required bytes publicKey = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public com.google.protobuf.ByteString getPublicKey() {
          return publicKey_;
        }

        // required bytes encryptedKeyPair = 2;
        public static final int ENCRYPTEDKEYPAIR_FIELD_NUMBER = 2;
        private com.google.protobuf.ByteString encryptedKeyPair_;
        /**
         * <code>required bytes encryptedKeyPair = 2;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public boolean hasEncryptedKeyPair() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required bytes encryptedKeyPair = 2;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public com.google.protobuf.ByteString getEncryptedKeyPair() {
          return encryptedKeyPair_;
        }

        private void initFields() {
          publicKey_ = com.google.protobuf.ByteString.EMPTY;
          encryptedKeyPair_ = com.google.protobuf.ByteString.EMPTY;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
          byte isInitialized = memoizedIsInitialized;
          if (isInitialized != -1) return isInitialized == 1;

          if (!hasPublicKey()) {
            memoizedIsInitialized = 0;
            return false;
          }
          if (!hasEncryptedKeyPair()) {
            memoizedIsInitialized = 0;
            return false;
          }
          memoizedIsInitialized = 1;
          return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          getSerializedSize();
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            output.writeBytes(1, publicKey_);
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            output.writeBytes(2, encryptedKeyPair_);
          }
          getUnknownFields().writeTo(output);
        }

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

          size = 0;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(1, publicKey_);
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(2, encryptedKeyPair_);
          }
          size += getUnknownFields().getSerializedSize();
          memoizedSerializedSize = size;
          return size;
        }

        private static final long serialVersionUID = 0L;
        @java.lang.Override
        protected java.lang.Object writeReplace()
            throws java.io.ObjectStreamException {
          return super.writeReplace();
        }

        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper parseFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper parseDelimitedFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper parseFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper prototype) {
          return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          Builder builder = new Builder(parent);
          return builder;
        }
        /**
         * Protobuf type {@code signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessage.Builder<Builder>
           implements org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapperOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_ClosedGroupControlMessage_KeyPairWrapper_descriptor;
          }

          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_ClosedGroupControlMessage_KeyPairWrapper_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.Builder.class);
          }

          // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.newBuilder()
          private Builder() {
            maybeForceBuilderInitialization();
          }

          private Builder(
              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
            super(parent);
            maybeForceBuilderInitialization();
          }
          private void maybeForceBuilderInitialization() {
            if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            }
          }
          private static Builder create() {
            return new Builder();
          }

          public Builder clear() {
            super.clear();
            publicKey_ = com.google.protobuf.ByteString.EMPTY;
            bitField0_ = (bitField0_ & ~0x00000001);
            encryptedKeyPair_ = com.google.protobuf.ByteString.EMPTY;
            bitField0_ = (bitField0_ & ~0x00000002);
            return this;
          }

          public Builder clone() {
            return create().mergeFrom(buildPartial());
          }

          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_ClosedGroupControlMessage_KeyPairWrapper_descriptor;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper getDefaultInstanceForType() {
            return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.getDefaultInstance();
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper build() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }

          public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper buildPartial() {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper result = new org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper(this);
            int from_bitField0_ = bitField0_;
            int to_bitField0_ = 0;
            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
              to_bitField0_ |= 0x00000001;
            }
            result.publicKey_ = publicKey_;
            if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
              to_bitField0_ |= 0x00000002;
            }
            result.encryptedKeyPair_ = encryptedKeyPair_;
            result.bitField0_ = to_bitField0_;
            onBuilt();
            return result;
          }

          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper) {
              return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }

          public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper other) {
            if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.getDefaultInstance()) return this;
            if (other.hasPublicKey()) {
              setPublicKey(other.getPublicKey());
            }
            if (other.hasEncryptedKeyPair()) {
              setEncryptedKeyPair(other.getEncryptedKeyPair());
            }
            this.mergeUnknownFields(other.getUnknownFields());
            return this;
          }

          public final boolean isInitialized() {
            if (!hasPublicKey()) {
              
              return false;
            }
            if (!hasEncryptedKeyPair()) {
              
              return false;
            }
            return true;
          }

          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper parsedMessage = null;
            try {
              parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper) e.getUnfinishedMessage();
              throw e;
            } finally {
              if (parsedMessage != null) {
                mergeFrom(parsedMessage);
              }
            }
            return this;
          }
          private int bitField0_;

          // required bytes publicKey = 1;
          private com.google.protobuf.ByteString publicKey_ = com.google.protobuf.ByteString.EMPTY;
          /**
           * <code>required bytes publicKey = 1;</code>
           *
           * <pre>
           * @required
           * </pre>
           */
          public boolean hasPublicKey() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
          }
          /**
           * <code>required bytes publicKey = 1;</code>
           *
           * <pre>
           * @required
           * </pre>
           */
          public com.google.protobuf.ByteString getPublicKey() {
            return publicKey_;
          }
          /**
           * <code>required bytes publicKey = 1;</code>
           *
           * <pre>
           * @required
           * </pre>
           */
          public Builder setPublicKey(com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
            publicKey_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>required bytes publicKey = 1;</code>
           *
           * <pre>
           * @required
           * </pre>
           */
          public Builder clearPublicKey() {
            bitField0_ = (bitField0_ & ~0x00000001);
            publicKey_ = getDefaultInstance().getPublicKey();
            onChanged();
            return this;
          }

          // required bytes encryptedKeyPair = 2;
          private com.google.protobuf.ByteString encryptedKeyPair_ = com.google.protobuf.ByteString.EMPTY;
          /**
           * <code>required bytes encryptedKeyPair = 2;</code>
           *
           * <pre>
           * @required
           * </pre>
           */
          public boolean hasEncryptedKeyPair() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
          }
          /**
           * <code>required bytes encryptedKeyPair = 2;</code>
           *
           * <pre>
           * @required
           * </pre>
           */
          public com.google.protobuf.ByteString getEncryptedKeyPair() {
            return encryptedKeyPair_;
          }
          /**
           * <code>required bytes encryptedKeyPair = 2;</code>
           *
           * <pre>
           * @required
           * </pre>
           */
          public Builder setEncryptedKeyPair(com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
            encryptedKeyPair_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>required bytes encryptedKeyPair = 2;</code>
           *
           * <pre>
           * @required
           * </pre>
           */
          public Builder clearEncryptedKeyPair() {
            bitField0_ = (bitField0_ & ~0x00000002);
            encryptedKeyPair_ = getDefaultInstance().getEncryptedKeyPair();
            onChanged();
            return this;
          }

          // @@protoc_insertion_point(builder_scope:signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper)
        }

        static {
          defaultInstance = new KeyPairWrapper(true);
          defaultInstance.initFields();
        }

        // @@protoc_insertion_point(class_scope:signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper)
      }

      private int bitField0_;
      // required .signalservice.DataMessage.ClosedGroupControlMessage.Type type = 1;
      public static final int TYPE_FIELD_NUMBER = 1;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Type type_;
      /**
       * <code>required .signalservice.DataMessage.ClosedGroupControlMessage.Type type = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required .signalservice.DataMessage.ClosedGroupControlMessage.Type type = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Type getType() {
        return type_;
      }

      // optional bytes publicKey = 2;
      public static final int PUBLICKEY_FIELD_NUMBER = 2;
      private com.google.protobuf.ByteString publicKey_;
      /**
       * <code>optional bytes publicKey = 2;</code>
       */
      public boolean hasPublicKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bytes publicKey = 2;</code>
       */
      public com.google.protobuf.ByteString getPublicKey() {
        return publicKey_;
      }

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

      // optional .signalservice.KeyPair encryptionKeyPair = 4;
      public static final int ENCRYPTIONKEYPAIR_FIELD_NUMBER = 4;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair encryptionKeyPair_;
      /**
       * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
       */
      public boolean hasEncryptionKeyPair() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair getEncryptionKeyPair() {
        return encryptionKeyPair_;
      }
      /**
       * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPairOrBuilder getEncryptionKeyPairOrBuilder() {
        return encryptionKeyPair_;
      }

      // repeated bytes members = 5;
      public static final int MEMBERS_FIELD_NUMBER = 5;
      private java.util.List<com.google.protobuf.ByteString> members_;
      /**
       * <code>repeated bytes members = 5;</code>
       */
      public java.util.List<com.google.protobuf.ByteString>
          getMembersList() {
        return members_;
      }
      /**
       * <code>repeated bytes members = 5;</code>
       */
      public int getMembersCount() {
        return members_.size();
      }
      /**
       * <code>repeated bytes members = 5;</code>
       */
      public com.google.protobuf.ByteString getMembers(int index) {
        return members_.get(index);
      }

      // repeated bytes admins = 6;
      public static final int ADMINS_FIELD_NUMBER = 6;
      private java.util.List<com.google.protobuf.ByteString> admins_;
      /**
       * <code>repeated bytes admins = 6;</code>
       */
      public java.util.List<com.google.protobuf.ByteString>
          getAdminsList() {
        return admins_;
      }
      /**
       * <code>repeated bytes admins = 6;</code>
       */
      public int getAdminsCount() {
        return admins_.size();
      }
      /**
       * <code>repeated bytes admins = 6;</code>
       */
      public com.google.protobuf.ByteString getAdmins(int index) {
        return admins_.get(index);
      }

      // repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;
      public static final int WRAPPERS_FIELD_NUMBER = 7;
      private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper> wrappers_;
      /**
       * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper> getWrappersList() {
        return wrappers_;
      }
      /**
       * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
       */
      public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapperOrBuilder> 
          getWrappersOrBuilderList() {
        return wrappers_;
      }
      /**
       * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
       */
      public int getWrappersCount() {
        return wrappers_.size();
      }
      /**
       * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper getWrappers(int index) {
        return wrappers_.get(index);
      }
      /**
       * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapperOrBuilder getWrappersOrBuilder(
          int index) {
        return wrappers_.get(index);
      }

      private void initFields() {
        type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Type.NEW;
        publicKey_ = com.google.protobuf.ByteString.EMPTY;
        name_ = "";
        encryptionKeyPair_ = org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.getDefaultInstance();
        members_ = java.util.Collections.emptyList();
        admins_ = java.util.Collections.emptyList();
        wrappers_ = java.util.Collections.emptyList();
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        if (!hasType()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (hasEncryptionKeyPair()) {
          if (!getEncryptionKeyPair().isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        for (int i = 0; i < getWrappersCount(); i++) {
          if (!getWrappers(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeEnum(1, type_.getNumber());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, publicKey_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeBytes(3, getNameBytes());
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          output.writeMessage(4, encryptionKeyPair_);
        }
        for (int i = 0; i < members_.size(); i++) {
          output.writeBytes(5, members_.get(i));
        }
        for (int i = 0; i < admins_.size(); i++) {
          output.writeBytes(6, admins_.get(i));
        }
        for (int i = 0; i < wrappers_.size(); i++) {
          output.writeMessage(7, wrappers_.get(i));
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeEnumSize(1, type_.getNumber());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, publicKey_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(3, getNameBytes());
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(4, encryptionKeyPair_);
        }
        {
          int dataSize = 0;
          for (int i = 0; i < members_.size(); i++) {
            dataSize += com.google.protobuf.CodedOutputStream
              .computeBytesSizeNoTag(members_.get(i));
          }
          size += dataSize;
          size += 1 * getMembersList().size();
        }
        {
          int dataSize = 0;
          for (int i = 0; i < admins_.size(); i++) {
            dataSize += com.google.protobuf.CodedOutputStream
              .computeBytesSizeNoTag(admins_.get(i));
          }
          size += dataSize;
          size += 1 * getAdminsList().size();
        }
        for (int i = 0; i < wrappers_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(7, wrappers_.get(i));
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code signalservice.DataMessage.ClosedGroupControlMessage}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessageOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_ClosedGroupControlMessage_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_ClosedGroupControlMessage_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Builder.class);
        }

        // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getEncryptionKeyPairFieldBuilder();
            getWrappersFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Type.NEW;
          bitField0_ = (bitField0_ & ~0x00000001);
          publicKey_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000002);
          name_ = "";
          bitField0_ = (bitField0_ & ~0x00000004);
          if (encryptionKeyPairBuilder_ == null) {
            encryptionKeyPair_ = org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.getDefaultInstance();
          } else {
            encryptionKeyPairBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000008);
          members_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          admins_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          if (wrappersBuilder_ == null) {
            wrappers_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000040);
          } else {
            wrappersBuilder_.clear();
          }
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_ClosedGroupControlMessage_descriptor;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage getDefaultInstanceForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.getDefaultInstance();
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage build() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage buildPartial() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage result = new org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.type_ = type_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.publicKey_ = publicKey_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          result.name_ = name_;
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000008;
          }
          if (encryptionKeyPairBuilder_ == null) {
            result.encryptionKeyPair_ = encryptionKeyPair_;
          } else {
            result.encryptionKeyPair_ = encryptionKeyPairBuilder_.build();
          }
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            members_ = java.util.Collections.unmodifiableList(members_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.members_ = members_;
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            admins_ = java.util.Collections.unmodifiableList(admins_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.admins_ = admins_;
          if (wrappersBuilder_ == null) {
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
              wrappers_ = java.util.Collections.unmodifiableList(wrappers_);
              bitField0_ = (bitField0_ & ~0x00000040);
            }
            result.wrappers_ = wrappers_;
          } else {
            result.wrappers_ = wrappersBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage) {
            return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage other) {
          if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.getDefaultInstance()) return this;
          if (other.hasType()) {
            setType(other.getType());
          }
          if (other.hasPublicKey()) {
            setPublicKey(other.getPublicKey());
          }
          if (other.hasName()) {
            bitField0_ |= 0x00000004;
            name_ = other.name_;
            onChanged();
          }
          if (other.hasEncryptionKeyPair()) {
            mergeEncryptionKeyPair(other.getEncryptionKeyPair());
          }
          if (!other.members_.isEmpty()) {
            if (members_.isEmpty()) {
              members_ = other.members_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureMembersIsMutable();
              members_.addAll(other.members_);
            }
            onChanged();
          }
          if (!other.admins_.isEmpty()) {
            if (admins_.isEmpty()) {
              admins_ = other.admins_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureAdminsIsMutable();
              admins_.addAll(other.admins_);
            }
            onChanged();
          }
          if (wrappersBuilder_ == null) {
            if (!other.wrappers_.isEmpty()) {
              if (wrappers_.isEmpty()) {
                wrappers_ = other.wrappers_;
                bitField0_ = (bitField0_ & ~0x00000040);
              } else {
                ensureWrappersIsMutable();
                wrappers_.addAll(other.wrappers_);
              }
              onChanged();
            }
          } else {
            if (!other.wrappers_.isEmpty()) {
              if (wrappersBuilder_.isEmpty()) {
                wrappersBuilder_.dispose();
                wrappersBuilder_ = null;
                wrappers_ = other.wrappers_;
                bitField0_ = (bitField0_ & ~0x00000040);
                wrappersBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getWrappersFieldBuilder() : null;
              } else {
                wrappersBuilder_.addAllMessages(other.wrappers_);
              }
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          if (!hasType()) {
            
            return false;
          }
          if (hasEncryptionKeyPair()) {
            if (!getEncryptionKeyPair().isInitialized()) {
              
              return false;
            }
          }
          for (int i = 0; i < getWrappersCount(); i++) {
            if (!getWrappers(i).isInitialized()) {
              
              return false;
            }
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        // required .signalservice.DataMessage.ClosedGroupControlMessage.Type type = 1;
        private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Type type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Type.NEW;
        /**
         * <code>required .signalservice.DataMessage.ClosedGroupControlMessage.Type type = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public boolean hasType() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required .signalservice.DataMessage.ClosedGroupControlMessage.Type type = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Type getType() {
          return type_;
        }
        /**
         * <code>required .signalservice.DataMessage.ClosedGroupControlMessage.Type type = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public Builder setType(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Type value) {
          if (value == null) {
            throw new NullPointerException();
          }
          bitField0_ |= 0x00000001;
          type_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required .signalservice.DataMessage.ClosedGroupControlMessage.Type type = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public Builder clearType() {
          bitField0_ = (bitField0_ & ~0x00000001);
          type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Type.NEW;
          onChanged();
          return this;
        }

        // optional bytes publicKey = 2;
        private com.google.protobuf.ByteString publicKey_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>optional bytes publicKey = 2;</code>
         */
        public boolean hasPublicKey() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional bytes publicKey = 2;</code>
         */
        public com.google.protobuf.ByteString getPublicKey() {
          return publicKey_;
        }
        /**
         * <code>optional bytes publicKey = 2;</code>
         */
        public Builder setPublicKey(com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          publicKey_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional bytes publicKey = 2;</code>
         */
        public Builder clearPublicKey() {
          bitField0_ = (bitField0_ & ~0x00000002);
          publicKey_ = getDefaultInstance().getPublicKey();
          onChanged();
          return this;
        }

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

        // optional .signalservice.KeyPair encryptionKeyPair = 4;
        private org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair encryptionKeyPair_ = org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPairOrBuilder> encryptionKeyPairBuilder_;
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
         */
        public boolean hasEncryptionKeyPair() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair getEncryptionKeyPair() {
          if (encryptionKeyPairBuilder_ == null) {
            return encryptionKeyPair_;
          } else {
            return encryptionKeyPairBuilder_.getMessage();
          }
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
         */
        public Builder setEncryptionKeyPair(org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair value) {
          if (encryptionKeyPairBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            encryptionKeyPair_ = value;
            onChanged();
          } else {
            encryptionKeyPairBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000008;
          return this;
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
         */
        public Builder setEncryptionKeyPair(
            org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder builderForValue) {
          if (encryptionKeyPairBuilder_ == null) {
            encryptionKeyPair_ = builderForValue.build();
            onChanged();
          } else {
            encryptionKeyPairBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000008;
          return this;
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
         */
        public Builder mergeEncryptionKeyPair(org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair value) {
          if (encryptionKeyPairBuilder_ == null) {
            if (((bitField0_ & 0x00000008) == 0x00000008) &&
                encryptionKeyPair_ != org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.getDefaultInstance()) {
              encryptionKeyPair_ =
                org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.newBuilder(encryptionKeyPair_).mergeFrom(value).buildPartial();
            } else {
              encryptionKeyPair_ = value;
            }
            onChanged();
          } else {
            encryptionKeyPairBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000008;
          return this;
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
         */
        public Builder clearEncryptionKeyPair() {
          if (encryptionKeyPairBuilder_ == null) {
            encryptionKeyPair_ = org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.getDefaultInstance();
            onChanged();
          } else {
            encryptionKeyPairBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000008);
          return this;
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder getEncryptionKeyPairBuilder() {
          bitField0_ |= 0x00000008;
          onChanged();
          return getEncryptionKeyPairFieldBuilder().getBuilder();
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPairOrBuilder getEncryptionKeyPairOrBuilder() {
          if (encryptionKeyPairBuilder_ != null) {
            return encryptionKeyPairBuilder_.getMessageOrBuilder();
          } else {
            return encryptionKeyPair_;
          }
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 4;</code>
         */
        private com.google.protobuf.SingleFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPairOrBuilder> 
            getEncryptionKeyPairFieldBuilder() {
          if (encryptionKeyPairBuilder_ == null) {
            encryptionKeyPairBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPairOrBuilder>(
                    encryptionKeyPair_,
                    getParentForChildren(),
                    isClean());
            encryptionKeyPair_ = null;
          }
          return encryptionKeyPairBuilder_;
        }

        // repeated bytes members = 5;
        private java.util.List<com.google.protobuf.ByteString> members_ = java.util.Collections.emptyList();
        private void ensureMembersIsMutable() {
          if (!((bitField0_ & 0x00000010) == 0x00000010)) {
            members_ = new java.util.ArrayList<com.google.protobuf.ByteString>(members_);
            bitField0_ |= 0x00000010;
           }
        }
        /**
         * <code>repeated bytes members = 5;</code>
         */
        public java.util.List<com.google.protobuf.ByteString>
            getMembersList() {
          return java.util.Collections.unmodifiableList(members_);
        }
        /**
         * <code>repeated bytes members = 5;</code>
         */
        public int getMembersCount() {
          return members_.size();
        }
        /**
         * <code>repeated bytes members = 5;</code>
         */
        public com.google.protobuf.ByteString getMembers(int index) {
          return members_.get(index);
        }
        /**
         * <code>repeated bytes members = 5;</code>
         */
        public Builder setMembers(
            int index, com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureMembersIsMutable();
          members_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes members = 5;</code>
         */
        public Builder addMembers(com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureMembersIsMutable();
          members_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes members = 5;</code>
         */
        public Builder addAllMembers(
            java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
          ensureMembersIsMutable();
          super.addAll(values, members_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes members = 5;</code>
         */
        public Builder clearMembers() {
          members_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
          return this;
        }

        // repeated bytes admins = 6;
        private java.util.List<com.google.protobuf.ByteString> admins_ = java.util.Collections.emptyList();
        private void ensureAdminsIsMutable() {
          if (!((bitField0_ & 0x00000020) == 0x00000020)) {
            admins_ = new java.util.ArrayList<com.google.protobuf.ByteString>(admins_);
            bitField0_ |= 0x00000020;
           }
        }
        /**
         * <code>repeated bytes admins = 6;</code>
         */
        public java.util.List<com.google.protobuf.ByteString>
            getAdminsList() {
          return java.util.Collections.unmodifiableList(admins_);
        }
        /**
         * <code>repeated bytes admins = 6;</code>
         */
        public int getAdminsCount() {
          return admins_.size();
        }
        /**
         * <code>repeated bytes admins = 6;</code>
         */
        public com.google.protobuf.ByteString getAdmins(int index) {
          return admins_.get(index);
        }
        /**
         * <code>repeated bytes admins = 6;</code>
         */
        public Builder setAdmins(
            int index, com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureAdminsIsMutable();
          admins_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes admins = 6;</code>
         */
        public Builder addAdmins(com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureAdminsIsMutable();
          admins_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes admins = 6;</code>
         */
        public Builder addAllAdmins(
            java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
          ensureAdminsIsMutable();
          super.addAll(values, admins_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes admins = 6;</code>
         */
        public Builder clearAdmins() {
          admins_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
          return this;
        }

        // repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;
        private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper> wrappers_ =
          java.util.Collections.emptyList();
        private void ensureWrappersIsMutable() {
          if (!((bitField0_ & 0x00000040) == 0x00000040)) {
            wrappers_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper>(wrappers_);
            bitField0_ |= 0x00000040;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapperOrBuilder> wrappersBuilder_;

        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper> getWrappersList() {
          if (wrappersBuilder_ == null) {
            return java.util.Collections.unmodifiableList(wrappers_);
          } else {
            return wrappersBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public int getWrappersCount() {
          if (wrappersBuilder_ == null) {
            return wrappers_.size();
          } else {
            return wrappersBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper getWrappers(int index) {
          if (wrappersBuilder_ == null) {
            return wrappers_.get(index);
          } else {
            return wrappersBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public Builder setWrappers(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper value) {
          if (wrappersBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureWrappersIsMutable();
            wrappers_.set(index, value);
            onChanged();
          } else {
            wrappersBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public Builder setWrappers(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.Builder builderForValue) {
          if (wrappersBuilder_ == null) {
            ensureWrappersIsMutable();
            wrappers_.set(index, builderForValue.build());
            onChanged();
          } else {
            wrappersBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public Builder addWrappers(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper value) {
          if (wrappersBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureWrappersIsMutable();
            wrappers_.add(value);
            onChanged();
          } else {
            wrappersBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public Builder addWrappers(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper value) {
          if (wrappersBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureWrappersIsMutable();
            wrappers_.add(index, value);
            onChanged();
          } else {
            wrappersBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public Builder addWrappers(
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.Builder builderForValue) {
          if (wrappersBuilder_ == null) {
            ensureWrappersIsMutable();
            wrappers_.add(builderForValue.build());
            onChanged();
          } else {
            wrappersBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public Builder addWrappers(
            int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.Builder builderForValue) {
          if (wrappersBuilder_ == null) {
            ensureWrappersIsMutable();
            wrappers_.add(index, builderForValue.build());
            onChanged();
          } else {
            wrappersBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public Builder addAllWrappers(
            java.lang.Iterable<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper> values) {
          if (wrappersBuilder_ == null) {
            ensureWrappersIsMutable();
            super.addAll(values, wrappers_);
            onChanged();
          } else {
            wrappersBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public Builder clearWrappers() {
          if (wrappersBuilder_ == null) {
            wrappers_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000040);
            onChanged();
          } else {
            wrappersBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public Builder removeWrappers(int index) {
          if (wrappersBuilder_ == null) {
            ensureWrappersIsMutable();
            wrappers_.remove(index);
            onChanged();
          } else {
            wrappersBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.Builder getWrappersBuilder(
            int index) {
          return getWrappersFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapperOrBuilder getWrappersOrBuilder(
            int index) {
          if (wrappersBuilder_ == null) {
            return wrappers_.get(index);  } else {
            return wrappersBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapperOrBuilder> 
             getWrappersOrBuilderList() {
          if (wrappersBuilder_ != null) {
            return wrappersBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(wrappers_);
          }
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.Builder addWrappersBuilder() {
          return getWrappersFieldBuilder().addBuilder(
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.getDefaultInstance());
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.Builder addWrappersBuilder(
            int index) {
          return getWrappersFieldBuilder().addBuilder(
              index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.getDefaultInstance());
        }
        /**
         * <code>repeated .signalservice.DataMessage.ClosedGroupControlMessage.KeyPairWrapper wrappers = 7;</code>
         */
        public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.Builder> 
             getWrappersBuilderList() {
          return getWrappersFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapperOrBuilder> 
            getWrappersFieldBuilder() {
          if (wrappersBuilder_ == null) {
            wrappersBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapper.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.KeyPairWrapperOrBuilder>(
                    wrappers_,
                    ((bitField0_ & 0x00000040) == 0x00000040),
                    getParentForChildren(),
                    isClean());
            wrappers_ = null;
          }
          return wrappersBuilder_;
        }

        // @@protoc_insertion_point(builder_scope:signalservice.DataMessage.ClosedGroupControlMessage)
      }

      static {
        defaultInstance = new ClosedGroupControlMessage(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:signalservice.DataMessage.ClosedGroupControlMessage)
    }

    private int bitField0_;
    // optional string body = 1;
    public static final int BODY_FIELD_NUMBER = 1;
    private java.lang.Object body_;
    /**
     * <code>optional string body = 1;</code>
     */
    public boolean hasBody() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string body = 1;</code>
     */
    public java.lang.String getBody() {
      java.lang.Object ref = body_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          body_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string body = 1;</code>
     */
    public com.google.protobuf.ByteString
        getBodyBytes() {
      java.lang.Object ref = body_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        body_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .signalservice.AttachmentPointer attachments = 2;
    public static final int ATTACHMENTS_FIELD_NUMBER = 2;
    private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer> attachments_;
    /**
     * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
     */
    public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer> getAttachmentsList() {
      return attachments_;
    }
    /**
     * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
     */
    public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder> 
        getAttachmentsOrBuilderList() {
      return attachments_;
    }
    /**
     * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
     */
    public int getAttachmentsCount() {
      return attachments_.size();
    }
    /**
     * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getAttachments(int index) {
      return attachments_.get(index);
    }
    /**
     * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getAttachmentsOrBuilder(
        int index) {
      return attachments_.get(index);
    }

    // optional .signalservice.GroupContext group = 3;
    public static final int GROUP_FIELD_NUMBER = 3;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext group_;
    /**
     * <code>optional .signalservice.GroupContext group = 3;</code>
     */
    public boolean hasGroup() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .signalservice.GroupContext group = 3;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext getGroup() {
      return group_;
    }
    /**
     * <code>optional .signalservice.GroupContext group = 3;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContextOrBuilder getGroupOrBuilder() {
      return group_;
    }

    // optional uint32 flags = 4;
    public static final int FLAGS_FIELD_NUMBER = 4;
    private int flags_;
    /**
     * <code>optional uint32 flags = 4;</code>
     */
    public boolean hasFlags() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional uint32 flags = 4;</code>
     */
    public int getFlags() {
      return flags_;
    }

    // optional uint32 expireTimer = 5;
    public static final int EXPIRETIMER_FIELD_NUMBER = 5;
    private int expireTimer_;
    /**
     * <code>optional uint32 expireTimer = 5;</code>
     */
    public boolean hasExpireTimer() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional uint32 expireTimer = 5;</code>
     */
    public int getExpireTimer() {
      return expireTimer_;
    }

    // optional bytes profileKey = 6;
    public static final int PROFILEKEY_FIELD_NUMBER = 6;
    private com.google.protobuf.ByteString profileKey_;
    /**
     * <code>optional bytes profileKey = 6;</code>
     */
    public boolean hasProfileKey() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional bytes profileKey = 6;</code>
     */
    public com.google.protobuf.ByteString getProfileKey() {
      return profileKey_;
    }

    // optional uint64 timestamp = 7;
    public static final int TIMESTAMP_FIELD_NUMBER = 7;
    private long timestamp_;
    /**
     * <code>optional uint64 timestamp = 7;</code>
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional uint64 timestamp = 7;</code>
     */
    public long getTimestamp() {
      return timestamp_;
    }

    // optional .signalservice.DataMessage.Quote quote = 8;
    public static final int QUOTE_FIELD_NUMBER = 8;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote quote_;
    /**
     * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
     */
    public boolean hasQuote() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote getQuote() {
      return quote_;
    }
    /**
     * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.QuoteOrBuilder getQuoteOrBuilder() {
      return quote_;
    }

    // repeated .signalservice.DataMessage.Contact contact = 9;
    public static final int CONTACT_FIELD_NUMBER = 9;
    private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact> contact_;
    /**
     * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
     */
    public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact> getContactList() {
      return contact_;
    }
    /**
     * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
     */
    public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ContactOrBuilder> 
        getContactOrBuilderList() {
      return contact_;
    }
    /**
     * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
     */
    public int getContactCount() {
      return contact_.size();
    }
    /**
     * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact getContact(int index) {
      return contact_.get(index);
    }
    /**
     * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ContactOrBuilder getContactOrBuilder(
        int index) {
      return contact_.get(index);
    }

    // repeated .signalservice.DataMessage.Preview preview = 10;
    public static final int PREVIEW_FIELD_NUMBER = 10;
    private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview> preview_;
    /**
     * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
     */
    public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview> getPreviewList() {
      return preview_;
    }
    /**
     * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
     */
    public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.PreviewOrBuilder> 
        getPreviewOrBuilderList() {
      return preview_;
    }
    /**
     * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
     */
    public int getPreviewCount() {
      return preview_.size();
    }
    /**
     * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview getPreview(int index) {
      return preview_.get(index);
    }
    /**
     * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.PreviewOrBuilder getPreviewOrBuilder(
        int index) {
      return preview_.get(index);
    }

    // optional .signalservice.DataMessage.LokiProfile profile = 101;
    public static final int PROFILE_FIELD_NUMBER = 101;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile profile_;
    /**
     * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
     */
    public boolean hasProfile() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile getProfile() {
      return profile_;
    }
    /**
     * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfileOrBuilder getProfileOrBuilder() {
      return profile_;
    }

    // optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;
    public static final int CLOSEDGROUPCONTROLMESSAGE_FIELD_NUMBER = 104;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage closedGroupControlMessage_;
    /**
     * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
     */
    public boolean hasClosedGroupControlMessage() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage getClosedGroupControlMessage() {
      return closedGroupControlMessage_;
    }
    /**
     * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessageOrBuilder getClosedGroupControlMessageOrBuilder() {
      return closedGroupControlMessage_;
    }

    // optional string syncTarget = 105;
    public static final int SYNCTARGET_FIELD_NUMBER = 105;
    private java.lang.Object syncTarget_;
    /**
     * <code>optional string syncTarget = 105;</code>
     */
    public boolean hasSyncTarget() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional string syncTarget = 105;</code>
     */
    public java.lang.String getSyncTarget() {
      java.lang.Object ref = syncTarget_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          syncTarget_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string syncTarget = 105;</code>
     */
    public com.google.protobuf.ByteString
        getSyncTargetBytes() {
      java.lang.Object ref = syncTarget_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        syncTarget_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .signalservice.PublicChatInfo publicChatInfo = 999;
    public static final int PUBLICCHATINFO_FIELD_NUMBER = 999;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo publicChatInfo_;
    /**
     * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
     */
    public boolean hasPublicChatInfo() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo getPublicChatInfo() {
      return publicChatInfo_;
    }
    /**
     * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfoOrBuilder getPublicChatInfoOrBuilder() {
      return publicChatInfo_;
    }

    private void initFields() {
      body_ = "";
      attachments_ = java.util.Collections.emptyList();
      group_ = org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.getDefaultInstance();
      flags_ = 0;
      expireTimer_ = 0;
      profileKey_ = com.google.protobuf.ByteString.EMPTY;
      timestamp_ = 0L;
      quote_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.getDefaultInstance();
      contact_ = java.util.Collections.emptyList();
      preview_ = java.util.Collections.emptyList();
      profile_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.getDefaultInstance();
      closedGroupControlMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.getDefaultInstance();
      syncTarget_ = "";
      publicChatInfo_ = org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasClosedGroupControlMessage()) {
        if (!getClosedGroupControlMessage().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getBodyBytes());
      }
      for (int i = 0; i < attachments_.size(); i++) {
        output.writeMessage(2, attachments_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(3, group_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt32(4, flags_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(5, expireTimer_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(6, profileKey_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeUInt64(7, timestamp_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(8, quote_);
      }
      for (int i = 0; i < contact_.size(); i++) {
        output.writeMessage(9, contact_.get(i));
      }
      for (int i = 0; i < preview_.size(); i++) {
        output.writeMessage(10, preview_.get(i));
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(101, profile_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(104, closedGroupControlMessage_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBytes(105, getSyncTargetBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeMessage(999, publicChatInfo_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getBodyBytes());
      }
      for (int i = 0; i < attachments_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, attachments_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, group_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, flags_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(5, expireTimer_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, profileKey_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(7, timestamp_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, quote_);
      }
      for (int i = 0; i < contact_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, contact_.get(i));
      }
      for (int i = 0; i < preview_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, preview_.get(i));
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(101, profile_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(104, closedGroupControlMessage_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(105, getSyncTargetBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(999, publicChatInfo_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code signalservice.DataMessage}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.class, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Builder.class);
      }

      // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getAttachmentsFieldBuilder();
          getGroupFieldBuilder();
          getQuoteFieldBuilder();
          getContactFieldBuilder();
          getPreviewFieldBuilder();
          getProfileFieldBuilder();
          getClosedGroupControlMessageFieldBuilder();
          getPublicChatInfoFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        body_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        if (attachmentsBuilder_ == null) {
          attachments_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          attachmentsBuilder_.clear();
        }
        if (groupBuilder_ == null) {
          group_ = org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.getDefaultInstance();
        } else {
          groupBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        flags_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        expireTimer_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        profileKey_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        if (quoteBuilder_ == null) {
          quote_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.getDefaultInstance();
        } else {
          quoteBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        if (contactBuilder_ == null) {
          contact_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          contactBuilder_.clear();
        }
        if (previewBuilder_ == null) {
          preview_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
        } else {
          previewBuilder_.clear();
        }
        if (profileBuilder_ == null) {
          profile_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.getDefaultInstance();
        } else {
          profileBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        if (closedGroupControlMessageBuilder_ == null) {
          closedGroupControlMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.getDefaultInstance();
        } else {
          closedGroupControlMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        syncTarget_ = "";
        bitField0_ = (bitField0_ & ~0x00001000);
        if (publicChatInfoBuilder_ == null) {
          publicChatInfo_ = org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.getDefaultInstance();
        } else {
          publicChatInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_DataMessage_descriptor;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage getDefaultInstanceForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.getDefaultInstance();
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage build() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage buildPartial() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage result = new org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.body_ = body_;
        if (attachmentsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            attachments_ = java.util.Collections.unmodifiableList(attachments_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.attachments_ = attachments_;
        } else {
          result.attachments_ = attachmentsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000002;
        }
        if (groupBuilder_ == null) {
          result.group_ = group_;
        } else {
          result.group_ = groupBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.flags_ = flags_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.expireTimer_ = expireTimer_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        result.profileKey_ = profileKey_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000020;
        }
        result.timestamp_ = timestamp_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000040;
        }
        if (quoteBuilder_ == null) {
          result.quote_ = quote_;
        } else {
          result.quote_ = quoteBuilder_.build();
        }
        if (contactBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            contact_ = java.util.Collections.unmodifiableList(contact_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.contact_ = contact_;
        } else {
          result.contact_ = contactBuilder_.build();
        }
        if (previewBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200)) {
            preview_ = java.util.Collections.unmodifiableList(preview_);
            bitField0_ = (bitField0_ & ~0x00000200);
          }
          result.preview_ = preview_;
        } else {
          result.preview_ = previewBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000080;
        }
        if (profileBuilder_ == null) {
          result.profile_ = profile_;
        } else {
          result.profile_ = profileBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000100;
        }
        if (closedGroupControlMessageBuilder_ == null) {
          result.closedGroupControlMessage_ = closedGroupControlMessage_;
        } else {
          result.closedGroupControlMessage_ = closedGroupControlMessageBuilder_.build();
        }
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00000200;
        }
        result.syncTarget_ = syncTarget_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00000400;
        }
        if (publicChatInfoBuilder_ == null) {
          result.publicChatInfo_ = publicChatInfo_;
        } else {
          result.publicChatInfo_ = publicChatInfoBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage) {
          return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage other) {
        if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.getDefaultInstance()) return this;
        if (other.hasBody()) {
          bitField0_ |= 0x00000001;
          body_ = other.body_;
          onChanged();
        }
        if (attachmentsBuilder_ == null) {
          if (!other.attachments_.isEmpty()) {
            if (attachments_.isEmpty()) {
              attachments_ = other.attachments_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureAttachmentsIsMutable();
              attachments_.addAll(other.attachments_);
            }
            onChanged();
          }
        } else {
          if (!other.attachments_.isEmpty()) {
            if (attachmentsBuilder_.isEmpty()) {
              attachmentsBuilder_.dispose();
              attachmentsBuilder_ = null;
              attachments_ = other.attachments_;
              bitField0_ = (bitField0_ & ~0x00000002);
              attachmentsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getAttachmentsFieldBuilder() : null;
            } else {
              attachmentsBuilder_.addAllMessages(other.attachments_);
            }
          }
        }
        if (other.hasGroup()) {
          mergeGroup(other.getGroup());
        }
        if (other.hasFlags()) {
          setFlags(other.getFlags());
        }
        if (other.hasExpireTimer()) {
          setExpireTimer(other.getExpireTimer());
        }
        if (other.hasProfileKey()) {
          setProfileKey(other.getProfileKey());
        }
        if (other.hasTimestamp()) {
          setTimestamp(other.getTimestamp());
        }
        if (other.hasQuote()) {
          mergeQuote(other.getQuote());
        }
        if (contactBuilder_ == null) {
          if (!other.contact_.isEmpty()) {
            if (contact_.isEmpty()) {
              contact_ = other.contact_;
              bitField0_ = (bitField0_ & ~0x00000100);
            } else {
              ensureContactIsMutable();
              contact_.addAll(other.contact_);
            }
            onChanged();
          }
        } else {
          if (!other.contact_.isEmpty()) {
            if (contactBuilder_.isEmpty()) {
              contactBuilder_.dispose();
              contactBuilder_ = null;
              contact_ = other.contact_;
              bitField0_ = (bitField0_ & ~0x00000100);
              contactBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getContactFieldBuilder() : null;
            } else {
              contactBuilder_.addAllMessages(other.contact_);
            }
          }
        }
        if (previewBuilder_ == null) {
          if (!other.preview_.isEmpty()) {
            if (preview_.isEmpty()) {
              preview_ = other.preview_;
              bitField0_ = (bitField0_ & ~0x00000200);
            } else {
              ensurePreviewIsMutable();
              preview_.addAll(other.preview_);
            }
            onChanged();
          }
        } else {
          if (!other.preview_.isEmpty()) {
            if (previewBuilder_.isEmpty()) {
              previewBuilder_.dispose();
              previewBuilder_ = null;
              preview_ = other.preview_;
              bitField0_ = (bitField0_ & ~0x00000200);
              previewBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getPreviewFieldBuilder() : null;
            } else {
              previewBuilder_.addAllMessages(other.preview_);
            }
          }
        }
        if (other.hasProfile()) {
          mergeProfile(other.getProfile());
        }
        if (other.hasClosedGroupControlMessage()) {
          mergeClosedGroupControlMessage(other.getClosedGroupControlMessage());
        }
        if (other.hasSyncTarget()) {
          bitField0_ |= 0x00001000;
          syncTarget_ = other.syncTarget_;
          onChanged();
        }
        if (other.hasPublicChatInfo()) {
          mergePublicChatInfo(other.getPublicChatInfo());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasClosedGroupControlMessage()) {
          if (!getClosedGroupControlMessage().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string body = 1;
      private java.lang.Object body_ = "";
      /**
       * <code>optional string body = 1;</code>
       */
      public boolean hasBody() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string body = 1;</code>
       */
      public java.lang.String getBody() {
        java.lang.Object ref = body_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          body_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string body = 1;</code>
       */
      public com.google.protobuf.ByteString
          getBodyBytes() {
        java.lang.Object ref = body_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          body_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string body = 1;</code>
       */
      public Builder setBody(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        body_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string body = 1;</code>
       */
      public Builder clearBody() {
        bitField0_ = (bitField0_ & ~0x00000001);
        body_ = getDefaultInstance().getBody();
        onChanged();
        return this;
      }
      /**
       * <code>optional string body = 1;</code>
       */
      public Builder setBodyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        body_ = value;
        onChanged();
        return this;
      }

      // repeated .signalservice.AttachmentPointer attachments = 2;
      private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer> attachments_ =
        java.util.Collections.emptyList();
      private void ensureAttachmentsIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          attachments_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer>(attachments_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder> attachmentsBuilder_;

      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer> getAttachmentsList() {
        if (attachmentsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(attachments_);
        } else {
          return attachmentsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public int getAttachmentsCount() {
        if (attachmentsBuilder_ == null) {
          return attachments_.size();
        } else {
          return attachmentsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getAttachments(int index) {
        if (attachmentsBuilder_ == null) {
          return attachments_.get(index);
        } else {
          return attachmentsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public Builder setAttachments(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer value) {
        if (attachmentsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAttachmentsIsMutable();
          attachments_.set(index, value);
          onChanged();
        } else {
          attachmentsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public Builder setAttachments(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder builderForValue) {
        if (attachmentsBuilder_ == null) {
          ensureAttachmentsIsMutable();
          attachments_.set(index, builderForValue.build());
          onChanged();
        } else {
          attachmentsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public Builder addAttachments(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer value) {
        if (attachmentsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAttachmentsIsMutable();
          attachments_.add(value);
          onChanged();
        } else {
          attachmentsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public Builder addAttachments(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer value) {
        if (attachmentsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAttachmentsIsMutable();
          attachments_.add(index, value);
          onChanged();
        } else {
          attachmentsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public Builder addAttachments(
          org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder builderForValue) {
        if (attachmentsBuilder_ == null) {
          ensureAttachmentsIsMutable();
          attachments_.add(builderForValue.build());
          onChanged();
        } else {
          attachmentsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public Builder addAttachments(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder builderForValue) {
        if (attachmentsBuilder_ == null) {
          ensureAttachmentsIsMutable();
          attachments_.add(index, builderForValue.build());
          onChanged();
        } else {
          attachmentsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public Builder addAllAttachments(
          java.lang.Iterable<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer> values) {
        if (attachmentsBuilder_ == null) {
          ensureAttachmentsIsMutable();
          super.addAll(values, attachments_);
          onChanged();
        } else {
          attachmentsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public Builder clearAttachments() {
        if (attachmentsBuilder_ == null) {
          attachments_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          attachmentsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public Builder removeAttachments(int index) {
        if (attachmentsBuilder_ == null) {
          ensureAttachmentsIsMutable();
          attachments_.remove(index);
          onChanged();
        } else {
          attachmentsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder getAttachmentsBuilder(
          int index) {
        return getAttachmentsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getAttachmentsOrBuilder(
          int index) {
        if (attachmentsBuilder_ == null) {
          return attachments_.get(index);  } else {
          return attachmentsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder> 
           getAttachmentsOrBuilderList() {
        if (attachmentsBuilder_ != null) {
          return attachmentsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(attachments_);
        }
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder addAttachmentsBuilder() {
        return getAttachmentsFieldBuilder().addBuilder(
            org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance());
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder addAttachmentsBuilder(
          int index) {
        return getAttachmentsFieldBuilder().addBuilder(
            index, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance());
      }
      /**
       * <code>repeated .signalservice.AttachmentPointer attachments = 2;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder> 
           getAttachmentsBuilderList() {
        return getAttachmentsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder> 
          getAttachmentsFieldBuilder() {
        if (attachmentsBuilder_ == null) {
          attachmentsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder>(
                  attachments_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          attachments_ = null;
        }
        return attachmentsBuilder_;
      }

      // optional .signalservice.GroupContext group = 3;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext group_ = org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContextOrBuilder> groupBuilder_;
      /**
       * <code>optional .signalservice.GroupContext group = 3;</code>
       */
      public boolean hasGroup() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .signalservice.GroupContext group = 3;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext getGroup() {
        if (groupBuilder_ == null) {
          return group_;
        } else {
          return groupBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .signalservice.GroupContext group = 3;</code>
       */
      public Builder setGroup(org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext value) {
        if (groupBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          group_ = value;
          onChanged();
        } else {
          groupBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .signalservice.GroupContext group = 3;</code>
       */
      public Builder setGroup(
          org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Builder builderForValue) {
        if (groupBuilder_ == null) {
          group_ = builderForValue.build();
          onChanged();
        } else {
          groupBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .signalservice.GroupContext group = 3;</code>
       */
      public Builder mergeGroup(org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext value) {
        if (groupBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              group_ != org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.getDefaultInstance()) {
            group_ =
              org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.newBuilder(group_).mergeFrom(value).buildPartial();
          } else {
            group_ = value;
          }
          onChanged();
        } else {
          groupBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .signalservice.GroupContext group = 3;</code>
       */
      public Builder clearGroup() {
        if (groupBuilder_ == null) {
          group_ = org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.getDefaultInstance();
          onChanged();
        } else {
          groupBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .signalservice.GroupContext group = 3;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Builder getGroupBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getGroupFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .signalservice.GroupContext group = 3;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContextOrBuilder getGroupOrBuilder() {
        if (groupBuilder_ != null) {
          return groupBuilder_.getMessageOrBuilder();
        } else {
          return group_;
        }
      }
      /**
       * <code>optional .signalservice.GroupContext group = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContextOrBuilder> 
          getGroupFieldBuilder() {
        if (groupBuilder_ == null) {
          groupBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContextOrBuilder>(
                  group_,
                  getParentForChildren(),
                  isClean());
          group_ = null;
        }
        return groupBuilder_;
      }

      // optional uint32 flags = 4;
      private int flags_ ;
      /**
       * <code>optional uint32 flags = 4;</code>
       */
      public boolean hasFlags() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional uint32 flags = 4;</code>
       */
      public int getFlags() {
        return flags_;
      }
      /**
       * <code>optional uint32 flags = 4;</code>
       */
      public Builder setFlags(int value) {
        bitField0_ |= 0x00000008;
        flags_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 flags = 4;</code>
       */
      public Builder clearFlags() {
        bitField0_ = (bitField0_ & ~0x00000008);
        flags_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 expireTimer = 5;
      private int expireTimer_ ;
      /**
       * <code>optional uint32 expireTimer = 5;</code>
       */
      public boolean hasExpireTimer() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional uint32 expireTimer = 5;</code>
       */
      public int getExpireTimer() {
        return expireTimer_;
      }
      /**
       * <code>optional uint32 expireTimer = 5;</code>
       */
      public Builder setExpireTimer(int value) {
        bitField0_ |= 0x00000010;
        expireTimer_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 expireTimer = 5;</code>
       */
      public Builder clearExpireTimer() {
        bitField0_ = (bitField0_ & ~0x00000010);
        expireTimer_ = 0;
        onChanged();
        return this;
      }

      // optional bytes profileKey = 6;
      private com.google.protobuf.ByteString profileKey_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes profileKey = 6;</code>
       */
      public boolean hasProfileKey() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bytes profileKey = 6;</code>
       */
      public com.google.protobuf.ByteString getProfileKey() {
        return profileKey_;
      }
      /**
       * <code>optional bytes profileKey = 6;</code>
       */
      public Builder setProfileKey(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        profileKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes profileKey = 6;</code>
       */
      public Builder clearProfileKey() {
        bitField0_ = (bitField0_ & ~0x00000020);
        profileKey_ = getDefaultInstance().getProfileKey();
        onChanged();
        return this;
      }

      // optional uint64 timestamp = 7;
      private long timestamp_ ;
      /**
       * <code>optional uint64 timestamp = 7;</code>
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional uint64 timestamp = 7;</code>
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>optional uint64 timestamp = 7;</code>
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000040;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 timestamp = 7;</code>
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000040);
        timestamp_ = 0L;
        onChanged();
        return this;
      }

      // optional .signalservice.DataMessage.Quote quote = 8;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote quote_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.QuoteOrBuilder> quoteBuilder_;
      /**
       * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
       */
      public boolean hasQuote() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote getQuote() {
        if (quoteBuilder_ == null) {
          return quote_;
        } else {
          return quoteBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
       */
      public Builder setQuote(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote value) {
        if (quoteBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          quote_ = value;
          onChanged();
        } else {
          quoteBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
       */
      public Builder setQuote(
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.Builder builderForValue) {
        if (quoteBuilder_ == null) {
          quote_ = builderForValue.build();
          onChanged();
        } else {
          quoteBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
       */
      public Builder mergeQuote(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote value) {
        if (quoteBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              quote_ != org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.getDefaultInstance()) {
            quote_ =
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.newBuilder(quote_).mergeFrom(value).buildPartial();
          } else {
            quote_ = value;
          }
          onChanged();
        } else {
          quoteBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
       */
      public Builder clearQuote() {
        if (quoteBuilder_ == null) {
          quote_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.getDefaultInstance();
          onChanged();
        } else {
          quoteBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.Builder getQuoteBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getQuoteFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.QuoteOrBuilder getQuoteOrBuilder() {
        if (quoteBuilder_ != null) {
          return quoteBuilder_.getMessageOrBuilder();
        } else {
          return quote_;
        }
      }
      /**
       * <code>optional .signalservice.DataMessage.Quote quote = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.QuoteOrBuilder> 
          getQuoteFieldBuilder() {
        if (quoteBuilder_ == null) {
          quoteBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Quote.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.QuoteOrBuilder>(
                  quote_,
                  getParentForChildren(),
                  isClean());
          quote_ = null;
        }
        return quoteBuilder_;
      }

      // repeated .signalservice.DataMessage.Contact contact = 9;
      private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact> contact_ =
        java.util.Collections.emptyList();
      private void ensureContactIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          contact_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact>(contact_);
          bitField0_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ContactOrBuilder> contactBuilder_;

      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact> getContactList() {
        if (contactBuilder_ == null) {
          return java.util.Collections.unmodifiableList(contact_);
        } else {
          return contactBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public int getContactCount() {
        if (contactBuilder_ == null) {
          return contact_.size();
        } else {
          return contactBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact getContact(int index) {
        if (contactBuilder_ == null) {
          return contact_.get(index);
        } else {
          return contactBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public Builder setContact(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact value) {
        if (contactBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureContactIsMutable();
          contact_.set(index, value);
          onChanged();
        } else {
          contactBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public Builder setContact(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Builder builderForValue) {
        if (contactBuilder_ == null) {
          ensureContactIsMutable();
          contact_.set(index, builderForValue.build());
          onChanged();
        } else {
          contactBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public Builder addContact(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact value) {
        if (contactBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureContactIsMutable();
          contact_.add(value);
          onChanged();
        } else {
          contactBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public Builder addContact(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact value) {
        if (contactBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureContactIsMutable();
          contact_.add(index, value);
          onChanged();
        } else {
          contactBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public Builder addContact(
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Builder builderForValue) {
        if (contactBuilder_ == null) {
          ensureContactIsMutable();
          contact_.add(builderForValue.build());
          onChanged();
        } else {
          contactBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public Builder addContact(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Builder builderForValue) {
        if (contactBuilder_ == null) {
          ensureContactIsMutable();
          contact_.add(index, builderForValue.build());
          onChanged();
        } else {
          contactBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public Builder addAllContact(
          java.lang.Iterable<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact> values) {
        if (contactBuilder_ == null) {
          ensureContactIsMutable();
          super.addAll(values, contact_);
          onChanged();
        } else {
          contactBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public Builder clearContact() {
        if (contactBuilder_ == null) {
          contact_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          contactBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public Builder removeContact(int index) {
        if (contactBuilder_ == null) {
          ensureContactIsMutable();
          contact_.remove(index);
          onChanged();
        } else {
          contactBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Builder getContactBuilder(
          int index) {
        return getContactFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ContactOrBuilder getContactOrBuilder(
          int index) {
        if (contactBuilder_ == null) {
          return contact_.get(index);  } else {
          return contactBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ContactOrBuilder> 
           getContactOrBuilderList() {
        if (contactBuilder_ != null) {
          return contactBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(contact_);
        }
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Builder addContactBuilder() {
        return getContactFieldBuilder().addBuilder(
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.getDefaultInstance());
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Builder addContactBuilder(
          int index) {
        return getContactFieldBuilder().addBuilder(
            index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.getDefaultInstance());
      }
      /**
       * <code>repeated .signalservice.DataMessage.Contact contact = 9;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Builder> 
           getContactBuilderList() {
        return getContactFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ContactOrBuilder> 
          getContactFieldBuilder() {
        if (contactBuilder_ == null) {
          contactBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Contact.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ContactOrBuilder>(
                  contact_,
                  ((bitField0_ & 0x00000100) == 0x00000100),
                  getParentForChildren(),
                  isClean());
          contact_ = null;
        }
        return contactBuilder_;
      }

      // repeated .signalservice.DataMessage.Preview preview = 10;
      private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview> preview_ =
        java.util.Collections.emptyList();
      private void ensurePreviewIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          preview_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview>(preview_);
          bitField0_ |= 0x00000200;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.PreviewOrBuilder> previewBuilder_;

      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview> getPreviewList() {
        if (previewBuilder_ == null) {
          return java.util.Collections.unmodifiableList(preview_);
        } else {
          return previewBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public int getPreviewCount() {
        if (previewBuilder_ == null) {
          return preview_.size();
        } else {
          return previewBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview getPreview(int index) {
        if (previewBuilder_ == null) {
          return preview_.get(index);
        } else {
          return previewBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public Builder setPreview(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview value) {
        if (previewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePreviewIsMutable();
          preview_.set(index, value);
          onChanged();
        } else {
          previewBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public Builder setPreview(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.Builder builderForValue) {
        if (previewBuilder_ == null) {
          ensurePreviewIsMutable();
          preview_.set(index, builderForValue.build());
          onChanged();
        } else {
          previewBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public Builder addPreview(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview value) {
        if (previewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePreviewIsMutable();
          preview_.add(value);
          onChanged();
        } else {
          previewBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public Builder addPreview(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview value) {
        if (previewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePreviewIsMutable();
          preview_.add(index, value);
          onChanged();
        } else {
          previewBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public Builder addPreview(
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.Builder builderForValue) {
        if (previewBuilder_ == null) {
          ensurePreviewIsMutable();
          preview_.add(builderForValue.build());
          onChanged();
        } else {
          previewBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public Builder addPreview(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.Builder builderForValue) {
        if (previewBuilder_ == null) {
          ensurePreviewIsMutable();
          preview_.add(index, builderForValue.build());
          onChanged();
        } else {
          previewBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public Builder addAllPreview(
          java.lang.Iterable<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview> values) {
        if (previewBuilder_ == null) {
          ensurePreviewIsMutable();
          super.addAll(values, preview_);
          onChanged();
        } else {
          previewBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public Builder clearPreview() {
        if (previewBuilder_ == null) {
          preview_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
        } else {
          previewBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public Builder removePreview(int index) {
        if (previewBuilder_ == null) {
          ensurePreviewIsMutable();
          preview_.remove(index);
          onChanged();
        } else {
          previewBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.Builder getPreviewBuilder(
          int index) {
        return getPreviewFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.PreviewOrBuilder getPreviewOrBuilder(
          int index) {
        if (previewBuilder_ == null) {
          return preview_.get(index);  } else {
          return previewBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.PreviewOrBuilder> 
           getPreviewOrBuilderList() {
        if (previewBuilder_ != null) {
          return previewBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(preview_);
        }
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.Builder addPreviewBuilder() {
        return getPreviewFieldBuilder().addBuilder(
            org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.getDefaultInstance());
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.Builder addPreviewBuilder(
          int index) {
        return getPreviewFieldBuilder().addBuilder(
            index, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.getDefaultInstance());
      }
      /**
       * <code>repeated .signalservice.DataMessage.Preview preview = 10;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.Builder> 
           getPreviewBuilderList() {
        return getPreviewFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.PreviewOrBuilder> 
          getPreviewFieldBuilder() {
        if (previewBuilder_ == null) {
          previewBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.Preview.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.PreviewOrBuilder>(
                  preview_,
                  ((bitField0_ & 0x00000200) == 0x00000200),
                  getParentForChildren(),
                  isClean());
          preview_ = null;
        }
        return previewBuilder_;
      }

      // optional .signalservice.DataMessage.LokiProfile profile = 101;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile profile_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfileOrBuilder> profileBuilder_;
      /**
       * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
       */
      public boolean hasProfile() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile getProfile() {
        if (profileBuilder_ == null) {
          return profile_;
        } else {
          return profileBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
       */
      public Builder setProfile(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile value) {
        if (profileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          profile_ = value;
          onChanged();
        } else {
          profileBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
       */
      public Builder setProfile(
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.Builder builderForValue) {
        if (profileBuilder_ == null) {
          profile_ = builderForValue.build();
          onChanged();
        } else {
          profileBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
       */
      public Builder mergeProfile(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile value) {
        if (profileBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400) &&
              profile_ != org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.getDefaultInstance()) {
            profile_ =
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.newBuilder(profile_).mergeFrom(value).buildPartial();
          } else {
            profile_ = value;
          }
          onChanged();
        } else {
          profileBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
       */
      public Builder clearProfile() {
        if (profileBuilder_ == null) {
          profile_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.getDefaultInstance();
          onChanged();
        } else {
          profileBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.Builder getProfileBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getProfileFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfileOrBuilder getProfileOrBuilder() {
        if (profileBuilder_ != null) {
          return profileBuilder_.getMessageOrBuilder();
        } else {
          return profile_;
        }
      }
      /**
       * <code>optional .signalservice.DataMessage.LokiProfile profile = 101;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfileOrBuilder> 
          getProfileFieldBuilder() {
        if (profileBuilder_ == null) {
          profileBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfile.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.LokiProfileOrBuilder>(
                  profile_,
                  getParentForChildren(),
                  isClean());
          profile_ = null;
        }
        return profileBuilder_;
      }

      // optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage closedGroupControlMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessageOrBuilder> closedGroupControlMessageBuilder_;
      /**
       * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
       */
      public boolean hasClosedGroupControlMessage() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage getClosedGroupControlMessage() {
        if (closedGroupControlMessageBuilder_ == null) {
          return closedGroupControlMessage_;
        } else {
          return closedGroupControlMessageBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
       */
      public Builder setClosedGroupControlMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage value) {
        if (closedGroupControlMessageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          closedGroupControlMessage_ = value;
          onChanged();
        } else {
          closedGroupControlMessageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
       */
      public Builder setClosedGroupControlMessage(
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Builder builderForValue) {
        if (closedGroupControlMessageBuilder_ == null) {
          closedGroupControlMessage_ = builderForValue.build();
          onChanged();
        } else {
          closedGroupControlMessageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
       */
      public Builder mergeClosedGroupControlMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage value) {
        if (closedGroupControlMessageBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800) &&
              closedGroupControlMessage_ != org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.getDefaultInstance()) {
            closedGroupControlMessage_ =
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.newBuilder(closedGroupControlMessage_).mergeFrom(value).buildPartial();
          } else {
            closedGroupControlMessage_ = value;
          }
          onChanged();
        } else {
          closedGroupControlMessageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
       */
      public Builder clearClosedGroupControlMessage() {
        if (closedGroupControlMessageBuilder_ == null) {
          closedGroupControlMessage_ = org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.getDefaultInstance();
          onChanged();
        } else {
          closedGroupControlMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Builder getClosedGroupControlMessageBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getClosedGroupControlMessageFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessageOrBuilder getClosedGroupControlMessageOrBuilder() {
        if (closedGroupControlMessageBuilder_ != null) {
          return closedGroupControlMessageBuilder_.getMessageOrBuilder();
        } else {
          return closedGroupControlMessage_;
        }
      }
      /**
       * <code>optional .signalservice.DataMessage.ClosedGroupControlMessage closedGroupControlMessage = 104;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessageOrBuilder> 
          getClosedGroupControlMessageFieldBuilder() {
        if (closedGroupControlMessageBuilder_ == null) {
          closedGroupControlMessageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessage.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage.ClosedGroupControlMessageOrBuilder>(
                  closedGroupControlMessage_,
                  getParentForChildren(),
                  isClean());
          closedGroupControlMessage_ = null;
        }
        return closedGroupControlMessageBuilder_;
      }

      // optional string syncTarget = 105;
      private java.lang.Object syncTarget_ = "";
      /**
       * <code>optional string syncTarget = 105;</code>
       */
      public boolean hasSyncTarget() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional string syncTarget = 105;</code>
       */
      public java.lang.String getSyncTarget() {
        java.lang.Object ref = syncTarget_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          syncTarget_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string syncTarget = 105;</code>
       */
      public com.google.protobuf.ByteString
          getSyncTargetBytes() {
        java.lang.Object ref = syncTarget_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          syncTarget_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string syncTarget = 105;</code>
       */
      public Builder setSyncTarget(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        syncTarget_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string syncTarget = 105;</code>
       */
      public Builder clearSyncTarget() {
        bitField0_ = (bitField0_ & ~0x00001000);
        syncTarget_ = getDefaultInstance().getSyncTarget();
        onChanged();
        return this;
      }
      /**
       * <code>optional string syncTarget = 105;</code>
       */
      public Builder setSyncTargetBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        syncTarget_ = value;
        onChanged();
        return this;
      }

      // optional .signalservice.PublicChatInfo publicChatInfo = 999;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo publicChatInfo_ = org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo, org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfoOrBuilder> publicChatInfoBuilder_;
      /**
       * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
       */
      public boolean hasPublicChatInfo() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo getPublicChatInfo() {
        if (publicChatInfoBuilder_ == null) {
          return publicChatInfo_;
        } else {
          return publicChatInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
       */
      public Builder setPublicChatInfo(org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo value) {
        if (publicChatInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          publicChatInfo_ = value;
          onChanged();
        } else {
          publicChatInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
       */
      public Builder setPublicChatInfo(
          org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.Builder builderForValue) {
        if (publicChatInfoBuilder_ == null) {
          publicChatInfo_ = builderForValue.build();
          onChanged();
        } else {
          publicChatInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
       */
      public Builder mergePublicChatInfo(org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo value) {
        if (publicChatInfoBuilder_ == null) {
          if (((bitField0_ & 0x00002000) == 0x00002000) &&
              publicChatInfo_ != org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.getDefaultInstance()) {
            publicChatInfo_ =
              org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.newBuilder(publicChatInfo_).mergeFrom(value).buildPartial();
          } else {
            publicChatInfo_ = value;
          }
          onChanged();
        } else {
          publicChatInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
       */
      public Builder clearPublicChatInfo() {
        if (publicChatInfoBuilder_ == null) {
          publicChatInfo_ = org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.getDefaultInstance();
          onChanged();
        } else {
          publicChatInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }
      /**
       * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.Builder getPublicChatInfoBuilder() {
        bitField0_ |= 0x00002000;
        onChanged();
        return getPublicChatInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfoOrBuilder getPublicChatInfoOrBuilder() {
        if (publicChatInfoBuilder_ != null) {
          return publicChatInfoBuilder_.getMessageOrBuilder();
        } else {
          return publicChatInfo_;
        }
      }
      /**
       * <code>optional .signalservice.PublicChatInfo publicChatInfo = 999;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo, org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfoOrBuilder> 
          getPublicChatInfoFieldBuilder() {
        if (publicChatInfoBuilder_ == null) {
          publicChatInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo, org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfoOrBuilder>(
                  publicChatInfo_,
                  getParentForChildren(),
                  isClean());
          publicChatInfo_ = null;
        }
        return publicChatInfoBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:signalservice.DataMessage)
    }

    static {
      defaultInstance = new DataMessage(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:signalservice.DataMessage)
  }

  public interface ConfigurationMessageOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;
    /**
     * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
     */
    java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup> 
        getClosedGroupsList();
    /**
     * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup getClosedGroups(int index);
    /**
     * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
     */
    int getClosedGroupsCount();
    /**
     * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
     */
    java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroupOrBuilder> 
        getClosedGroupsOrBuilderList();
    /**
     * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroupOrBuilder getClosedGroupsOrBuilder(
        int index);

    // repeated string openGroups = 2;
    /**
     * <code>repeated string openGroups = 2;</code>
     */
    java.util.List<java.lang.String>
    getOpenGroupsList();
    /**
     * <code>repeated string openGroups = 2;</code>
     */
    int getOpenGroupsCount();
    /**
     * <code>repeated string openGroups = 2;</code>
     */
    java.lang.String getOpenGroups(int index);
    /**
     * <code>repeated string openGroups = 2;</code>
     */
    com.google.protobuf.ByteString
        getOpenGroupsBytes(int index);

    // optional string displayName = 3;
    /**
     * <code>optional string displayName = 3;</code>
     */
    boolean hasDisplayName();
    /**
     * <code>optional string displayName = 3;</code>
     */
    java.lang.String getDisplayName();
    /**
     * <code>optional string displayName = 3;</code>
     */
    com.google.protobuf.ByteString
        getDisplayNameBytes();

    // optional string profilePicture = 4;
    /**
     * <code>optional string profilePicture = 4;</code>
     */
    boolean hasProfilePicture();
    /**
     * <code>optional string profilePicture = 4;</code>
     */
    java.lang.String getProfilePicture();
    /**
     * <code>optional string profilePicture = 4;</code>
     */
    com.google.protobuf.ByteString
        getProfilePictureBytes();

    // optional bytes profileKey = 5;
    /**
     * <code>optional bytes profileKey = 5;</code>
     */
    boolean hasProfileKey();
    /**
     * <code>optional bytes profileKey = 5;</code>
     */
    com.google.protobuf.ByteString getProfileKey();

    // repeated .signalservice.ConfigurationMessage.Contact contacts = 6;
    /**
     * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
     */
    java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact> 
        getContactsList();
    /**
     * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact getContacts(int index);
    /**
     * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
     */
    int getContactsCount();
    /**
     * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
     */
    java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ContactOrBuilder> 
        getContactsOrBuilderList();
    /**
     * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ContactOrBuilder getContactsOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code signalservice.ConfigurationMessage}
   */
  public static final class ConfigurationMessage extends
      com.google.protobuf.GeneratedMessage
      implements ConfigurationMessageOrBuilder {
    // Use ConfigurationMessage.newBuilder() to construct.
    private ConfigurationMessage(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ConfigurationMessage(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ConfigurationMessage defaultInstance;
    public static ConfigurationMessage getDefaultInstance() {
      return defaultInstance;
    }

    public ConfigurationMessage getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ConfigurationMessage(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                closedGroups_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup>();
                mutable_bitField0_ |= 0x00000001;
              }
              closedGroups_.add(input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.PARSER, extensionRegistry));
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                openGroups_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              openGroups_.add(input.readBytes());
              break;
            }
            case 26: {
              bitField0_ |= 0x00000001;
              displayName_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000002;
              profilePicture_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000004;
              profileKey_ = input.readBytes();
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                contacts_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact>();
                mutable_bitField0_ |= 0x00000020;
              }
              contacts_.add(input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          closedGroups_ = java.util.Collections.unmodifiableList(closedGroups_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          openGroups_ = new com.google.protobuf.UnmodifiableLazyStringList(openGroups_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          contacts_ = java.util.Collections.unmodifiableList(contacts_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Builder.class);
    }

    public static com.google.protobuf.Parser<ConfigurationMessage> PARSER =
        new com.google.protobuf.AbstractParser<ConfigurationMessage>() {
      public ConfigurationMessage parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ConfigurationMessage(input, extensionRegistry);
      }
    };

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

    public interface ClosedGroupOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // optional bytes publicKey = 1;
      /**
       * <code>optional bytes publicKey = 1;</code>
       */
      boolean hasPublicKey();
      /**
       * <code>optional bytes publicKey = 1;</code>
       */
      com.google.protobuf.ByteString getPublicKey();

      // optional string name = 2;
      /**
       * <code>optional string name = 2;</code>
       */
      boolean hasName();
      /**
       * <code>optional string name = 2;</code>
       */
      java.lang.String getName();
      /**
       * <code>optional string name = 2;</code>
       */
      com.google.protobuf.ByteString
          getNameBytes();

      // optional .signalservice.KeyPair encryptionKeyPair = 3;
      /**
       * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
       */
      boolean hasEncryptionKeyPair();
      /**
       * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair getEncryptionKeyPair();
      /**
       * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
       */
      org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPairOrBuilder getEncryptionKeyPairOrBuilder();

      // repeated bytes members = 4;
      /**
       * <code>repeated bytes members = 4;</code>
       */
      java.util.List<com.google.protobuf.ByteString> getMembersList();
      /**
       * <code>repeated bytes members = 4;</code>
       */
      int getMembersCount();
      /**
       * <code>repeated bytes members = 4;</code>
       */
      com.google.protobuf.ByteString getMembers(int index);

      // repeated bytes admins = 5;
      /**
       * <code>repeated bytes admins = 5;</code>
       */
      java.util.List<com.google.protobuf.ByteString> getAdminsList();
      /**
       * <code>repeated bytes admins = 5;</code>
       */
      int getAdminsCount();
      /**
       * <code>repeated bytes admins = 5;</code>
       */
      com.google.protobuf.ByteString getAdmins(int index);
    }
    /**
     * Protobuf type {@code signalservice.ConfigurationMessage.ClosedGroup}
     */
    public static final class ClosedGroup extends
        com.google.protobuf.GeneratedMessage
        implements ClosedGroupOrBuilder {
      // Use ClosedGroup.newBuilder() to construct.
      private ClosedGroup(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private ClosedGroup(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final ClosedGroup defaultInstance;
      public static ClosedGroup getDefaultInstance() {
        return defaultInstance;
      }

      public ClosedGroup getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private ClosedGroup(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                publicKey_ = input.readBytes();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                name_ = input.readBytes();
                break;
              }
              case 26: {
                org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder subBuilder = null;
                if (((bitField0_ & 0x00000004) == 0x00000004)) {
                  subBuilder = encryptionKeyPair_.toBuilder();
                }
                encryptionKeyPair_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(encryptionKeyPair_);
                  encryptionKeyPair_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000004;
                break;
              }
              case 34: {
                if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                  members_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
                  mutable_bitField0_ |= 0x00000008;
                }
                members_.add(input.readBytes());
                break;
              }
              case 42: {
                if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                  admins_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
                  mutable_bitField0_ |= 0x00000010;
                }
                admins_.add(input.readBytes());
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
            members_ = java.util.Collections.unmodifiableList(members_);
          }
          if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
            admins_ = java.util.Collections.unmodifiableList(admins_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_ClosedGroup_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_ClosedGroup_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.Builder.class);
      }

      public static com.google.protobuf.Parser<ClosedGroup> PARSER =
          new com.google.protobuf.AbstractParser<ClosedGroup>() {
        public ClosedGroup parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new ClosedGroup(input, extensionRegistry);
        }
      };

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

      private int bitField0_;
      // optional bytes publicKey = 1;
      public static final int PUBLICKEY_FIELD_NUMBER = 1;
      private com.google.protobuf.ByteString publicKey_;
      /**
       * <code>optional bytes publicKey = 1;</code>
       */
      public boolean hasPublicKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bytes publicKey = 1;</code>
       */
      public com.google.protobuf.ByteString getPublicKey() {
        return publicKey_;
      }

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

      // optional .signalservice.KeyPair encryptionKeyPair = 3;
      public static final int ENCRYPTIONKEYPAIR_FIELD_NUMBER = 3;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair encryptionKeyPair_;
      /**
       * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
       */
      public boolean hasEncryptionKeyPair() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair getEncryptionKeyPair() {
        return encryptionKeyPair_;
      }
      /**
       * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPairOrBuilder getEncryptionKeyPairOrBuilder() {
        return encryptionKeyPair_;
      }

      // repeated bytes members = 4;
      public static final int MEMBERS_FIELD_NUMBER = 4;
      private java.util.List<com.google.protobuf.ByteString> members_;
      /**
       * <code>repeated bytes members = 4;</code>
       */
      public java.util.List<com.google.protobuf.ByteString>
          getMembersList() {
        return members_;
      }
      /**
       * <code>repeated bytes members = 4;</code>
       */
      public int getMembersCount() {
        return members_.size();
      }
      /**
       * <code>repeated bytes members = 4;</code>
       */
      public com.google.protobuf.ByteString getMembers(int index) {
        return members_.get(index);
      }

      // repeated bytes admins = 5;
      public static final int ADMINS_FIELD_NUMBER = 5;
      private java.util.List<com.google.protobuf.ByteString> admins_;
      /**
       * <code>repeated bytes admins = 5;</code>
       */
      public java.util.List<com.google.protobuf.ByteString>
          getAdminsList() {
        return admins_;
      }
      /**
       * <code>repeated bytes admins = 5;</code>
       */
      public int getAdminsCount() {
        return admins_.size();
      }
      /**
       * <code>repeated bytes admins = 5;</code>
       */
      public com.google.protobuf.ByteString getAdmins(int index) {
        return admins_.get(index);
      }

      private void initFields() {
        publicKey_ = com.google.protobuf.ByteString.EMPTY;
        name_ = "";
        encryptionKeyPair_ = org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.getDefaultInstance();
        members_ = java.util.Collections.emptyList();
        admins_ = java.util.Collections.emptyList();
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        if (hasEncryptionKeyPair()) {
          if (!getEncryptionKeyPair().isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, publicKey_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, getNameBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeMessage(3, encryptionKeyPair_);
        }
        for (int i = 0; i < members_.size(); i++) {
          output.writeBytes(4, members_.get(i));
        }
        for (int i = 0; i < admins_.size(); i++) {
          output.writeBytes(5, admins_.get(i));
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, publicKey_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, getNameBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(3, encryptionKeyPair_);
        }
        {
          int dataSize = 0;
          for (int i = 0; i < members_.size(); i++) {
            dataSize += com.google.protobuf.CodedOutputStream
              .computeBytesSizeNoTag(members_.get(i));
          }
          size += dataSize;
          size += 1 * getMembersList().size();
        }
        {
          int dataSize = 0;
          for (int i = 0; i < admins_.size(); i++) {
            dataSize += com.google.protobuf.CodedOutputStream
              .computeBytesSizeNoTag(admins_.get(i));
          }
          size += dataSize;
          size += 1 * getAdminsList().size();
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code signalservice.ConfigurationMessage.ClosedGroup}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroupOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_ClosedGroup_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_ClosedGroup_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.Builder.class);
        }

        // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getEncryptionKeyPairFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          publicKey_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          name_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          if (encryptionKeyPairBuilder_ == null) {
            encryptionKeyPair_ = org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.getDefaultInstance();
          } else {
            encryptionKeyPairBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000004);
          members_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          admins_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_ClosedGroup_descriptor;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup getDefaultInstanceForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.getDefaultInstance();
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup build() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup buildPartial() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup result = new org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.publicKey_ = publicKey_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.name_ = name_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          if (encryptionKeyPairBuilder_ == null) {
            result.encryptionKeyPair_ = encryptionKeyPair_;
          } else {
            result.encryptionKeyPair_ = encryptionKeyPairBuilder_.build();
          }
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            members_ = java.util.Collections.unmodifiableList(members_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.members_ = members_;
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            admins_ = java.util.Collections.unmodifiableList(admins_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.admins_ = admins_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup) {
            return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup other) {
          if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.getDefaultInstance()) return this;
          if (other.hasPublicKey()) {
            setPublicKey(other.getPublicKey());
          }
          if (other.hasName()) {
            bitField0_ |= 0x00000002;
            name_ = other.name_;
            onChanged();
          }
          if (other.hasEncryptionKeyPair()) {
            mergeEncryptionKeyPair(other.getEncryptionKeyPair());
          }
          if (!other.members_.isEmpty()) {
            if (members_.isEmpty()) {
              members_ = other.members_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureMembersIsMutable();
              members_.addAll(other.members_);
            }
            onChanged();
          }
          if (!other.admins_.isEmpty()) {
            if (admins_.isEmpty()) {
              admins_ = other.admins_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureAdminsIsMutable();
              admins_.addAll(other.admins_);
            }
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          if (hasEncryptionKeyPair()) {
            if (!getEncryptionKeyPair().isInitialized()) {
              
              return false;
            }
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        // optional bytes publicKey = 1;
        private com.google.protobuf.ByteString publicKey_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>optional bytes publicKey = 1;</code>
         */
        public boolean hasPublicKey() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional bytes publicKey = 1;</code>
         */
        public com.google.protobuf.ByteString getPublicKey() {
          return publicKey_;
        }
        /**
         * <code>optional bytes publicKey = 1;</code>
         */
        public Builder setPublicKey(com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          publicKey_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional bytes publicKey = 1;</code>
         */
        public Builder clearPublicKey() {
          bitField0_ = (bitField0_ & ~0x00000001);
          publicKey_ = getDefaultInstance().getPublicKey();
          onChanged();
          return this;
        }

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

        // optional .signalservice.KeyPair encryptionKeyPair = 3;
        private org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair encryptionKeyPair_ = org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPairOrBuilder> encryptionKeyPairBuilder_;
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
         */
        public boolean hasEncryptionKeyPair() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair getEncryptionKeyPair() {
          if (encryptionKeyPairBuilder_ == null) {
            return encryptionKeyPair_;
          } else {
            return encryptionKeyPairBuilder_.getMessage();
          }
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
         */
        public Builder setEncryptionKeyPair(org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair value) {
          if (encryptionKeyPairBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            encryptionKeyPair_ = value;
            onChanged();
          } else {
            encryptionKeyPairBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000004;
          return this;
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
         */
        public Builder setEncryptionKeyPair(
            org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder builderForValue) {
          if (encryptionKeyPairBuilder_ == null) {
            encryptionKeyPair_ = builderForValue.build();
            onChanged();
          } else {
            encryptionKeyPairBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000004;
          return this;
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
         */
        public Builder mergeEncryptionKeyPair(org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair value) {
          if (encryptionKeyPairBuilder_ == null) {
            if (((bitField0_ & 0x00000004) == 0x00000004) &&
                encryptionKeyPair_ != org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.getDefaultInstance()) {
              encryptionKeyPair_ =
                org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.newBuilder(encryptionKeyPair_).mergeFrom(value).buildPartial();
            } else {
              encryptionKeyPair_ = value;
            }
            onChanged();
          } else {
            encryptionKeyPairBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000004;
          return this;
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
         */
        public Builder clearEncryptionKeyPair() {
          if (encryptionKeyPairBuilder_ == null) {
            encryptionKeyPair_ = org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.getDefaultInstance();
            onChanged();
          } else {
            encryptionKeyPairBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000004);
          return this;
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder getEncryptionKeyPairBuilder() {
          bitField0_ |= 0x00000004;
          onChanged();
          return getEncryptionKeyPairFieldBuilder().getBuilder();
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
         */
        public org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPairOrBuilder getEncryptionKeyPairOrBuilder() {
          if (encryptionKeyPairBuilder_ != null) {
            return encryptionKeyPairBuilder_.getMessageOrBuilder();
          } else {
            return encryptionKeyPair_;
          }
        }
        /**
         * <code>optional .signalservice.KeyPair encryptionKeyPair = 3;</code>
         */
        private com.google.protobuf.SingleFieldBuilder<
            org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPairOrBuilder> 
            getEncryptionKeyPairFieldBuilder() {
          if (encryptionKeyPairBuilder_ == null) {
            encryptionKeyPairBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPair.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.KeyPairOrBuilder>(
                    encryptionKeyPair_,
                    getParentForChildren(),
                    isClean());
            encryptionKeyPair_ = null;
          }
          return encryptionKeyPairBuilder_;
        }

        // repeated bytes members = 4;
        private java.util.List<com.google.protobuf.ByteString> members_ = java.util.Collections.emptyList();
        private void ensureMembersIsMutable() {
          if (!((bitField0_ & 0x00000008) == 0x00000008)) {
            members_ = new java.util.ArrayList<com.google.protobuf.ByteString>(members_);
            bitField0_ |= 0x00000008;
           }
        }
        /**
         * <code>repeated bytes members = 4;</code>
         */
        public java.util.List<com.google.protobuf.ByteString>
            getMembersList() {
          return java.util.Collections.unmodifiableList(members_);
        }
        /**
         * <code>repeated bytes members = 4;</code>
         */
        public int getMembersCount() {
          return members_.size();
        }
        /**
         * <code>repeated bytes members = 4;</code>
         */
        public com.google.protobuf.ByteString getMembers(int index) {
          return members_.get(index);
        }
        /**
         * <code>repeated bytes members = 4;</code>
         */
        public Builder setMembers(
            int index, com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureMembersIsMutable();
          members_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes members = 4;</code>
         */
        public Builder addMembers(com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureMembersIsMutable();
          members_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes members = 4;</code>
         */
        public Builder addAllMembers(
            java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
          ensureMembersIsMutable();
          super.addAll(values, members_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes members = 4;</code>
         */
        public Builder clearMembers() {
          members_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
          return this;
        }

        // repeated bytes admins = 5;
        private java.util.List<com.google.protobuf.ByteString> admins_ = java.util.Collections.emptyList();
        private void ensureAdminsIsMutable() {
          if (!((bitField0_ & 0x00000010) == 0x00000010)) {
            admins_ = new java.util.ArrayList<com.google.protobuf.ByteString>(admins_);
            bitField0_ |= 0x00000010;
           }
        }
        /**
         * <code>repeated bytes admins = 5;</code>
         */
        public java.util.List<com.google.protobuf.ByteString>
            getAdminsList() {
          return java.util.Collections.unmodifiableList(admins_);
        }
        /**
         * <code>repeated bytes admins = 5;</code>
         */
        public int getAdminsCount() {
          return admins_.size();
        }
        /**
         * <code>repeated bytes admins = 5;</code>
         */
        public com.google.protobuf.ByteString getAdmins(int index) {
          return admins_.get(index);
        }
        /**
         * <code>repeated bytes admins = 5;</code>
         */
        public Builder setAdmins(
            int index, com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureAdminsIsMutable();
          admins_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes admins = 5;</code>
         */
        public Builder addAdmins(com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureAdminsIsMutable();
          admins_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes admins = 5;</code>
         */
        public Builder addAllAdmins(
            java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
          ensureAdminsIsMutable();
          super.addAll(values, admins_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes admins = 5;</code>
         */
        public Builder clearAdmins() {
          admins_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:signalservice.ConfigurationMessage.ClosedGroup)
      }

      static {
        defaultInstance = new ClosedGroup(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:signalservice.ConfigurationMessage.ClosedGroup)
    }

    public interface ContactOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // required bytes publicKey = 1;
      /**
       * <code>required bytes publicKey = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      boolean hasPublicKey();
      /**
       * <code>required bytes publicKey = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      com.google.protobuf.ByteString getPublicKey();

      // required string name = 2;
      /**
       * <code>required string name = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      boolean hasName();
      /**
       * <code>required string name = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      java.lang.String getName();
      /**
       * <code>required string name = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      com.google.protobuf.ByteString
          getNameBytes();

      // optional string profilePicture = 3;
      /**
       * <code>optional string profilePicture = 3;</code>
       */
      boolean hasProfilePicture();
      /**
       * <code>optional string profilePicture = 3;</code>
       */
      java.lang.String getProfilePicture();
      /**
       * <code>optional string profilePicture = 3;</code>
       */
      com.google.protobuf.ByteString
          getProfilePictureBytes();

      // optional bytes profileKey = 4;
      /**
       * <code>optional bytes profileKey = 4;</code>
       */
      boolean hasProfileKey();
      /**
       * <code>optional bytes profileKey = 4;</code>
       */
      com.google.protobuf.ByteString getProfileKey();
    }
    /**
     * Protobuf type {@code signalservice.ConfigurationMessage.Contact}
     */
    public static final class Contact extends
        com.google.protobuf.GeneratedMessage
        implements ContactOrBuilder {
      // Use Contact.newBuilder() to construct.
      private Contact(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Contact(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final Contact defaultInstance;
      public static Contact getDefaultInstance() {
        return defaultInstance;
      }

      public Contact getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Contact(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                publicKey_ = input.readBytes();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                name_ = input.readBytes();
                break;
              }
              case 26: {
                bitField0_ |= 0x00000004;
                profilePicture_ = input.readBytes();
                break;
              }
              case 34: {
                bitField0_ |= 0x00000008;
                profileKey_ = input.readBytes();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_Contact_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_Contact_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.Builder.class);
      }

      public static com.google.protobuf.Parser<Contact> PARSER =
          new com.google.protobuf.AbstractParser<Contact>() {
        public Contact parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Contact(input, extensionRegistry);
        }
      };

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

      private int bitField0_;
      // required bytes publicKey = 1;
      public static final int PUBLICKEY_FIELD_NUMBER = 1;
      private com.google.protobuf.ByteString publicKey_;
      /**
       * <code>required bytes publicKey = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasPublicKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required bytes publicKey = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public com.google.protobuf.ByteString getPublicKey() {
        return publicKey_;
      }

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

      // optional string profilePicture = 3;
      public static final int PROFILEPICTURE_FIELD_NUMBER = 3;
      private java.lang.Object profilePicture_;
      /**
       * <code>optional string profilePicture = 3;</code>
       */
      public boolean hasProfilePicture() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string profilePicture = 3;</code>
       */
      public java.lang.String getProfilePicture() {
        java.lang.Object ref = profilePicture_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            profilePicture_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string profilePicture = 3;</code>
       */
      public com.google.protobuf.ByteString
          getProfilePictureBytes() {
        java.lang.Object ref = profilePicture_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          profilePicture_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // optional bytes profileKey = 4;
      public static final int PROFILEKEY_FIELD_NUMBER = 4;
      private com.google.protobuf.ByteString profileKey_;
      /**
       * <code>optional bytes profileKey = 4;</code>
       */
      public boolean hasProfileKey() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bytes profileKey = 4;</code>
       */
      public com.google.protobuf.ByteString getProfileKey() {
        return profileKey_;
      }

      private void initFields() {
        publicKey_ = com.google.protobuf.ByteString.EMPTY;
        name_ = "";
        profilePicture_ = "";
        profileKey_ = com.google.protobuf.ByteString.EMPTY;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        if (!hasPublicKey()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasName()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, publicKey_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, getNameBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeBytes(3, getProfilePictureBytes());
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          output.writeBytes(4, profileKey_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, publicKey_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, getNameBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(3, getProfilePictureBytes());
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(4, profileKey_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code signalservice.ConfigurationMessage.Contact}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ContactOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_Contact_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_Contact_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.Builder.class);
        }

        // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          publicKey_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          name_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          profilePicture_ = "";
          bitField0_ = (bitField0_ & ~0x00000004);
          profileKey_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000008);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_Contact_descriptor;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact getDefaultInstanceForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.getDefaultInstance();
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact build() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact buildPartial() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact result = new org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.publicKey_ = publicKey_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.name_ = name_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          result.profilePicture_ = profilePicture_;
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000008;
          }
          result.profileKey_ = profileKey_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact) {
            return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact other) {
          if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.getDefaultInstance()) return this;
          if (other.hasPublicKey()) {
            setPublicKey(other.getPublicKey());
          }
          if (other.hasName()) {
            bitField0_ |= 0x00000002;
            name_ = other.name_;
            onChanged();
          }
          if (other.hasProfilePicture()) {
            bitField0_ |= 0x00000004;
            profilePicture_ = other.profilePicture_;
            onChanged();
          }
          if (other.hasProfileKey()) {
            setProfileKey(other.getProfileKey());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          if (!hasPublicKey()) {
            
            return false;
          }
          if (!hasName()) {
            
            return false;
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        // required bytes publicKey = 1;
        private com.google.protobuf.ByteString publicKey_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>required bytes publicKey = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public boolean hasPublicKey() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required bytes publicKey = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public com.google.protobuf.ByteString getPublicKey() {
          return publicKey_;
        }
        /**
         * <code>required bytes publicKey = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public Builder setPublicKey(com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          publicKey_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required bytes publicKey = 1;</code>
         *
         * <pre>
         * @required
         * </pre>
         */
        public Builder clearPublicKey() {
          bitField0_ = (bitField0_ & ~0x00000001);
          publicKey_ = getDefaultInstance().getPublicKey();
          onChanged();
          return this;
        }

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

        // optional string profilePicture = 3;
        private java.lang.Object profilePicture_ = "";
        /**
         * <code>optional string profilePicture = 3;</code>
         */
        public boolean hasProfilePicture() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional string profilePicture = 3;</code>
         */
        public java.lang.String getProfilePicture() {
          java.lang.Object ref = profilePicture_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            profilePicture_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string profilePicture = 3;</code>
         */
        public com.google.protobuf.ByteString
            getProfilePictureBytes() {
          java.lang.Object ref = profilePicture_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            profilePicture_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string profilePicture = 3;</code>
         */
        public Builder setProfilePicture(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
          profilePicture_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string profilePicture = 3;</code>
         */
        public Builder clearProfilePicture() {
          bitField0_ = (bitField0_ & ~0x00000004);
          profilePicture_ = getDefaultInstance().getProfilePicture();
          onChanged();
          return this;
        }
        /**
         * <code>optional string profilePicture = 3;</code>
         */
        public Builder setProfilePictureBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
          profilePicture_ = value;
          onChanged();
          return this;
        }

        // optional bytes profileKey = 4;
        private com.google.protobuf.ByteString profileKey_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>optional bytes profileKey = 4;</code>
         */
        public boolean hasProfileKey() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional bytes profileKey = 4;</code>
         */
        public com.google.protobuf.ByteString getProfileKey() {
          return profileKey_;
        }
        /**
         * <code>optional bytes profileKey = 4;</code>
         */
        public Builder setProfileKey(com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
          profileKey_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional bytes profileKey = 4;</code>
         */
        public Builder clearProfileKey() {
          bitField0_ = (bitField0_ & ~0x00000008);
          profileKey_ = getDefaultInstance().getProfileKey();
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:signalservice.ConfigurationMessage.Contact)
      }

      static {
        defaultInstance = new Contact(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:signalservice.ConfigurationMessage.Contact)
    }

    private int bitField0_;
    // repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;
    public static final int CLOSEDGROUPS_FIELD_NUMBER = 1;
    private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup> closedGroups_;
    /**
     * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
     */
    public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup> getClosedGroupsList() {
      return closedGroups_;
    }
    /**
     * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
     */
    public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroupOrBuilder> 
        getClosedGroupsOrBuilderList() {
      return closedGroups_;
    }
    /**
     * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
     */
    public int getClosedGroupsCount() {
      return closedGroups_.size();
    }
    /**
     * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup getClosedGroups(int index) {
      return closedGroups_.get(index);
    }
    /**
     * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroupOrBuilder getClosedGroupsOrBuilder(
        int index) {
      return closedGroups_.get(index);
    }

    // repeated string openGroups = 2;
    public static final int OPENGROUPS_FIELD_NUMBER = 2;
    private com.google.protobuf.LazyStringList openGroups_;
    /**
     * <code>repeated string openGroups = 2;</code>
     */
    public java.util.List<java.lang.String>
        getOpenGroupsList() {
      return openGroups_;
    }
    /**
     * <code>repeated string openGroups = 2;</code>
     */
    public int getOpenGroupsCount() {
      return openGroups_.size();
    }
    /**
     * <code>repeated string openGroups = 2;</code>
     */
    public java.lang.String getOpenGroups(int index) {
      return openGroups_.get(index);
    }
    /**
     * <code>repeated string openGroups = 2;</code>
     */
    public com.google.protobuf.ByteString
        getOpenGroupsBytes(int index) {
      return openGroups_.getByteString(index);
    }

    // optional string displayName = 3;
    public static final int DISPLAYNAME_FIELD_NUMBER = 3;
    private java.lang.Object displayName_;
    /**
     * <code>optional string displayName = 3;</code>
     */
    public boolean hasDisplayName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string displayName = 3;</code>
     */
    public java.lang.String getDisplayName() {
      java.lang.Object ref = displayName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          displayName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string displayName = 3;</code>
     */
    public com.google.protobuf.ByteString
        getDisplayNameBytes() {
      java.lang.Object ref = displayName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        displayName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string profilePicture = 4;
    public static final int PROFILEPICTURE_FIELD_NUMBER = 4;
    private java.lang.Object profilePicture_;
    /**
     * <code>optional string profilePicture = 4;</code>
     */
    public boolean hasProfilePicture() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string profilePicture = 4;</code>
     */
    public java.lang.String getProfilePicture() {
      java.lang.Object ref = profilePicture_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          profilePicture_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string profilePicture = 4;</code>
     */
    public com.google.protobuf.ByteString
        getProfilePictureBytes() {
      java.lang.Object ref = profilePicture_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        profilePicture_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bytes profileKey = 5;
    public static final int PROFILEKEY_FIELD_NUMBER = 5;
    private com.google.protobuf.ByteString profileKey_;
    /**
     * <code>optional bytes profileKey = 5;</code>
     */
    public boolean hasProfileKey() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bytes profileKey = 5;</code>
     */
    public com.google.protobuf.ByteString getProfileKey() {
      return profileKey_;
    }

    // repeated .signalservice.ConfigurationMessage.Contact contacts = 6;
    public static final int CONTACTS_FIELD_NUMBER = 6;
    private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact> contacts_;
    /**
     * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
     */
    public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact> getContactsList() {
      return contacts_;
    }
    /**
     * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
     */
    public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ContactOrBuilder> 
        getContactsOrBuilderList() {
      return contacts_;
    }
    /**
     * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
     */
    public int getContactsCount() {
      return contacts_.size();
    }
    /**
     * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact getContacts(int index) {
      return contacts_.get(index);
    }
    /**
     * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ContactOrBuilder getContactsOrBuilder(
        int index) {
      return contacts_.get(index);
    }

    private void initFields() {
      closedGroups_ = java.util.Collections.emptyList();
      openGroups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      displayName_ = "";
      profilePicture_ = "";
      profileKey_ = com.google.protobuf.ByteString.EMPTY;
      contacts_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      for (int i = 0; i < getClosedGroupsCount(); i++) {
        if (!getClosedGroups(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getContactsCount(); i++) {
        if (!getContacts(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < closedGroups_.size(); i++) {
        output.writeMessage(1, closedGroups_.get(i));
      }
      for (int i = 0; i < openGroups_.size(); i++) {
        output.writeBytes(2, openGroups_.getByteString(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(3, getDisplayNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(4, getProfilePictureBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(5, profileKey_);
      }
      for (int i = 0; i < contacts_.size(); i++) {
        output.writeMessage(6, contacts_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < closedGroups_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, closedGroups_.get(i));
      }
      {
        int dataSize = 0;
        for (int i = 0; i < openGroups_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(openGroups_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getOpenGroupsList().size();
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getDisplayNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getProfilePictureBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, profileKey_);
      }
      for (int i = 0; i < contacts_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, contacts_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code signalservice.ConfigurationMessage}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Builder.class);
      }

      // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getClosedGroupsFieldBuilder();
          getContactsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (closedGroupsBuilder_ == null) {
          closedGroups_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          closedGroupsBuilder_.clear();
        }
        openGroups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        displayName_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        profilePicture_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        profileKey_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        if (contactsBuilder_ == null) {
          contacts_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          contactsBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ConfigurationMessage_descriptor;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage getDefaultInstanceForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.getDefaultInstance();
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage build() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage buildPartial() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage result = new org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (closedGroupsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            closedGroups_ = java.util.Collections.unmodifiableList(closedGroups_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.closedGroups_ = closedGroups_;
        } else {
          result.closedGroups_ = closedGroupsBuilder_.build();
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          openGroups_ = new com.google.protobuf.UnmodifiableLazyStringList(
              openGroups_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.openGroups_ = openGroups_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000001;
        }
        result.displayName_ = displayName_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000002;
        }
        result.profilePicture_ = profilePicture_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000004;
        }
        result.profileKey_ = profileKey_;
        if (contactsBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            contacts_ = java.util.Collections.unmodifiableList(contacts_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.contacts_ = contacts_;
        } else {
          result.contacts_ = contactsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage) {
          return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage other) {
        if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.getDefaultInstance()) return this;
        if (closedGroupsBuilder_ == null) {
          if (!other.closedGroups_.isEmpty()) {
            if (closedGroups_.isEmpty()) {
              closedGroups_ = other.closedGroups_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureClosedGroupsIsMutable();
              closedGroups_.addAll(other.closedGroups_);
            }
            onChanged();
          }
        } else {
          if (!other.closedGroups_.isEmpty()) {
            if (closedGroupsBuilder_.isEmpty()) {
              closedGroupsBuilder_.dispose();
              closedGroupsBuilder_ = null;
              closedGroups_ = other.closedGroups_;
              bitField0_ = (bitField0_ & ~0x00000001);
              closedGroupsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getClosedGroupsFieldBuilder() : null;
            } else {
              closedGroupsBuilder_.addAllMessages(other.closedGroups_);
            }
          }
        }
        if (!other.openGroups_.isEmpty()) {
          if (openGroups_.isEmpty()) {
            openGroups_ = other.openGroups_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureOpenGroupsIsMutable();
            openGroups_.addAll(other.openGroups_);
          }
          onChanged();
        }
        if (other.hasDisplayName()) {
          bitField0_ |= 0x00000004;
          displayName_ = other.displayName_;
          onChanged();
        }
        if (other.hasProfilePicture()) {
          bitField0_ |= 0x00000008;
          profilePicture_ = other.profilePicture_;
          onChanged();
        }
        if (other.hasProfileKey()) {
          setProfileKey(other.getProfileKey());
        }
        if (contactsBuilder_ == null) {
          if (!other.contacts_.isEmpty()) {
            if (contacts_.isEmpty()) {
              contacts_ = other.contacts_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureContactsIsMutable();
              contacts_.addAll(other.contacts_);
            }
            onChanged();
          }
        } else {
          if (!other.contacts_.isEmpty()) {
            if (contactsBuilder_.isEmpty()) {
              contactsBuilder_.dispose();
              contactsBuilder_ = null;
              contacts_ = other.contacts_;
              bitField0_ = (bitField0_ & ~0x00000020);
              contactsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getContactsFieldBuilder() : null;
            } else {
              contactsBuilder_.addAllMessages(other.contacts_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getClosedGroupsCount(); i++) {
          if (!getClosedGroups(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getContactsCount(); i++) {
          if (!getContacts(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;
      private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup> closedGroups_ =
        java.util.Collections.emptyList();
      private void ensureClosedGroupsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          closedGroups_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup>(closedGroups_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroupOrBuilder> closedGroupsBuilder_;

      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup> getClosedGroupsList() {
        if (closedGroupsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(closedGroups_);
        } else {
          return closedGroupsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public int getClosedGroupsCount() {
        if (closedGroupsBuilder_ == null) {
          return closedGroups_.size();
        } else {
          return closedGroupsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup getClosedGroups(int index) {
        if (closedGroupsBuilder_ == null) {
          return closedGroups_.get(index);
        } else {
          return closedGroupsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public Builder setClosedGroups(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup value) {
        if (closedGroupsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureClosedGroupsIsMutable();
          closedGroups_.set(index, value);
          onChanged();
        } else {
          closedGroupsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public Builder setClosedGroups(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.Builder builderForValue) {
        if (closedGroupsBuilder_ == null) {
          ensureClosedGroupsIsMutable();
          closedGroups_.set(index, builderForValue.build());
          onChanged();
        } else {
          closedGroupsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public Builder addClosedGroups(org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup value) {
        if (closedGroupsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureClosedGroupsIsMutable();
          closedGroups_.add(value);
          onChanged();
        } else {
          closedGroupsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public Builder addClosedGroups(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup value) {
        if (closedGroupsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureClosedGroupsIsMutable();
          closedGroups_.add(index, value);
          onChanged();
        } else {
          closedGroupsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public Builder addClosedGroups(
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.Builder builderForValue) {
        if (closedGroupsBuilder_ == null) {
          ensureClosedGroupsIsMutable();
          closedGroups_.add(builderForValue.build());
          onChanged();
        } else {
          closedGroupsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public Builder addClosedGroups(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.Builder builderForValue) {
        if (closedGroupsBuilder_ == null) {
          ensureClosedGroupsIsMutable();
          closedGroups_.add(index, builderForValue.build());
          onChanged();
        } else {
          closedGroupsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public Builder addAllClosedGroups(
          java.lang.Iterable<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup> values) {
        if (closedGroupsBuilder_ == null) {
          ensureClosedGroupsIsMutable();
          super.addAll(values, closedGroups_);
          onChanged();
        } else {
          closedGroupsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public Builder clearClosedGroups() {
        if (closedGroupsBuilder_ == null) {
          closedGroups_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          closedGroupsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public Builder removeClosedGroups(int index) {
        if (closedGroupsBuilder_ == null) {
          ensureClosedGroupsIsMutable();
          closedGroups_.remove(index);
          onChanged();
        } else {
          closedGroupsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.Builder getClosedGroupsBuilder(
          int index) {
        return getClosedGroupsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroupOrBuilder getClosedGroupsOrBuilder(
          int index) {
        if (closedGroupsBuilder_ == null) {
          return closedGroups_.get(index);  } else {
          return closedGroupsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroupOrBuilder> 
           getClosedGroupsOrBuilderList() {
        if (closedGroupsBuilder_ != null) {
          return closedGroupsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(closedGroups_);
        }
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.Builder addClosedGroupsBuilder() {
        return getClosedGroupsFieldBuilder().addBuilder(
            org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.getDefaultInstance());
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.Builder addClosedGroupsBuilder(
          int index) {
        return getClosedGroupsFieldBuilder().addBuilder(
            index, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.getDefaultInstance());
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.ClosedGroup closedGroups = 1;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.Builder> 
           getClosedGroupsBuilderList() {
        return getClosedGroupsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroupOrBuilder> 
          getClosedGroupsFieldBuilder() {
        if (closedGroupsBuilder_ == null) {
          closedGroupsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroup.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ClosedGroupOrBuilder>(
                  closedGroups_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          closedGroups_ = null;
        }
        return closedGroupsBuilder_;
      }

      // repeated string openGroups = 2;
      private com.google.protobuf.LazyStringList openGroups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureOpenGroupsIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          openGroups_ = new com.google.protobuf.LazyStringArrayList(openGroups_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated string openGroups = 2;</code>
       */
      public java.util.List<java.lang.String>
          getOpenGroupsList() {
        return java.util.Collections.unmodifiableList(openGroups_);
      }
      /**
       * <code>repeated string openGroups = 2;</code>
       */
      public int getOpenGroupsCount() {
        return openGroups_.size();
      }
      /**
       * <code>repeated string openGroups = 2;</code>
       */
      public java.lang.String getOpenGroups(int index) {
        return openGroups_.get(index);
      }
      /**
       * <code>repeated string openGroups = 2;</code>
       */
      public com.google.protobuf.ByteString
          getOpenGroupsBytes(int index) {
        return openGroups_.getByteString(index);
      }
      /**
       * <code>repeated string openGroups = 2;</code>
       */
      public Builder setOpenGroups(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOpenGroupsIsMutable();
        openGroups_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string openGroups = 2;</code>
       */
      public Builder addOpenGroups(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOpenGroupsIsMutable();
        openGroups_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string openGroups = 2;</code>
       */
      public Builder addAllOpenGroups(
          java.lang.Iterable<java.lang.String> values) {
        ensureOpenGroupsIsMutable();
        super.addAll(values, openGroups_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string openGroups = 2;</code>
       */
      public Builder clearOpenGroups() {
        openGroups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string openGroups = 2;</code>
       */
      public Builder addOpenGroupsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOpenGroupsIsMutable();
        openGroups_.add(value);
        onChanged();
        return this;
      }

      // optional string displayName = 3;
      private java.lang.Object displayName_ = "";
      /**
       * <code>optional string displayName = 3;</code>
       */
      public boolean hasDisplayName() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string displayName = 3;</code>
       */
      public java.lang.String getDisplayName() {
        java.lang.Object ref = displayName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          displayName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string displayName = 3;</code>
       */
      public com.google.protobuf.ByteString
          getDisplayNameBytes() {
        java.lang.Object ref = displayName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          displayName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string displayName = 3;</code>
       */
      public Builder setDisplayName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        displayName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string displayName = 3;</code>
       */
      public Builder clearDisplayName() {
        bitField0_ = (bitField0_ & ~0x00000004);
        displayName_ = getDefaultInstance().getDisplayName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string displayName = 3;</code>
       */
      public Builder setDisplayNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        displayName_ = value;
        onChanged();
        return this;
      }

      // optional string profilePicture = 4;
      private java.lang.Object profilePicture_ = "";
      /**
       * <code>optional string profilePicture = 4;</code>
       */
      public boolean hasProfilePicture() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string profilePicture = 4;</code>
       */
      public java.lang.String getProfilePicture() {
        java.lang.Object ref = profilePicture_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          profilePicture_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string profilePicture = 4;</code>
       */
      public com.google.protobuf.ByteString
          getProfilePictureBytes() {
        java.lang.Object ref = profilePicture_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          profilePicture_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string profilePicture = 4;</code>
       */
      public Builder setProfilePicture(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        profilePicture_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string profilePicture = 4;</code>
       */
      public Builder clearProfilePicture() {
        bitField0_ = (bitField0_ & ~0x00000008);
        profilePicture_ = getDefaultInstance().getProfilePicture();
        onChanged();
        return this;
      }
      /**
       * <code>optional string profilePicture = 4;</code>
       */
      public Builder setProfilePictureBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        profilePicture_ = value;
        onChanged();
        return this;
      }

      // optional bytes profileKey = 5;
      private com.google.protobuf.ByteString profileKey_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes profileKey = 5;</code>
       */
      public boolean hasProfileKey() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bytes profileKey = 5;</code>
       */
      public com.google.protobuf.ByteString getProfileKey() {
        return profileKey_;
      }
      /**
       * <code>optional bytes profileKey = 5;</code>
       */
      public Builder setProfileKey(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        profileKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes profileKey = 5;</code>
       */
      public Builder clearProfileKey() {
        bitField0_ = (bitField0_ & ~0x00000010);
        profileKey_ = getDefaultInstance().getProfileKey();
        onChanged();
        return this;
      }

      // repeated .signalservice.ConfigurationMessage.Contact contacts = 6;
      private java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact> contacts_ =
        java.util.Collections.emptyList();
      private void ensureContactsIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          contacts_ = new java.util.ArrayList<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact>(contacts_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ContactOrBuilder> contactsBuilder_;

      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact> getContactsList() {
        if (contactsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(contacts_);
        } else {
          return contactsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public int getContactsCount() {
        if (contactsBuilder_ == null) {
          return contacts_.size();
        } else {
          return contactsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact getContacts(int index) {
        if (contactsBuilder_ == null) {
          return contacts_.get(index);
        } else {
          return contactsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public Builder setContacts(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact value) {
        if (contactsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureContactsIsMutable();
          contacts_.set(index, value);
          onChanged();
        } else {
          contactsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public Builder setContacts(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.Builder builderForValue) {
        if (contactsBuilder_ == null) {
          ensureContactsIsMutable();
          contacts_.set(index, builderForValue.build());
          onChanged();
        } else {
          contactsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public Builder addContacts(org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact value) {
        if (contactsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureContactsIsMutable();
          contacts_.add(value);
          onChanged();
        } else {
          contactsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public Builder addContacts(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact value) {
        if (contactsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureContactsIsMutable();
          contacts_.add(index, value);
          onChanged();
        } else {
          contactsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public Builder addContacts(
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.Builder builderForValue) {
        if (contactsBuilder_ == null) {
          ensureContactsIsMutable();
          contacts_.add(builderForValue.build());
          onChanged();
        } else {
          contactsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public Builder addContacts(
          int index, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.Builder builderForValue) {
        if (contactsBuilder_ == null) {
          ensureContactsIsMutable();
          contacts_.add(index, builderForValue.build());
          onChanged();
        } else {
          contactsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public Builder addAllContacts(
          java.lang.Iterable<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact> values) {
        if (contactsBuilder_ == null) {
          ensureContactsIsMutable();
          super.addAll(values, contacts_);
          onChanged();
        } else {
          contactsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public Builder clearContacts() {
        if (contactsBuilder_ == null) {
          contacts_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          contactsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public Builder removeContacts(int index) {
        if (contactsBuilder_ == null) {
          ensureContactsIsMutable();
          contacts_.remove(index);
          onChanged();
        } else {
          contactsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.Builder getContactsBuilder(
          int index) {
        return getContactsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ContactOrBuilder getContactsOrBuilder(
          int index) {
        if (contactsBuilder_ == null) {
          return contacts_.get(index);  } else {
          return contactsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public java.util.List<? extends org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ContactOrBuilder> 
           getContactsOrBuilderList() {
        if (contactsBuilder_ != null) {
          return contactsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(contacts_);
        }
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.Builder addContactsBuilder() {
        return getContactsFieldBuilder().addBuilder(
            org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.getDefaultInstance());
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.Builder addContactsBuilder(
          int index) {
        return getContactsFieldBuilder().addBuilder(
            index, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.getDefaultInstance());
      }
      /**
       * <code>repeated .signalservice.ConfigurationMessage.Contact contacts = 6;</code>
       */
      public java.util.List<org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.Builder> 
           getContactsBuilderList() {
        return getContactsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ContactOrBuilder> 
          getContactsFieldBuilder() {
        if (contactsBuilder_ == null) {
          contactsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.Contact.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ConfigurationMessage.ContactOrBuilder>(
                  contacts_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          contacts_ = null;
        }
        return contactsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:signalservice.ConfigurationMessage)
    }

    static {
      defaultInstance = new ConfigurationMessage(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:signalservice.ConfigurationMessage)
  }

  public interface ReceiptMessageOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .signalservice.ReceiptMessage.Type type = 1;
    /**
     * <code>optional .signalservice.ReceiptMessage.Type type = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasType();
    /**
     * <code>optional .signalservice.ReceiptMessage.Type type = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Type getType();

    // repeated uint64 timestamp = 2;
    /**
     * <code>repeated uint64 timestamp = 2;</code>
     */
    java.util.List<java.lang.Long> getTimestampList();
    /**
     * <code>repeated uint64 timestamp = 2;</code>
     */
    int getTimestampCount();
    /**
     * <code>repeated uint64 timestamp = 2;</code>
     */
    long getTimestamp(int index);
  }
  /**
   * Protobuf type {@code signalservice.ReceiptMessage}
   */
  public static final class ReceiptMessage extends
      com.google.protobuf.GeneratedMessage
      implements ReceiptMessageOrBuilder {
    // Use ReceiptMessage.newBuilder() to construct.
    private ReceiptMessage(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ReceiptMessage(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ReceiptMessage defaultInstance;
    public static ReceiptMessage getDefaultInstance() {
      return defaultInstance;
    }

    public ReceiptMessage getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ReceiptMessage(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Type value = org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                type_ = value;
              }
              break;
            }
            case 16: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                timestamp_ = new java.util.ArrayList<java.lang.Long>();
                mutable_bitField0_ |= 0x00000002;
              }
              timestamp_.add(input.readUInt64());
              break;
            }
            case 18: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
                timestamp_ = new java.util.ArrayList<java.lang.Long>();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                timestamp_.add(input.readUInt64());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          timestamp_ = java.util.Collections.unmodifiableList(timestamp_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ReceiptMessage_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ReceiptMessage_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Builder.class);
    }

    public static com.google.protobuf.Parser<ReceiptMessage> PARSER =
        new com.google.protobuf.AbstractParser<ReceiptMessage>() {
      public ReceiptMessage parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ReceiptMessage(input, extensionRegistry);
      }
    };

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

    /**
     * Protobuf enum {@code signalservice.ReceiptMessage.Type}
     */
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>DELIVERY = 0;</code>
       */
      DELIVERY(0, 0),
      /**
       * <code>READ = 1;</code>
       */
      READ(1, 1),
      ;

      /**
       * <code>DELIVERY = 0;</code>
       */
      public static final int DELIVERY_VALUE = 0;
      /**
       * <code>READ = 1;</code>
       */
      public static final int READ_VALUE = 1;


      public final int getNumber() { return value; }

      public static Type valueOf(int value) {
        switch (value) {
          case 0: return DELIVERY;
          case 1: return READ;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.getDescriptor().getEnumTypes().get(0);
      }

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

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

      private final int index;
      private final int value;

      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:signalservice.ReceiptMessage.Type)
    }

    private int bitField0_;
    // optional .signalservice.ReceiptMessage.Type type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Type type_;
    /**
     * <code>optional .signalservice.ReceiptMessage.Type type = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .signalservice.ReceiptMessage.Type type = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Type getType() {
      return type_;
    }

    // repeated uint64 timestamp = 2;
    public static final int TIMESTAMP_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Long> timestamp_;
    /**
     * <code>repeated uint64 timestamp = 2;</code>
     */
    public java.util.List<java.lang.Long>
        getTimestampList() {
      return timestamp_;
    }
    /**
     * <code>repeated uint64 timestamp = 2;</code>
     */
    public int getTimestampCount() {
      return timestamp_.size();
    }
    /**
     * <code>repeated uint64 timestamp = 2;</code>
     */
    public long getTimestamp(int index) {
      return timestamp_.get(index);
    }

    private void initFields() {
      type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Type.DELIVERY;
      timestamp_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, type_.getNumber());
      }
      for (int i = 0; i < timestamp_.size(); i++) {
        output.writeUInt64(2, timestamp_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, type_.getNumber());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < timestamp_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt64SizeNoTag(timestamp_.get(i));
        }
        size += dataSize;
        size += 1 * getTimestampList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code signalservice.ReceiptMessage}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ReceiptMessage_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ReceiptMessage_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Builder.class);
      }

      // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Type.DELIVERY;
        bitField0_ = (bitField0_ & ~0x00000001);
        timestamp_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ReceiptMessage_descriptor;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage getDefaultInstanceForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.getDefaultInstance();
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage build() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage buildPartial() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage result = new org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          timestamp_ = java.util.Collections.unmodifiableList(timestamp_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.timestamp_ = timestamp_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage) {
          return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage other) {
        if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (!other.timestamp_.isEmpty()) {
          if (timestamp_.isEmpty()) {
            timestamp_ = other.timestamp_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureTimestampIsMutable();
            timestamp_.addAll(other.timestamp_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .signalservice.ReceiptMessage.Type type = 1;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Type type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Type.DELIVERY;
      /**
       * <code>optional .signalservice.ReceiptMessage.Type type = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .signalservice.ReceiptMessage.Type type = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Type getType() {
        return type_;
      }
      /**
       * <code>optional .signalservice.ReceiptMessage.Type type = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setType(org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .signalservice.ReceiptMessage.Type type = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ReceiptMessage.Type.DELIVERY;
        onChanged();
        return this;
      }

      // repeated uint64 timestamp = 2;
      private java.util.List<java.lang.Long> timestamp_ = java.util.Collections.emptyList();
      private void ensureTimestampIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          timestamp_ = new java.util.ArrayList<java.lang.Long>(timestamp_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated uint64 timestamp = 2;</code>
       */
      public java.util.List<java.lang.Long>
          getTimestampList() {
        return java.util.Collections.unmodifiableList(timestamp_);
      }
      /**
       * <code>repeated uint64 timestamp = 2;</code>
       */
      public int getTimestampCount() {
        return timestamp_.size();
      }
      /**
       * <code>repeated uint64 timestamp = 2;</code>
       */
      public long getTimestamp(int index) {
        return timestamp_.get(index);
      }
      /**
       * <code>repeated uint64 timestamp = 2;</code>
       */
      public Builder setTimestamp(
          int index, long value) {
        ensureTimestampIsMutable();
        timestamp_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint64 timestamp = 2;</code>
       */
      public Builder addTimestamp(long value) {
        ensureTimestampIsMutable();
        timestamp_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint64 timestamp = 2;</code>
       */
      public Builder addAllTimestamp(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureTimestampIsMutable();
        super.addAll(values, timestamp_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint64 timestamp = 2;</code>
       */
      public Builder clearTimestamp() {
        timestamp_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:signalservice.ReceiptMessage)
    }

    static {
      defaultInstance = new ReceiptMessage(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:signalservice.ReceiptMessage)
  }

  public interface AttachmentPointerOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional fixed64 id = 1;
    /**
     * <code>optional fixed64 id = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasId();
    /**
     * <code>optional fixed64 id = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    long getId();

    // optional string contentType = 2;
    /**
     * <code>optional string contentType = 2;</code>
     */
    boolean hasContentType();
    /**
     * <code>optional string contentType = 2;</code>
     */
    java.lang.String getContentType();
    /**
     * <code>optional string contentType = 2;</code>
     */
    com.google.protobuf.ByteString
        getContentTypeBytes();

    // optional bytes key = 3;
    /**
     * <code>optional bytes key = 3;</code>
     */
    boolean hasKey();
    /**
     * <code>optional bytes key = 3;</code>
     */
    com.google.protobuf.ByteString getKey();

    // optional uint32 size = 4;
    /**
     * <code>optional uint32 size = 4;</code>
     */
    boolean hasSize();
    /**
     * <code>optional uint32 size = 4;</code>
     */
    int getSize();

    // optional bytes thumbnail = 5;
    /**
     * <code>optional bytes thumbnail = 5;</code>
     */
    boolean hasThumbnail();
    /**
     * <code>optional bytes thumbnail = 5;</code>
     */
    com.google.protobuf.ByteString getThumbnail();

    // optional bytes digest = 6;
    /**
     * <code>optional bytes digest = 6;</code>
     */
    boolean hasDigest();
    /**
     * <code>optional bytes digest = 6;</code>
     */
    com.google.protobuf.ByteString getDigest();

    // optional string fileName = 7;
    /**
     * <code>optional string fileName = 7;</code>
     */
    boolean hasFileName();
    /**
     * <code>optional string fileName = 7;</code>
     */
    java.lang.String getFileName();
    /**
     * <code>optional string fileName = 7;</code>
     */
    com.google.protobuf.ByteString
        getFileNameBytes();

    // optional uint32 flags = 8;
    /**
     * <code>optional uint32 flags = 8;</code>
     */
    boolean hasFlags();
    /**
     * <code>optional uint32 flags = 8;</code>
     */
    int getFlags();

    // optional uint32 width = 9;
    /**
     * <code>optional uint32 width = 9;</code>
     */
    boolean hasWidth();
    /**
     * <code>optional uint32 width = 9;</code>
     */
    int getWidth();

    // optional uint32 height = 10;
    /**
     * <code>optional uint32 height = 10;</code>
     */
    boolean hasHeight();
    /**
     * <code>optional uint32 height = 10;</code>
     */
    int getHeight();

    // optional string caption = 11;
    /**
     * <code>optional string caption = 11;</code>
     */
    boolean hasCaption();
    /**
     * <code>optional string caption = 11;</code>
     */
    java.lang.String getCaption();
    /**
     * <code>optional string caption = 11;</code>
     */
    com.google.protobuf.ByteString
        getCaptionBytes();

    // optional string url = 101;
    /**
     * <code>optional string url = 101;</code>
     */
    boolean hasUrl();
    /**
     * <code>optional string url = 101;</code>
     */
    java.lang.String getUrl();
    /**
     * <code>optional string url = 101;</code>
     */
    com.google.protobuf.ByteString
        getUrlBytes();
  }
  /**
   * Protobuf type {@code signalservice.AttachmentPointer}
   */
  public static final class AttachmentPointer extends
      com.google.protobuf.GeneratedMessage
      implements AttachmentPointerOrBuilder {
    // Use AttachmentPointer.newBuilder() to construct.
    private AttachmentPointer(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AttachmentPointer(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AttachmentPointer defaultInstance;
    public static AttachmentPointer getDefaultInstance() {
      return defaultInstance;
    }

    public AttachmentPointer getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AttachmentPointer(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 9: {
              bitField0_ |= 0x00000001;
              id_ = input.readFixed64();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              contentType_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              key_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              size_ = input.readUInt32();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              thumbnail_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000020;
              digest_ = input.readBytes();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000040;
              fileName_ = input.readBytes();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000080;
              flags_ = input.readUInt32();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000100;
              width_ = input.readUInt32();
              break;
            }
            case 80: {
              bitField0_ |= 0x00000200;
              height_ = input.readUInt32();
              break;
            }
            case 90: {
              bitField0_ |= 0x00000400;
              caption_ = input.readBytes();
              break;
            }
            case 810: {
              bitField0_ |= 0x00000800;
              url_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_AttachmentPointer_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_AttachmentPointer_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.class, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder.class);
    }

    public static com.google.protobuf.Parser<AttachmentPointer> PARSER =
        new com.google.protobuf.AbstractParser<AttachmentPointer>() {
      public AttachmentPointer parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AttachmentPointer(input, extensionRegistry);
      }
    };

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

    /**
     * Protobuf enum {@code signalservice.AttachmentPointer.Flags}
     */
    public enum Flags
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>VOICE_MESSAGE = 1;</code>
       */
      VOICE_MESSAGE(0, 1),
      ;

      /**
       * <code>VOICE_MESSAGE = 1;</code>
       */
      public static final int VOICE_MESSAGE_VALUE = 1;


      public final int getNumber() { return value; }

      public static Flags valueOf(int value) {
        switch (value) {
          case 1: return VOICE_MESSAGE;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDescriptor().getEnumTypes().get(0);
      }

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

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

      private final int index;
      private final int value;

      private Flags(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:signalservice.AttachmentPointer.Flags)
    }

    private int bitField0_;
    // optional fixed64 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private long id_;
    /**
     * <code>optional fixed64 id = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional fixed64 id = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public long getId() {
      return id_;
    }

    // optional string contentType = 2;
    public static final int CONTENTTYPE_FIELD_NUMBER = 2;
    private java.lang.Object contentType_;
    /**
     * <code>optional string contentType = 2;</code>
     */
    public boolean hasContentType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string contentType = 2;</code>
     */
    public java.lang.String getContentType() {
      java.lang.Object ref = contentType_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          contentType_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string contentType = 2;</code>
     */
    public com.google.protobuf.ByteString
        getContentTypeBytes() {
      java.lang.Object ref = contentType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        contentType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bytes key = 3;
    public static final int KEY_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString key_;
    /**
     * <code>optional bytes key = 3;</code>
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bytes key = 3;</code>
     */
    public com.google.protobuf.ByteString getKey() {
      return key_;
    }

    // optional uint32 size = 4;
    public static final int SIZE_FIELD_NUMBER = 4;
    private int size_;
    /**
     * <code>optional uint32 size = 4;</code>
     */
    public boolean hasSize() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional uint32 size = 4;</code>
     */
    public int getSize() {
      return size_;
    }

    // optional bytes thumbnail = 5;
    public static final int THUMBNAIL_FIELD_NUMBER = 5;
    private com.google.protobuf.ByteString thumbnail_;
    /**
     * <code>optional bytes thumbnail = 5;</code>
     */
    public boolean hasThumbnail() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional bytes thumbnail = 5;</code>
     */
    public com.google.protobuf.ByteString getThumbnail() {
      return thumbnail_;
    }

    // optional bytes digest = 6;
    public static final int DIGEST_FIELD_NUMBER = 6;
    private com.google.protobuf.ByteString digest_;
    /**
     * <code>optional bytes digest = 6;</code>
     */
    public boolean hasDigest() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bytes digest = 6;</code>
     */
    public com.google.protobuf.ByteString getDigest() {
      return digest_;
    }

    // optional string fileName = 7;
    public static final int FILENAME_FIELD_NUMBER = 7;
    private java.lang.Object fileName_;
    /**
     * <code>optional string fileName = 7;</code>
     */
    public boolean hasFileName() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional string fileName = 7;</code>
     */
    public java.lang.String getFileName() {
      java.lang.Object ref = fileName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          fileName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string fileName = 7;</code>
     */
    public com.google.protobuf.ByteString
        getFileNameBytes() {
      java.lang.Object ref = fileName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        fileName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional uint32 flags = 8;
    public static final int FLAGS_FIELD_NUMBER = 8;
    private int flags_;
    /**
     * <code>optional uint32 flags = 8;</code>
     */
    public boolean hasFlags() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional uint32 flags = 8;</code>
     */
    public int getFlags() {
      return flags_;
    }

    // optional uint32 width = 9;
    public static final int WIDTH_FIELD_NUMBER = 9;
    private int width_;
    /**
     * <code>optional uint32 width = 9;</code>
     */
    public boolean hasWidth() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional uint32 width = 9;</code>
     */
    public int getWidth() {
      return width_;
    }

    // optional uint32 height = 10;
    public static final int HEIGHT_FIELD_NUMBER = 10;
    private int height_;
    /**
     * <code>optional uint32 height = 10;</code>
     */
    public boolean hasHeight() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional uint32 height = 10;</code>
     */
    public int getHeight() {
      return height_;
    }

    // optional string caption = 11;
    public static final int CAPTION_FIELD_NUMBER = 11;
    private java.lang.Object caption_;
    /**
     * <code>optional string caption = 11;</code>
     */
    public boolean hasCaption() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional string caption = 11;</code>
     */
    public java.lang.String getCaption() {
      java.lang.Object ref = caption_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          caption_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string caption = 11;</code>
     */
    public com.google.protobuf.ByteString
        getCaptionBytes() {
      java.lang.Object ref = caption_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        caption_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string url = 101;
    public static final int URL_FIELD_NUMBER = 101;
    private java.lang.Object url_;
    /**
     * <code>optional string url = 101;</code>
     */
    public boolean hasUrl() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional string url = 101;</code>
     */
    public java.lang.String getUrl() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          url_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string url = 101;</code>
     */
    public com.google.protobuf.ByteString
        getUrlBytes() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        url_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      id_ = 0L;
      contentType_ = "";
      key_ = com.google.protobuf.ByteString.EMPTY;
      size_ = 0;
      thumbnail_ = com.google.protobuf.ByteString.EMPTY;
      digest_ = com.google.protobuf.ByteString.EMPTY;
      fileName_ = "";
      flags_ = 0;
      width_ = 0;
      height_ = 0;
      caption_ = "";
      url_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeFixed64(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getContentTypeBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, key_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(4, size_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, thumbnail_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(6, digest_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(7, getFileNameBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeUInt32(8, flags_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeUInt32(9, width_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeUInt32(10, height_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBytes(11, getCaptionBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBytes(101, getUrlBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed64Size(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getContentTypeBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, key_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, size_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, thumbnail_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, digest_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getFileNameBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(8, flags_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(9, width_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(10, height_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(11, getCaptionBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(101, getUrlBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code signalservice.AttachmentPointer}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_AttachmentPointer_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_AttachmentPointer_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.class, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder.class);
      }

      // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        contentType_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        key_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        size_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        thumbnail_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        digest_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        fileName_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        flags_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        width_ = 0;
        bitField0_ = (bitField0_ & ~0x00000100);
        height_ = 0;
        bitField0_ = (bitField0_ & ~0x00000200);
        caption_ = "";
        bitField0_ = (bitField0_ & ~0x00000400);
        url_ = "";
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_AttachmentPointer_descriptor;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getDefaultInstanceForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer build() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer buildPartial() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer result = new org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.contentType_ = contentType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.key_ = key_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.size_ = size_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.thumbnail_ = thumbnail_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.digest_ = digest_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.fileName_ = fileName_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.flags_ = flags_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.width_ = width_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.height_ = height_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.caption_ = caption_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.url_ = url_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer) {
          return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer other) {
        if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasContentType()) {
          bitField0_ |= 0x00000002;
          contentType_ = other.contentType_;
          onChanged();
        }
        if (other.hasKey()) {
          setKey(other.getKey());
        }
        if (other.hasSize()) {
          setSize(other.getSize());
        }
        if (other.hasThumbnail()) {
          setThumbnail(other.getThumbnail());
        }
        if (other.hasDigest()) {
          setDigest(other.getDigest());
        }
        if (other.hasFileName()) {
          bitField0_ |= 0x00000040;
          fileName_ = other.fileName_;
          onChanged();
        }
        if (other.hasFlags()) {
          setFlags(other.getFlags());
        }
        if (other.hasWidth()) {
          setWidth(other.getWidth());
        }
        if (other.hasHeight()) {
          setHeight(other.getHeight());
        }
        if (other.hasCaption()) {
          bitField0_ |= 0x00000400;
          caption_ = other.caption_;
          onChanged();
        }
        if (other.hasUrl()) {
          bitField0_ |= 0x00000800;
          url_ = other.url_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional fixed64 id = 1;
      private long id_ ;
      /**
       * <code>optional fixed64 id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional fixed64 id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public long getId() {
        return id_;
      }
      /**
       * <code>optional fixed64 id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setId(long value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed64 id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0L;
        onChanged();
        return this;
      }

      // optional string contentType = 2;
      private java.lang.Object contentType_ = "";
      /**
       * <code>optional string contentType = 2;</code>
       */
      public boolean hasContentType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string contentType = 2;</code>
       */
      public java.lang.String getContentType() {
        java.lang.Object ref = contentType_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          contentType_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string contentType = 2;</code>
       */
      public com.google.protobuf.ByteString
          getContentTypeBytes() {
        java.lang.Object ref = contentType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          contentType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string contentType = 2;</code>
       */
      public Builder setContentType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        contentType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string contentType = 2;</code>
       */
      public Builder clearContentType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        contentType_ = getDefaultInstance().getContentType();
        onChanged();
        return this;
      }
      /**
       * <code>optional string contentType = 2;</code>
       */
      public Builder setContentTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        contentType_ = value;
        onChanged();
        return this;
      }

      // optional bytes key = 3;
      private com.google.protobuf.ByteString key_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes key = 3;</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bytes key = 3;</code>
       */
      public com.google.protobuf.ByteString getKey() {
        return key_;
      }
      /**
       * <code>optional bytes key = 3;</code>
       */
      public Builder setKey(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes key = 3;</code>
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000004);
        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }

      // optional uint32 size = 4;
      private int size_ ;
      /**
       * <code>optional uint32 size = 4;</code>
       */
      public boolean hasSize() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional uint32 size = 4;</code>
       */
      public int getSize() {
        return size_;
      }
      /**
       * <code>optional uint32 size = 4;</code>
       */
      public Builder setSize(int value) {
        bitField0_ |= 0x00000008;
        size_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 size = 4;</code>
       */
      public Builder clearSize() {
        bitField0_ = (bitField0_ & ~0x00000008);
        size_ = 0;
        onChanged();
        return this;
      }

      // optional bytes thumbnail = 5;
      private com.google.protobuf.ByteString thumbnail_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes thumbnail = 5;</code>
       */
      public boolean hasThumbnail() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bytes thumbnail = 5;</code>
       */
      public com.google.protobuf.ByteString getThumbnail() {
        return thumbnail_;
      }
      /**
       * <code>optional bytes thumbnail = 5;</code>
       */
      public Builder setThumbnail(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        thumbnail_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes thumbnail = 5;</code>
       */
      public Builder clearThumbnail() {
        bitField0_ = (bitField0_ & ~0x00000010);
        thumbnail_ = getDefaultInstance().getThumbnail();
        onChanged();
        return this;
      }

      // optional bytes digest = 6;
      private com.google.protobuf.ByteString digest_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes digest = 6;</code>
       */
      public boolean hasDigest() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bytes digest = 6;</code>
       */
      public com.google.protobuf.ByteString getDigest() {
        return digest_;
      }
      /**
       * <code>optional bytes digest = 6;</code>
       */
      public Builder setDigest(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        digest_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes digest = 6;</code>
       */
      public Builder clearDigest() {
        bitField0_ = (bitField0_ & ~0x00000020);
        digest_ = getDefaultInstance().getDigest();
        onChanged();
        return this;
      }

      // optional string fileName = 7;
      private java.lang.Object fileName_ = "";
      /**
       * <code>optional string fileName = 7;</code>
       */
      public boolean hasFileName() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string fileName = 7;</code>
       */
      public java.lang.String getFileName() {
        java.lang.Object ref = fileName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          fileName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string fileName = 7;</code>
       */
      public com.google.protobuf.ByteString
          getFileNameBytes() {
        java.lang.Object ref = fileName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          fileName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string fileName = 7;</code>
       */
      public Builder setFileName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        fileName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string fileName = 7;</code>
       */
      public Builder clearFileName() {
        bitField0_ = (bitField0_ & ~0x00000040);
        fileName_ = getDefaultInstance().getFileName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string fileName = 7;</code>
       */
      public Builder setFileNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        fileName_ = value;
        onChanged();
        return this;
      }

      // optional uint32 flags = 8;
      private int flags_ ;
      /**
       * <code>optional uint32 flags = 8;</code>
       */
      public boolean hasFlags() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional uint32 flags = 8;</code>
       */
      public int getFlags() {
        return flags_;
      }
      /**
       * <code>optional uint32 flags = 8;</code>
       */
      public Builder setFlags(int value) {
        bitField0_ |= 0x00000080;
        flags_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 flags = 8;</code>
       */
      public Builder clearFlags() {
        bitField0_ = (bitField0_ & ~0x00000080);
        flags_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 width = 9;
      private int width_ ;
      /**
       * <code>optional uint32 width = 9;</code>
       */
      public boolean hasWidth() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional uint32 width = 9;</code>
       */
      public int getWidth() {
        return width_;
      }
      /**
       * <code>optional uint32 width = 9;</code>
       */
      public Builder setWidth(int value) {
        bitField0_ |= 0x00000100;
        width_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 width = 9;</code>
       */
      public Builder clearWidth() {
        bitField0_ = (bitField0_ & ~0x00000100);
        width_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 height = 10;
      private int height_ ;
      /**
       * <code>optional uint32 height = 10;</code>
       */
      public boolean hasHeight() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional uint32 height = 10;</code>
       */
      public int getHeight() {
        return height_;
      }
      /**
       * <code>optional uint32 height = 10;</code>
       */
      public Builder setHeight(int value) {
        bitField0_ |= 0x00000200;
        height_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 height = 10;</code>
       */
      public Builder clearHeight() {
        bitField0_ = (bitField0_ & ~0x00000200);
        height_ = 0;
        onChanged();
        return this;
      }

      // optional string caption = 11;
      private java.lang.Object caption_ = "";
      /**
       * <code>optional string caption = 11;</code>
       */
      public boolean hasCaption() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional string caption = 11;</code>
       */
      public java.lang.String getCaption() {
        java.lang.Object ref = caption_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          caption_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string caption = 11;</code>
       */
      public com.google.protobuf.ByteString
          getCaptionBytes() {
        java.lang.Object ref = caption_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          caption_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string caption = 11;</code>
       */
      public Builder setCaption(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        caption_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string caption = 11;</code>
       */
      public Builder clearCaption() {
        bitField0_ = (bitField0_ & ~0x00000400);
        caption_ = getDefaultInstance().getCaption();
        onChanged();
        return this;
      }
      /**
       * <code>optional string caption = 11;</code>
       */
      public Builder setCaptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        caption_ = value;
        onChanged();
        return this;
      }

      // optional string url = 101;
      private java.lang.Object url_ = "";
      /**
       * <code>optional string url = 101;</code>
       */
      public boolean hasUrl() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional string url = 101;</code>
       */
      public java.lang.String getUrl() {
        java.lang.Object ref = url_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          url_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string url = 101;</code>
       */
      public com.google.protobuf.ByteString
          getUrlBytes() {
        java.lang.Object ref = url_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          url_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string url = 101;</code>
       */
      public Builder setUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        url_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string url = 101;</code>
       */
      public Builder clearUrl() {
        bitField0_ = (bitField0_ & ~0x00000800);
        url_ = getDefaultInstance().getUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string url = 101;</code>
       */
      public Builder setUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        url_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:signalservice.AttachmentPointer)
    }

    static {
      defaultInstance = new AttachmentPointer(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:signalservice.AttachmentPointer)
  }

  public interface GroupContextOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bytes id = 1;
    /**
     * <code>optional bytes id = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasId();
    /**
     * <code>optional bytes id = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    com.google.protobuf.ByteString getId();

    // optional .signalservice.GroupContext.Type type = 2;
    /**
     * <code>optional .signalservice.GroupContext.Type type = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasType();
    /**
     * <code>optional .signalservice.GroupContext.Type type = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Type getType();

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

    // repeated string members = 4;
    /**
     * <code>repeated string members = 4;</code>
     */
    java.util.List<java.lang.String>
    getMembersList();
    /**
     * <code>repeated string members = 4;</code>
     */
    int getMembersCount();
    /**
     * <code>repeated string members = 4;</code>
     */
    java.lang.String getMembers(int index);
    /**
     * <code>repeated string members = 4;</code>
     */
    com.google.protobuf.ByteString
        getMembersBytes(int index);

    // optional .signalservice.AttachmentPointer avatar = 5;
    /**
     * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
     */
    boolean hasAvatar();
    /**
     * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getAvatar();
    /**
     * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getAvatarOrBuilder();

    // repeated string admins = 6;
    /**
     * <code>repeated string admins = 6;</code>
     */
    java.util.List<java.lang.String>
    getAdminsList();
    /**
     * <code>repeated string admins = 6;</code>
     */
    int getAdminsCount();
    /**
     * <code>repeated string admins = 6;</code>
     */
    java.lang.String getAdmins(int index);
    /**
     * <code>repeated string admins = 6;</code>
     */
    com.google.protobuf.ByteString
        getAdminsBytes(int index);

    // repeated string newMembers = 998;
    /**
     * <code>repeated string newMembers = 998;</code>
     *
     * <pre>
     * Loki - These fields are only used internally for the Android code base.
     * This is so that we can differentiate adding/kicking.
     * DO NOT USE WHEN SENDING MESSAGES.
     * </pre>
     */
    java.util.List<java.lang.String>
    getNewMembersList();
    /**
     * <code>repeated string newMembers = 998;</code>
     *
     * <pre>
     * Loki - These fields are only used internally for the Android code base.
     * This is so that we can differentiate adding/kicking.
     * DO NOT USE WHEN SENDING MESSAGES.
     * </pre>
     */
    int getNewMembersCount();
    /**
     * <code>repeated string newMembers = 998;</code>
     *
     * <pre>
     * Loki - These fields are only used internally for the Android code base.
     * This is so that we can differentiate adding/kicking.
     * DO NOT USE WHEN SENDING MESSAGES.
     * </pre>
     */
    java.lang.String getNewMembers(int index);
    /**
     * <code>repeated string newMembers = 998;</code>
     *
     * <pre>
     * Loki - These fields are only used internally for the Android code base.
     * This is so that we can differentiate adding/kicking.
     * DO NOT USE WHEN SENDING MESSAGES.
     * </pre>
     */
    com.google.protobuf.ByteString
        getNewMembersBytes(int index);

    // repeated string removedMembers = 999;
    /**
     * <code>repeated string removedMembers = 999;</code>
     */
    java.util.List<java.lang.String>
    getRemovedMembersList();
    /**
     * <code>repeated string removedMembers = 999;</code>
     */
    int getRemovedMembersCount();
    /**
     * <code>repeated string removedMembers = 999;</code>
     */
    java.lang.String getRemovedMembers(int index);
    /**
     * <code>repeated string removedMembers = 999;</code>
     */
    com.google.protobuf.ByteString
        getRemovedMembersBytes(int index);
  }
  /**
   * Protobuf type {@code signalservice.GroupContext}
   */
  public static final class GroupContext extends
      com.google.protobuf.GeneratedMessage
      implements GroupContextOrBuilder {
    // Use GroupContext.newBuilder() to construct.
    private GroupContext(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GroupContext(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GroupContext defaultInstance;
    public static GroupContext getDefaultInstance() {
      return defaultInstance;
    }

    public GroupContext getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GroupContext(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              id_ = input.readBytes();
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Type value = org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                type_ = value;
              }
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              name_ = input.readBytes();
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                members_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000008;
              }
              members_.add(input.readBytes());
              break;
            }
            case 42: {
              org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = avatar_.toBuilder();
              }
              avatar_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(avatar_);
                avatar_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                admins_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000020;
              }
              admins_.add(input.readBytes());
              break;
            }
            case 7986: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                newMembers_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000040;
              }
              newMembers_.add(input.readBytes());
              break;
            }
            case 7994: {
              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                removedMembers_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000080;
              }
              removedMembers_.add(input.readBytes());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          members_ = new com.google.protobuf.UnmodifiableLazyStringList(members_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          admins_ = new com.google.protobuf.UnmodifiableLazyStringList(admins_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          newMembers_ = new com.google.protobuf.UnmodifiableLazyStringList(newMembers_);
        }
        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
          removedMembers_ = new com.google.protobuf.UnmodifiableLazyStringList(removedMembers_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupContext_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupContext_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.class, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Builder.class);
    }

    public static com.google.protobuf.Parser<GroupContext> PARSER =
        new com.google.protobuf.AbstractParser<GroupContext>() {
      public GroupContext parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GroupContext(input, extensionRegistry);
      }
    };

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

    /**
     * Protobuf enum {@code signalservice.GroupContext.Type}
     */
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN = 0;</code>
       */
      UNKNOWN(0, 0),
      /**
       * <code>UPDATE = 1;</code>
       */
      UPDATE(1, 1),
      /**
       * <code>DELIVER = 2;</code>
       */
      DELIVER(2, 2),
      /**
       * <code>QUIT = 3;</code>
       */
      QUIT(3, 3),
      /**
       * <code>REQUEST_INFO = 4;</code>
       */
      REQUEST_INFO(4, 4),
      ;

      /**
       * <code>UNKNOWN = 0;</code>
       */
      public static final int UNKNOWN_VALUE = 0;
      /**
       * <code>UPDATE = 1;</code>
       */
      public static final int UPDATE_VALUE = 1;
      /**
       * <code>DELIVER = 2;</code>
       */
      public static final int DELIVER_VALUE = 2;
      /**
       * <code>QUIT = 3;</code>
       */
      public static final int QUIT_VALUE = 3;
      /**
       * <code>REQUEST_INFO = 4;</code>
       */
      public static final int REQUEST_INFO_VALUE = 4;


      public final int getNumber() { return value; }

      public static Type valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN;
          case 1: return UPDATE;
          case 2: return DELIVER;
          case 3: return QUIT;
          case 4: return REQUEST_INFO;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.getDescriptor().getEnumTypes().get(0);
      }

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

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

      private final int index;
      private final int value;

      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:signalservice.GroupContext.Type)
    }

    private int bitField0_;
    // optional bytes id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString id_;
    /**
     * <code>optional bytes id = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bytes id = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public com.google.protobuf.ByteString getId() {
      return id_;
    }

    // optional .signalservice.GroupContext.Type type = 2;
    public static final int TYPE_FIELD_NUMBER = 2;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Type type_;
    /**
     * <code>optional .signalservice.GroupContext.Type type = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .signalservice.GroupContext.Type type = 2;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Type getType() {
      return type_;
    }

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

    // repeated string members = 4;
    public static final int MEMBERS_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList members_;
    /**
     * <code>repeated string members = 4;</code>
     */
    public java.util.List<java.lang.String>
        getMembersList() {
      return members_;
    }
    /**
     * <code>repeated string members = 4;</code>
     */
    public int getMembersCount() {
      return members_.size();
    }
    /**
     * <code>repeated string members = 4;</code>
     */
    public java.lang.String getMembers(int index) {
      return members_.get(index);
    }
    /**
     * <code>repeated string members = 4;</code>
     */
    public com.google.protobuf.ByteString
        getMembersBytes(int index) {
      return members_.getByteString(index);
    }

    // optional .signalservice.AttachmentPointer avatar = 5;
    public static final int AVATAR_FIELD_NUMBER = 5;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer avatar_;
    /**
     * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
     */
    public boolean hasAvatar() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getAvatar() {
      return avatar_;
    }
    /**
     * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getAvatarOrBuilder() {
      return avatar_;
    }

    // repeated string admins = 6;
    public static final int ADMINS_FIELD_NUMBER = 6;
    private com.google.protobuf.LazyStringList admins_;
    /**
     * <code>repeated string admins = 6;</code>
     */
    public java.util.List<java.lang.String>
        getAdminsList() {
      return admins_;
    }
    /**
     * <code>repeated string admins = 6;</code>
     */
    public int getAdminsCount() {
      return admins_.size();
    }
    /**
     * <code>repeated string admins = 6;</code>
     */
    public java.lang.String getAdmins(int index) {
      return admins_.get(index);
    }
    /**
     * <code>repeated string admins = 6;</code>
     */
    public com.google.protobuf.ByteString
        getAdminsBytes(int index) {
      return admins_.getByteString(index);
    }

    // repeated string newMembers = 998;
    public static final int NEWMEMBERS_FIELD_NUMBER = 998;
    private com.google.protobuf.LazyStringList newMembers_;
    /**
     * <code>repeated string newMembers = 998;</code>
     *
     * <pre>
     * Loki - These fields are only used internally for the Android code base.
     * This is so that we can differentiate adding/kicking.
     * DO NOT USE WHEN SENDING MESSAGES.
     * </pre>
     */
    public java.util.List<java.lang.String>
        getNewMembersList() {
      return newMembers_;
    }
    /**
     * <code>repeated string newMembers = 998;</code>
     *
     * <pre>
     * Loki - These fields are only used internally for the Android code base.
     * This is so that we can differentiate adding/kicking.
     * DO NOT USE WHEN SENDING MESSAGES.
     * </pre>
     */
    public int getNewMembersCount() {
      return newMembers_.size();
    }
    /**
     * <code>repeated string newMembers = 998;</code>
     *
     * <pre>
     * Loki - These fields are only used internally for the Android code base.
     * This is so that we can differentiate adding/kicking.
     * DO NOT USE WHEN SENDING MESSAGES.
     * </pre>
     */
    public java.lang.String getNewMembers(int index) {
      return newMembers_.get(index);
    }
    /**
     * <code>repeated string newMembers = 998;</code>
     *
     * <pre>
     * Loki - These fields are only used internally for the Android code base.
     * This is so that we can differentiate adding/kicking.
     * DO NOT USE WHEN SENDING MESSAGES.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getNewMembersBytes(int index) {
      return newMembers_.getByteString(index);
    }

    // repeated string removedMembers = 999;
    public static final int REMOVEDMEMBERS_FIELD_NUMBER = 999;
    private com.google.protobuf.LazyStringList removedMembers_;
    /**
     * <code>repeated string removedMembers = 999;</code>
     */
    public java.util.List<java.lang.String>
        getRemovedMembersList() {
      return removedMembers_;
    }
    /**
     * <code>repeated string removedMembers = 999;</code>
     */
    public int getRemovedMembersCount() {
      return removedMembers_.size();
    }
    /**
     * <code>repeated string removedMembers = 999;</code>
     */
    public java.lang.String getRemovedMembers(int index) {
      return removedMembers_.get(index);
    }
    /**
     * <code>repeated string removedMembers = 999;</code>
     */
    public com.google.protobuf.ByteString
        getRemovedMembersBytes(int index) {
      return removedMembers_.getByteString(index);
    }

    private void initFields() {
      id_ = com.google.protobuf.ByteString.EMPTY;
      type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Type.UNKNOWN;
      name_ = "";
      members_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
      admins_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      newMembers_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      removedMembers_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, type_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getNameBytes());
      }
      for (int i = 0; i < members_.size(); i++) {
        output.writeBytes(4, members_.getByteString(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(5, avatar_);
      }
      for (int i = 0; i < admins_.size(); i++) {
        output.writeBytes(6, admins_.getByteString(i));
      }
      for (int i = 0; i < newMembers_.size(); i++) {
        output.writeBytes(998, newMembers_.getByteString(i));
      }
      for (int i = 0; i < removedMembers_.size(); i++) {
        output.writeBytes(999, removedMembers_.getByteString(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, type_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getNameBytes());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < members_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(members_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getMembersList().size();
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, avatar_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < admins_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(admins_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getAdminsList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < newMembers_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(newMembers_.getByteString(i));
        }
        size += dataSize;
        size += 2 * getNewMembersList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < removedMembers_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(removedMembers_.getByteString(i));
        }
        size += dataSize;
        size += 2 * getRemovedMembersList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code signalservice.GroupContext}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContextOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupContext_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupContext_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.class, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Builder.class);
      }

      // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getAvatarFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Type.UNKNOWN;
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        members_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        if (avatarBuilder_ == null) {
          avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
        } else {
          avatarBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        admins_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        newMembers_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000040);
        removedMembers_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupContext_descriptor;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext getDefaultInstanceForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.getDefaultInstance();
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext build() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext buildPartial() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext result = new org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.name_ = name_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          members_ = new com.google.protobuf.UnmodifiableLazyStringList(
              members_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.members_ = members_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        if (avatarBuilder_ == null) {
          result.avatar_ = avatar_;
        } else {
          result.avatar_ = avatarBuilder_.build();
        }
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          admins_ = new com.google.protobuf.UnmodifiableLazyStringList(
              admins_);
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.admins_ = admins_;
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          newMembers_ = new com.google.protobuf.UnmodifiableLazyStringList(
              newMembers_);
          bitField0_ = (bitField0_ & ~0x00000040);
        }
        result.newMembers_ = newMembers_;
        if (((bitField0_ & 0x00000080) == 0x00000080)) {
          removedMembers_ = new com.google.protobuf.UnmodifiableLazyStringList(
              removedMembers_);
          bitField0_ = (bitField0_ & ~0x00000080);
        }
        result.removedMembers_ = removedMembers_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext) {
          return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext other) {
        if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000004;
          name_ = other.name_;
          onChanged();
        }
        if (!other.members_.isEmpty()) {
          if (members_.isEmpty()) {
            members_ = other.members_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureMembersIsMutable();
            members_.addAll(other.members_);
          }
          onChanged();
        }
        if (other.hasAvatar()) {
          mergeAvatar(other.getAvatar());
        }
        if (!other.admins_.isEmpty()) {
          if (admins_.isEmpty()) {
            admins_ = other.admins_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureAdminsIsMutable();
            admins_.addAll(other.admins_);
          }
          onChanged();
        }
        if (!other.newMembers_.isEmpty()) {
          if (newMembers_.isEmpty()) {
            newMembers_ = other.newMembers_;
            bitField0_ = (bitField0_ & ~0x00000040);
          } else {
            ensureNewMembersIsMutable();
            newMembers_.addAll(other.newMembers_);
          }
          onChanged();
        }
        if (!other.removedMembers_.isEmpty()) {
          if (removedMembers_.isEmpty()) {
            removedMembers_ = other.removedMembers_;
            bitField0_ = (bitField0_ & ~0x00000080);
          } else {
            ensureRemovedMembersIsMutable();
            removedMembers_.addAll(other.removedMembers_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bytes id = 1;
      private com.google.protobuf.ByteString id_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bytes id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public com.google.protobuf.ByteString getId() {
        return id_;
      }
      /**
       * <code>optional bytes id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setId(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = getDefaultInstance().getId();
        onChanged();
        return this;
      }

      // optional .signalservice.GroupContext.Type type = 2;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Type type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Type.UNKNOWN;
      /**
       * <code>optional .signalservice.GroupContext.Type type = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .signalservice.GroupContext.Type type = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Type getType() {
        return type_;
      }
      /**
       * <code>optional .signalservice.GroupContext.Type type = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setType(org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .signalservice.GroupContext.Type type = 2;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        type_ = org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext.Type.UNKNOWN;
        onChanged();
        return this;
      }

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

      // repeated string members = 4;
      private com.google.protobuf.LazyStringList members_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureMembersIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          members_ = new com.google.protobuf.LazyStringArrayList(members_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <code>repeated string members = 4;</code>
       */
      public java.util.List<java.lang.String>
          getMembersList() {
        return java.util.Collections.unmodifiableList(members_);
      }
      /**
       * <code>repeated string members = 4;</code>
       */
      public int getMembersCount() {
        return members_.size();
      }
      /**
       * <code>repeated string members = 4;</code>
       */
      public java.lang.String getMembers(int index) {
        return members_.get(index);
      }
      /**
       * <code>repeated string members = 4;</code>
       */
      public com.google.protobuf.ByteString
          getMembersBytes(int index) {
        return members_.getByteString(index);
      }
      /**
       * <code>repeated string members = 4;</code>
       */
      public Builder setMembers(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMembersIsMutable();
        members_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string members = 4;</code>
       */
      public Builder addMembers(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMembersIsMutable();
        members_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string members = 4;</code>
       */
      public Builder addAllMembers(
          java.lang.Iterable<java.lang.String> values) {
        ensureMembersIsMutable();
        super.addAll(values, members_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string members = 4;</code>
       */
      public Builder clearMembers() {
        members_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string members = 4;</code>
       */
      public Builder addMembersBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMembersIsMutable();
        members_.add(value);
        onChanged();
        return this;
      }

      // optional .signalservice.AttachmentPointer avatar = 5;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder> avatarBuilder_;
      /**
       * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
       */
      public boolean hasAvatar() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer getAvatar() {
        if (avatarBuilder_ == null) {
          return avatar_;
        } else {
          return avatarBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
       */
      public Builder setAvatar(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer value) {
        if (avatarBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          avatar_ = value;
          onChanged();
        } else {
          avatarBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
       */
      public Builder setAvatar(
          org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder builderForValue) {
        if (avatarBuilder_ == null) {
          avatar_ = builderForValue.build();
          onChanged();
        } else {
          avatarBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
       */
      public Builder mergeAvatar(org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer value) {
        if (avatarBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              avatar_ != org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance()) {
            avatar_ =
              org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.newBuilder(avatar_).mergeFrom(value).buildPartial();
          } else {
            avatar_ = value;
          }
          onChanged();
        } else {
          avatarBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
       */
      public Builder clearAvatar() {
        if (avatarBuilder_ == null) {
          avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.getDefaultInstance();
          onChanged();
        } else {
          avatarBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder getAvatarBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getAvatarFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder getAvatarOrBuilder() {
        if (avatarBuilder_ != null) {
          return avatarBuilder_.getMessageOrBuilder();
        } else {
          return avatar_;
        }
      }
      /**
       * <code>optional .signalservice.AttachmentPointer avatar = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder> 
          getAvatarFieldBuilder() {
        if (avatarBuilder_ == null) {
          avatarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointer.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.AttachmentPointerOrBuilder>(
                  avatar_,
                  getParentForChildren(),
                  isClean());
          avatar_ = null;
        }
        return avatarBuilder_;
      }

      // repeated string admins = 6;
      private com.google.protobuf.LazyStringList admins_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureAdminsIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          admins_ = new com.google.protobuf.LazyStringArrayList(admins_);
          bitField0_ |= 0x00000020;
         }
      }
      /**
       * <code>repeated string admins = 6;</code>
       */
      public java.util.List<java.lang.String>
          getAdminsList() {
        return java.util.Collections.unmodifiableList(admins_);
      }
      /**
       * <code>repeated string admins = 6;</code>
       */
      public int getAdminsCount() {
        return admins_.size();
      }
      /**
       * <code>repeated string admins = 6;</code>
       */
      public java.lang.String getAdmins(int index) {
        return admins_.get(index);
      }
      /**
       * <code>repeated string admins = 6;</code>
       */
      public com.google.protobuf.ByteString
          getAdminsBytes(int index) {
        return admins_.getByteString(index);
      }
      /**
       * <code>repeated string admins = 6;</code>
       */
      public Builder setAdmins(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAdminsIsMutable();
        admins_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string admins = 6;</code>
       */
      public Builder addAdmins(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAdminsIsMutable();
        admins_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string admins = 6;</code>
       */
      public Builder addAllAdmins(
          java.lang.Iterable<java.lang.String> values) {
        ensureAdminsIsMutable();
        super.addAll(values, admins_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string admins = 6;</code>
       */
      public Builder clearAdmins() {
        admins_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string admins = 6;</code>
       */
      public Builder addAdminsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAdminsIsMutable();
        admins_.add(value);
        onChanged();
        return this;
      }

      // repeated string newMembers = 998;
      private com.google.protobuf.LazyStringList newMembers_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureNewMembersIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          newMembers_ = new com.google.protobuf.LazyStringArrayList(newMembers_);
          bitField0_ |= 0x00000040;
         }
      }
      /**
       * <code>repeated string newMembers = 998;</code>
       *
       * <pre>
       * Loki - These fields are only used internally for the Android code base.
       * This is so that we can differentiate adding/kicking.
       * DO NOT USE WHEN SENDING MESSAGES.
       * </pre>
       */
      public java.util.List<java.lang.String>
          getNewMembersList() {
        return java.util.Collections.unmodifiableList(newMembers_);
      }
      /**
       * <code>repeated string newMembers = 998;</code>
       *
       * <pre>
       * Loki - These fields are only used internally for the Android code base.
       * This is so that we can differentiate adding/kicking.
       * DO NOT USE WHEN SENDING MESSAGES.
       * </pre>
       */
      public int getNewMembersCount() {
        return newMembers_.size();
      }
      /**
       * <code>repeated string newMembers = 998;</code>
       *
       * <pre>
       * Loki - These fields are only used internally for the Android code base.
       * This is so that we can differentiate adding/kicking.
       * DO NOT USE WHEN SENDING MESSAGES.
       * </pre>
       */
      public java.lang.String getNewMembers(int index) {
        return newMembers_.get(index);
      }
      /**
       * <code>repeated string newMembers = 998;</code>
       *
       * <pre>
       * Loki - These fields are only used internally for the Android code base.
       * This is so that we can differentiate adding/kicking.
       * DO NOT USE WHEN SENDING MESSAGES.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getNewMembersBytes(int index) {
        return newMembers_.getByteString(index);
      }
      /**
       * <code>repeated string newMembers = 998;</code>
       *
       * <pre>
       * Loki - These fields are only used internally for the Android code base.
       * This is so that we can differentiate adding/kicking.
       * DO NOT USE WHEN SENDING MESSAGES.
       * </pre>
       */
      public Builder setNewMembers(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureNewMembersIsMutable();
        newMembers_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string newMembers = 998;</code>
       *
       * <pre>
       * Loki - These fields are only used internally for the Android code base.
       * This is so that we can differentiate adding/kicking.
       * DO NOT USE WHEN SENDING MESSAGES.
       * </pre>
       */
      public Builder addNewMembers(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureNewMembersIsMutable();
        newMembers_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string newMembers = 998;</code>
       *
       * <pre>
       * Loki - These fields are only used internally for the Android code base.
       * This is so that we can differentiate adding/kicking.
       * DO NOT USE WHEN SENDING MESSAGES.
       * </pre>
       */
      public Builder addAllNewMembers(
          java.lang.Iterable<java.lang.String> values) {
        ensureNewMembersIsMutable();
        super.addAll(values, newMembers_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string newMembers = 998;</code>
       *
       * <pre>
       * Loki - These fields are only used internally for the Android code base.
       * This is so that we can differentiate adding/kicking.
       * DO NOT USE WHEN SENDING MESSAGES.
       * </pre>
       */
      public Builder clearNewMembers() {
        newMembers_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000040);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string newMembers = 998;</code>
       *
       * <pre>
       * Loki - These fields are only used internally for the Android code base.
       * This is so that we can differentiate adding/kicking.
       * DO NOT USE WHEN SENDING MESSAGES.
       * </pre>
       */
      public Builder addNewMembersBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureNewMembersIsMutable();
        newMembers_.add(value);
        onChanged();
        return this;
      }

      // repeated string removedMembers = 999;
      private com.google.protobuf.LazyStringList removedMembers_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureRemovedMembersIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          removedMembers_ = new com.google.protobuf.LazyStringArrayList(removedMembers_);
          bitField0_ |= 0x00000080;
         }
      }
      /**
       * <code>repeated string removedMembers = 999;</code>
       */
      public java.util.List<java.lang.String>
          getRemovedMembersList() {
        return java.util.Collections.unmodifiableList(removedMembers_);
      }
      /**
       * <code>repeated string removedMembers = 999;</code>
       */
      public int getRemovedMembersCount() {
        return removedMembers_.size();
      }
      /**
       * <code>repeated string removedMembers = 999;</code>
       */
      public java.lang.String getRemovedMembers(int index) {
        return removedMembers_.get(index);
      }
      /**
       * <code>repeated string removedMembers = 999;</code>
       */
      public com.google.protobuf.ByteString
          getRemovedMembersBytes(int index) {
        return removedMembers_.getByteString(index);
      }
      /**
       * <code>repeated string removedMembers = 999;</code>
       */
      public Builder setRemovedMembers(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureRemovedMembersIsMutable();
        removedMembers_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string removedMembers = 999;</code>
       */
      public Builder addRemovedMembers(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureRemovedMembersIsMutable();
        removedMembers_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string removedMembers = 999;</code>
       */
      public Builder addAllRemovedMembers(
          java.lang.Iterable<java.lang.String> values) {
        ensureRemovedMembersIsMutable();
        super.addAll(values, removedMembers_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string removedMembers = 999;</code>
       */
      public Builder clearRemovedMembers() {
        removedMembers_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string removedMembers = 999;</code>
       */
      public Builder addRemovedMembersBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureRemovedMembersIsMutable();
        removedMembers_.add(value);
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:signalservice.GroupContext)
    }

    static {
      defaultInstance = new GroupContext(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:signalservice.GroupContext)
  }

  public interface ContactDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string number = 1;
    /**
     * <code>optional string number = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasNumber();
    /**
     * <code>optional string number = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    java.lang.String getNumber();
    /**
     * <code>optional string number = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    com.google.protobuf.ByteString
        getNumberBytes();

    // optional string name = 2;
    /**
     * <code>optional string name = 2;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 2;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 2;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // optional .signalservice.ContactDetails.Avatar avatar = 3;
    /**
     * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
     */
    boolean hasAvatar();
    /**
     * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar getAvatar();
    /**
     * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.AvatarOrBuilder getAvatarOrBuilder();

    // optional string color = 4;
    /**
     * <code>optional string color = 4;</code>
     */
    boolean hasColor();
    /**
     * <code>optional string color = 4;</code>
     */
    java.lang.String getColor();
    /**
     * <code>optional string color = 4;</code>
     */
    com.google.protobuf.ByteString
        getColorBytes();

    // optional bytes profileKey = 6;
    /**
     * <code>optional bytes profileKey = 6;</code>
     */
    boolean hasProfileKey();
    /**
     * <code>optional bytes profileKey = 6;</code>
     */
    com.google.protobuf.ByteString getProfileKey();

    // optional bool blocked = 7;
    /**
     * <code>optional bool blocked = 7;</code>
     */
    boolean hasBlocked();
    /**
     * <code>optional bool blocked = 7;</code>
     */
    boolean getBlocked();

    // optional uint32 expireTimer = 8;
    /**
     * <code>optional uint32 expireTimer = 8;</code>
     */
    boolean hasExpireTimer();
    /**
     * <code>optional uint32 expireTimer = 8;</code>
     */
    int getExpireTimer();

    // optional string nickname = 101;
    /**
     * <code>optional string nickname = 101;</code>
     */
    boolean hasNickname();
    /**
     * <code>optional string nickname = 101;</code>
     */
    java.lang.String getNickname();
    /**
     * <code>optional string nickname = 101;</code>
     */
    com.google.protobuf.ByteString
        getNicknameBytes();
  }
  /**
   * Protobuf type {@code signalservice.ContactDetails}
   */
  public static final class ContactDetails extends
      com.google.protobuf.GeneratedMessage
      implements ContactDetailsOrBuilder {
    // Use ContactDetails.newBuilder() to construct.
    private ContactDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ContactDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ContactDetails defaultInstance;
    public static ContactDetails getDefaultInstance() {
      return defaultInstance;
    }

    public ContactDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ContactDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              number_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              name_ = input.readBytes();
              break;
            }
            case 26: {
              org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = avatar_.toBuilder();
              }
              avatar_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(avatar_);
                avatar_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              color_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000010;
              profileKey_ = input.readBytes();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000020;
              blocked_ = input.readBool();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000040;
              expireTimer_ = input.readUInt32();
              break;
            }
            case 810: {
              bitField0_ |= 0x00000080;
              nickname_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ContactDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ContactDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<ContactDetails> PARSER =
        new com.google.protobuf.AbstractParser<ContactDetails>() {
      public ContactDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ContactDetails(input, extensionRegistry);
      }
    };

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

    public interface AvatarOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // optional string contentType = 1;
      /**
       * <code>optional string contentType = 1;</code>
       */
      boolean hasContentType();
      /**
       * <code>optional string contentType = 1;</code>
       */
      java.lang.String getContentType();
      /**
       * <code>optional string contentType = 1;</code>
       */
      com.google.protobuf.ByteString
          getContentTypeBytes();

      // optional uint32 length = 2;
      /**
       * <code>optional uint32 length = 2;</code>
       */
      boolean hasLength();
      /**
       * <code>optional uint32 length = 2;</code>
       */
      int getLength();
    }
    /**
     * Protobuf type {@code signalservice.ContactDetails.Avatar}
     */
    public static final class Avatar extends
        com.google.protobuf.GeneratedMessage
        implements AvatarOrBuilder {
      // Use Avatar.newBuilder() to construct.
      private Avatar(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Avatar(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final Avatar defaultInstance;
      public static Avatar getDefaultInstance() {
        return defaultInstance;
      }

      public Avatar getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Avatar(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                contentType_ = input.readBytes();
                break;
              }
              case 16: {
                bitField0_ |= 0x00000002;
                length_ = input.readUInt32();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ContactDetails_Avatar_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ContactDetails_Avatar_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.Builder.class);
      }

      public static com.google.protobuf.Parser<Avatar> PARSER =
          new com.google.protobuf.AbstractParser<Avatar>() {
        public Avatar parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Avatar(input, extensionRegistry);
        }
      };

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

      private int bitField0_;
      // optional string contentType = 1;
      public static final int CONTENTTYPE_FIELD_NUMBER = 1;
      private java.lang.Object contentType_;
      /**
       * <code>optional string contentType = 1;</code>
       */
      public boolean hasContentType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string contentType = 1;</code>
       */
      public java.lang.String getContentType() {
        java.lang.Object ref = contentType_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            contentType_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string contentType = 1;</code>
       */
      public com.google.protobuf.ByteString
          getContentTypeBytes() {
        java.lang.Object ref = contentType_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          contentType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // optional uint32 length = 2;
      public static final int LENGTH_FIELD_NUMBER = 2;
      private int length_;
      /**
       * <code>optional uint32 length = 2;</code>
       */
      public boolean hasLength() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional uint32 length = 2;</code>
       */
      public int getLength() {
        return length_;
      }

      private void initFields() {
        contentType_ = "";
        length_ = 0;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, getContentTypeBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeUInt32(2, length_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, getContentTypeBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt32Size(2, length_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code signalservice.ContactDetails.Avatar}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.AvatarOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ContactDetails_Avatar_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ContactDetails_Avatar_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.Builder.class);
        }

        // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          contentType_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          length_ = 0;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ContactDetails_Avatar_descriptor;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar getDefaultInstanceForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.getDefaultInstance();
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar build() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar buildPartial() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar result = new org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.contentType_ = contentType_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.length_ = length_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar) {
            return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar other) {
          if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.getDefaultInstance()) return this;
          if (other.hasContentType()) {
            bitField0_ |= 0x00000001;
            contentType_ = other.contentType_;
            onChanged();
          }
          if (other.hasLength()) {
            setLength(other.getLength());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        // optional string contentType = 1;
        private java.lang.Object contentType_ = "";
        /**
         * <code>optional string contentType = 1;</code>
         */
        public boolean hasContentType() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string contentType = 1;</code>
         */
        public java.lang.String getContentType() {
          java.lang.Object ref = contentType_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            contentType_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string contentType = 1;</code>
         */
        public com.google.protobuf.ByteString
            getContentTypeBytes() {
          java.lang.Object ref = contentType_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            contentType_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string contentType = 1;</code>
         */
        public Builder setContentType(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          contentType_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string contentType = 1;</code>
         */
        public Builder clearContentType() {
          bitField0_ = (bitField0_ & ~0x00000001);
          contentType_ = getDefaultInstance().getContentType();
          onChanged();
          return this;
        }
        /**
         * <code>optional string contentType = 1;</code>
         */
        public Builder setContentTypeBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          contentType_ = value;
          onChanged();
          return this;
        }

        // optional uint32 length = 2;
        private int length_ ;
        /**
         * <code>optional uint32 length = 2;</code>
         */
        public boolean hasLength() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional uint32 length = 2;</code>
         */
        public int getLength() {
          return length_;
        }
        /**
         * <code>optional uint32 length = 2;</code>
         */
        public Builder setLength(int value) {
          bitField0_ |= 0x00000002;
          length_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional uint32 length = 2;</code>
         */
        public Builder clearLength() {
          bitField0_ = (bitField0_ & ~0x00000002);
          length_ = 0;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:signalservice.ContactDetails.Avatar)
      }

      static {
        defaultInstance = new Avatar(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:signalservice.ContactDetails.Avatar)
    }

    private int bitField0_;
    // optional string number = 1;
    public static final int NUMBER_FIELD_NUMBER = 1;
    private java.lang.Object number_;
    /**
     * <code>optional string number = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasNumber() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string number = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public java.lang.String getNumber() {
      java.lang.Object ref = number_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          number_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string number = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public com.google.protobuf.ByteString
        getNumberBytes() {
      java.lang.Object ref = number_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        number_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

    // optional .signalservice.ContactDetails.Avatar avatar = 3;
    public static final int AVATAR_FIELD_NUMBER = 3;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar avatar_;
    /**
     * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
     */
    public boolean hasAvatar() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar getAvatar() {
      return avatar_;
    }
    /**
     * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.AvatarOrBuilder getAvatarOrBuilder() {
      return avatar_;
    }

    // optional string color = 4;
    public static final int COLOR_FIELD_NUMBER = 4;
    private java.lang.Object color_;
    /**
     * <code>optional string color = 4;</code>
     */
    public boolean hasColor() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string color = 4;</code>
     */
    public java.lang.String getColor() {
      java.lang.Object ref = color_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          color_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string color = 4;</code>
     */
    public com.google.protobuf.ByteString
        getColorBytes() {
      java.lang.Object ref = color_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        color_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bytes profileKey = 6;
    public static final int PROFILEKEY_FIELD_NUMBER = 6;
    private com.google.protobuf.ByteString profileKey_;
    /**
     * <code>optional bytes profileKey = 6;</code>
     */
    public boolean hasProfileKey() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional bytes profileKey = 6;</code>
     */
    public com.google.protobuf.ByteString getProfileKey() {
      return profileKey_;
    }

    // optional bool blocked = 7;
    public static final int BLOCKED_FIELD_NUMBER = 7;
    private boolean blocked_;
    /**
     * <code>optional bool blocked = 7;</code>
     */
    public boolean hasBlocked() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bool blocked = 7;</code>
     */
    public boolean getBlocked() {
      return blocked_;
    }

    // optional uint32 expireTimer = 8;
    public static final int EXPIRETIMER_FIELD_NUMBER = 8;
    private int expireTimer_;
    /**
     * <code>optional uint32 expireTimer = 8;</code>
     */
    public boolean hasExpireTimer() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional uint32 expireTimer = 8;</code>
     */
    public int getExpireTimer() {
      return expireTimer_;
    }

    // optional string nickname = 101;
    public static final int NICKNAME_FIELD_NUMBER = 101;
    private java.lang.Object nickname_;
    /**
     * <code>optional string nickname = 101;</code>
     */
    public boolean hasNickname() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional string nickname = 101;</code>
     */
    public java.lang.String getNickname() {
      java.lang.Object ref = nickname_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          nickname_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string nickname = 101;</code>
     */
    public com.google.protobuf.ByteString
        getNicknameBytes() {
      java.lang.Object ref = nickname_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        nickname_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      number_ = "";
      name_ = "";
      avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.getDefaultInstance();
      color_ = "";
      profileKey_ = com.google.protobuf.ByteString.EMPTY;
      blocked_ = false;
      expireTimer_ = 0;
      nickname_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNumberBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, avatar_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getColorBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(6, profileKey_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(7, blocked_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeUInt32(8, expireTimer_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBytes(101, getNicknameBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNumberBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, avatar_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getColorBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, profileKey_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(7, blocked_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(8, expireTimer_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(101, getNicknameBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code signalservice.ContactDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ContactDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ContactDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.class, org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Builder.class);
      }

      // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getAvatarFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        number_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (avatarBuilder_ == null) {
          avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.getDefaultInstance();
        } else {
          avatarBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        color_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        profileKey_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        blocked_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        expireTimer_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        nickname_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_ContactDetails_descriptor;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails getDefaultInstanceForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.getDefaultInstance();
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails build() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails buildPartial() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails result = new org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.number_ = number_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (avatarBuilder_ == null) {
          result.avatar_ = avatar_;
        } else {
          result.avatar_ = avatarBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.color_ = color_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.profileKey_ = profileKey_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.blocked_ = blocked_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.expireTimer_ = expireTimer_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.nickname_ = nickname_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails) {
          return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails other) {
        if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.getDefaultInstance()) return this;
        if (other.hasNumber()) {
          bitField0_ |= 0x00000001;
          number_ = other.number_;
          onChanged();
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000002;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasAvatar()) {
          mergeAvatar(other.getAvatar());
        }
        if (other.hasColor()) {
          bitField0_ |= 0x00000008;
          color_ = other.color_;
          onChanged();
        }
        if (other.hasProfileKey()) {
          setProfileKey(other.getProfileKey());
        }
        if (other.hasBlocked()) {
          setBlocked(other.getBlocked());
        }
        if (other.hasExpireTimer()) {
          setExpireTimer(other.getExpireTimer());
        }
        if (other.hasNickname()) {
          bitField0_ |= 0x00000080;
          nickname_ = other.nickname_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string number = 1;
      private java.lang.Object number_ = "";
      /**
       * <code>optional string number = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasNumber() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string number = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public java.lang.String getNumber() {
        java.lang.Object ref = number_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          number_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string number = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public com.google.protobuf.ByteString
          getNumberBytes() {
        java.lang.Object ref = number_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          number_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string number = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setNumber(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        number_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string number = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearNumber() {
        bitField0_ = (bitField0_ & ~0x00000001);
        number_ = getDefaultInstance().getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional string number = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setNumberBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        number_ = value;
        onChanged();
        return this;
      }

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

      // optional .signalservice.ContactDetails.Avatar avatar = 3;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar, org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.AvatarOrBuilder> avatarBuilder_;
      /**
       * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
       */
      public boolean hasAvatar() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar getAvatar() {
        if (avatarBuilder_ == null) {
          return avatar_;
        } else {
          return avatarBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
       */
      public Builder setAvatar(org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar value) {
        if (avatarBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          avatar_ = value;
          onChanged();
        } else {
          avatarBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
       */
      public Builder setAvatar(
          org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.Builder builderForValue) {
        if (avatarBuilder_ == null) {
          avatar_ = builderForValue.build();
          onChanged();
        } else {
          avatarBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
       */
      public Builder mergeAvatar(org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar value) {
        if (avatarBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              avatar_ != org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.getDefaultInstance()) {
            avatar_ =
              org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.newBuilder(avatar_).mergeFrom(value).buildPartial();
          } else {
            avatar_ = value;
          }
          onChanged();
        } else {
          avatarBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
       */
      public Builder clearAvatar() {
        if (avatarBuilder_ == null) {
          avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.getDefaultInstance();
          onChanged();
        } else {
          avatarBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.Builder getAvatarBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getAvatarFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.AvatarOrBuilder getAvatarOrBuilder() {
        if (avatarBuilder_ != null) {
          return avatarBuilder_.getMessageOrBuilder();
        } else {
          return avatar_;
        }
      }
      /**
       * <code>optional .signalservice.ContactDetails.Avatar avatar = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar, org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.AvatarOrBuilder> 
          getAvatarFieldBuilder() {
        if (avatarBuilder_ == null) {
          avatarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar, org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.Avatar.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.ContactDetails.AvatarOrBuilder>(
                  avatar_,
                  getParentForChildren(),
                  isClean());
          avatar_ = null;
        }
        return avatarBuilder_;
      }

      // optional string color = 4;
      private java.lang.Object color_ = "";
      /**
       * <code>optional string color = 4;</code>
       */
      public boolean hasColor() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string color = 4;</code>
       */
      public java.lang.String getColor() {
        java.lang.Object ref = color_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          color_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string color = 4;</code>
       */
      public com.google.protobuf.ByteString
          getColorBytes() {
        java.lang.Object ref = color_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          color_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string color = 4;</code>
       */
      public Builder setColor(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        color_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string color = 4;</code>
       */
      public Builder clearColor() {
        bitField0_ = (bitField0_ & ~0x00000008);
        color_ = getDefaultInstance().getColor();
        onChanged();
        return this;
      }
      /**
       * <code>optional string color = 4;</code>
       */
      public Builder setColorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        color_ = value;
        onChanged();
        return this;
      }

      // optional bytes profileKey = 6;
      private com.google.protobuf.ByteString profileKey_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes profileKey = 6;</code>
       */
      public boolean hasProfileKey() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bytes profileKey = 6;</code>
       */
      public com.google.protobuf.ByteString getProfileKey() {
        return profileKey_;
      }
      /**
       * <code>optional bytes profileKey = 6;</code>
       */
      public Builder setProfileKey(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        profileKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes profileKey = 6;</code>
       */
      public Builder clearProfileKey() {
        bitField0_ = (bitField0_ & ~0x00000010);
        profileKey_ = getDefaultInstance().getProfileKey();
        onChanged();
        return this;
      }

      // optional bool blocked = 7;
      private boolean blocked_ ;
      /**
       * <code>optional bool blocked = 7;</code>
       */
      public boolean hasBlocked() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool blocked = 7;</code>
       */
      public boolean getBlocked() {
        return blocked_;
      }
      /**
       * <code>optional bool blocked = 7;</code>
       */
      public Builder setBlocked(boolean value) {
        bitField0_ |= 0x00000020;
        blocked_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool blocked = 7;</code>
       */
      public Builder clearBlocked() {
        bitField0_ = (bitField0_ & ~0x00000020);
        blocked_ = false;
        onChanged();
        return this;
      }

      // optional uint32 expireTimer = 8;
      private int expireTimer_ ;
      /**
       * <code>optional uint32 expireTimer = 8;</code>
       */
      public boolean hasExpireTimer() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional uint32 expireTimer = 8;</code>
       */
      public int getExpireTimer() {
        return expireTimer_;
      }
      /**
       * <code>optional uint32 expireTimer = 8;</code>
       */
      public Builder setExpireTimer(int value) {
        bitField0_ |= 0x00000040;
        expireTimer_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 expireTimer = 8;</code>
       */
      public Builder clearExpireTimer() {
        bitField0_ = (bitField0_ & ~0x00000040);
        expireTimer_ = 0;
        onChanged();
        return this;
      }

      // optional string nickname = 101;
      private java.lang.Object nickname_ = "";
      /**
       * <code>optional string nickname = 101;</code>
       */
      public boolean hasNickname() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string nickname = 101;</code>
       */
      public java.lang.String getNickname() {
        java.lang.Object ref = nickname_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          nickname_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string nickname = 101;</code>
       */
      public com.google.protobuf.ByteString
          getNicknameBytes() {
        java.lang.Object ref = nickname_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          nickname_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string nickname = 101;</code>
       */
      public Builder setNickname(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        nickname_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string nickname = 101;</code>
       */
      public Builder clearNickname() {
        bitField0_ = (bitField0_ & ~0x00000080);
        nickname_ = getDefaultInstance().getNickname();
        onChanged();
        return this;
      }
      /**
       * <code>optional string nickname = 101;</code>
       */
      public Builder setNicknameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        nickname_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:signalservice.ContactDetails)
    }

    static {
      defaultInstance = new ContactDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:signalservice.ContactDetails)
  }

  public interface GroupDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bytes id = 1;
    /**
     * <code>optional bytes id = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    boolean hasId();
    /**
     * <code>optional bytes id = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    com.google.protobuf.ByteString getId();

    // optional string name = 2;
    /**
     * <code>optional string name = 2;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 2;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 2;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // repeated string members = 3;
    /**
     * <code>repeated string members = 3;</code>
     */
    java.util.List<java.lang.String>
    getMembersList();
    /**
     * <code>repeated string members = 3;</code>
     */
    int getMembersCount();
    /**
     * <code>repeated string members = 3;</code>
     */
    java.lang.String getMembers(int index);
    /**
     * <code>repeated string members = 3;</code>
     */
    com.google.protobuf.ByteString
        getMembersBytes(int index);

    // optional .signalservice.GroupDetails.Avatar avatar = 4;
    /**
     * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
     */
    boolean hasAvatar();
    /**
     * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar getAvatar();
    /**
     * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
     */
    org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.AvatarOrBuilder getAvatarOrBuilder();

    // optional bool active = 5 [default = true];
    /**
     * <code>optional bool active = 5 [default = true];</code>
     */
    boolean hasActive();
    /**
     * <code>optional bool active = 5 [default = true];</code>
     */
    boolean getActive();

    // optional uint32 expireTimer = 6;
    /**
     * <code>optional uint32 expireTimer = 6;</code>
     */
    boolean hasExpireTimer();
    /**
     * <code>optional uint32 expireTimer = 6;</code>
     */
    int getExpireTimer();

    // optional string color = 7;
    /**
     * <code>optional string color = 7;</code>
     */
    boolean hasColor();
    /**
     * <code>optional string color = 7;</code>
     */
    java.lang.String getColor();
    /**
     * <code>optional string color = 7;</code>
     */
    com.google.protobuf.ByteString
        getColorBytes();

    // optional bool blocked = 8;
    /**
     * <code>optional bool blocked = 8;</code>
     */
    boolean hasBlocked();
    /**
     * <code>optional bool blocked = 8;</code>
     */
    boolean getBlocked();

    // repeated string admins = 9;
    /**
     * <code>repeated string admins = 9;</code>
     */
    java.util.List<java.lang.String>
    getAdminsList();
    /**
     * <code>repeated string admins = 9;</code>
     */
    int getAdminsCount();
    /**
     * <code>repeated string admins = 9;</code>
     */
    java.lang.String getAdmins(int index);
    /**
     * <code>repeated string admins = 9;</code>
     */
    com.google.protobuf.ByteString
        getAdminsBytes(int index);
  }
  /**
   * Protobuf type {@code signalservice.GroupDetails}
   */
  public static final class GroupDetails extends
      com.google.protobuf.GeneratedMessage
      implements GroupDetailsOrBuilder {
    // Use GroupDetails.newBuilder() to construct.
    private GroupDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GroupDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GroupDetails defaultInstance;
    public static GroupDetails getDefaultInstance() {
      return defaultInstance;
    }

    public GroupDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GroupDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              id_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              name_ = input.readBytes();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                members_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000004;
              }
              members_.add(input.readBytes());
              break;
            }
            case 34: {
              org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = avatar_.toBuilder();
              }
              avatar_ = input.readMessage(org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(avatar_);
                avatar_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 40: {
              bitField0_ |= 0x00000008;
              active_ = input.readBool();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000010;
              expireTimer_ = input.readUInt32();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000020;
              color_ = input.readBytes();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000040;
              blocked_ = input.readBool();
              break;
            }
            case 74: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                admins_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000100;
              }
              admins_.add(input.readBytes());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          members_ = new com.google.protobuf.UnmodifiableLazyStringList(members_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          admins_ = new com.google.protobuf.UnmodifiableLazyStringList(admins_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.class, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<GroupDetails> PARSER =
        new com.google.protobuf.AbstractParser<GroupDetails>() {
      public GroupDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GroupDetails(input, extensionRegistry);
      }
    };

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

    public interface AvatarOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // optional string contentType = 1;
      /**
       * <code>optional string contentType = 1;</code>
       */
      boolean hasContentType();
      /**
       * <code>optional string contentType = 1;</code>
       */
      java.lang.String getContentType();
      /**
       * <code>optional string contentType = 1;</code>
       */
      com.google.protobuf.ByteString
          getContentTypeBytes();

      // optional uint32 length = 2;
      /**
       * <code>optional uint32 length = 2;</code>
       */
      boolean hasLength();
      /**
       * <code>optional uint32 length = 2;</code>
       */
      int getLength();
    }
    /**
     * Protobuf type {@code signalservice.GroupDetails.Avatar}
     */
    public static final class Avatar extends
        com.google.protobuf.GeneratedMessage
        implements AvatarOrBuilder {
      // Use Avatar.newBuilder() to construct.
      private Avatar(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Avatar(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final Avatar defaultInstance;
      public static Avatar getDefaultInstance() {
        return defaultInstance;
      }

      public Avatar getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Avatar(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                contentType_ = input.readBytes();
                break;
              }
              case 16: {
                bitField0_ |= 0x00000002;
                length_ = input.readUInt32();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupDetails_Avatar_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupDetails_Avatar_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.class, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.Builder.class);
      }

      public static com.google.protobuf.Parser<Avatar> PARSER =
          new com.google.protobuf.AbstractParser<Avatar>() {
        public Avatar parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Avatar(input, extensionRegistry);
        }
      };

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

      private int bitField0_;
      // optional string contentType = 1;
      public static final int CONTENTTYPE_FIELD_NUMBER = 1;
      private java.lang.Object contentType_;
      /**
       * <code>optional string contentType = 1;</code>
       */
      public boolean hasContentType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string contentType = 1;</code>
       */
      public java.lang.String getContentType() {
        java.lang.Object ref = contentType_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            contentType_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string contentType = 1;</code>
       */
      public com.google.protobuf.ByteString
          getContentTypeBytes() {
        java.lang.Object ref = contentType_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          contentType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // optional uint32 length = 2;
      public static final int LENGTH_FIELD_NUMBER = 2;
      private int length_;
      /**
       * <code>optional uint32 length = 2;</code>
       */
      public boolean hasLength() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional uint32 length = 2;</code>
       */
      public int getLength() {
        return length_;
      }

      private void initFields() {
        contentType_ = "";
        length_ = 0;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, getContentTypeBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeUInt32(2, length_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, getContentTypeBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt32Size(2, length_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code signalservice.GroupDetails.Avatar}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.AvatarOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupDetails_Avatar_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupDetails_Avatar_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.class, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.Builder.class);
        }

        // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          contentType_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          length_ = 0;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupDetails_Avatar_descriptor;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar getDefaultInstanceForType() {
          return org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.getDefaultInstance();
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar build() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar buildPartial() {
          org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar result = new org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.contentType_ = contentType_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.length_ = length_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar) {
            return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar other) {
          if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.getDefaultInstance()) return this;
          if (other.hasContentType()) {
            bitField0_ |= 0x00000001;
            contentType_ = other.contentType_;
            onChanged();
          }
          if (other.hasLength()) {
            setLength(other.getLength());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        // optional string contentType = 1;
        private java.lang.Object contentType_ = "";
        /**
         * <code>optional string contentType = 1;</code>
         */
        public boolean hasContentType() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string contentType = 1;</code>
         */
        public java.lang.String getContentType() {
          java.lang.Object ref = contentType_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            contentType_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string contentType = 1;</code>
         */
        public com.google.protobuf.ByteString
            getContentTypeBytes() {
          java.lang.Object ref = contentType_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            contentType_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string contentType = 1;</code>
         */
        public Builder setContentType(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          contentType_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string contentType = 1;</code>
         */
        public Builder clearContentType() {
          bitField0_ = (bitField0_ & ~0x00000001);
          contentType_ = getDefaultInstance().getContentType();
          onChanged();
          return this;
        }
        /**
         * <code>optional string contentType = 1;</code>
         */
        public Builder setContentTypeBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          contentType_ = value;
          onChanged();
          return this;
        }

        // optional uint32 length = 2;
        private int length_ ;
        /**
         * <code>optional uint32 length = 2;</code>
         */
        public boolean hasLength() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional uint32 length = 2;</code>
         */
        public int getLength() {
          return length_;
        }
        /**
         * <code>optional uint32 length = 2;</code>
         */
        public Builder setLength(int value) {
          bitField0_ |= 0x00000002;
          length_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional uint32 length = 2;</code>
         */
        public Builder clearLength() {
          bitField0_ = (bitField0_ & ~0x00000002);
          length_ = 0;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:signalservice.GroupDetails.Avatar)
      }

      static {
        defaultInstance = new Avatar(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:signalservice.GroupDetails.Avatar)
    }

    private int bitField0_;
    // optional bytes id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString id_;
    /**
     * <code>optional bytes id = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bytes id = 1;</code>
     *
     * <pre>
     * @required
     * </pre>
     */
    public com.google.protobuf.ByteString getId() {
      return id_;
    }

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

    // repeated string members = 3;
    public static final int MEMBERS_FIELD_NUMBER = 3;
    private com.google.protobuf.LazyStringList members_;
    /**
     * <code>repeated string members = 3;</code>
     */
    public java.util.List<java.lang.String>
        getMembersList() {
      return members_;
    }
    /**
     * <code>repeated string members = 3;</code>
     */
    public int getMembersCount() {
      return members_.size();
    }
    /**
     * <code>repeated string members = 3;</code>
     */
    public java.lang.String getMembers(int index) {
      return members_.get(index);
    }
    /**
     * <code>repeated string members = 3;</code>
     */
    public com.google.protobuf.ByteString
        getMembersBytes(int index) {
      return members_.getByteString(index);
    }

    // optional .signalservice.GroupDetails.Avatar avatar = 4;
    public static final int AVATAR_FIELD_NUMBER = 4;
    private org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar avatar_;
    /**
     * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
     */
    public boolean hasAvatar() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar getAvatar() {
      return avatar_;
    }
    /**
     * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
     */
    public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.AvatarOrBuilder getAvatarOrBuilder() {
      return avatar_;
    }

    // optional bool active = 5 [default = true];
    public static final int ACTIVE_FIELD_NUMBER = 5;
    private boolean active_;
    /**
     * <code>optional bool active = 5 [default = true];</code>
     */
    public boolean hasActive() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool active = 5 [default = true];</code>
     */
    public boolean getActive() {
      return active_;
    }

    // optional uint32 expireTimer = 6;
    public static final int EXPIRETIMER_FIELD_NUMBER = 6;
    private int expireTimer_;
    /**
     * <code>optional uint32 expireTimer = 6;</code>
     */
    public boolean hasExpireTimer() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional uint32 expireTimer = 6;</code>
     */
    public int getExpireTimer() {
      return expireTimer_;
    }

    // optional string color = 7;
    public static final int COLOR_FIELD_NUMBER = 7;
    private java.lang.Object color_;
    /**
     * <code>optional string color = 7;</code>
     */
    public boolean hasColor() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string color = 7;</code>
     */
    public java.lang.String getColor() {
      java.lang.Object ref = color_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          color_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string color = 7;</code>
     */
    public com.google.protobuf.ByteString
        getColorBytes() {
      java.lang.Object ref = color_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        color_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool blocked = 8;
    public static final int BLOCKED_FIELD_NUMBER = 8;
    private boolean blocked_;
    /**
     * <code>optional bool blocked = 8;</code>
     */
    public boolean hasBlocked() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional bool blocked = 8;</code>
     */
    public boolean getBlocked() {
      return blocked_;
    }

    // repeated string admins = 9;
    public static final int ADMINS_FIELD_NUMBER = 9;
    private com.google.protobuf.LazyStringList admins_;
    /**
     * <code>repeated string admins = 9;</code>
     */
    public java.util.List<java.lang.String>
        getAdminsList() {
      return admins_;
    }
    /**
     * <code>repeated string admins = 9;</code>
     */
    public int getAdminsCount() {
      return admins_.size();
    }
    /**
     * <code>repeated string admins = 9;</code>
     */
    public java.lang.String getAdmins(int index) {
      return admins_.get(index);
    }
    /**
     * <code>repeated string admins = 9;</code>
     */
    public com.google.protobuf.ByteString
        getAdminsBytes(int index) {
      return admins_.getByteString(index);
    }

    private void initFields() {
      id_ = com.google.protobuf.ByteString.EMPTY;
      name_ = "";
      members_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.getDefaultInstance();
      active_ = true;
      expireTimer_ = 0;
      color_ = "";
      blocked_ = false;
      admins_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getNameBytes());
      }
      for (int i = 0; i < members_.size(); i++) {
        output.writeBytes(3, members_.getByteString(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(4, avatar_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(5, active_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeUInt32(6, expireTimer_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(7, getColorBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBool(8, blocked_);
      }
      for (int i = 0; i < admins_.size(); i++) {
        output.writeBytes(9, admins_.getByteString(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, id_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getNameBytes());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < members_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(members_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getMembersList().size();
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, avatar_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, active_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, expireTimer_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getColorBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(8, blocked_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < admins_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(admins_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getAdminsList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code signalservice.GroupDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.class, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Builder.class);
      }

      // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getAvatarFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        members_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (avatarBuilder_ == null) {
          avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.getDefaultInstance();
        } else {
          avatarBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        active_ = true;
        bitField0_ = (bitField0_ & ~0x00000010);
        expireTimer_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        color_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        blocked_ = false;
        bitField0_ = (bitField0_ & ~0x00000080);
        admins_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_GroupDetails_descriptor;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails getDefaultInstanceForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.getDefaultInstance();
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails build() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails buildPartial() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails result = new org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          members_ = new com.google.protobuf.UnmodifiableLazyStringList(
              members_);
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.members_ = members_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        if (avatarBuilder_ == null) {
          result.avatar_ = avatar_;
        } else {
          result.avatar_ = avatarBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.active_ = active_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        result.expireTimer_ = expireTimer_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000020;
        }
        result.color_ = color_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000040;
        }
        result.blocked_ = blocked_;
        if (((bitField0_ & 0x00000100) == 0x00000100)) {
          admins_ = new com.google.protobuf.UnmodifiableLazyStringList(
              admins_);
          bitField0_ = (bitField0_ & ~0x00000100);
        }
        result.admins_ = admins_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails) {
          return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails other) {
        if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000002;
          name_ = other.name_;
          onChanged();
        }
        if (!other.members_.isEmpty()) {
          if (members_.isEmpty()) {
            members_ = other.members_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureMembersIsMutable();
            members_.addAll(other.members_);
          }
          onChanged();
        }
        if (other.hasAvatar()) {
          mergeAvatar(other.getAvatar());
        }
        if (other.hasActive()) {
          setActive(other.getActive());
        }
        if (other.hasExpireTimer()) {
          setExpireTimer(other.getExpireTimer());
        }
        if (other.hasColor()) {
          bitField0_ |= 0x00000040;
          color_ = other.color_;
          onChanged();
        }
        if (other.hasBlocked()) {
          setBlocked(other.getBlocked());
        }
        if (!other.admins_.isEmpty()) {
          if (admins_.isEmpty()) {
            admins_ = other.admins_;
            bitField0_ = (bitField0_ & ~0x00000100);
          } else {
            ensureAdminsIsMutable();
            admins_.addAll(other.admins_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bytes id = 1;
      private com.google.protobuf.ByteString id_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bytes id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public com.google.protobuf.ByteString getId() {
        return id_;
      }
      /**
       * <code>optional bytes id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder setId(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes id = 1;</code>
       *
       * <pre>
       * @required
       * </pre>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = getDefaultInstance().getId();
        onChanged();
        return this;
      }

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

      // repeated string members = 3;
      private com.google.protobuf.LazyStringList members_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureMembersIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          members_ = new com.google.protobuf.LazyStringArrayList(members_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated string members = 3;</code>
       */
      public java.util.List<java.lang.String>
          getMembersList() {
        return java.util.Collections.unmodifiableList(members_);
      }
      /**
       * <code>repeated string members = 3;</code>
       */
      public int getMembersCount() {
        return members_.size();
      }
      /**
       * <code>repeated string members = 3;</code>
       */
      public java.lang.String getMembers(int index) {
        return members_.get(index);
      }
      /**
       * <code>repeated string members = 3;</code>
       */
      public com.google.protobuf.ByteString
          getMembersBytes(int index) {
        return members_.getByteString(index);
      }
      /**
       * <code>repeated string members = 3;</code>
       */
      public Builder setMembers(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMembersIsMutable();
        members_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string members = 3;</code>
       */
      public Builder addMembers(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMembersIsMutable();
        members_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string members = 3;</code>
       */
      public Builder addAllMembers(
          java.lang.Iterable<java.lang.String> values) {
        ensureMembersIsMutable();
        super.addAll(values, members_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string members = 3;</code>
       */
      public Builder clearMembers() {
        members_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string members = 3;</code>
       */
      public Builder addMembersBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMembersIsMutable();
        members_.add(value);
        onChanged();
        return this;
      }

      // optional .signalservice.GroupDetails.Avatar avatar = 4;
      private org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.AvatarOrBuilder> avatarBuilder_;
      /**
       * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
       */
      public boolean hasAvatar() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar getAvatar() {
        if (avatarBuilder_ == null) {
          return avatar_;
        } else {
          return avatarBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
       */
      public Builder setAvatar(org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar value) {
        if (avatarBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          avatar_ = value;
          onChanged();
        } else {
          avatarBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
       */
      public Builder setAvatar(
          org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.Builder builderForValue) {
        if (avatarBuilder_ == null) {
          avatar_ = builderForValue.build();
          onChanged();
        } else {
          avatarBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
       */
      public Builder mergeAvatar(org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar value) {
        if (avatarBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              avatar_ != org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.getDefaultInstance()) {
            avatar_ =
              org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.newBuilder(avatar_).mergeFrom(value).buildPartial();
          } else {
            avatar_ = value;
          }
          onChanged();
        } else {
          avatarBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
       */
      public Builder clearAvatar() {
        if (avatarBuilder_ == null) {
          avatar_ = org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.getDefaultInstance();
          onChanged();
        } else {
          avatarBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.Builder getAvatarBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getAvatarFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
       */
      public org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.AvatarOrBuilder getAvatarOrBuilder() {
        if (avatarBuilder_ != null) {
          return avatarBuilder_.getMessageOrBuilder();
        } else {
          return avatar_;
        }
      }
      /**
       * <code>optional .signalservice.GroupDetails.Avatar avatar = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.AvatarOrBuilder> 
          getAvatarFieldBuilder() {
        if (avatarBuilder_ == null) {
          avatarBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.Avatar.Builder, org.session.libsignal.service.internal.push.SignalServiceProtos.GroupDetails.AvatarOrBuilder>(
                  avatar_,
                  getParentForChildren(),
                  isClean());
          avatar_ = null;
        }
        return avatarBuilder_;
      }

      // optional bool active = 5 [default = true];
      private boolean active_ = true;
      /**
       * <code>optional bool active = 5 [default = true];</code>
       */
      public boolean hasActive() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bool active = 5 [default = true];</code>
       */
      public boolean getActive() {
        return active_;
      }
      /**
       * <code>optional bool active = 5 [default = true];</code>
       */
      public Builder setActive(boolean value) {
        bitField0_ |= 0x00000010;
        active_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool active = 5 [default = true];</code>
       */
      public Builder clearActive() {
        bitField0_ = (bitField0_ & ~0x00000010);
        active_ = true;
        onChanged();
        return this;
      }

      // optional uint32 expireTimer = 6;
      private int expireTimer_ ;
      /**
       * <code>optional uint32 expireTimer = 6;</code>
       */
      public boolean hasExpireTimer() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional uint32 expireTimer = 6;</code>
       */
      public int getExpireTimer() {
        return expireTimer_;
      }
      /**
       * <code>optional uint32 expireTimer = 6;</code>
       */
      public Builder setExpireTimer(int value) {
        bitField0_ |= 0x00000020;
        expireTimer_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 expireTimer = 6;</code>
       */
      public Builder clearExpireTimer() {
        bitField0_ = (bitField0_ & ~0x00000020);
        expireTimer_ = 0;
        onChanged();
        return this;
      }

      // optional string color = 7;
      private java.lang.Object color_ = "";
      /**
       * <code>optional string color = 7;</code>
       */
      public boolean hasColor() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string color = 7;</code>
       */
      public java.lang.String getColor() {
        java.lang.Object ref = color_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          color_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string color = 7;</code>
       */
      public com.google.protobuf.ByteString
          getColorBytes() {
        java.lang.Object ref = color_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          color_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string color = 7;</code>
       */
      public Builder setColor(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        color_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string color = 7;</code>
       */
      public Builder clearColor() {
        bitField0_ = (bitField0_ & ~0x00000040);
        color_ = getDefaultInstance().getColor();
        onChanged();
        return this;
      }
      /**
       * <code>optional string color = 7;</code>
       */
      public Builder setColorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        color_ = value;
        onChanged();
        return this;
      }

      // optional bool blocked = 8;
      private boolean blocked_ ;
      /**
       * <code>optional bool blocked = 8;</code>
       */
      public boolean hasBlocked() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional bool blocked = 8;</code>
       */
      public boolean getBlocked() {
        return blocked_;
      }
      /**
       * <code>optional bool blocked = 8;</code>
       */
      public Builder setBlocked(boolean value) {
        bitField0_ |= 0x00000080;
        blocked_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool blocked = 8;</code>
       */
      public Builder clearBlocked() {
        bitField0_ = (bitField0_ & ~0x00000080);
        blocked_ = false;
        onChanged();
        return this;
      }

      // repeated string admins = 9;
      private com.google.protobuf.LazyStringList admins_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureAdminsIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          admins_ = new com.google.protobuf.LazyStringArrayList(admins_);
          bitField0_ |= 0x00000100;
         }
      }
      /**
       * <code>repeated string admins = 9;</code>
       */
      public java.util.List<java.lang.String>
          getAdminsList() {
        return java.util.Collections.unmodifiableList(admins_);
      }
      /**
       * <code>repeated string admins = 9;</code>
       */
      public int getAdminsCount() {
        return admins_.size();
      }
      /**
       * <code>repeated string admins = 9;</code>
       */
      public java.lang.String getAdmins(int index) {
        return admins_.get(index);
      }
      /**
       * <code>repeated string admins = 9;</code>
       */
      public com.google.protobuf.ByteString
          getAdminsBytes(int index) {
        return admins_.getByteString(index);
      }
      /**
       * <code>repeated string admins = 9;</code>
       */
      public Builder setAdmins(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAdminsIsMutable();
        admins_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string admins = 9;</code>
       */
      public Builder addAdmins(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAdminsIsMutable();
        admins_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string admins = 9;</code>
       */
      public Builder addAllAdmins(
          java.lang.Iterable<java.lang.String> values) {
        ensureAdminsIsMutable();
        super.addAll(values, admins_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string admins = 9;</code>
       */
      public Builder clearAdmins() {
        admins_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string admins = 9;</code>
       */
      public Builder addAdminsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAdminsIsMutable();
        admins_.add(value);
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:signalservice.GroupDetails)
    }

    static {
      defaultInstance = new GroupDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:signalservice.GroupDetails)
  }

  public interface PublicChatInfoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional uint64 serverID = 1;
    /**
     * <code>optional uint64 serverID = 1;</code>
     */
    boolean hasServerID();
    /**
     * <code>optional uint64 serverID = 1;</code>
     */
    long getServerID();
  }
  /**
   * Protobuf type {@code signalservice.PublicChatInfo}
   *
   * <pre>
   * Intended for internal use only
   * </pre>
   */
  public static final class PublicChatInfo extends
      com.google.protobuf.GeneratedMessage
      implements PublicChatInfoOrBuilder {
    // Use PublicChatInfo.newBuilder() to construct.
    private PublicChatInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PublicChatInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final PublicChatInfo defaultInstance;
    public static PublicChatInfo getDefaultInstance() {
      return defaultInstance;
    }

    public PublicChatInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PublicChatInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              serverID_ = input.readUInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_PublicChatInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_PublicChatInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.class, org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.Builder.class);
    }

    public static com.google.protobuf.Parser<PublicChatInfo> PARSER =
        new com.google.protobuf.AbstractParser<PublicChatInfo>() {
      public PublicChatInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PublicChatInfo(input, extensionRegistry);
      }
    };

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

    private int bitField0_;
    // optional uint64 serverID = 1;
    public static final int SERVERID_FIELD_NUMBER = 1;
    private long serverID_;
    /**
     * <code>optional uint64 serverID = 1;</code>
     */
    public boolean hasServerID() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional uint64 serverID = 1;</code>
     */
    public long getServerID() {
      return serverID_;
    }

    private void initFields() {
      serverID_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt64(1, serverID_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(1, serverID_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code signalservice.PublicChatInfo}
     *
     * <pre>
     * Intended for internal use only
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_PublicChatInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_PublicChatInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.class, org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.Builder.class);
      }

      // Construct using org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        serverID_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.internal_static_signalservice_PublicChatInfo_descriptor;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo getDefaultInstanceForType() {
        return org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.getDefaultInstance();
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo build() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo buildPartial() {
        org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo result = new org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.serverID_ = serverID_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo) {
          return mergeFrom((org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo other) {
        if (other == org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo.getDefaultInstance()) return this;
        if (other.hasServerID()) {
          setServerID(other.getServerID());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.session.libsignal.service.internal.push.SignalServiceProtos.PublicChatInfo) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional uint64 serverID = 1;
      private long serverID_ ;
      /**
       * <code>optional uint64 serverID = 1;</code>
       */
      public boolean hasServerID() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional uint64 serverID = 1;</code>
       */
      public long getServerID() {
        return serverID_;
      }
      /**
       * <code>optional uint64 serverID = 1;</code>
       */
      public Builder setServerID(long value) {
        bitField0_ |= 0x00000001;
        serverID_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 serverID = 1;</code>
       */
      public Builder clearServerID() {
        bitField0_ = (bitField0_ & ~0x00000001);
        serverID_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:signalservice.PublicChatInfo)
    }

    static {
      defaultInstance = new PublicChatInfo(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:signalservice.PublicChatInfo)
  }

  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_Envelope_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_Envelope_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_TypingMessage_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_TypingMessage_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_Content_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_Content_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_ClosedGroupCiphertextMessageWrapper_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_ClosedGroupCiphertextMessageWrapper_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_KeyPair_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_KeyPair_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_DataMessage_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_DataMessage_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_DataMessage_Quote_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_DataMessage_Quote_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_DataMessage_Quote_QuotedAttachment_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_DataMessage_Quote_QuotedAttachment_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_DataMessage_Contact_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_DataMessage_Contact_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_DataMessage_Contact_Name_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_DataMessage_Contact_Name_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_DataMessage_Contact_Phone_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_DataMessage_Contact_Phone_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_DataMessage_Contact_Email_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_DataMessage_Contact_Email_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_DataMessage_Contact_PostalAddress_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_DataMessage_Contact_PostalAddress_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_DataMessage_Contact_Avatar_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_DataMessage_Contact_Avatar_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_DataMessage_Preview_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_DataMessage_Preview_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_DataMessage_LokiProfile_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_DataMessage_LokiProfile_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_DataMessage_ClosedGroupControlMessage_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_DataMessage_ClosedGroupControlMessage_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_DataMessage_ClosedGroupControlMessage_KeyPairWrapper_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_DataMessage_ClosedGroupControlMessage_KeyPairWrapper_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_ConfigurationMessage_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_ConfigurationMessage_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_ConfigurationMessage_ClosedGroup_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_ConfigurationMessage_ClosedGroup_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_ConfigurationMessage_Contact_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_ConfigurationMessage_Contact_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_ReceiptMessage_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_ReceiptMessage_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_AttachmentPointer_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_AttachmentPointer_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_GroupContext_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_GroupContext_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_ContactDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_ContactDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_ContactDetails_Avatar_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_ContactDetails_Avatar_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_GroupDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_GroupDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_GroupDetails_Avatar_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_GroupDetails_Avatar_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_signalservice_PublicChatInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_signalservice_PublicChatInfo_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\023SignalService.proto\022\rsignalservice\"\327\001\n" +
      "\010Envelope\022*\n\004type\030\001 \002(\0162\034.signalservice." +
      "Envelope.Type\022\016\n\006source\030\002 \001(\t\022\024\n\014sourceD" +
      "evice\030\007 \001(\r\022\021\n\ttimestamp\030\005 \001(\004\022\017\n\007conten" +
      "t\030\010 \001(\014\022\027\n\017serverTimestamp\030\n \001(\004\"<\n\004Type" +
      "\022\027\n\023UNIDENTIFIED_SENDER\020\006\022\033\n\027CLOSED_GROU" +
      "P_CIPHERTEXT\020\007\"{\n\rTypingMessage\022\021\n\ttimes" +
      "tamp\030\001 \001(\004\0223\n\006action\030\002 \001(\0162#.signalservi" +
      "ce.TypingMessage.Action\"\"\n\006Action\022\013\n\007STA" +
      "RTED\020\000\022\013\n\007STOPPED\020\001\"\351\001\n\007Content\022/\n\013dataM",
      "essage\030\001 \001(\0132\032.signalservice.DataMessage" +
      "\0225\n\016receiptMessage\030\005 \001(\0132\035.signalservice" +
      ".ReceiptMessage\0223\n\rtypingMessage\030\006 \001(\0132\034" +
      ".signalservice.TypingMessage\022A\n\024configur" +
      "ationMessage\030\007 \001(\0132#.signalservice.Confi" +
      "gurationMessage\"U\n#ClosedGroupCiphertext" +
      "MessageWrapper\022\022\n\nciphertext\030\001 \001(\014\022\032\n\022ep" +
      "hemeralPublicKey\030\002 \001(\014\"0\n\007KeyPair\022\021\n\tpub" +
      "licKey\030\001 \002(\014\022\022\n\nprivateKey\030\002 \002(\014\"\357\024\n\013Dat" +
      "aMessage\022\014\n\004body\030\001 \001(\t\0225\n\013attachments\030\002 ",
      "\003(\0132 .signalservice.AttachmentPointer\022*\n" +
      "\005group\030\003 \001(\0132\033.signalservice.GroupContex" +
      "t\022\r\n\005flags\030\004 \001(\r\022\023\n\013expireTimer\030\005 \001(\r\022\022\n" +
      "\nprofileKey\030\006 \001(\014\022\021\n\ttimestamp\030\007 \001(\004\022/\n\005" +
      "quote\030\010 \001(\0132 .signalservice.DataMessage." +
      "Quote\0223\n\007contact\030\t \003(\0132\".signalservice.D" +
      "ataMessage.Contact\0223\n\007preview\030\n \003(\0132\".si" +
      "gnalservice.DataMessage.Preview\0227\n\007profi" +
      "le\030e \001(\0132&.signalservice.DataMessage.Lok" +
      "iProfile\022W\n\031closedGroupControlMessage\030h ",
      "\001(\01324.signalservice.DataMessage.ClosedGr" +
      "oupControlMessage\022\022\n\nsyncTarget\030i \001(\t\0226\n" +
      "\016publicChatInfo\030\347\007 \001(\0132\035.signalservice.P" +
      "ublicChatInfo\032\225\002\n\005Quote\022\n\n\002id\030\001 \001(\004\022\016\n\006a" +
      "uthor\030\002 \001(\t\022\014\n\004text\030\003 \001(\t\022F\n\013attachments" +
      "\030\004 \003(\01321.signalservice.DataMessage.Quote" +
      ".QuotedAttachment\032\231\001\n\020QuotedAttachment\022\023" +
      "\n\013contentType\030\001 \001(\t\022\020\n\010fileName\030\002 \001(\t\0223\n" +
      "\tthumbnail\030\003 \001(\0132 .signalservice.Attachm" +
      "entPointer\022\r\n\005flags\030\004 \001(\r\"\032\n\005Flags\022\021\n\rVO",
      "ICE_MESSAGE\020\001\032\304\010\n\007Contact\0225\n\004name\030\001 \001(\0132" +
      "\'.signalservice.DataMessage.Contact.Name" +
      "\0228\n\006number\030\003 \003(\0132(.signalservice.DataMes" +
      "sage.Contact.Phone\0227\n\005email\030\004 \003(\0132(.sign" +
      "alservice.DataMessage.Contact.Email\022A\n\007a" +
      "ddress\030\005 \003(\01320.signalservice.DataMessage" +
      ".Contact.PostalAddress\0229\n\006avatar\030\006 \001(\0132)" +
      ".signalservice.DataMessage.Contact.Avata" +
      "r\022\024\n\014organization\030\007 \001(\t\032v\n\004Name\022\021\n\tgiven" +
      "Name\030\001 \001(\t\022\022\n\nfamilyName\030\002 \001(\t\022\016\n\006prefix",
      "\030\003 \001(\t\022\016\n\006suffix\030\004 \001(\t\022\022\n\nmiddleName\030\005 \001" +
      "(\t\022\023\n\013displayName\030\006 \001(\t\032\226\001\n\005Phone\022\r\n\005val" +
      "ue\030\001 \001(\t\022;\n\004type\030\002 \001(\0162-.signalservice.D" +
      "ataMessage.Contact.Phone.Type\022\r\n\005label\030\003" +
      " \001(\t\"2\n\004Type\022\010\n\004HOME\020\001\022\n\n\006MOBILE\020\002\022\010\n\004WO" +
      "RK\020\003\022\n\n\006CUSTOM\020\004\032\226\001\n\005Email\022\r\n\005value\030\001 \001(" +
      "\t\022;\n\004type\030\002 \001(\0162-.signalservice.DataMess" +
      "age.Contact.Email.Type\022\r\n\005label\030\003 \001(\t\"2\n" +
      "\004Type\022\010\n\004HOME\020\001\022\n\n\006MOBILE\020\002\022\010\n\004WORK\020\003\022\n\n" +
      "\006CUSTOM\020\004\032\201\002\n\rPostalAddress\022C\n\004type\030\001 \001(",
      "\01625.signalservice.DataMessage.Contact.Po" +
      "stalAddress.Type\022\r\n\005label\030\002 \001(\t\022\016\n\006stree" +
      "t\030\003 \001(\t\022\r\n\005pobox\030\004 \001(\t\022\024\n\014neighborhood\030\005" +
      " \001(\t\022\014\n\004city\030\006 \001(\t\022\016\n\006region\030\007 \001(\t\022\020\n\010po" +
      "stcode\030\010 \001(\t\022\017\n\007country\030\t \001(\t\"&\n\004Type\022\010\n" +
      "\004HOME\020\001\022\010\n\004WORK\020\002\022\n\n\006CUSTOM\020\003\032M\n\006Avatar\022" +
      "0\n\006avatar\030\001 \001(\0132 .signalservice.Attachme" +
      "ntPointer\022\021\n\tisProfile\030\002 \001(\010\032V\n\007Preview\022" +
      "\013\n\003url\030\001 \001(\t\022\r\n\005title\030\002 \001(\t\022/\n\005image\030\003 \001" +
      "(\0132 .signalservice.AttachmentPointer\032:\n\013",
      "LokiProfile\022\023\n\013displayName\030\001 \001(\t\022\026\n\016prof" +
      "ilePicture\030\002 \001(\t\032\221\004\n\031ClosedGroupControlM" +
      "essage\022G\n\004type\030\001 \002(\01629.signalservice.Dat" +
      "aMessage.ClosedGroupControlMessage.Type\022" +
      "\021\n\tpublicKey\030\002 \001(\014\022\014\n\004name\030\003 \001(\t\0221\n\021encr" +
      "yptionKeyPair\030\004 \001(\0132\026.signalservice.KeyP" +
      "air\022\017\n\007members\030\005 \003(\014\022\016\n\006admins\030\006 \003(\014\022U\n\010" +
      "wrappers\030\007 \003(\0132C.signalservice.DataMessa" +
      "ge.ClosedGroupControlMessage.KeyPairWrap" +
      "per\032=\n\016KeyPairWrapper\022\021\n\tpublicKey\030\001 \002(\014",
      "\022\030\n\020encryptedKeyPair\030\002 \002(\014\"\237\001\n\004Type\022\007\n\003N" +
      "EW\020\001\022\n\n\006UPDATE\020\002\022\027\n\023ENCRYPTION_KEY_PAIR\020" +
      "\003\022\017\n\013NAME_CHANGE\020\004\022\021\n\rMEMBERS_ADDED\020\005\022\023\n" +
      "\017MEMBERS_REMOVED\020\006\022\017\n\013MEMBER_LEFT\020\007\022\037\n\033E" +
      "NCRYPTION_KEY_PAIR_REQUEST\020\010\"$\n\005Flags\022\033\n" +
      "\027EXPIRATION_TIMER_UPDATE\020\002\"\316\003\n\024Configura" +
      "tionMessage\022E\n\014closedGroups\030\001 \003(\0132/.sign" +
      "alservice.ConfigurationMessage.ClosedGro" +
      "up\022\022\n\nopenGroups\030\002 \003(\t\022\023\n\013displayName\030\003 " +
      "\001(\t\022\026\n\016profilePicture\030\004 \001(\t\022\022\n\nprofileKe",
      "y\030\005 \001(\014\022=\n\010contacts\030\006 \003(\0132+.signalservic" +
      "e.ConfigurationMessage.Contact\032\202\001\n\013Close" +
      "dGroup\022\021\n\tpublicKey\030\001 \001(\014\022\014\n\004name\030\002 \001(\t\022" +
      "1\n\021encryptionKeyPair\030\003 \001(\0132\026.signalservi" +
      "ce.KeyPair\022\017\n\007members\030\004 \003(\014\022\016\n\006admins\030\005 " +
      "\003(\014\032V\n\007Contact\022\021\n\tpublicKey\030\001 \002(\014\022\014\n\004nam" +
      "e\030\002 \002(\t\022\026\n\016profilePicture\030\003 \001(\t\022\022\n\nprofi" +
      "leKey\030\004 \001(\014\"u\n\016ReceiptMessage\0220\n\004type\030\001 " +
      "\001(\0162\".signalservice.ReceiptMessage.Type\022" +
      "\021\n\ttimestamp\030\002 \003(\004\"\036\n\004Type\022\014\n\010DELIVERY\020\000",
      "\022\010\n\004READ\020\001\"\354\001\n\021AttachmentPointer\022\n\n\002id\030\001" +
      " \001(\006\022\023\n\013contentType\030\002 \001(\t\022\013\n\003key\030\003 \001(\014\022\014" +
      "\n\004size\030\004 \001(\r\022\021\n\tthumbnail\030\005 \001(\014\022\016\n\006diges" +
      "t\030\006 \001(\014\022\020\n\010fileName\030\007 \001(\t\022\r\n\005flags\030\010 \001(\r" +
      "\022\r\n\005width\030\t \001(\r\022\016\n\006height\030\n \001(\r\022\017\n\007capti" +
      "on\030\013 \001(\t\022\013\n\003url\030e \001(\t\"\032\n\005Flags\022\021\n\rVOICE_" +
      "MESSAGE\020\001\"\243\002\n\014GroupContext\022\n\n\002id\030\001 \001(\014\022." +
      "\n\004type\030\002 \001(\0162 .signalservice.GroupContex" +
      "t.Type\022\014\n\004name\030\003 \001(\t\022\017\n\007members\030\004 \003(\t\0220\n" +
      "\006avatar\030\005 \001(\0132 .signalservice.Attachment",
      "Pointer\022\016\n\006admins\030\006 \003(\t\022\023\n\nnewMembers\030\346\007" +
      " \003(\t\022\027\n\016removedMembers\030\347\007 \003(\t\"H\n\004Type\022\013\n" +
      "\007UNKNOWN\020\000\022\n\n\006UPDATE\020\001\022\013\n\007DELIVER\020\002\022\010\n\004Q" +
      "UIT\020\003\022\020\n\014REQUEST_INFO\020\004\"\356\001\n\016ContactDetai" +
      "ls\022\016\n\006number\030\001 \001(\t\022\014\n\004name\030\002 \001(\t\0224\n\006avat" +
      "ar\030\003 \001(\0132$.signalservice.ContactDetails." +
      "Avatar\022\r\n\005color\030\004 \001(\t\022\022\n\nprofileKey\030\006 \001(" +
      "\014\022\017\n\007blocked\030\007 \001(\010\022\023\n\013expireTimer\030\010 \001(\r\022" +
      "\020\n\010nickname\030e \001(\t\032-\n\006Avatar\022\023\n\013contentTy" +
      "pe\030\001 \001(\t\022\016\n\006length\030\002 \001(\r\"\367\001\n\014GroupDetail",
      "s\022\n\n\002id\030\001 \001(\014\022\014\n\004name\030\002 \001(\t\022\017\n\007members\030\003" +
      " \003(\t\0222\n\006avatar\030\004 \001(\0132\".signalservice.Gro" +
      "upDetails.Avatar\022\024\n\006active\030\005 \001(\010:\004true\022\023" +
      "\n\013expireTimer\030\006 \001(\r\022\r\n\005color\030\007 \001(\t\022\017\n\007bl" +
      "ocked\030\010 \001(\010\022\016\n\006admins\030\t \003(\t\032-\n\006Avatar\022\023\n" +
      "\013contentType\030\001 \001(\t\022\016\n\006length\030\002 \001(\r\"\"\n\016Pu" +
      "blicChatInfo\022\020\n\010serverID\030\001 \001(\004BB\n+org.se" +
      "ssion.libsignal.service.internal.pushB\023S" +
      "ignalServiceProtos"
    };
    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;
          internal_static_signalservice_Envelope_descriptor =
            getDescriptor().getMessageTypes().get(0);
          internal_static_signalservice_Envelope_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_Envelope_descriptor,
              new java.lang.String[] { "Type", "Source", "SourceDevice", "Timestamp", "Content", "ServerTimestamp", });
          internal_static_signalservice_TypingMessage_descriptor =
            getDescriptor().getMessageTypes().get(1);
          internal_static_signalservice_TypingMessage_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_TypingMessage_descriptor,
              new java.lang.String[] { "Timestamp", "Action", });
          internal_static_signalservice_Content_descriptor =
            getDescriptor().getMessageTypes().get(2);
          internal_static_signalservice_Content_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_Content_descriptor,
              new java.lang.String[] { "DataMessage", "ReceiptMessage", "TypingMessage", "ConfigurationMessage", });
          internal_static_signalservice_ClosedGroupCiphertextMessageWrapper_descriptor =
            getDescriptor().getMessageTypes().get(3);
          internal_static_signalservice_ClosedGroupCiphertextMessageWrapper_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_ClosedGroupCiphertextMessageWrapper_descriptor,
              new java.lang.String[] { "Ciphertext", "EphemeralPublicKey", });
          internal_static_signalservice_KeyPair_descriptor =
            getDescriptor().getMessageTypes().get(4);
          internal_static_signalservice_KeyPair_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_KeyPair_descriptor,
              new java.lang.String[] { "PublicKey", "PrivateKey", });
          internal_static_signalservice_DataMessage_descriptor =
            getDescriptor().getMessageTypes().get(5);
          internal_static_signalservice_DataMessage_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_DataMessage_descriptor,
              new java.lang.String[] { "Body", "Attachments", "Group", "Flags", "ExpireTimer", "ProfileKey", "Timestamp", "Quote", "Contact", "Preview", "Profile", "ClosedGroupControlMessage", "SyncTarget", "PublicChatInfo", });
          internal_static_signalservice_DataMessage_Quote_descriptor =
            internal_static_signalservice_DataMessage_descriptor.getNestedTypes().get(0);
          internal_static_signalservice_DataMessage_Quote_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_DataMessage_Quote_descriptor,
              new java.lang.String[] { "Id", "Author", "Text", "Attachments", });
          internal_static_signalservice_DataMessage_Quote_QuotedAttachment_descriptor =
            internal_static_signalservice_DataMessage_Quote_descriptor.getNestedTypes().get(0);
          internal_static_signalservice_DataMessage_Quote_QuotedAttachment_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_DataMessage_Quote_QuotedAttachment_descriptor,
              new java.lang.String[] { "ContentType", "FileName", "Thumbnail", "Flags", });
          internal_static_signalservice_DataMessage_Contact_descriptor =
            internal_static_signalservice_DataMessage_descriptor.getNestedTypes().get(1);
          internal_static_signalservice_DataMessage_Contact_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_DataMessage_Contact_descriptor,
              new java.lang.String[] { "Name", "Number", "Email", "Address", "Avatar", "Organization", });
          internal_static_signalservice_DataMessage_Contact_Name_descriptor =
            internal_static_signalservice_DataMessage_Contact_descriptor.getNestedTypes().get(0);
          internal_static_signalservice_DataMessage_Contact_Name_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_DataMessage_Contact_Name_descriptor,
              new java.lang.String[] { "GivenName", "FamilyName", "Prefix", "Suffix", "MiddleName", "DisplayName", });
          internal_static_signalservice_DataMessage_Contact_Phone_descriptor =
            internal_static_signalservice_DataMessage_Contact_descriptor.getNestedTypes().get(1);
          internal_static_signalservice_DataMessage_Contact_Phone_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_DataMessage_Contact_Phone_descriptor,
              new java.lang.String[] { "Value", "Type", "Label", });
          internal_static_signalservice_DataMessage_Contact_Email_descriptor =
            internal_static_signalservice_DataMessage_Contact_descriptor.getNestedTypes().get(2);
          internal_static_signalservice_DataMessage_Contact_Email_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_DataMessage_Contact_Email_descriptor,
              new java.lang.String[] { "Value", "Type", "Label", });
          internal_static_signalservice_DataMessage_Contact_PostalAddress_descriptor =
            internal_static_signalservice_DataMessage_Contact_descriptor.getNestedTypes().get(3);
          internal_static_signalservice_DataMessage_Contact_PostalAddress_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_DataMessage_Contact_PostalAddress_descriptor,
              new java.lang.String[] { "Type", "Label", "Street", "Pobox", "Neighborhood", "City", "Region", "Postcode", "Country", });
          internal_static_signalservice_DataMessage_Contact_Avatar_descriptor =
            internal_static_signalservice_DataMessage_Contact_descriptor.getNestedTypes().get(4);
          internal_static_signalservice_DataMessage_Contact_Avatar_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_DataMessage_Contact_Avatar_descriptor,
              new java.lang.String[] { "Avatar", "IsProfile", });
          internal_static_signalservice_DataMessage_Preview_descriptor =
            internal_static_signalservice_DataMessage_descriptor.getNestedTypes().get(2);
          internal_static_signalservice_DataMessage_Preview_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_DataMessage_Preview_descriptor,
              new java.lang.String[] { "Url", "Title", "Image", });
          internal_static_signalservice_DataMessage_LokiProfile_descriptor =
            internal_static_signalservice_DataMessage_descriptor.getNestedTypes().get(3);
          internal_static_signalservice_DataMessage_LokiProfile_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_DataMessage_LokiProfile_descriptor,
              new java.lang.String[] { "DisplayName", "ProfilePicture", });
          internal_static_signalservice_DataMessage_ClosedGroupControlMessage_descriptor =
            internal_static_signalservice_DataMessage_descriptor.getNestedTypes().get(4);
          internal_static_signalservice_DataMessage_ClosedGroupControlMessage_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_DataMessage_ClosedGroupControlMessage_descriptor,
              new java.lang.String[] { "Type", "PublicKey", "Name", "EncryptionKeyPair", "Members", "Admins", "Wrappers", });
          internal_static_signalservice_DataMessage_ClosedGroupControlMessage_KeyPairWrapper_descriptor =
            internal_static_signalservice_DataMessage_ClosedGroupControlMessage_descriptor.getNestedTypes().get(0);
          internal_static_signalservice_DataMessage_ClosedGroupControlMessage_KeyPairWrapper_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_DataMessage_ClosedGroupControlMessage_KeyPairWrapper_descriptor,
              new java.lang.String[] { "PublicKey", "EncryptedKeyPair", });
          internal_static_signalservice_ConfigurationMessage_descriptor =
            getDescriptor().getMessageTypes().get(6);
          internal_static_signalservice_ConfigurationMessage_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_ConfigurationMessage_descriptor,
              new java.lang.String[] { "ClosedGroups", "OpenGroups", "DisplayName", "ProfilePicture", "ProfileKey", "Contacts", });
          internal_static_signalservice_ConfigurationMessage_ClosedGroup_descriptor =
            internal_static_signalservice_ConfigurationMessage_descriptor.getNestedTypes().get(0);
          internal_static_signalservice_ConfigurationMessage_ClosedGroup_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_ConfigurationMessage_ClosedGroup_descriptor,
              new java.lang.String[] { "PublicKey", "Name", "EncryptionKeyPair", "Members", "Admins", });
          internal_static_signalservice_ConfigurationMessage_Contact_descriptor =
            internal_static_signalservice_ConfigurationMessage_descriptor.getNestedTypes().get(1);
          internal_static_signalservice_ConfigurationMessage_Contact_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_ConfigurationMessage_Contact_descriptor,
              new java.lang.String[] { "PublicKey", "Name", "ProfilePicture", "ProfileKey", });
          internal_static_signalservice_ReceiptMessage_descriptor =
            getDescriptor().getMessageTypes().get(7);
          internal_static_signalservice_ReceiptMessage_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_ReceiptMessage_descriptor,
              new java.lang.String[] { "Type", "Timestamp", });
          internal_static_signalservice_AttachmentPointer_descriptor =
            getDescriptor().getMessageTypes().get(8);
          internal_static_signalservice_AttachmentPointer_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_AttachmentPointer_descriptor,
              new java.lang.String[] { "Id", "ContentType", "Key", "Size", "Thumbnail", "Digest", "FileName", "Flags", "Width", "Height", "Caption", "Url", });
          internal_static_signalservice_GroupContext_descriptor =
            getDescriptor().getMessageTypes().get(9);
          internal_static_signalservice_GroupContext_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_GroupContext_descriptor,
              new java.lang.String[] { "Id", "Type", "Name", "Members", "Avatar", "Admins", "NewMembers", "RemovedMembers", });
          internal_static_signalservice_ContactDetails_descriptor =
            getDescriptor().getMessageTypes().get(10);
          internal_static_signalservice_ContactDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_ContactDetails_descriptor,
              new java.lang.String[] { "Number", "Name", "Avatar", "Color", "ProfileKey", "Blocked", "ExpireTimer", "Nickname", });
          internal_static_signalservice_ContactDetails_Avatar_descriptor =
            internal_static_signalservice_ContactDetails_descriptor.getNestedTypes().get(0);
          internal_static_signalservice_ContactDetails_Avatar_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_ContactDetails_Avatar_descriptor,
              new java.lang.String[] { "ContentType", "Length", });
          internal_static_signalservice_GroupDetails_descriptor =
            getDescriptor().getMessageTypes().get(11);
          internal_static_signalservice_GroupDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_GroupDetails_descriptor,
              new java.lang.String[] { "Id", "Name", "Members", "Avatar", "Active", "ExpireTimer", "Color", "Blocked", "Admins", });
          internal_static_signalservice_GroupDetails_Avatar_descriptor =
            internal_static_signalservice_GroupDetails_descriptor.getNestedTypes().get(0);
          internal_static_signalservice_GroupDetails_Avatar_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_GroupDetails_Avatar_descriptor,
              new java.lang.String[] { "ContentType", "Length", });
          internal_static_signalservice_PublicChatInfo_descriptor =
            getDescriptor().getMessageTypes().get(12);
          internal_static_signalservice_PublicChatInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_signalservice_PublicChatInfo_descriptor,
              new java.lang.String[] { "ServerID", });
          return null;
        }
      };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
  }

  // @@protoc_insertion_point(outer_class_scope)
}
