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

package com.spotify;

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

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * Protobuf enum {@code spotify.AuthenticationType}
   */
  public enum AuthenticationType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>AUTHENTICATION_USER_PASS = 0;</code>
     */
    AUTHENTICATION_USER_PASS(0),
    /**
     * <code>AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS = 1;</code>
     */
    AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS(1),
    /**
     * <code>AUTHENTICATION_STORED_FACEBOOK_CREDENTIALS = 2;</code>
     */
    AUTHENTICATION_STORED_FACEBOOK_CREDENTIALS(2),
    /**
     * <code>AUTHENTICATION_SPOTIFY_TOKEN = 3;</code>
     */
    AUTHENTICATION_SPOTIFY_TOKEN(3),
    /**
     * <code>AUTHENTICATION_FACEBOOK_TOKEN = 4;</code>
     */
    AUTHENTICATION_FACEBOOK_TOKEN(4),
    ;

    /**
     * <code>AUTHENTICATION_USER_PASS = 0;</code>
     */
    public static final int AUTHENTICATION_USER_PASS_VALUE = 0;
    /**
     * <code>AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS = 1;</code>
     */
    public static final int AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS_VALUE = 1;
    /**
     * <code>AUTHENTICATION_STORED_FACEBOOK_CREDENTIALS = 2;</code>
     */
    public static final int AUTHENTICATION_STORED_FACEBOOK_CREDENTIALS_VALUE = 2;
    /**
     * <code>AUTHENTICATION_SPOTIFY_TOKEN = 3;</code>
     */
    public static final int AUTHENTICATION_SPOTIFY_TOKEN_VALUE = 3;
    /**
     * <code>AUTHENTICATION_FACEBOOK_TOKEN = 4;</code>
     */
    public static final int AUTHENTICATION_FACEBOOK_TOKEN_VALUE = 4;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static AuthenticationType valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static AuthenticationType forNumber(int value) {
      switch (value) {
        case 0: return AUTHENTICATION_USER_PASS;
        case 1: return AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS;
        case 2: return AUTHENTICATION_STORED_FACEBOOK_CREDENTIALS;
        case 3: return AUTHENTICATION_SPOTIFY_TOKEN;
        case 4: return AUTHENTICATION_FACEBOOK_TOKEN;
        default: return null;
      }
    }

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

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

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:spotify.AuthenticationType)
  }

  /**
   * Protobuf enum {@code spotify.AccountCreation}
   */
  public enum AccountCreation
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>ACCOUNT_CREATION_ALWAYS_PROMPT = 1;</code>
     */
    ACCOUNT_CREATION_ALWAYS_PROMPT(1),
    /**
     * <code>ACCOUNT_CREATION_ALWAYS_CREATE = 3;</code>
     */
    ACCOUNT_CREATION_ALWAYS_CREATE(3),
    ;

    /**
     * <code>ACCOUNT_CREATION_ALWAYS_PROMPT = 1;</code>
     */
    public static final int ACCOUNT_CREATION_ALWAYS_PROMPT_VALUE = 1;
    /**
     * <code>ACCOUNT_CREATION_ALWAYS_CREATE = 3;</code>
     */
    public static final int ACCOUNT_CREATION_ALWAYS_CREATE_VALUE = 3;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static AccountCreation valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static AccountCreation forNumber(int value) {
      switch (value) {
        case 1: return ACCOUNT_CREATION_ALWAYS_PROMPT;
        case 3: return ACCOUNT_CREATION_ALWAYS_CREATE;
        default: return null;
      }
    }

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.spotify.Authentication.getDescriptor().getEnumTypes().get(1);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:spotify.AccountCreation)
  }

  /**
   * Protobuf enum {@code spotify.CpuFamily}
   */
  public enum CpuFamily
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>CPU_UNKNOWN = 0;</code>
     */
    CPU_UNKNOWN(0),
    /**
     * <code>CPU_X86 = 1;</code>
     */
    CPU_X86(1),
    /**
     * <code>CPU_X86_64 = 2;</code>
     */
    CPU_X86_64(2),
    /**
     * <code>CPU_PPC = 3;</code>
     */
    CPU_PPC(3),
    /**
     * <code>CPU_PPC_64 = 4;</code>
     */
    CPU_PPC_64(4),
    /**
     * <code>CPU_ARM = 5;</code>
     */
    CPU_ARM(5),
    /**
     * <code>CPU_IA64 = 6;</code>
     */
    CPU_IA64(6),
    /**
     * <code>CPU_SH = 7;</code>
     */
    CPU_SH(7),
    /**
     * <code>CPU_MIPS = 8;</code>
     */
    CPU_MIPS(8),
    /**
     * <code>CPU_BLACKFIN = 9;</code>
     */
    CPU_BLACKFIN(9),
    ;

    /**
     * <code>CPU_UNKNOWN = 0;</code>
     */
    public static final int CPU_UNKNOWN_VALUE = 0;
    /**
     * <code>CPU_X86 = 1;</code>
     */
    public static final int CPU_X86_VALUE = 1;
    /**
     * <code>CPU_X86_64 = 2;</code>
     */
    public static final int CPU_X86_64_VALUE = 2;
    /**
     * <code>CPU_PPC = 3;</code>
     */
    public static final int CPU_PPC_VALUE = 3;
    /**
     * <code>CPU_PPC_64 = 4;</code>
     */
    public static final int CPU_PPC_64_VALUE = 4;
    /**
     * <code>CPU_ARM = 5;</code>
     */
    public static final int CPU_ARM_VALUE = 5;
    /**
     * <code>CPU_IA64 = 6;</code>
     */
    public static final int CPU_IA64_VALUE = 6;
    /**
     * <code>CPU_SH = 7;</code>
     */
    public static final int CPU_SH_VALUE = 7;
    /**
     * <code>CPU_MIPS = 8;</code>
     */
    public static final int CPU_MIPS_VALUE = 8;
    /**
     * <code>CPU_BLACKFIN = 9;</code>
     */
    public static final int CPU_BLACKFIN_VALUE = 9;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static CpuFamily valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static CpuFamily forNumber(int value) {
      switch (value) {
        case 0: return CPU_UNKNOWN;
        case 1: return CPU_X86;
        case 2: return CPU_X86_64;
        case 3: return CPU_PPC;
        case 4: return CPU_PPC_64;
        case 5: return CPU_ARM;
        case 6: return CPU_IA64;
        case 7: return CPU_SH;
        case 8: return CPU_MIPS;
        case 9: return CPU_BLACKFIN;
        default: return null;
      }
    }

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.spotify.Authentication.getDescriptor().getEnumTypes().get(2);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:spotify.CpuFamily)
  }

  /**
   * Protobuf enum {@code spotify.Brand}
   */
  public enum Brand
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>BRAND_UNBRANDED = 0;</code>
     */
    BRAND_UNBRANDED(0),
    /**
     * <code>BRAND_INQ = 1;</code>
     */
    BRAND_INQ(1),
    /**
     * <code>BRAND_HTC = 2;</code>
     */
    BRAND_HTC(2),
    /**
     * <code>BRAND_NOKIA = 3;</code>
     */
    BRAND_NOKIA(3),
    ;

    /**
     * <code>BRAND_UNBRANDED = 0;</code>
     */
    public static final int BRAND_UNBRANDED_VALUE = 0;
    /**
     * <code>BRAND_INQ = 1;</code>
     */
    public static final int BRAND_INQ_VALUE = 1;
    /**
     * <code>BRAND_HTC = 2;</code>
     */
    public static final int BRAND_HTC_VALUE = 2;
    /**
     * <code>BRAND_NOKIA = 3;</code>
     */
    public static final int BRAND_NOKIA_VALUE = 3;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static Brand valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static Brand forNumber(int value) {
      switch (value) {
        case 0: return BRAND_UNBRANDED;
        case 1: return BRAND_INQ;
        case 2: return BRAND_HTC;
        case 3: return BRAND_NOKIA;
        default: return null;
      }
    }

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.spotify.Authentication.getDescriptor().getEnumTypes().get(3);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:spotify.Brand)
  }

  /**
   * Protobuf enum {@code spotify.Os}
   */
  public enum Os
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>OS_UNKNOWN = 0;</code>
     */
    OS_UNKNOWN(0),
    /**
     * <code>OS_WINDOWS = 1;</code>
     */
    OS_WINDOWS(1),
    /**
     * <code>OS_OSX = 2;</code>
     */
    OS_OSX(2),
    /**
     * <code>OS_IPHONE = 3;</code>
     */
    OS_IPHONE(3),
    /**
     * <code>OS_S60 = 4;</code>
     */
    OS_S60(4),
    /**
     * <code>OS_LINUX = 5;</code>
     */
    OS_LINUX(5),
    /**
     * <code>OS_WINDOWS_CE = 6;</code>
     */
    OS_WINDOWS_CE(6),
    /**
     * <code>OS_ANDROID = 7;</code>
     */
    OS_ANDROID(7),
    /**
     * <code>OS_PALM = 8;</code>
     */
    OS_PALM(8),
    /**
     * <code>OS_FREEBSD = 9;</code>
     */
    OS_FREEBSD(9),
    /**
     * <code>OS_BLACKBERRY = 10;</code>
     */
    OS_BLACKBERRY(10),
    /**
     * <code>OS_SONOS = 11;</code>
     */
    OS_SONOS(11),
    /**
     * <code>OS_LOGITECH = 12;</code>
     */
    OS_LOGITECH(12),
    /**
     * <code>OS_WP7 = 13;</code>
     */
    OS_WP7(13),
    /**
     * <code>OS_ONKYO = 14;</code>
     */
    OS_ONKYO(14),
    /**
     * <code>OS_PHILIPS = 15;</code>
     */
    OS_PHILIPS(15),
    /**
     * <code>OS_WD = 16;</code>
     */
    OS_WD(16),
    /**
     * <code>OS_VOLVO = 17;</code>
     */
    OS_VOLVO(17),
    /**
     * <code>OS_TIVO = 18;</code>
     */
    OS_TIVO(18),
    /**
     * <code>OS_AWOX = 19;</code>
     */
    OS_AWOX(19),
    /**
     * <code>OS_MEEGO = 20;</code>
     */
    OS_MEEGO(20),
    /**
     * <code>OS_QNXNTO = 21;</code>
     */
    OS_QNXNTO(21),
    /**
     * <code>OS_BCO = 22;</code>
     */
    OS_BCO(22),
    ;

    /**
     * <code>OS_UNKNOWN = 0;</code>
     */
    public static final int OS_UNKNOWN_VALUE = 0;
    /**
     * <code>OS_WINDOWS = 1;</code>
     */
    public static final int OS_WINDOWS_VALUE = 1;
    /**
     * <code>OS_OSX = 2;</code>
     */
    public static final int OS_OSX_VALUE = 2;
    /**
     * <code>OS_IPHONE = 3;</code>
     */
    public static final int OS_IPHONE_VALUE = 3;
    /**
     * <code>OS_S60 = 4;</code>
     */
    public static final int OS_S60_VALUE = 4;
    /**
     * <code>OS_LINUX = 5;</code>
     */
    public static final int OS_LINUX_VALUE = 5;
    /**
     * <code>OS_WINDOWS_CE = 6;</code>
     */
    public static final int OS_WINDOWS_CE_VALUE = 6;
    /**
     * <code>OS_ANDROID = 7;</code>
     */
    public static final int OS_ANDROID_VALUE = 7;
    /**
     * <code>OS_PALM = 8;</code>
     */
    public static final int OS_PALM_VALUE = 8;
    /**
     * <code>OS_FREEBSD = 9;</code>
     */
    public static final int OS_FREEBSD_VALUE = 9;
    /**
     * <code>OS_BLACKBERRY = 10;</code>
     */
    public static final int OS_BLACKBERRY_VALUE = 10;
    /**
     * <code>OS_SONOS = 11;</code>
     */
    public static final int OS_SONOS_VALUE = 11;
    /**
     * <code>OS_LOGITECH = 12;</code>
     */
    public static final int OS_LOGITECH_VALUE = 12;
    /**
     * <code>OS_WP7 = 13;</code>
     */
    public static final int OS_WP7_VALUE = 13;
    /**
     * <code>OS_ONKYO = 14;</code>
     */
    public static final int OS_ONKYO_VALUE = 14;
    /**
     * <code>OS_PHILIPS = 15;</code>
     */
    public static final int OS_PHILIPS_VALUE = 15;
    /**
     * <code>OS_WD = 16;</code>
     */
    public static final int OS_WD_VALUE = 16;
    /**
     * <code>OS_VOLVO = 17;</code>
     */
    public static final int OS_VOLVO_VALUE = 17;
    /**
     * <code>OS_TIVO = 18;</code>
     */
    public static final int OS_TIVO_VALUE = 18;
    /**
     * <code>OS_AWOX = 19;</code>
     */
    public static final int OS_AWOX_VALUE = 19;
    /**
     * <code>OS_MEEGO = 20;</code>
     */
    public static final int OS_MEEGO_VALUE = 20;
    /**
     * <code>OS_QNXNTO = 21;</code>
     */
    public static final int OS_QNXNTO_VALUE = 21;
    /**
     * <code>OS_BCO = 22;</code>
     */
    public static final int OS_BCO_VALUE = 22;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static Os valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static Os forNumber(int value) {
      switch (value) {
        case 0: return OS_UNKNOWN;
        case 1: return OS_WINDOWS;
        case 2: return OS_OSX;
        case 3: return OS_IPHONE;
        case 4: return OS_S60;
        case 5: return OS_LINUX;
        case 6: return OS_WINDOWS_CE;
        case 7: return OS_ANDROID;
        case 8: return OS_PALM;
        case 9: return OS_FREEBSD;
        case 10: return OS_BLACKBERRY;
        case 11: return OS_SONOS;
        case 12: return OS_LOGITECH;
        case 13: return OS_WP7;
        case 14: return OS_ONKYO;
        case 15: return OS_PHILIPS;
        case 16: return OS_WD;
        case 17: return OS_VOLVO;
        case 18: return OS_TIVO;
        case 19: return OS_AWOX;
        case 20: return OS_MEEGO;
        case 21: return OS_QNXNTO;
        case 22: return OS_BCO;
        default: return null;
      }
    }

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.spotify.Authentication.getDescriptor().getEnumTypes().get(4);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:spotify.Os)
  }

  /**
   * Protobuf enum {@code spotify.AccountType}
   */
  public enum AccountType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>Spotify = 0;</code>
     */
    Spotify(0),
    /**
     * <code>Facebook = 1;</code>
     */
    Facebook(1),
    ;

    /**
     * <code>Spotify = 0;</code>
     */
    public static final int Spotify_VALUE = 0;
    /**
     * <code>Facebook = 1;</code>
     */
    public static final int Facebook_VALUE = 1;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static AccountType valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static AccountType forNumber(int value) {
      switch (value) {
        case 0: return Spotify;
        case 1: return Facebook;
        default: return null;
      }
    }

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.spotify.Authentication.getDescriptor().getEnumTypes().get(5);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:spotify.AccountType)
  }

  public interface ClientResponseEncryptedOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.ClientResponseEncrypted)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
     * @return Whether the loginCredentials field is set.
     */
    boolean hasLoginCredentials();
    /**
     * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
     * @return The loginCredentials.
     */
    com.spotify.Authentication.LoginCredentials getLoginCredentials();
    /**
     * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
     */
    com.spotify.Authentication.LoginCredentialsOrBuilder getLoginCredentialsOrBuilder();

    /**
     * <code>optional .spotify.AccountCreation account_creation = 20;</code>
     * @return Whether the accountCreation field is set.
     */
    boolean hasAccountCreation();
    /**
     * <code>optional .spotify.AccountCreation account_creation = 20;</code>
     * @return The accountCreation.
     */
    com.spotify.Authentication.AccountCreation getAccountCreation();

    /**
     * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
     * @return Whether the fingerprintResponse field is set.
     */
    boolean hasFingerprintResponse();
    /**
     * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
     * @return The fingerprintResponse.
     */
    com.spotify.Authentication.FingerprintResponseUnion getFingerprintResponse();
    /**
     * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
     */
    com.spotify.Authentication.FingerprintResponseUnionOrBuilder getFingerprintResponseOrBuilder();

    /**
     * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
     * @return Whether the peerTicket field is set.
     */
    boolean hasPeerTicket();
    /**
     * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
     * @return The peerTicket.
     */
    com.spotify.Authentication.PeerTicketUnion getPeerTicket();
    /**
     * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
     */
    com.spotify.Authentication.PeerTicketUnionOrBuilder getPeerTicketOrBuilder();

    /**
     * <code>required .spotify.SystemInfo system_info = 50;</code>
     * @return Whether the systemInfo field is set.
     */
    boolean hasSystemInfo();
    /**
     * <code>required .spotify.SystemInfo system_info = 50;</code>
     * @return The systemInfo.
     */
    com.spotify.Authentication.SystemInfo getSystemInfo();
    /**
     * <code>required .spotify.SystemInfo system_info = 50;</code>
     */
    com.spotify.Authentication.SystemInfoOrBuilder getSystemInfoOrBuilder();

    /**
     * <code>optional string platform_model = 60;</code>
     * @return Whether the platformModel field is set.
     */
    boolean hasPlatformModel();
    /**
     * <code>optional string platform_model = 60;</code>
     * @return The platformModel.
     */
    java.lang.String getPlatformModel();
    /**
     * <code>optional string platform_model = 60;</code>
     * @return The bytes for platformModel.
     */
    com.google.protobuf.ByteString
        getPlatformModelBytes();

    /**
     * <code>optional string version_string = 70;</code>
     * @return Whether the versionString field is set.
     */
    boolean hasVersionString();
    /**
     * <code>optional string version_string = 70;</code>
     * @return The versionString.
     */
    java.lang.String getVersionString();
    /**
     * <code>optional string version_string = 70;</code>
     * @return The bytes for versionString.
     */
    com.google.protobuf.ByteString
        getVersionStringBytes();

    /**
     * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
     * @return Whether the appkey field is set.
     */
    boolean hasAppkey();
    /**
     * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
     * @return The appkey.
     */
    com.spotify.Authentication.LibspotifyAppKey getAppkey();
    /**
     * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
     */
    com.spotify.Authentication.LibspotifyAppKeyOrBuilder getAppkeyOrBuilder();

    /**
     * <code>optional .spotify.ClientInfo client_info = 90;</code>
     * @return Whether the clientInfo field is set.
     */
    boolean hasClientInfo();
    /**
     * <code>optional .spotify.ClientInfo client_info = 90;</code>
     * @return The clientInfo.
     */
    com.spotify.Authentication.ClientInfo getClientInfo();
    /**
     * <code>optional .spotify.ClientInfo client_info = 90;</code>
     */
    com.spotify.Authentication.ClientInfoOrBuilder getClientInfoOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.ClientResponseEncrypted}
   */
  public  static final class ClientResponseEncrypted extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.ClientResponseEncrypted)
      ClientResponseEncryptedOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ClientResponseEncrypted.newBuilder() to construct.
    private ClientResponseEncrypted(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ClientResponseEncrypted() {
      accountCreation_ = 1;
      platformModel_ = "";
      versionString_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ClientResponseEncrypted();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ClientResponseEncrypted(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 82: {
              com.spotify.Authentication.LoginCredentials.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) != 0)) {
                subBuilder = loginCredentials_.toBuilder();
              }
              loginCredentials_ = input.readMessage(com.spotify.Authentication.LoginCredentials.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(loginCredentials_);
                loginCredentials_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 160: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              com.spotify.Authentication.AccountCreation value = com.spotify.Authentication.AccountCreation.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(20, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                accountCreation_ = rawValue;
              }
              break;
            }
            case 242: {
              com.spotify.Authentication.FingerprintResponseUnion.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) != 0)) {
                subBuilder = fingerprintResponse_.toBuilder();
              }
              fingerprintResponse_ = input.readMessage(com.spotify.Authentication.FingerprintResponseUnion.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(fingerprintResponse_);
                fingerprintResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 322: {
              com.spotify.Authentication.PeerTicketUnion.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) != 0)) {
                subBuilder = peerTicket_.toBuilder();
              }
              peerTicket_ = input.readMessage(com.spotify.Authentication.PeerTicketUnion.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(peerTicket_);
                peerTicket_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 402: {
              com.spotify.Authentication.SystemInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) != 0)) {
                subBuilder = systemInfo_.toBuilder();
              }
              systemInfo_ = input.readMessage(com.spotify.Authentication.SystemInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(systemInfo_);
                systemInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 482: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000020;
              platformModel_ = bs;
              break;
            }
            case 562: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000040;
              versionString_ = bs;
              break;
            }
            case 642: {
              com.spotify.Authentication.LibspotifyAppKey.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) != 0)) {
                subBuilder = appkey_.toBuilder();
              }
              appkey_ = input.readMessage(com.spotify.Authentication.LibspotifyAppKey.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(appkey_);
                appkey_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 722: {
              com.spotify.Authentication.ClientInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) != 0)) {
                subBuilder = clientInfo_.toBuilder();
              }
              clientInfo_ = input.readMessage(com.spotify.Authentication.ClientInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(clientInfo_);
                clientInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_ClientResponseEncrypted_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_ClientResponseEncrypted_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.ClientResponseEncrypted.class, com.spotify.Authentication.ClientResponseEncrypted.Builder.class);
    }

    private int bitField0_;
    public static final int LOGIN_CREDENTIALS_FIELD_NUMBER = 10;
    private com.spotify.Authentication.LoginCredentials loginCredentials_;
    /**
     * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
     * @return Whether the loginCredentials field is set.
     */
    public boolean hasLoginCredentials() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
     * @return The loginCredentials.
     */
    public com.spotify.Authentication.LoginCredentials getLoginCredentials() {
      return loginCredentials_ == null ? com.spotify.Authentication.LoginCredentials.getDefaultInstance() : loginCredentials_;
    }
    /**
     * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
     */
    public com.spotify.Authentication.LoginCredentialsOrBuilder getLoginCredentialsOrBuilder() {
      return loginCredentials_ == null ? com.spotify.Authentication.LoginCredentials.getDefaultInstance() : loginCredentials_;
    }

    public static final int ACCOUNT_CREATION_FIELD_NUMBER = 20;
    private int accountCreation_;
    /**
     * <code>optional .spotify.AccountCreation account_creation = 20;</code>
     * @return Whether the accountCreation field is set.
     */
    public boolean hasAccountCreation() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .spotify.AccountCreation account_creation = 20;</code>
     * @return The accountCreation.
     */
    public com.spotify.Authentication.AccountCreation getAccountCreation() {
      @SuppressWarnings("deprecation")
      com.spotify.Authentication.AccountCreation result = com.spotify.Authentication.AccountCreation.valueOf(accountCreation_);
      return result == null ? com.spotify.Authentication.AccountCreation.ACCOUNT_CREATION_ALWAYS_PROMPT : result;
    }

    public static final int FINGERPRINT_RESPONSE_FIELD_NUMBER = 30;
    private com.spotify.Authentication.FingerprintResponseUnion fingerprintResponse_;
    /**
     * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
     * @return Whether the fingerprintResponse field is set.
     */
    public boolean hasFingerprintResponse() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
     * @return The fingerprintResponse.
     */
    public com.spotify.Authentication.FingerprintResponseUnion getFingerprintResponse() {
      return fingerprintResponse_ == null ? com.spotify.Authentication.FingerprintResponseUnion.getDefaultInstance() : fingerprintResponse_;
    }
    /**
     * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
     */
    public com.spotify.Authentication.FingerprintResponseUnionOrBuilder getFingerprintResponseOrBuilder() {
      return fingerprintResponse_ == null ? com.spotify.Authentication.FingerprintResponseUnion.getDefaultInstance() : fingerprintResponse_;
    }

    public static final int PEER_TICKET_FIELD_NUMBER = 40;
    private com.spotify.Authentication.PeerTicketUnion peerTicket_;
    /**
     * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
     * @return Whether the peerTicket field is set.
     */
    public boolean hasPeerTicket() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
     * @return The peerTicket.
     */
    public com.spotify.Authentication.PeerTicketUnion getPeerTicket() {
      return peerTicket_ == null ? com.spotify.Authentication.PeerTicketUnion.getDefaultInstance() : peerTicket_;
    }
    /**
     * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
     */
    public com.spotify.Authentication.PeerTicketUnionOrBuilder getPeerTicketOrBuilder() {
      return peerTicket_ == null ? com.spotify.Authentication.PeerTicketUnion.getDefaultInstance() : peerTicket_;
    }

    public static final int SYSTEM_INFO_FIELD_NUMBER = 50;
    private com.spotify.Authentication.SystemInfo systemInfo_;
    /**
     * <code>required .spotify.SystemInfo system_info = 50;</code>
     * @return Whether the systemInfo field is set.
     */
    public boolean hasSystemInfo() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>required .spotify.SystemInfo system_info = 50;</code>
     * @return The systemInfo.
     */
    public com.spotify.Authentication.SystemInfo getSystemInfo() {
      return systemInfo_ == null ? com.spotify.Authentication.SystemInfo.getDefaultInstance() : systemInfo_;
    }
    /**
     * <code>required .spotify.SystemInfo system_info = 50;</code>
     */
    public com.spotify.Authentication.SystemInfoOrBuilder getSystemInfoOrBuilder() {
      return systemInfo_ == null ? com.spotify.Authentication.SystemInfo.getDefaultInstance() : systemInfo_;
    }

    public static final int PLATFORM_MODEL_FIELD_NUMBER = 60;
    private volatile java.lang.Object platformModel_;
    /**
     * <code>optional string platform_model = 60;</code>
     * @return Whether the platformModel field is set.
     */
    public boolean hasPlatformModel() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional string platform_model = 60;</code>
     * @return The platformModel.
     */
    public java.lang.String getPlatformModel() {
      java.lang.Object ref = platformModel_;
      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()) {
          platformModel_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string platform_model = 60;</code>
     * @return The bytes for platformModel.
     */
    public com.google.protobuf.ByteString
        getPlatformModelBytes() {
      java.lang.Object ref = platformModel_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        platformModel_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VERSION_STRING_FIELD_NUMBER = 70;
    private volatile java.lang.Object versionString_;
    /**
     * <code>optional string version_string = 70;</code>
     * @return Whether the versionString field is set.
     */
    public boolean hasVersionString() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional string version_string = 70;</code>
     * @return The versionString.
     */
    public java.lang.String getVersionString() {
      java.lang.Object ref = versionString_;
      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()) {
          versionString_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string version_string = 70;</code>
     * @return The bytes for versionString.
     */
    public com.google.protobuf.ByteString
        getVersionStringBytes() {
      java.lang.Object ref = versionString_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        versionString_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int APPKEY_FIELD_NUMBER = 80;
    private com.spotify.Authentication.LibspotifyAppKey appkey_;
    /**
     * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
     * @return Whether the appkey field is set.
     */
    public boolean hasAppkey() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
     * @return The appkey.
     */
    public com.spotify.Authentication.LibspotifyAppKey getAppkey() {
      return appkey_ == null ? com.spotify.Authentication.LibspotifyAppKey.getDefaultInstance() : appkey_;
    }
    /**
     * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
     */
    public com.spotify.Authentication.LibspotifyAppKeyOrBuilder getAppkeyOrBuilder() {
      return appkey_ == null ? com.spotify.Authentication.LibspotifyAppKey.getDefaultInstance() : appkey_;
    }

    public static final int CLIENT_INFO_FIELD_NUMBER = 90;
    private com.spotify.Authentication.ClientInfo clientInfo_;
    /**
     * <code>optional .spotify.ClientInfo client_info = 90;</code>
     * @return Whether the clientInfo field is set.
     */
    public boolean hasClientInfo() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <code>optional .spotify.ClientInfo client_info = 90;</code>
     * @return The clientInfo.
     */
    public com.spotify.Authentication.ClientInfo getClientInfo() {
      return clientInfo_ == null ? com.spotify.Authentication.ClientInfo.getDefaultInstance() : clientInfo_;
    }
    /**
     * <code>optional .spotify.ClientInfo client_info = 90;</code>
     */
    public com.spotify.Authentication.ClientInfoOrBuilder getClientInfoOrBuilder() {
      return clientInfo_ == null ? com.spotify.Authentication.ClientInfo.getDefaultInstance() : clientInfo_;
    }

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

      if (!hasLoginCredentials()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasSystemInfo()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getLoginCredentials().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (hasFingerprintResponse()) {
        if (!getFingerprintResponse().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasPeerTicket()) {
        if (!getPeerTicket().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (!getSystemInfo().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (hasAppkey()) {
        if (!getAppkey().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeMessage(10, getLoginCredentials());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeEnum(20, accountCreation_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeMessage(30, getFingerprintResponse());
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeMessage(40, getPeerTicket());
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeMessage(50, getSystemInfo());
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 60, platformModel_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 70, versionString_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        output.writeMessage(80, getAppkey());
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        output.writeMessage(90, getClientInfo());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getLoginCredentials());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(20, accountCreation_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(30, getFingerprintResponse());
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(40, getPeerTicket());
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(50, getSystemInfo());
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(60, platformModel_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(70, versionString_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(80, getAppkey());
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(90, getClientInfo());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.ClientResponseEncrypted)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.ClientResponseEncrypted other = (com.spotify.Authentication.ClientResponseEncrypted) obj;

      if (hasLoginCredentials() != other.hasLoginCredentials()) return false;
      if (hasLoginCredentials()) {
        if (!getLoginCredentials()
            .equals(other.getLoginCredentials())) return false;
      }
      if (hasAccountCreation() != other.hasAccountCreation()) return false;
      if (hasAccountCreation()) {
        if (accountCreation_ != other.accountCreation_) return false;
      }
      if (hasFingerprintResponse() != other.hasFingerprintResponse()) return false;
      if (hasFingerprintResponse()) {
        if (!getFingerprintResponse()
            .equals(other.getFingerprintResponse())) return false;
      }
      if (hasPeerTicket() != other.hasPeerTicket()) return false;
      if (hasPeerTicket()) {
        if (!getPeerTicket()
            .equals(other.getPeerTicket())) return false;
      }
      if (hasSystemInfo() != other.hasSystemInfo()) return false;
      if (hasSystemInfo()) {
        if (!getSystemInfo()
            .equals(other.getSystemInfo())) return false;
      }
      if (hasPlatformModel() != other.hasPlatformModel()) return false;
      if (hasPlatformModel()) {
        if (!getPlatformModel()
            .equals(other.getPlatformModel())) return false;
      }
      if (hasVersionString() != other.hasVersionString()) return false;
      if (hasVersionString()) {
        if (!getVersionString()
            .equals(other.getVersionString())) return false;
      }
      if (hasAppkey() != other.hasAppkey()) return false;
      if (hasAppkey()) {
        if (!getAppkey()
            .equals(other.getAppkey())) return false;
      }
      if (hasClientInfo() != other.hasClientInfo()) return false;
      if (hasClientInfo()) {
        if (!getClientInfo()
            .equals(other.getClientInfo())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasLoginCredentials()) {
        hash = (37 * hash) + LOGIN_CREDENTIALS_FIELD_NUMBER;
        hash = (53 * hash) + getLoginCredentials().hashCode();
      }
      if (hasAccountCreation()) {
        hash = (37 * hash) + ACCOUNT_CREATION_FIELD_NUMBER;
        hash = (53 * hash) + accountCreation_;
      }
      if (hasFingerprintResponse()) {
        hash = (37 * hash) + FINGERPRINT_RESPONSE_FIELD_NUMBER;
        hash = (53 * hash) + getFingerprintResponse().hashCode();
      }
      if (hasPeerTicket()) {
        hash = (37 * hash) + PEER_TICKET_FIELD_NUMBER;
        hash = (53 * hash) + getPeerTicket().hashCode();
      }
      if (hasSystemInfo()) {
        hash = (37 * hash) + SYSTEM_INFO_FIELD_NUMBER;
        hash = (53 * hash) + getSystemInfo().hashCode();
      }
      if (hasPlatformModel()) {
        hash = (37 * hash) + PLATFORM_MODEL_FIELD_NUMBER;
        hash = (53 * hash) + getPlatformModel().hashCode();
      }
      if (hasVersionString()) {
        hash = (37 * hash) + VERSION_STRING_FIELD_NUMBER;
        hash = (53 * hash) + getVersionString().hashCode();
      }
      if (hasAppkey()) {
        hash = (37 * hash) + APPKEY_FIELD_NUMBER;
        hash = (53 * hash) + getAppkey().hashCode();
      }
      if (hasClientInfo()) {
        hash = (37 * hash) + CLIENT_INFO_FIELD_NUMBER;
        hash = (53 * hash) + getClientInfo().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.spotify.Authentication.ClientResponseEncrypted parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.ClientResponseEncrypted parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientResponseEncrypted parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.ClientResponseEncrypted parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientResponseEncrypted parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.ClientResponseEncrypted parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientResponseEncrypted parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.ClientResponseEncrypted parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientResponseEncrypted parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.ClientResponseEncrypted parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientResponseEncrypted parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.ClientResponseEncrypted parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.ClientResponseEncrypted prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.ClientResponseEncrypted}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.ClientResponseEncrypted)
        com.spotify.Authentication.ClientResponseEncryptedOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_ClientResponseEncrypted_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_ClientResponseEncrypted_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.ClientResponseEncrypted.class, com.spotify.Authentication.ClientResponseEncrypted.Builder.class);
      }

      // Construct using com.spotify.Authentication.ClientResponseEncrypted.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getLoginCredentialsFieldBuilder();
          getFingerprintResponseFieldBuilder();
          getPeerTicketFieldBuilder();
          getSystemInfoFieldBuilder();
          getAppkeyFieldBuilder();
          getClientInfoFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (loginCredentialsBuilder_ == null) {
          loginCredentials_ = null;
        } else {
          loginCredentialsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        accountCreation_ = 1;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (fingerprintResponseBuilder_ == null) {
          fingerprintResponse_ = null;
        } else {
          fingerprintResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (peerTicketBuilder_ == null) {
          peerTicket_ = null;
        } else {
          peerTicketBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (systemInfoBuilder_ == null) {
          systemInfo_ = null;
        } else {
          systemInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        platformModel_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        versionString_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        if (appkeyBuilder_ == null) {
          appkey_ = null;
        } else {
          appkeyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        if (clientInfoBuilder_ == null) {
          clientInfo_ = null;
        } else {
          clientInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_ClientResponseEncrypted_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.ClientResponseEncrypted getDefaultInstanceForType() {
        return com.spotify.Authentication.ClientResponseEncrypted.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.ClientResponseEncrypted build() {
        com.spotify.Authentication.ClientResponseEncrypted result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.ClientResponseEncrypted buildPartial() {
        com.spotify.Authentication.ClientResponseEncrypted result = new com.spotify.Authentication.ClientResponseEncrypted(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (loginCredentialsBuilder_ == null) {
            result.loginCredentials_ = loginCredentials_;
          } else {
            result.loginCredentials_ = loginCredentialsBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.accountCreation_ = accountCreation_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          if (fingerprintResponseBuilder_ == null) {
            result.fingerprintResponse_ = fingerprintResponse_;
          } else {
            result.fingerprintResponse_ = fingerprintResponseBuilder_.build();
          }
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          if (peerTicketBuilder_ == null) {
            result.peerTicket_ = peerTicket_;
          } else {
            result.peerTicket_ = peerTicketBuilder_.build();
          }
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          if (systemInfoBuilder_ == null) {
            result.systemInfo_ = systemInfo_;
          } else {
            result.systemInfo_ = systemInfoBuilder_.build();
          }
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          to_bitField0_ |= 0x00000020;
        }
        result.platformModel_ = platformModel_;
        if (((from_bitField0_ & 0x00000040) != 0)) {
          to_bitField0_ |= 0x00000040;
        }
        result.versionString_ = versionString_;
        if (((from_bitField0_ & 0x00000080) != 0)) {
          if (appkeyBuilder_ == null) {
            result.appkey_ = appkey_;
          } else {
            result.appkey_ = appkeyBuilder_.build();
          }
          to_bitField0_ |= 0x00000080;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          if (clientInfoBuilder_ == null) {
            result.clientInfo_ = clientInfo_;
          } else {
            result.clientInfo_ = clientInfoBuilder_.build();
          }
          to_bitField0_ |= 0x00000100;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.ClientResponseEncrypted other) {
        if (other == com.spotify.Authentication.ClientResponseEncrypted.getDefaultInstance()) return this;
        if (other.hasLoginCredentials()) {
          mergeLoginCredentials(other.getLoginCredentials());
        }
        if (other.hasAccountCreation()) {
          setAccountCreation(other.getAccountCreation());
        }
        if (other.hasFingerprintResponse()) {
          mergeFingerprintResponse(other.getFingerprintResponse());
        }
        if (other.hasPeerTicket()) {
          mergePeerTicket(other.getPeerTicket());
        }
        if (other.hasSystemInfo()) {
          mergeSystemInfo(other.getSystemInfo());
        }
        if (other.hasPlatformModel()) {
          bitField0_ |= 0x00000020;
          platformModel_ = other.platformModel_;
          onChanged();
        }
        if (other.hasVersionString()) {
          bitField0_ |= 0x00000040;
          versionString_ = other.versionString_;
          onChanged();
        }
        if (other.hasAppkey()) {
          mergeAppkey(other.getAppkey());
        }
        if (other.hasClientInfo()) {
          mergeClientInfo(other.getClientInfo());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        if (!hasLoginCredentials()) {
          return false;
        }
        if (!hasSystemInfo()) {
          return false;
        }
        if (!getLoginCredentials().isInitialized()) {
          return false;
        }
        if (hasFingerprintResponse()) {
          if (!getFingerprintResponse().isInitialized()) {
            return false;
          }
        }
        if (hasPeerTicket()) {
          if (!getPeerTicket().isInitialized()) {
            return false;
          }
        }
        if (!getSystemInfo().isInitialized()) {
          return false;
        }
        if (hasAppkey()) {
          if (!getAppkey().isInitialized()) {
            return false;
          }
        }
        return true;
      }

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

      private com.spotify.Authentication.LoginCredentials loginCredentials_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.LoginCredentials, com.spotify.Authentication.LoginCredentials.Builder, com.spotify.Authentication.LoginCredentialsOrBuilder> loginCredentialsBuilder_;
      /**
       * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
       * @return Whether the loginCredentials field is set.
       */
      public boolean hasLoginCredentials() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
       * @return The loginCredentials.
       */
      public com.spotify.Authentication.LoginCredentials getLoginCredentials() {
        if (loginCredentialsBuilder_ == null) {
          return loginCredentials_ == null ? com.spotify.Authentication.LoginCredentials.getDefaultInstance() : loginCredentials_;
        } else {
          return loginCredentialsBuilder_.getMessage();
        }
      }
      /**
       * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
       */
      public Builder setLoginCredentials(com.spotify.Authentication.LoginCredentials value) {
        if (loginCredentialsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          loginCredentials_ = value;
          onChanged();
        } else {
          loginCredentialsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
       */
      public Builder setLoginCredentials(
          com.spotify.Authentication.LoginCredentials.Builder builderForValue) {
        if (loginCredentialsBuilder_ == null) {
          loginCredentials_ = builderForValue.build();
          onChanged();
        } else {
          loginCredentialsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
       */
      public Builder mergeLoginCredentials(com.spotify.Authentication.LoginCredentials value) {
        if (loginCredentialsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              loginCredentials_ != null &&
              loginCredentials_ != com.spotify.Authentication.LoginCredentials.getDefaultInstance()) {
            loginCredentials_ =
              com.spotify.Authentication.LoginCredentials.newBuilder(loginCredentials_).mergeFrom(value).buildPartial();
          } else {
            loginCredentials_ = value;
          }
          onChanged();
        } else {
          loginCredentialsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
       */
      public Builder clearLoginCredentials() {
        if (loginCredentialsBuilder_ == null) {
          loginCredentials_ = null;
          onChanged();
        } else {
          loginCredentialsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
       */
      public com.spotify.Authentication.LoginCredentials.Builder getLoginCredentialsBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getLoginCredentialsFieldBuilder().getBuilder();
      }
      /**
       * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
       */
      public com.spotify.Authentication.LoginCredentialsOrBuilder getLoginCredentialsOrBuilder() {
        if (loginCredentialsBuilder_ != null) {
          return loginCredentialsBuilder_.getMessageOrBuilder();
        } else {
          return loginCredentials_ == null ?
              com.spotify.Authentication.LoginCredentials.getDefaultInstance() : loginCredentials_;
        }
      }
      /**
       * <code>required .spotify.LoginCredentials login_credentials = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.LoginCredentials, com.spotify.Authentication.LoginCredentials.Builder, com.spotify.Authentication.LoginCredentialsOrBuilder> 
          getLoginCredentialsFieldBuilder() {
        if (loginCredentialsBuilder_ == null) {
          loginCredentialsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.LoginCredentials, com.spotify.Authentication.LoginCredentials.Builder, com.spotify.Authentication.LoginCredentialsOrBuilder>(
                  getLoginCredentials(),
                  getParentForChildren(),
                  isClean());
          loginCredentials_ = null;
        }
        return loginCredentialsBuilder_;
      }

      private int accountCreation_ = 1;
      /**
       * <code>optional .spotify.AccountCreation account_creation = 20;</code>
       * @return Whether the accountCreation field is set.
       */
      public boolean hasAccountCreation() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.AccountCreation account_creation = 20;</code>
       * @return The accountCreation.
       */
      public com.spotify.Authentication.AccountCreation getAccountCreation() {
        @SuppressWarnings("deprecation")
        com.spotify.Authentication.AccountCreation result = com.spotify.Authentication.AccountCreation.valueOf(accountCreation_);
        return result == null ? com.spotify.Authentication.AccountCreation.ACCOUNT_CREATION_ALWAYS_PROMPT : result;
      }
      /**
       * <code>optional .spotify.AccountCreation account_creation = 20;</code>
       * @param value The accountCreation to set.
       * @return This builder for chaining.
       */
      public Builder setAccountCreation(com.spotify.Authentication.AccountCreation value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        accountCreation_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .spotify.AccountCreation account_creation = 20;</code>
       * @return This builder for chaining.
       */
      public Builder clearAccountCreation() {
        bitField0_ = (bitField0_ & ~0x00000002);
        accountCreation_ = 1;
        onChanged();
        return this;
      }

      private com.spotify.Authentication.FingerprintResponseUnion fingerprintResponse_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.FingerprintResponseUnion, com.spotify.Authentication.FingerprintResponseUnion.Builder, com.spotify.Authentication.FingerprintResponseUnionOrBuilder> fingerprintResponseBuilder_;
      /**
       * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
       * @return Whether the fingerprintResponse field is set.
       */
      public boolean hasFingerprintResponse() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
       * @return The fingerprintResponse.
       */
      public com.spotify.Authentication.FingerprintResponseUnion getFingerprintResponse() {
        if (fingerprintResponseBuilder_ == null) {
          return fingerprintResponse_ == null ? com.spotify.Authentication.FingerprintResponseUnion.getDefaultInstance() : fingerprintResponse_;
        } else {
          return fingerprintResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
       */
      public Builder setFingerprintResponse(com.spotify.Authentication.FingerprintResponseUnion value) {
        if (fingerprintResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          fingerprintResponse_ = value;
          onChanged();
        } else {
          fingerprintResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
       */
      public Builder setFingerprintResponse(
          com.spotify.Authentication.FingerprintResponseUnion.Builder builderForValue) {
        if (fingerprintResponseBuilder_ == null) {
          fingerprintResponse_ = builderForValue.build();
          onChanged();
        } else {
          fingerprintResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
       */
      public Builder mergeFingerprintResponse(com.spotify.Authentication.FingerprintResponseUnion value) {
        if (fingerprintResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0) &&
              fingerprintResponse_ != null &&
              fingerprintResponse_ != com.spotify.Authentication.FingerprintResponseUnion.getDefaultInstance()) {
            fingerprintResponse_ =
              com.spotify.Authentication.FingerprintResponseUnion.newBuilder(fingerprintResponse_).mergeFrom(value).buildPartial();
          } else {
            fingerprintResponse_ = value;
          }
          onChanged();
        } else {
          fingerprintResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
       */
      public Builder clearFingerprintResponse() {
        if (fingerprintResponseBuilder_ == null) {
          fingerprintResponse_ = null;
          onChanged();
        } else {
          fingerprintResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
       */
      public com.spotify.Authentication.FingerprintResponseUnion.Builder getFingerprintResponseBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getFingerprintResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
       */
      public com.spotify.Authentication.FingerprintResponseUnionOrBuilder getFingerprintResponseOrBuilder() {
        if (fingerprintResponseBuilder_ != null) {
          return fingerprintResponseBuilder_.getMessageOrBuilder();
        } else {
          return fingerprintResponse_ == null ?
              com.spotify.Authentication.FingerprintResponseUnion.getDefaultInstance() : fingerprintResponse_;
        }
      }
      /**
       * <code>optional .spotify.FingerprintResponseUnion fingerprint_response = 30;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.FingerprintResponseUnion, com.spotify.Authentication.FingerprintResponseUnion.Builder, com.spotify.Authentication.FingerprintResponseUnionOrBuilder> 
          getFingerprintResponseFieldBuilder() {
        if (fingerprintResponseBuilder_ == null) {
          fingerprintResponseBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.FingerprintResponseUnion, com.spotify.Authentication.FingerprintResponseUnion.Builder, com.spotify.Authentication.FingerprintResponseUnionOrBuilder>(
                  getFingerprintResponse(),
                  getParentForChildren(),
                  isClean());
          fingerprintResponse_ = null;
        }
        return fingerprintResponseBuilder_;
      }

      private com.spotify.Authentication.PeerTicketUnion peerTicket_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.PeerTicketUnion, com.spotify.Authentication.PeerTicketUnion.Builder, com.spotify.Authentication.PeerTicketUnionOrBuilder> peerTicketBuilder_;
      /**
       * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
       * @return Whether the peerTicket field is set.
       */
      public boolean hasPeerTicket() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
       * @return The peerTicket.
       */
      public com.spotify.Authentication.PeerTicketUnion getPeerTicket() {
        if (peerTicketBuilder_ == null) {
          return peerTicket_ == null ? com.spotify.Authentication.PeerTicketUnion.getDefaultInstance() : peerTicket_;
        } else {
          return peerTicketBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
       */
      public Builder setPeerTicket(com.spotify.Authentication.PeerTicketUnion value) {
        if (peerTicketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          peerTicket_ = value;
          onChanged();
        } else {
          peerTicketBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
       */
      public Builder setPeerTicket(
          com.spotify.Authentication.PeerTicketUnion.Builder builderForValue) {
        if (peerTicketBuilder_ == null) {
          peerTicket_ = builderForValue.build();
          onChanged();
        } else {
          peerTicketBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
       */
      public Builder mergePeerTicket(com.spotify.Authentication.PeerTicketUnion value) {
        if (peerTicketBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0) &&
              peerTicket_ != null &&
              peerTicket_ != com.spotify.Authentication.PeerTicketUnion.getDefaultInstance()) {
            peerTicket_ =
              com.spotify.Authentication.PeerTicketUnion.newBuilder(peerTicket_).mergeFrom(value).buildPartial();
          } else {
            peerTicket_ = value;
          }
          onChanged();
        } else {
          peerTicketBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
       */
      public Builder clearPeerTicket() {
        if (peerTicketBuilder_ == null) {
          peerTicket_ = null;
          onChanged();
        } else {
          peerTicketBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
       */
      public com.spotify.Authentication.PeerTicketUnion.Builder getPeerTicketBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getPeerTicketFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
       */
      public com.spotify.Authentication.PeerTicketUnionOrBuilder getPeerTicketOrBuilder() {
        if (peerTicketBuilder_ != null) {
          return peerTicketBuilder_.getMessageOrBuilder();
        } else {
          return peerTicket_ == null ?
              com.spotify.Authentication.PeerTicketUnion.getDefaultInstance() : peerTicket_;
        }
      }
      /**
       * <code>optional .spotify.PeerTicketUnion peer_ticket = 40;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.PeerTicketUnion, com.spotify.Authentication.PeerTicketUnion.Builder, com.spotify.Authentication.PeerTicketUnionOrBuilder> 
          getPeerTicketFieldBuilder() {
        if (peerTicketBuilder_ == null) {
          peerTicketBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.PeerTicketUnion, com.spotify.Authentication.PeerTicketUnion.Builder, com.spotify.Authentication.PeerTicketUnionOrBuilder>(
                  getPeerTicket(),
                  getParentForChildren(),
                  isClean());
          peerTicket_ = null;
        }
        return peerTicketBuilder_;
      }

      private com.spotify.Authentication.SystemInfo systemInfo_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.SystemInfo, com.spotify.Authentication.SystemInfo.Builder, com.spotify.Authentication.SystemInfoOrBuilder> systemInfoBuilder_;
      /**
       * <code>required .spotify.SystemInfo system_info = 50;</code>
       * @return Whether the systemInfo field is set.
       */
      public boolean hasSystemInfo() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>required .spotify.SystemInfo system_info = 50;</code>
       * @return The systemInfo.
       */
      public com.spotify.Authentication.SystemInfo getSystemInfo() {
        if (systemInfoBuilder_ == null) {
          return systemInfo_ == null ? com.spotify.Authentication.SystemInfo.getDefaultInstance() : systemInfo_;
        } else {
          return systemInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>required .spotify.SystemInfo system_info = 50;</code>
       */
      public Builder setSystemInfo(com.spotify.Authentication.SystemInfo value) {
        if (systemInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          systemInfo_ = value;
          onChanged();
        } else {
          systemInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>required .spotify.SystemInfo system_info = 50;</code>
       */
      public Builder setSystemInfo(
          com.spotify.Authentication.SystemInfo.Builder builderForValue) {
        if (systemInfoBuilder_ == null) {
          systemInfo_ = builderForValue.build();
          onChanged();
        } else {
          systemInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>required .spotify.SystemInfo system_info = 50;</code>
       */
      public Builder mergeSystemInfo(com.spotify.Authentication.SystemInfo value) {
        if (systemInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000010) != 0) &&
              systemInfo_ != null &&
              systemInfo_ != com.spotify.Authentication.SystemInfo.getDefaultInstance()) {
            systemInfo_ =
              com.spotify.Authentication.SystemInfo.newBuilder(systemInfo_).mergeFrom(value).buildPartial();
          } else {
            systemInfo_ = value;
          }
          onChanged();
        } else {
          systemInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>required .spotify.SystemInfo system_info = 50;</code>
       */
      public Builder clearSystemInfo() {
        if (systemInfoBuilder_ == null) {
          systemInfo_ = null;
          onChanged();
        } else {
          systemInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>required .spotify.SystemInfo system_info = 50;</code>
       */
      public com.spotify.Authentication.SystemInfo.Builder getSystemInfoBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getSystemInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>required .spotify.SystemInfo system_info = 50;</code>
       */
      public com.spotify.Authentication.SystemInfoOrBuilder getSystemInfoOrBuilder() {
        if (systemInfoBuilder_ != null) {
          return systemInfoBuilder_.getMessageOrBuilder();
        } else {
          return systemInfo_ == null ?
              com.spotify.Authentication.SystemInfo.getDefaultInstance() : systemInfo_;
        }
      }
      /**
       * <code>required .spotify.SystemInfo system_info = 50;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.SystemInfo, com.spotify.Authentication.SystemInfo.Builder, com.spotify.Authentication.SystemInfoOrBuilder> 
          getSystemInfoFieldBuilder() {
        if (systemInfoBuilder_ == null) {
          systemInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.SystemInfo, com.spotify.Authentication.SystemInfo.Builder, com.spotify.Authentication.SystemInfoOrBuilder>(
                  getSystemInfo(),
                  getParentForChildren(),
                  isClean());
          systemInfo_ = null;
        }
        return systemInfoBuilder_;
      }

      private java.lang.Object platformModel_ = "";
      /**
       * <code>optional string platform_model = 60;</code>
       * @return Whether the platformModel field is set.
       */
      public boolean hasPlatformModel() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional string platform_model = 60;</code>
       * @return The platformModel.
       */
      public java.lang.String getPlatformModel() {
        java.lang.Object ref = platformModel_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            platformModel_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string platform_model = 60;</code>
       * @return The bytes for platformModel.
       */
      public com.google.protobuf.ByteString
          getPlatformModelBytes() {
        java.lang.Object ref = platformModel_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          platformModel_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string platform_model = 60;</code>
       * @param value The platformModel to set.
       * @return This builder for chaining.
       */
      public Builder setPlatformModel(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        platformModel_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string platform_model = 60;</code>
       * @return This builder for chaining.
       */
      public Builder clearPlatformModel() {
        bitField0_ = (bitField0_ & ~0x00000020);
        platformModel_ = getDefaultInstance().getPlatformModel();
        onChanged();
        return this;
      }
      /**
       * <code>optional string platform_model = 60;</code>
       * @param value The bytes for platformModel to set.
       * @return This builder for chaining.
       */
      public Builder setPlatformModelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        platformModel_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object versionString_ = "";
      /**
       * <code>optional string version_string = 70;</code>
       * @return Whether the versionString field is set.
       */
      public boolean hasVersionString() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional string version_string = 70;</code>
       * @return The versionString.
       */
      public java.lang.String getVersionString() {
        java.lang.Object ref = versionString_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            versionString_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string version_string = 70;</code>
       * @return The bytes for versionString.
       */
      public com.google.protobuf.ByteString
          getVersionStringBytes() {
        java.lang.Object ref = versionString_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          versionString_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string version_string = 70;</code>
       * @param value The versionString to set.
       * @return This builder for chaining.
       */
      public Builder setVersionString(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        versionString_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string version_string = 70;</code>
       * @return This builder for chaining.
       */
      public Builder clearVersionString() {
        bitField0_ = (bitField0_ & ~0x00000040);
        versionString_ = getDefaultInstance().getVersionString();
        onChanged();
        return this;
      }
      /**
       * <code>optional string version_string = 70;</code>
       * @param value The bytes for versionString to set.
       * @return This builder for chaining.
       */
      public Builder setVersionStringBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        versionString_ = value;
        onChanged();
        return this;
      }

      private com.spotify.Authentication.LibspotifyAppKey appkey_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.LibspotifyAppKey, com.spotify.Authentication.LibspotifyAppKey.Builder, com.spotify.Authentication.LibspotifyAppKeyOrBuilder> appkeyBuilder_;
      /**
       * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
       * @return Whether the appkey field is set.
       */
      public boolean hasAppkey() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
       * @return The appkey.
       */
      public com.spotify.Authentication.LibspotifyAppKey getAppkey() {
        if (appkeyBuilder_ == null) {
          return appkey_ == null ? com.spotify.Authentication.LibspotifyAppKey.getDefaultInstance() : appkey_;
        } else {
          return appkeyBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
       */
      public Builder setAppkey(com.spotify.Authentication.LibspotifyAppKey value) {
        if (appkeyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          appkey_ = value;
          onChanged();
        } else {
          appkeyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
       */
      public Builder setAppkey(
          com.spotify.Authentication.LibspotifyAppKey.Builder builderForValue) {
        if (appkeyBuilder_ == null) {
          appkey_ = builderForValue.build();
          onChanged();
        } else {
          appkeyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
       */
      public Builder mergeAppkey(com.spotify.Authentication.LibspotifyAppKey value) {
        if (appkeyBuilder_ == null) {
          if (((bitField0_ & 0x00000080) != 0) &&
              appkey_ != null &&
              appkey_ != com.spotify.Authentication.LibspotifyAppKey.getDefaultInstance()) {
            appkey_ =
              com.spotify.Authentication.LibspotifyAppKey.newBuilder(appkey_).mergeFrom(value).buildPartial();
          } else {
            appkey_ = value;
          }
          onChanged();
        } else {
          appkeyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
       */
      public Builder clearAppkey() {
        if (appkeyBuilder_ == null) {
          appkey_ = null;
          onChanged();
        } else {
          appkeyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
       */
      public com.spotify.Authentication.LibspotifyAppKey.Builder getAppkeyBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getAppkeyFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
       */
      public com.spotify.Authentication.LibspotifyAppKeyOrBuilder getAppkeyOrBuilder() {
        if (appkeyBuilder_ != null) {
          return appkeyBuilder_.getMessageOrBuilder();
        } else {
          return appkey_ == null ?
              com.spotify.Authentication.LibspotifyAppKey.getDefaultInstance() : appkey_;
        }
      }
      /**
       * <code>optional .spotify.LibspotifyAppKey appkey = 80;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.LibspotifyAppKey, com.spotify.Authentication.LibspotifyAppKey.Builder, com.spotify.Authentication.LibspotifyAppKeyOrBuilder> 
          getAppkeyFieldBuilder() {
        if (appkeyBuilder_ == null) {
          appkeyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.LibspotifyAppKey, com.spotify.Authentication.LibspotifyAppKey.Builder, com.spotify.Authentication.LibspotifyAppKeyOrBuilder>(
                  getAppkey(),
                  getParentForChildren(),
                  isClean());
          appkey_ = null;
        }
        return appkeyBuilder_;
      }

      private com.spotify.Authentication.ClientInfo clientInfo_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.ClientInfo, com.spotify.Authentication.ClientInfo.Builder, com.spotify.Authentication.ClientInfoOrBuilder> clientInfoBuilder_;
      /**
       * <code>optional .spotify.ClientInfo client_info = 90;</code>
       * @return Whether the clientInfo field is set.
       */
      public boolean hasClientInfo() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <code>optional .spotify.ClientInfo client_info = 90;</code>
       * @return The clientInfo.
       */
      public com.spotify.Authentication.ClientInfo getClientInfo() {
        if (clientInfoBuilder_ == null) {
          return clientInfo_ == null ? com.spotify.Authentication.ClientInfo.getDefaultInstance() : clientInfo_;
        } else {
          return clientInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.ClientInfo client_info = 90;</code>
       */
      public Builder setClientInfo(com.spotify.Authentication.ClientInfo value) {
        if (clientInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          clientInfo_ = value;
          onChanged();
        } else {
          clientInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .spotify.ClientInfo client_info = 90;</code>
       */
      public Builder setClientInfo(
          com.spotify.Authentication.ClientInfo.Builder builderForValue) {
        if (clientInfoBuilder_ == null) {
          clientInfo_ = builderForValue.build();
          onChanged();
        } else {
          clientInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .spotify.ClientInfo client_info = 90;</code>
       */
      public Builder mergeClientInfo(com.spotify.Authentication.ClientInfo value) {
        if (clientInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000100) != 0) &&
              clientInfo_ != null &&
              clientInfo_ != com.spotify.Authentication.ClientInfo.getDefaultInstance()) {
            clientInfo_ =
              com.spotify.Authentication.ClientInfo.newBuilder(clientInfo_).mergeFrom(value).buildPartial();
          } else {
            clientInfo_ = value;
          }
          onChanged();
        } else {
          clientInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .spotify.ClientInfo client_info = 90;</code>
       */
      public Builder clearClientInfo() {
        if (clientInfoBuilder_ == null) {
          clientInfo_ = null;
          onChanged();
        } else {
          clientInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       * <code>optional .spotify.ClientInfo client_info = 90;</code>
       */
      public com.spotify.Authentication.ClientInfo.Builder getClientInfoBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getClientInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.ClientInfo client_info = 90;</code>
       */
      public com.spotify.Authentication.ClientInfoOrBuilder getClientInfoOrBuilder() {
        if (clientInfoBuilder_ != null) {
          return clientInfoBuilder_.getMessageOrBuilder();
        } else {
          return clientInfo_ == null ?
              com.spotify.Authentication.ClientInfo.getDefaultInstance() : clientInfo_;
        }
      }
      /**
       * <code>optional .spotify.ClientInfo client_info = 90;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.ClientInfo, com.spotify.Authentication.ClientInfo.Builder, com.spotify.Authentication.ClientInfoOrBuilder> 
          getClientInfoFieldBuilder() {
        if (clientInfoBuilder_ == null) {
          clientInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.ClientInfo, com.spotify.Authentication.ClientInfo.Builder, com.spotify.Authentication.ClientInfoOrBuilder>(
                  getClientInfo(),
                  getParentForChildren(),
                  isClean());
          clientInfo_ = null;
        }
        return clientInfoBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.ClientResponseEncrypted)
    }

    // @@protoc_insertion_point(class_scope:spotify.ClientResponseEncrypted)
    private static final com.spotify.Authentication.ClientResponseEncrypted DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.ClientResponseEncrypted();
    }

    public static com.spotify.Authentication.ClientResponseEncrypted getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.ClientResponseEncrypted getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LoginCredentialsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.LoginCredentials)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string username = 10;</code>
     * @return Whether the username field is set.
     */
    boolean hasUsername();
    /**
     * <code>optional string username = 10;</code>
     * @return The username.
     */
    java.lang.String getUsername();
    /**
     * <code>optional string username = 10;</code>
     * @return The bytes for username.
     */
    com.google.protobuf.ByteString
        getUsernameBytes();

    /**
     * <code>required .spotify.AuthenticationType typ = 20;</code>
     * @return Whether the typ field is set.
     */
    boolean hasTyp();
    /**
     * <code>required .spotify.AuthenticationType typ = 20;</code>
     * @return The typ.
     */
    com.spotify.Authentication.AuthenticationType getTyp();

    /**
     * <code>optional bytes auth_data = 30;</code>
     * @return Whether the authData field is set.
     */
    boolean hasAuthData();
    /**
     * <code>optional bytes auth_data = 30;</code>
     * @return The authData.
     */
    com.google.protobuf.ByteString getAuthData();
  }
  /**
   * Protobuf type {@code spotify.LoginCredentials}
   */
  public  static final class LoginCredentials extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.LoginCredentials)
      LoginCredentialsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use LoginCredentials.newBuilder() to construct.
    private LoginCredentials(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private LoginCredentials() {
      username_ = "";
      typ_ = 0;
      authData_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new LoginCredentials();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private LoginCredentials(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 82: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              username_ = bs;
              break;
            }
            case 160: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              com.spotify.Authentication.AuthenticationType value = com.spotify.Authentication.AuthenticationType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(20, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                typ_ = rawValue;
              }
              break;
            }
            case 242: {
              bitField0_ |= 0x00000004;
              authData_ = input.readBytes();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_LoginCredentials_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_LoginCredentials_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.LoginCredentials.class, com.spotify.Authentication.LoginCredentials.Builder.class);
    }

    private int bitField0_;
    public static final int USERNAME_FIELD_NUMBER = 10;
    private volatile java.lang.Object username_;
    /**
     * <code>optional string username = 10;</code>
     * @return Whether the username field is set.
     */
    public boolean hasUsername() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional string username = 10;</code>
     * @return The username.
     */
    public java.lang.String getUsername() {
      java.lang.Object ref = username_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          username_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string username = 10;</code>
     * @return The bytes for username.
     */
    public com.google.protobuf.ByteString
        getUsernameBytes() {
      java.lang.Object ref = username_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        username_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TYP_FIELD_NUMBER = 20;
    private int typ_;
    /**
     * <code>required .spotify.AuthenticationType typ = 20;</code>
     * @return Whether the typ field is set.
     */
    public boolean hasTyp() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required .spotify.AuthenticationType typ = 20;</code>
     * @return The typ.
     */
    public com.spotify.Authentication.AuthenticationType getTyp() {
      @SuppressWarnings("deprecation")
      com.spotify.Authentication.AuthenticationType result = com.spotify.Authentication.AuthenticationType.valueOf(typ_);
      return result == null ? com.spotify.Authentication.AuthenticationType.AUTHENTICATION_USER_PASS : result;
    }

    public static final int AUTH_DATA_FIELD_NUMBER = 30;
    private com.google.protobuf.ByteString authData_;
    /**
     * <code>optional bytes auth_data = 30;</code>
     * @return Whether the authData field is set.
     */
    public boolean hasAuthData() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional bytes auth_data = 30;</code>
     * @return The authData.
     */
    public com.google.protobuf.ByteString getAuthData() {
      return authData_;
    }

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

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

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 10, username_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeEnum(20, typ_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeBytes(30, authData_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, username_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(20, typ_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(30, authData_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.LoginCredentials)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.LoginCredentials other = (com.spotify.Authentication.LoginCredentials) obj;

      if (hasUsername() != other.hasUsername()) return false;
      if (hasUsername()) {
        if (!getUsername()
            .equals(other.getUsername())) return false;
      }
      if (hasTyp() != other.hasTyp()) return false;
      if (hasTyp()) {
        if (typ_ != other.typ_) return false;
      }
      if (hasAuthData() != other.hasAuthData()) return false;
      if (hasAuthData()) {
        if (!getAuthData()
            .equals(other.getAuthData())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasUsername()) {
        hash = (37 * hash) + USERNAME_FIELD_NUMBER;
        hash = (53 * hash) + getUsername().hashCode();
      }
      if (hasTyp()) {
        hash = (37 * hash) + TYP_FIELD_NUMBER;
        hash = (53 * hash) + typ_;
      }
      if (hasAuthData()) {
        hash = (37 * hash) + AUTH_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getAuthData().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.spotify.Authentication.LoginCredentials parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.LoginCredentials parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.LoginCredentials parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.LoginCredentials parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.LoginCredentials parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.LoginCredentials parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.LoginCredentials parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.LoginCredentials parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.LoginCredentials parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.LoginCredentials parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.LoginCredentials parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.LoginCredentials parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.LoginCredentials prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.LoginCredentials}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.LoginCredentials)
        com.spotify.Authentication.LoginCredentialsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_LoginCredentials_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_LoginCredentials_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.LoginCredentials.class, com.spotify.Authentication.LoginCredentials.Builder.class);
      }

      // Construct using com.spotify.Authentication.LoginCredentials.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        username_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        typ_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        authData_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_LoginCredentials_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.LoginCredentials getDefaultInstanceForType() {
        return com.spotify.Authentication.LoginCredentials.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.LoginCredentials build() {
        com.spotify.Authentication.LoginCredentials result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.LoginCredentials buildPartial() {
        com.spotify.Authentication.LoginCredentials result = new com.spotify.Authentication.LoginCredentials(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.username_ = username_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.typ_ = typ_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.authData_ = authData_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.LoginCredentials other) {
        if (other == com.spotify.Authentication.LoginCredentials.getDefaultInstance()) return this;
        if (other.hasUsername()) {
          bitField0_ |= 0x00000001;
          username_ = other.username_;
          onChanged();
        }
        if (other.hasTyp()) {
          setTyp(other.getTyp());
        }
        if (other.hasAuthData()) {
          setAuthData(other.getAuthData());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

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

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

      private java.lang.Object username_ = "";
      /**
       * <code>optional string username = 10;</code>
       * @return Whether the username field is set.
       */
      public boolean hasUsername() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional string username = 10;</code>
       * @return The username.
       */
      public java.lang.String getUsername() {
        java.lang.Object ref = username_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            username_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string username = 10;</code>
       * @return The bytes for username.
       */
      public com.google.protobuf.ByteString
          getUsernameBytes() {
        java.lang.Object ref = username_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          username_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string username = 10;</code>
       * @param value The username to set.
       * @return This builder for chaining.
       */
      public Builder setUsername(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        username_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string username = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearUsername() {
        bitField0_ = (bitField0_ & ~0x00000001);
        username_ = getDefaultInstance().getUsername();
        onChanged();
        return this;
      }
      /**
       * <code>optional string username = 10;</code>
       * @param value The bytes for username to set.
       * @return This builder for chaining.
       */
      public Builder setUsernameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        username_ = value;
        onChanged();
        return this;
      }

      private int typ_ = 0;
      /**
       * <code>required .spotify.AuthenticationType typ = 20;</code>
       * @return Whether the typ field is set.
       */
      public boolean hasTyp() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required .spotify.AuthenticationType typ = 20;</code>
       * @return The typ.
       */
      public com.spotify.Authentication.AuthenticationType getTyp() {
        @SuppressWarnings("deprecation")
        com.spotify.Authentication.AuthenticationType result = com.spotify.Authentication.AuthenticationType.valueOf(typ_);
        return result == null ? com.spotify.Authentication.AuthenticationType.AUTHENTICATION_USER_PASS : result;
      }
      /**
       * <code>required .spotify.AuthenticationType typ = 20;</code>
       * @param value The typ to set.
       * @return This builder for chaining.
       */
      public Builder setTyp(com.spotify.Authentication.AuthenticationType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        typ_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>required .spotify.AuthenticationType typ = 20;</code>
       * @return This builder for chaining.
       */
      public Builder clearTyp() {
        bitField0_ = (bitField0_ & ~0x00000002);
        typ_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString authData_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes auth_data = 30;</code>
       * @return Whether the authData field is set.
       */
      public boolean hasAuthData() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional bytes auth_data = 30;</code>
       * @return The authData.
       */
      public com.google.protobuf.ByteString getAuthData() {
        return authData_;
      }
      /**
       * <code>optional bytes auth_data = 30;</code>
       * @param value The authData to set.
       * @return This builder for chaining.
       */
      public Builder setAuthData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        authData_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes auth_data = 30;</code>
       * @return This builder for chaining.
       */
      public Builder clearAuthData() {
        bitField0_ = (bitField0_ & ~0x00000004);
        authData_ = getDefaultInstance().getAuthData();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.LoginCredentials)
    }

    // @@protoc_insertion_point(class_scope:spotify.LoginCredentials)
    private static final com.spotify.Authentication.LoginCredentials DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.LoginCredentials();
    }

    public static com.spotify.Authentication.LoginCredentials getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.LoginCredentials getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface FingerprintResponseUnionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.FingerprintResponseUnion)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
     * @return Whether the grain field is set.
     */
    boolean hasGrain();
    /**
     * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
     * @return The grain.
     */
    com.spotify.Authentication.FingerprintGrainResponse getGrain();
    /**
     * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
     */
    com.spotify.Authentication.FingerprintGrainResponseOrBuilder getGrainOrBuilder();

    /**
     * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
     * @return Whether the hmacRipemd field is set.
     */
    boolean hasHmacRipemd();
    /**
     * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
     * @return The hmacRipemd.
     */
    com.spotify.Authentication.FingerprintHmacRipemdResponse getHmacRipemd();
    /**
     * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
     */
    com.spotify.Authentication.FingerprintHmacRipemdResponseOrBuilder getHmacRipemdOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.FingerprintResponseUnion}
   */
  public  static final class FingerprintResponseUnion extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.FingerprintResponseUnion)
      FingerprintResponseUnionOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use FingerprintResponseUnion.newBuilder() to construct.
    private FingerprintResponseUnion(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private FingerprintResponseUnion() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new FingerprintResponseUnion();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private FingerprintResponseUnion(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 82: {
              com.spotify.Authentication.FingerprintGrainResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) != 0)) {
                subBuilder = grain_.toBuilder();
              }
              grain_ = input.readMessage(com.spotify.Authentication.FingerprintGrainResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(grain_);
                grain_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 162: {
              com.spotify.Authentication.FingerprintHmacRipemdResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) != 0)) {
                subBuilder = hmacRipemd_.toBuilder();
              }
              hmacRipemd_ = input.readMessage(com.spotify.Authentication.FingerprintHmacRipemdResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(hmacRipemd_);
                hmacRipemd_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_FingerprintResponseUnion_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_FingerprintResponseUnion_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.FingerprintResponseUnion.class, com.spotify.Authentication.FingerprintResponseUnion.Builder.class);
    }

    private int bitField0_;
    public static final int GRAIN_FIELD_NUMBER = 10;
    private com.spotify.Authentication.FingerprintGrainResponse grain_;
    /**
     * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
     * @return Whether the grain field is set.
     */
    public boolean hasGrain() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
     * @return The grain.
     */
    public com.spotify.Authentication.FingerprintGrainResponse getGrain() {
      return grain_ == null ? com.spotify.Authentication.FingerprintGrainResponse.getDefaultInstance() : grain_;
    }
    /**
     * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
     */
    public com.spotify.Authentication.FingerprintGrainResponseOrBuilder getGrainOrBuilder() {
      return grain_ == null ? com.spotify.Authentication.FingerprintGrainResponse.getDefaultInstance() : grain_;
    }

    public static final int HMAC_RIPEMD_FIELD_NUMBER = 20;
    private com.spotify.Authentication.FingerprintHmacRipemdResponse hmacRipemd_;
    /**
     * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
     * @return Whether the hmacRipemd field is set.
     */
    public boolean hasHmacRipemd() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
     * @return The hmacRipemd.
     */
    public com.spotify.Authentication.FingerprintHmacRipemdResponse getHmacRipemd() {
      return hmacRipemd_ == null ? com.spotify.Authentication.FingerprintHmacRipemdResponse.getDefaultInstance() : hmacRipemd_;
    }
    /**
     * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
     */
    public com.spotify.Authentication.FingerprintHmacRipemdResponseOrBuilder getHmacRipemdOrBuilder() {
      return hmacRipemd_ == null ? com.spotify.Authentication.FingerprintHmacRipemdResponse.getDefaultInstance() : hmacRipemd_;
    }

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

      if (hasGrain()) {
        if (!getGrain().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasHmacRipemd()) {
        if (!getHmacRipemd().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeMessage(10, getGrain());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeMessage(20, getHmacRipemd());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getGrain());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(20, getHmacRipemd());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.FingerprintResponseUnion)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.FingerprintResponseUnion other = (com.spotify.Authentication.FingerprintResponseUnion) obj;

      if (hasGrain() != other.hasGrain()) return false;
      if (hasGrain()) {
        if (!getGrain()
            .equals(other.getGrain())) return false;
      }
      if (hasHmacRipemd() != other.hasHmacRipemd()) return false;
      if (hasHmacRipemd()) {
        if (!getHmacRipemd()
            .equals(other.getHmacRipemd())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasGrain()) {
        hash = (37 * hash) + GRAIN_FIELD_NUMBER;
        hash = (53 * hash) + getGrain().hashCode();
      }
      if (hasHmacRipemd()) {
        hash = (37 * hash) + HMAC_RIPEMD_FIELD_NUMBER;
        hash = (53 * hash) + getHmacRipemd().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.spotify.Authentication.FingerprintResponseUnion parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.FingerprintResponseUnion parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintResponseUnion parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.FingerprintResponseUnion parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintResponseUnion parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.FingerprintResponseUnion parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintResponseUnion parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.FingerprintResponseUnion parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintResponseUnion parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.FingerprintResponseUnion parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintResponseUnion parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.FingerprintResponseUnion parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.FingerprintResponseUnion prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.FingerprintResponseUnion}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.FingerprintResponseUnion)
        com.spotify.Authentication.FingerprintResponseUnionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_FingerprintResponseUnion_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_FingerprintResponseUnion_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.FingerprintResponseUnion.class, com.spotify.Authentication.FingerprintResponseUnion.Builder.class);
      }

      // Construct using com.spotify.Authentication.FingerprintResponseUnion.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getGrainFieldBuilder();
          getHmacRipemdFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (grainBuilder_ == null) {
          grain_ = null;
        } else {
          grainBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (hmacRipemdBuilder_ == null) {
          hmacRipemd_ = null;
        } else {
          hmacRipemdBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_FingerprintResponseUnion_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.FingerprintResponseUnion getDefaultInstanceForType() {
        return com.spotify.Authentication.FingerprintResponseUnion.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.FingerprintResponseUnion build() {
        com.spotify.Authentication.FingerprintResponseUnion result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.FingerprintResponseUnion buildPartial() {
        com.spotify.Authentication.FingerprintResponseUnion result = new com.spotify.Authentication.FingerprintResponseUnion(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (grainBuilder_ == null) {
            result.grain_ = grain_;
          } else {
            result.grain_ = grainBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (hmacRipemdBuilder_ == null) {
            result.hmacRipemd_ = hmacRipemd_;
          } else {
            result.hmacRipemd_ = hmacRipemdBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.FingerprintResponseUnion other) {
        if (other == com.spotify.Authentication.FingerprintResponseUnion.getDefaultInstance()) return this;
        if (other.hasGrain()) {
          mergeGrain(other.getGrain());
        }
        if (other.hasHmacRipemd()) {
          mergeHmacRipemd(other.getHmacRipemd());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        if (hasGrain()) {
          if (!getGrain().isInitialized()) {
            return false;
          }
        }
        if (hasHmacRipemd()) {
          if (!getHmacRipemd().isInitialized()) {
            return false;
          }
        }
        return true;
      }

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

      private com.spotify.Authentication.FingerprintGrainResponse grain_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.FingerprintGrainResponse, com.spotify.Authentication.FingerprintGrainResponse.Builder, com.spotify.Authentication.FingerprintGrainResponseOrBuilder> grainBuilder_;
      /**
       * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
       * @return Whether the grain field is set.
       */
      public boolean hasGrain() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
       * @return The grain.
       */
      public com.spotify.Authentication.FingerprintGrainResponse getGrain() {
        if (grainBuilder_ == null) {
          return grain_ == null ? com.spotify.Authentication.FingerprintGrainResponse.getDefaultInstance() : grain_;
        } else {
          return grainBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
       */
      public Builder setGrain(com.spotify.Authentication.FingerprintGrainResponse value) {
        if (grainBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          grain_ = value;
          onChanged();
        } else {
          grainBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
       */
      public Builder setGrain(
          com.spotify.Authentication.FingerprintGrainResponse.Builder builderForValue) {
        if (grainBuilder_ == null) {
          grain_ = builderForValue.build();
          onChanged();
        } else {
          grainBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
       */
      public Builder mergeGrain(com.spotify.Authentication.FingerprintGrainResponse value) {
        if (grainBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              grain_ != null &&
              grain_ != com.spotify.Authentication.FingerprintGrainResponse.getDefaultInstance()) {
            grain_ =
              com.spotify.Authentication.FingerprintGrainResponse.newBuilder(grain_).mergeFrom(value).buildPartial();
          } else {
            grain_ = value;
          }
          onChanged();
        } else {
          grainBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
       */
      public Builder clearGrain() {
        if (grainBuilder_ == null) {
          grain_ = null;
          onChanged();
        } else {
          grainBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
       */
      public com.spotify.Authentication.FingerprintGrainResponse.Builder getGrainBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getGrainFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
       */
      public com.spotify.Authentication.FingerprintGrainResponseOrBuilder getGrainOrBuilder() {
        if (grainBuilder_ != null) {
          return grainBuilder_.getMessageOrBuilder();
        } else {
          return grain_ == null ?
              com.spotify.Authentication.FingerprintGrainResponse.getDefaultInstance() : grain_;
        }
      }
      /**
       * <code>optional .spotify.FingerprintGrainResponse grain = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.FingerprintGrainResponse, com.spotify.Authentication.FingerprintGrainResponse.Builder, com.spotify.Authentication.FingerprintGrainResponseOrBuilder> 
          getGrainFieldBuilder() {
        if (grainBuilder_ == null) {
          grainBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.FingerprintGrainResponse, com.spotify.Authentication.FingerprintGrainResponse.Builder, com.spotify.Authentication.FingerprintGrainResponseOrBuilder>(
                  getGrain(),
                  getParentForChildren(),
                  isClean());
          grain_ = null;
        }
        return grainBuilder_;
      }

      private com.spotify.Authentication.FingerprintHmacRipemdResponse hmacRipemd_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.FingerprintHmacRipemdResponse, com.spotify.Authentication.FingerprintHmacRipemdResponse.Builder, com.spotify.Authentication.FingerprintHmacRipemdResponseOrBuilder> hmacRipemdBuilder_;
      /**
       * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
       * @return Whether the hmacRipemd field is set.
       */
      public boolean hasHmacRipemd() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
       * @return The hmacRipemd.
       */
      public com.spotify.Authentication.FingerprintHmacRipemdResponse getHmacRipemd() {
        if (hmacRipemdBuilder_ == null) {
          return hmacRipemd_ == null ? com.spotify.Authentication.FingerprintHmacRipemdResponse.getDefaultInstance() : hmacRipemd_;
        } else {
          return hmacRipemdBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
       */
      public Builder setHmacRipemd(com.spotify.Authentication.FingerprintHmacRipemdResponse value) {
        if (hmacRipemdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          hmacRipemd_ = value;
          onChanged();
        } else {
          hmacRipemdBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
       */
      public Builder setHmacRipemd(
          com.spotify.Authentication.FingerprintHmacRipemdResponse.Builder builderForValue) {
        if (hmacRipemdBuilder_ == null) {
          hmacRipemd_ = builderForValue.build();
          onChanged();
        } else {
          hmacRipemdBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
       */
      public Builder mergeHmacRipemd(com.spotify.Authentication.FingerprintHmacRipemdResponse value) {
        if (hmacRipemdBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              hmacRipemd_ != null &&
              hmacRipemd_ != com.spotify.Authentication.FingerprintHmacRipemdResponse.getDefaultInstance()) {
            hmacRipemd_ =
              com.spotify.Authentication.FingerprintHmacRipemdResponse.newBuilder(hmacRipemd_).mergeFrom(value).buildPartial();
          } else {
            hmacRipemd_ = value;
          }
          onChanged();
        } else {
          hmacRipemdBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
       */
      public Builder clearHmacRipemd() {
        if (hmacRipemdBuilder_ == null) {
          hmacRipemd_ = null;
          onChanged();
        } else {
          hmacRipemdBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
       */
      public com.spotify.Authentication.FingerprintHmacRipemdResponse.Builder getHmacRipemdBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getHmacRipemdFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
       */
      public com.spotify.Authentication.FingerprintHmacRipemdResponseOrBuilder getHmacRipemdOrBuilder() {
        if (hmacRipemdBuilder_ != null) {
          return hmacRipemdBuilder_.getMessageOrBuilder();
        } else {
          return hmacRipemd_ == null ?
              com.spotify.Authentication.FingerprintHmacRipemdResponse.getDefaultInstance() : hmacRipemd_;
        }
      }
      /**
       * <code>optional .spotify.FingerprintHmacRipemdResponse hmac_ripemd = 20;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.FingerprintHmacRipemdResponse, com.spotify.Authentication.FingerprintHmacRipemdResponse.Builder, com.spotify.Authentication.FingerprintHmacRipemdResponseOrBuilder> 
          getHmacRipemdFieldBuilder() {
        if (hmacRipemdBuilder_ == null) {
          hmacRipemdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.FingerprintHmacRipemdResponse, com.spotify.Authentication.FingerprintHmacRipemdResponse.Builder, com.spotify.Authentication.FingerprintHmacRipemdResponseOrBuilder>(
                  getHmacRipemd(),
                  getParentForChildren(),
                  isClean());
          hmacRipemd_ = null;
        }
        return hmacRipemdBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.FingerprintResponseUnion)
    }

    // @@protoc_insertion_point(class_scope:spotify.FingerprintResponseUnion)
    private static final com.spotify.Authentication.FingerprintResponseUnion DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.FingerprintResponseUnion();
    }

    public static com.spotify.Authentication.FingerprintResponseUnion getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.FingerprintResponseUnion getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface FingerprintGrainResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.FingerprintGrainResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required bytes encrypted_key = 10;</code>
     * @return Whether the encryptedKey field is set.
     */
    boolean hasEncryptedKey();
    /**
     * <code>required bytes encrypted_key = 10;</code>
     * @return The encryptedKey.
     */
    com.google.protobuf.ByteString getEncryptedKey();
  }
  /**
   * Protobuf type {@code spotify.FingerprintGrainResponse}
   */
  public  static final class FingerprintGrainResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.FingerprintGrainResponse)
      FingerprintGrainResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use FingerprintGrainResponse.newBuilder() to construct.
    private FingerprintGrainResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private FingerprintGrainResponse() {
      encryptedKey_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new FingerprintGrainResponse();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private FingerprintGrainResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 82: {
              bitField0_ |= 0x00000001;
              encryptedKey_ = input.readBytes();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_FingerprintGrainResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_FingerprintGrainResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.FingerprintGrainResponse.class, com.spotify.Authentication.FingerprintGrainResponse.Builder.class);
    }

    private int bitField0_;
    public static final int ENCRYPTED_KEY_FIELD_NUMBER = 10;
    private com.google.protobuf.ByteString encryptedKey_;
    /**
     * <code>required bytes encrypted_key = 10;</code>
     * @return Whether the encryptedKey field is set.
     */
    public boolean hasEncryptedKey() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required bytes encrypted_key = 10;</code>
     * @return The encryptedKey.
     */
    public com.google.protobuf.ByteString getEncryptedKey() {
      return encryptedKey_;
    }

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

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

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeBytes(10, encryptedKey_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(10, encryptedKey_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.FingerprintGrainResponse)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.FingerprintGrainResponse other = (com.spotify.Authentication.FingerprintGrainResponse) obj;

      if (hasEncryptedKey() != other.hasEncryptedKey()) return false;
      if (hasEncryptedKey()) {
        if (!getEncryptedKey()
            .equals(other.getEncryptedKey())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

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

    public static com.spotify.Authentication.FingerprintGrainResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.FingerprintGrainResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintGrainResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.FingerprintGrainResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintGrainResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.FingerprintGrainResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintGrainResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.FingerprintGrainResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintGrainResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.FingerprintGrainResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintGrainResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.FingerprintGrainResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.FingerprintGrainResponse prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.FingerprintGrainResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.FingerprintGrainResponse)
        com.spotify.Authentication.FingerprintGrainResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_FingerprintGrainResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_FingerprintGrainResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.FingerprintGrainResponse.class, com.spotify.Authentication.FingerprintGrainResponse.Builder.class);
      }

      // Construct using com.spotify.Authentication.FingerprintGrainResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        encryptedKey_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_FingerprintGrainResponse_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.FingerprintGrainResponse getDefaultInstanceForType() {
        return com.spotify.Authentication.FingerprintGrainResponse.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.FingerprintGrainResponse build() {
        com.spotify.Authentication.FingerprintGrainResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.FingerprintGrainResponse buildPartial() {
        com.spotify.Authentication.FingerprintGrainResponse result = new com.spotify.Authentication.FingerprintGrainResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.encryptedKey_ = encryptedKey_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.FingerprintGrainResponse other) {
        if (other == com.spotify.Authentication.FingerprintGrainResponse.getDefaultInstance()) return this;
        if (other.hasEncryptedKey()) {
          setEncryptedKey(other.getEncryptedKey());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

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

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

      private com.google.protobuf.ByteString encryptedKey_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes encrypted_key = 10;</code>
       * @return Whether the encryptedKey field is set.
       */
      public boolean hasEncryptedKey() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required bytes encrypted_key = 10;</code>
       * @return The encryptedKey.
       */
      public com.google.protobuf.ByteString getEncryptedKey() {
        return encryptedKey_;
      }
      /**
       * <code>required bytes encrypted_key = 10;</code>
       * @param value The encryptedKey to set.
       * @return This builder for chaining.
       */
      public Builder setEncryptedKey(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        encryptedKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes encrypted_key = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearEncryptedKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        encryptedKey_ = getDefaultInstance().getEncryptedKey();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.FingerprintGrainResponse)
    }

    // @@protoc_insertion_point(class_scope:spotify.FingerprintGrainResponse)
    private static final com.spotify.Authentication.FingerprintGrainResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.FingerprintGrainResponse();
    }

    public static com.spotify.Authentication.FingerprintGrainResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.FingerprintGrainResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface FingerprintHmacRipemdResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.FingerprintHmacRipemdResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required bytes hmac = 10;</code>
     * @return Whether the hmac field is set.
     */
    boolean hasHmac();
    /**
     * <code>required bytes hmac = 10;</code>
     * @return The hmac.
     */
    com.google.protobuf.ByteString getHmac();
  }
  /**
   * Protobuf type {@code spotify.FingerprintHmacRipemdResponse}
   */
  public  static final class FingerprintHmacRipemdResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.FingerprintHmacRipemdResponse)
      FingerprintHmacRipemdResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use FingerprintHmacRipemdResponse.newBuilder() to construct.
    private FingerprintHmacRipemdResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private FingerprintHmacRipemdResponse() {
      hmac_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new FingerprintHmacRipemdResponse();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private FingerprintHmacRipemdResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 82: {
              bitField0_ |= 0x00000001;
              hmac_ = input.readBytes();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_FingerprintHmacRipemdResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_FingerprintHmacRipemdResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.FingerprintHmacRipemdResponse.class, com.spotify.Authentication.FingerprintHmacRipemdResponse.Builder.class);
    }

    private int bitField0_;
    public static final int HMAC_FIELD_NUMBER = 10;
    private com.google.protobuf.ByteString hmac_;
    /**
     * <code>required bytes hmac = 10;</code>
     * @return Whether the hmac field is set.
     */
    public boolean hasHmac() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required bytes hmac = 10;</code>
     * @return The hmac.
     */
    public com.google.protobuf.ByteString getHmac() {
      return hmac_;
    }

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

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

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeBytes(10, hmac_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(10, hmac_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.FingerprintHmacRipemdResponse)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.FingerprintHmacRipemdResponse other = (com.spotify.Authentication.FingerprintHmacRipemdResponse) obj;

      if (hasHmac() != other.hasHmac()) return false;
      if (hasHmac()) {
        if (!getHmac()
            .equals(other.getHmac())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

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

    public static com.spotify.Authentication.FingerprintHmacRipemdResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.FingerprintHmacRipemdResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintHmacRipemdResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.FingerprintHmacRipemdResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintHmacRipemdResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.FingerprintHmacRipemdResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintHmacRipemdResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.FingerprintHmacRipemdResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintHmacRipemdResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.FingerprintHmacRipemdResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.FingerprintHmacRipemdResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.FingerprintHmacRipemdResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.FingerprintHmacRipemdResponse prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.FingerprintHmacRipemdResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.FingerprintHmacRipemdResponse)
        com.spotify.Authentication.FingerprintHmacRipemdResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_FingerprintHmacRipemdResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_FingerprintHmacRipemdResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.FingerprintHmacRipemdResponse.class, com.spotify.Authentication.FingerprintHmacRipemdResponse.Builder.class);
      }

      // Construct using com.spotify.Authentication.FingerprintHmacRipemdResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        hmac_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_FingerprintHmacRipemdResponse_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.FingerprintHmacRipemdResponse getDefaultInstanceForType() {
        return com.spotify.Authentication.FingerprintHmacRipemdResponse.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.FingerprintHmacRipemdResponse build() {
        com.spotify.Authentication.FingerprintHmacRipemdResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.FingerprintHmacRipemdResponse buildPartial() {
        com.spotify.Authentication.FingerprintHmacRipemdResponse result = new com.spotify.Authentication.FingerprintHmacRipemdResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.hmac_ = hmac_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.FingerprintHmacRipemdResponse other) {
        if (other == com.spotify.Authentication.FingerprintHmacRipemdResponse.getDefaultInstance()) return this;
        if (other.hasHmac()) {
          setHmac(other.getHmac());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

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

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

      private com.google.protobuf.ByteString hmac_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes hmac = 10;</code>
       * @return Whether the hmac field is set.
       */
      public boolean hasHmac() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required bytes hmac = 10;</code>
       * @return The hmac.
       */
      public com.google.protobuf.ByteString getHmac() {
        return hmac_;
      }
      /**
       * <code>required bytes hmac = 10;</code>
       * @param value The hmac to set.
       * @return This builder for chaining.
       */
      public Builder setHmac(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        hmac_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes hmac = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearHmac() {
        bitField0_ = (bitField0_ & ~0x00000001);
        hmac_ = getDefaultInstance().getHmac();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.FingerprintHmacRipemdResponse)
    }

    // @@protoc_insertion_point(class_scope:spotify.FingerprintHmacRipemdResponse)
    private static final com.spotify.Authentication.FingerprintHmacRipemdResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.FingerprintHmacRipemdResponse();
    }

    public static com.spotify.Authentication.FingerprintHmacRipemdResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.FingerprintHmacRipemdResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PeerTicketUnionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.PeerTicketUnion)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
     * @return Whether the publicKey field is set.
     */
    boolean hasPublicKey();
    /**
     * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
     * @return The publicKey.
     */
    com.spotify.Authentication.PeerTicketPublicKey getPublicKey();
    /**
     * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
     */
    com.spotify.Authentication.PeerTicketPublicKeyOrBuilder getPublicKeyOrBuilder();

    /**
     * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
     * @return Whether the oldTicket field is set.
     */
    boolean hasOldTicket();
    /**
     * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
     * @return The oldTicket.
     */
    com.spotify.Authentication.PeerTicketOld getOldTicket();
    /**
     * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
     */
    com.spotify.Authentication.PeerTicketOldOrBuilder getOldTicketOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.PeerTicketUnion}
   */
  public  static final class PeerTicketUnion extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.PeerTicketUnion)
      PeerTicketUnionOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PeerTicketUnion.newBuilder() to construct.
    private PeerTicketUnion(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PeerTicketUnion() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new PeerTicketUnion();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private PeerTicketUnion(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 82: {
              com.spotify.Authentication.PeerTicketPublicKey.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) != 0)) {
                subBuilder = publicKey_.toBuilder();
              }
              publicKey_ = input.readMessage(com.spotify.Authentication.PeerTicketPublicKey.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(publicKey_);
                publicKey_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 162: {
              com.spotify.Authentication.PeerTicketOld.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) != 0)) {
                subBuilder = oldTicket_.toBuilder();
              }
              oldTicket_ = input.readMessage(com.spotify.Authentication.PeerTicketOld.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(oldTicket_);
                oldTicket_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_PeerTicketUnion_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_PeerTicketUnion_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.PeerTicketUnion.class, com.spotify.Authentication.PeerTicketUnion.Builder.class);
    }

    private int bitField0_;
    public static final int PUBLIC_KEY_FIELD_NUMBER = 10;
    private com.spotify.Authentication.PeerTicketPublicKey publicKey_;
    /**
     * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
     * @return Whether the publicKey field is set.
     */
    public boolean hasPublicKey() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
     * @return The publicKey.
     */
    public com.spotify.Authentication.PeerTicketPublicKey getPublicKey() {
      return publicKey_ == null ? com.spotify.Authentication.PeerTicketPublicKey.getDefaultInstance() : publicKey_;
    }
    /**
     * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
     */
    public com.spotify.Authentication.PeerTicketPublicKeyOrBuilder getPublicKeyOrBuilder() {
      return publicKey_ == null ? com.spotify.Authentication.PeerTicketPublicKey.getDefaultInstance() : publicKey_;
    }

    public static final int OLD_TICKET_FIELD_NUMBER = 20;
    private com.spotify.Authentication.PeerTicketOld oldTicket_;
    /**
     * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
     * @return Whether the oldTicket field is set.
     */
    public boolean hasOldTicket() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
     * @return The oldTicket.
     */
    public com.spotify.Authentication.PeerTicketOld getOldTicket() {
      return oldTicket_ == null ? com.spotify.Authentication.PeerTicketOld.getDefaultInstance() : oldTicket_;
    }
    /**
     * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
     */
    public com.spotify.Authentication.PeerTicketOldOrBuilder getOldTicketOrBuilder() {
      return oldTicket_ == null ? com.spotify.Authentication.PeerTicketOld.getDefaultInstance() : oldTicket_;
    }

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

      if (hasPublicKey()) {
        if (!getPublicKey().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasOldTicket()) {
        if (!getOldTicket().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeMessage(10, getPublicKey());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeMessage(20, getOldTicket());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getPublicKey());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(20, getOldTicket());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.PeerTicketUnion)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.PeerTicketUnion other = (com.spotify.Authentication.PeerTicketUnion) obj;

      if (hasPublicKey() != other.hasPublicKey()) return false;
      if (hasPublicKey()) {
        if (!getPublicKey()
            .equals(other.getPublicKey())) return false;
      }
      if (hasOldTicket() != other.hasOldTicket()) return false;
      if (hasOldTicket()) {
        if (!getOldTicket()
            .equals(other.getOldTicket())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasPublicKey()) {
        hash = (37 * hash) + PUBLIC_KEY_FIELD_NUMBER;
        hash = (53 * hash) + getPublicKey().hashCode();
      }
      if (hasOldTicket()) {
        hash = (37 * hash) + OLD_TICKET_FIELD_NUMBER;
        hash = (53 * hash) + getOldTicket().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.spotify.Authentication.PeerTicketUnion parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.PeerTicketUnion parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketUnion parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.PeerTicketUnion parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketUnion parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.PeerTicketUnion parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketUnion parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.PeerTicketUnion parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketUnion parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.PeerTicketUnion parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketUnion parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.PeerTicketUnion parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.PeerTicketUnion prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.PeerTicketUnion}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.PeerTicketUnion)
        com.spotify.Authentication.PeerTicketUnionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_PeerTicketUnion_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_PeerTicketUnion_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.PeerTicketUnion.class, com.spotify.Authentication.PeerTicketUnion.Builder.class);
      }

      // Construct using com.spotify.Authentication.PeerTicketUnion.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getPublicKeyFieldBuilder();
          getOldTicketFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (publicKeyBuilder_ == null) {
          publicKey_ = null;
        } else {
          publicKeyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (oldTicketBuilder_ == null) {
          oldTicket_ = null;
        } else {
          oldTicketBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_PeerTicketUnion_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.PeerTicketUnion getDefaultInstanceForType() {
        return com.spotify.Authentication.PeerTicketUnion.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.PeerTicketUnion build() {
        com.spotify.Authentication.PeerTicketUnion result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.PeerTicketUnion buildPartial() {
        com.spotify.Authentication.PeerTicketUnion result = new com.spotify.Authentication.PeerTicketUnion(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (publicKeyBuilder_ == null) {
            result.publicKey_ = publicKey_;
          } else {
            result.publicKey_ = publicKeyBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (oldTicketBuilder_ == null) {
            result.oldTicket_ = oldTicket_;
          } else {
            result.oldTicket_ = oldTicketBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.PeerTicketUnion other) {
        if (other == com.spotify.Authentication.PeerTicketUnion.getDefaultInstance()) return this;
        if (other.hasPublicKey()) {
          mergePublicKey(other.getPublicKey());
        }
        if (other.hasOldTicket()) {
          mergeOldTicket(other.getOldTicket());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        if (hasPublicKey()) {
          if (!getPublicKey().isInitialized()) {
            return false;
          }
        }
        if (hasOldTicket()) {
          if (!getOldTicket().isInitialized()) {
            return false;
          }
        }
        return true;
      }

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

      private com.spotify.Authentication.PeerTicketPublicKey publicKey_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.PeerTicketPublicKey, com.spotify.Authentication.PeerTicketPublicKey.Builder, com.spotify.Authentication.PeerTicketPublicKeyOrBuilder> publicKeyBuilder_;
      /**
       * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
       * @return Whether the publicKey field is set.
       */
      public boolean hasPublicKey() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
       * @return The publicKey.
       */
      public com.spotify.Authentication.PeerTicketPublicKey getPublicKey() {
        if (publicKeyBuilder_ == null) {
          return publicKey_ == null ? com.spotify.Authentication.PeerTicketPublicKey.getDefaultInstance() : publicKey_;
        } else {
          return publicKeyBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
       */
      public Builder setPublicKey(com.spotify.Authentication.PeerTicketPublicKey value) {
        if (publicKeyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          publicKey_ = value;
          onChanged();
        } else {
          publicKeyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
       */
      public Builder setPublicKey(
          com.spotify.Authentication.PeerTicketPublicKey.Builder builderForValue) {
        if (publicKeyBuilder_ == null) {
          publicKey_ = builderForValue.build();
          onChanged();
        } else {
          publicKeyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
       */
      public Builder mergePublicKey(com.spotify.Authentication.PeerTicketPublicKey value) {
        if (publicKeyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              publicKey_ != null &&
              publicKey_ != com.spotify.Authentication.PeerTicketPublicKey.getDefaultInstance()) {
            publicKey_ =
              com.spotify.Authentication.PeerTicketPublicKey.newBuilder(publicKey_).mergeFrom(value).buildPartial();
          } else {
            publicKey_ = value;
          }
          onChanged();
        } else {
          publicKeyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
       */
      public Builder clearPublicKey() {
        if (publicKeyBuilder_ == null) {
          publicKey_ = null;
          onChanged();
        } else {
          publicKeyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
       */
      public com.spotify.Authentication.PeerTicketPublicKey.Builder getPublicKeyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getPublicKeyFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
       */
      public com.spotify.Authentication.PeerTicketPublicKeyOrBuilder getPublicKeyOrBuilder() {
        if (publicKeyBuilder_ != null) {
          return publicKeyBuilder_.getMessageOrBuilder();
        } else {
          return publicKey_ == null ?
              com.spotify.Authentication.PeerTicketPublicKey.getDefaultInstance() : publicKey_;
        }
      }
      /**
       * <code>optional .spotify.PeerTicketPublicKey public_key = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.PeerTicketPublicKey, com.spotify.Authentication.PeerTicketPublicKey.Builder, com.spotify.Authentication.PeerTicketPublicKeyOrBuilder> 
          getPublicKeyFieldBuilder() {
        if (publicKeyBuilder_ == null) {
          publicKeyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.PeerTicketPublicKey, com.spotify.Authentication.PeerTicketPublicKey.Builder, com.spotify.Authentication.PeerTicketPublicKeyOrBuilder>(
                  getPublicKey(),
                  getParentForChildren(),
                  isClean());
          publicKey_ = null;
        }
        return publicKeyBuilder_;
      }

      private com.spotify.Authentication.PeerTicketOld oldTicket_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.PeerTicketOld, com.spotify.Authentication.PeerTicketOld.Builder, com.spotify.Authentication.PeerTicketOldOrBuilder> oldTicketBuilder_;
      /**
       * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
       * @return Whether the oldTicket field is set.
       */
      public boolean hasOldTicket() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
       * @return The oldTicket.
       */
      public com.spotify.Authentication.PeerTicketOld getOldTicket() {
        if (oldTicketBuilder_ == null) {
          return oldTicket_ == null ? com.spotify.Authentication.PeerTicketOld.getDefaultInstance() : oldTicket_;
        } else {
          return oldTicketBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
       */
      public Builder setOldTicket(com.spotify.Authentication.PeerTicketOld value) {
        if (oldTicketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          oldTicket_ = value;
          onChanged();
        } else {
          oldTicketBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
       */
      public Builder setOldTicket(
          com.spotify.Authentication.PeerTicketOld.Builder builderForValue) {
        if (oldTicketBuilder_ == null) {
          oldTicket_ = builderForValue.build();
          onChanged();
        } else {
          oldTicketBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
       */
      public Builder mergeOldTicket(com.spotify.Authentication.PeerTicketOld value) {
        if (oldTicketBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              oldTicket_ != null &&
              oldTicket_ != com.spotify.Authentication.PeerTicketOld.getDefaultInstance()) {
            oldTicket_ =
              com.spotify.Authentication.PeerTicketOld.newBuilder(oldTicket_).mergeFrom(value).buildPartial();
          } else {
            oldTicket_ = value;
          }
          onChanged();
        } else {
          oldTicketBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
       */
      public Builder clearOldTicket() {
        if (oldTicketBuilder_ == null) {
          oldTicket_ = null;
          onChanged();
        } else {
          oldTicketBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
       */
      public com.spotify.Authentication.PeerTicketOld.Builder getOldTicketBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getOldTicketFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
       */
      public com.spotify.Authentication.PeerTicketOldOrBuilder getOldTicketOrBuilder() {
        if (oldTicketBuilder_ != null) {
          return oldTicketBuilder_.getMessageOrBuilder();
        } else {
          return oldTicket_ == null ?
              com.spotify.Authentication.PeerTicketOld.getDefaultInstance() : oldTicket_;
        }
      }
      /**
       * <code>optional .spotify.PeerTicketOld old_ticket = 20;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.PeerTicketOld, com.spotify.Authentication.PeerTicketOld.Builder, com.spotify.Authentication.PeerTicketOldOrBuilder> 
          getOldTicketFieldBuilder() {
        if (oldTicketBuilder_ == null) {
          oldTicketBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.PeerTicketOld, com.spotify.Authentication.PeerTicketOld.Builder, com.spotify.Authentication.PeerTicketOldOrBuilder>(
                  getOldTicket(),
                  getParentForChildren(),
                  isClean());
          oldTicket_ = null;
        }
        return oldTicketBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.PeerTicketUnion)
    }

    // @@protoc_insertion_point(class_scope:spotify.PeerTicketUnion)
    private static final com.spotify.Authentication.PeerTicketUnion DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.PeerTicketUnion();
    }

    public static com.spotify.Authentication.PeerTicketUnion getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.PeerTicketUnion getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PeerTicketPublicKeyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.PeerTicketPublicKey)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required bytes public_key = 10;</code>
     * @return Whether the publicKey field is set.
     */
    boolean hasPublicKey();
    /**
     * <code>required bytes public_key = 10;</code>
     * @return The publicKey.
     */
    com.google.protobuf.ByteString getPublicKey();
  }
  /**
   * Protobuf type {@code spotify.PeerTicketPublicKey}
   */
  public  static final class PeerTicketPublicKey extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.PeerTicketPublicKey)
      PeerTicketPublicKeyOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PeerTicketPublicKey.newBuilder() to construct.
    private PeerTicketPublicKey(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PeerTicketPublicKey() {
      publicKey_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new PeerTicketPublicKey();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private PeerTicketPublicKey(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 82: {
              bitField0_ |= 0x00000001;
              publicKey_ = input.readBytes();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_PeerTicketPublicKey_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_PeerTicketPublicKey_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.PeerTicketPublicKey.class, com.spotify.Authentication.PeerTicketPublicKey.Builder.class);
    }

    private int bitField0_;
    public static final int PUBLIC_KEY_FIELD_NUMBER = 10;
    private com.google.protobuf.ByteString publicKey_;
    /**
     * <code>required bytes public_key = 10;</code>
     * @return Whether the publicKey field is set.
     */
    public boolean hasPublicKey() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required bytes public_key = 10;</code>
     * @return The publicKey.
     */
    public com.google.protobuf.ByteString getPublicKey() {
      return publicKey_;
    }

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

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

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeBytes(10, publicKey_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(10, publicKey_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.PeerTicketPublicKey)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.PeerTicketPublicKey other = (com.spotify.Authentication.PeerTicketPublicKey) obj;

      if (hasPublicKey() != other.hasPublicKey()) return false;
      if (hasPublicKey()) {
        if (!getPublicKey()
            .equals(other.getPublicKey())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

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

    public static com.spotify.Authentication.PeerTicketPublicKey parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.PeerTicketPublicKey parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketPublicKey parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.PeerTicketPublicKey parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketPublicKey parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.PeerTicketPublicKey parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketPublicKey parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.PeerTicketPublicKey parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketPublicKey parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.PeerTicketPublicKey parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketPublicKey parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.PeerTicketPublicKey parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.PeerTicketPublicKey prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.PeerTicketPublicKey}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.PeerTicketPublicKey)
        com.spotify.Authentication.PeerTicketPublicKeyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_PeerTicketPublicKey_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_PeerTicketPublicKey_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.PeerTicketPublicKey.class, com.spotify.Authentication.PeerTicketPublicKey.Builder.class);
      }

      // Construct using com.spotify.Authentication.PeerTicketPublicKey.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        publicKey_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_PeerTicketPublicKey_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.PeerTicketPublicKey getDefaultInstanceForType() {
        return com.spotify.Authentication.PeerTicketPublicKey.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.PeerTicketPublicKey build() {
        com.spotify.Authentication.PeerTicketPublicKey result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.PeerTicketPublicKey buildPartial() {
        com.spotify.Authentication.PeerTicketPublicKey result = new com.spotify.Authentication.PeerTicketPublicKey(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.publicKey_ = publicKey_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.PeerTicketPublicKey other) {
        if (other == com.spotify.Authentication.PeerTicketPublicKey.getDefaultInstance()) return this;
        if (other.hasPublicKey()) {
          setPublicKey(other.getPublicKey());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

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

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

      private com.google.protobuf.ByteString publicKey_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes public_key = 10;</code>
       * @return Whether the publicKey field is set.
       */
      public boolean hasPublicKey() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required bytes public_key = 10;</code>
       * @return The publicKey.
       */
      public com.google.protobuf.ByteString getPublicKey() {
        return publicKey_;
      }
      /**
       * <code>required bytes public_key = 10;</code>
       * @param value The publicKey to set.
       * @return This builder for chaining.
       */
      public Builder setPublicKey(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        publicKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes public_key = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearPublicKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        publicKey_ = getDefaultInstance().getPublicKey();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.PeerTicketPublicKey)
    }

    // @@protoc_insertion_point(class_scope:spotify.PeerTicketPublicKey)
    private static final com.spotify.Authentication.PeerTicketPublicKey DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.PeerTicketPublicKey();
    }

    public static com.spotify.Authentication.PeerTicketPublicKey getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.PeerTicketPublicKey getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PeerTicketOldOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.PeerTicketOld)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required bytes peer_ticket = 10;</code>
     * @return Whether the peerTicket field is set.
     */
    boolean hasPeerTicket();
    /**
     * <code>required bytes peer_ticket = 10;</code>
     * @return The peerTicket.
     */
    com.google.protobuf.ByteString getPeerTicket();

    /**
     * <code>required bytes peer_ticket_signature = 20;</code>
     * @return Whether the peerTicketSignature field is set.
     */
    boolean hasPeerTicketSignature();
    /**
     * <code>required bytes peer_ticket_signature = 20;</code>
     * @return The peerTicketSignature.
     */
    com.google.protobuf.ByteString getPeerTicketSignature();
  }
  /**
   * Protobuf type {@code spotify.PeerTicketOld}
   */
  public  static final class PeerTicketOld extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.PeerTicketOld)
      PeerTicketOldOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PeerTicketOld.newBuilder() to construct.
    private PeerTicketOld(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PeerTicketOld() {
      peerTicket_ = com.google.protobuf.ByteString.EMPTY;
      peerTicketSignature_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new PeerTicketOld();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private PeerTicketOld(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 82: {
              bitField0_ |= 0x00000001;
              peerTicket_ = input.readBytes();
              break;
            }
            case 162: {
              bitField0_ |= 0x00000002;
              peerTicketSignature_ = input.readBytes();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_PeerTicketOld_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_PeerTicketOld_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.PeerTicketOld.class, com.spotify.Authentication.PeerTicketOld.Builder.class);
    }

    private int bitField0_;
    public static final int PEER_TICKET_FIELD_NUMBER = 10;
    private com.google.protobuf.ByteString peerTicket_;
    /**
     * <code>required bytes peer_ticket = 10;</code>
     * @return Whether the peerTicket field is set.
     */
    public boolean hasPeerTicket() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required bytes peer_ticket = 10;</code>
     * @return The peerTicket.
     */
    public com.google.protobuf.ByteString getPeerTicket() {
      return peerTicket_;
    }

    public static final int PEER_TICKET_SIGNATURE_FIELD_NUMBER = 20;
    private com.google.protobuf.ByteString peerTicketSignature_;
    /**
     * <code>required bytes peer_ticket_signature = 20;</code>
     * @return Whether the peerTicketSignature field is set.
     */
    public boolean hasPeerTicketSignature() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required bytes peer_ticket_signature = 20;</code>
     * @return The peerTicketSignature.
     */
    public com.google.protobuf.ByteString getPeerTicketSignature() {
      return peerTicketSignature_;
    }

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

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

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeBytes(10, peerTicket_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeBytes(20, peerTicketSignature_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(10, peerTicket_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(20, peerTicketSignature_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.PeerTicketOld)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.PeerTicketOld other = (com.spotify.Authentication.PeerTicketOld) obj;

      if (hasPeerTicket() != other.hasPeerTicket()) return false;
      if (hasPeerTicket()) {
        if (!getPeerTicket()
            .equals(other.getPeerTicket())) return false;
      }
      if (hasPeerTicketSignature() != other.hasPeerTicketSignature()) return false;
      if (hasPeerTicketSignature()) {
        if (!getPeerTicketSignature()
            .equals(other.getPeerTicketSignature())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasPeerTicket()) {
        hash = (37 * hash) + PEER_TICKET_FIELD_NUMBER;
        hash = (53 * hash) + getPeerTicket().hashCode();
      }
      if (hasPeerTicketSignature()) {
        hash = (37 * hash) + PEER_TICKET_SIGNATURE_FIELD_NUMBER;
        hash = (53 * hash) + getPeerTicketSignature().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.spotify.Authentication.PeerTicketOld parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.PeerTicketOld parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketOld parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.PeerTicketOld parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketOld parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.PeerTicketOld parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketOld parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.PeerTicketOld parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketOld parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.PeerTicketOld parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.PeerTicketOld parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.PeerTicketOld parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.PeerTicketOld prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.PeerTicketOld}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.PeerTicketOld)
        com.spotify.Authentication.PeerTicketOldOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_PeerTicketOld_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_PeerTicketOld_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.PeerTicketOld.class, com.spotify.Authentication.PeerTicketOld.Builder.class);
      }

      // Construct using com.spotify.Authentication.PeerTicketOld.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        peerTicket_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        peerTicketSignature_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_PeerTicketOld_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.PeerTicketOld getDefaultInstanceForType() {
        return com.spotify.Authentication.PeerTicketOld.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.PeerTicketOld build() {
        com.spotify.Authentication.PeerTicketOld result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.PeerTicketOld buildPartial() {
        com.spotify.Authentication.PeerTicketOld result = new com.spotify.Authentication.PeerTicketOld(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.peerTicket_ = peerTicket_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.peerTicketSignature_ = peerTicketSignature_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.PeerTicketOld other) {
        if (other == com.spotify.Authentication.PeerTicketOld.getDefaultInstance()) return this;
        if (other.hasPeerTicket()) {
          setPeerTicket(other.getPeerTicket());
        }
        if (other.hasPeerTicketSignature()) {
          setPeerTicketSignature(other.getPeerTicketSignature());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        if (!hasPeerTicket()) {
          return false;
        }
        if (!hasPeerTicketSignature()) {
          return false;
        }
        return true;
      }

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

      private com.google.protobuf.ByteString peerTicket_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes peer_ticket = 10;</code>
       * @return Whether the peerTicket field is set.
       */
      public boolean hasPeerTicket() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required bytes peer_ticket = 10;</code>
       * @return The peerTicket.
       */
      public com.google.protobuf.ByteString getPeerTicket() {
        return peerTicket_;
      }
      /**
       * <code>required bytes peer_ticket = 10;</code>
       * @param value The peerTicket to set.
       * @return This builder for chaining.
       */
      public Builder setPeerTicket(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        peerTicket_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes peer_ticket = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearPeerTicket() {
        bitField0_ = (bitField0_ & ~0x00000001);
        peerTicket_ = getDefaultInstance().getPeerTicket();
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString peerTicketSignature_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes peer_ticket_signature = 20;</code>
       * @return Whether the peerTicketSignature field is set.
       */
      public boolean hasPeerTicketSignature() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required bytes peer_ticket_signature = 20;</code>
       * @return The peerTicketSignature.
       */
      public com.google.protobuf.ByteString getPeerTicketSignature() {
        return peerTicketSignature_;
      }
      /**
       * <code>required bytes peer_ticket_signature = 20;</code>
       * @param value The peerTicketSignature to set.
       * @return This builder for chaining.
       */
      public Builder setPeerTicketSignature(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        peerTicketSignature_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes peer_ticket_signature = 20;</code>
       * @return This builder for chaining.
       */
      public Builder clearPeerTicketSignature() {
        bitField0_ = (bitField0_ & ~0x00000002);
        peerTicketSignature_ = getDefaultInstance().getPeerTicketSignature();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.PeerTicketOld)
    }

    // @@protoc_insertion_point(class_scope:spotify.PeerTicketOld)
    private static final com.spotify.Authentication.PeerTicketOld DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.PeerTicketOld();
    }

    public static com.spotify.Authentication.PeerTicketOld getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.PeerTicketOld getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SystemInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.SystemInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required .spotify.CpuFamily cpu_family = 10;</code>
     * @return Whether the cpuFamily field is set.
     */
    boolean hasCpuFamily();
    /**
     * <code>required .spotify.CpuFamily cpu_family = 10;</code>
     * @return The cpuFamily.
     */
    com.spotify.Authentication.CpuFamily getCpuFamily();

    /**
     * <code>optional uint32 cpu_subtype = 20;</code>
     * @return Whether the cpuSubtype field is set.
     */
    boolean hasCpuSubtype();
    /**
     * <code>optional uint32 cpu_subtype = 20;</code>
     * @return The cpuSubtype.
     */
    int getCpuSubtype();

    /**
     * <code>optional uint32 cpu_ext = 30;</code>
     * @return Whether the cpuExt field is set.
     */
    boolean hasCpuExt();
    /**
     * <code>optional uint32 cpu_ext = 30;</code>
     * @return The cpuExt.
     */
    int getCpuExt();

    /**
     * <code>optional .spotify.Brand brand = 40;</code>
     * @return Whether the brand field is set.
     */
    boolean hasBrand();
    /**
     * <code>optional .spotify.Brand brand = 40;</code>
     * @return The brand.
     */
    com.spotify.Authentication.Brand getBrand();

    /**
     * <code>optional uint32 brand_flags = 50;</code>
     * @return Whether the brandFlags field is set.
     */
    boolean hasBrandFlags();
    /**
     * <code>optional uint32 brand_flags = 50;</code>
     * @return The brandFlags.
     */
    int getBrandFlags();

    /**
     * <code>required .spotify.Os os = 60;</code>
     * @return Whether the os field is set.
     */
    boolean hasOs();
    /**
     * <code>required .spotify.Os os = 60;</code>
     * @return The os.
     */
    com.spotify.Authentication.Os getOs();

    /**
     * <code>optional uint32 os_version = 70;</code>
     * @return Whether the osVersion field is set.
     */
    boolean hasOsVersion();
    /**
     * <code>optional uint32 os_version = 70;</code>
     * @return The osVersion.
     */
    int getOsVersion();

    /**
     * <code>optional uint32 os_ext = 80;</code>
     * @return Whether the osExt field is set.
     */
    boolean hasOsExt();
    /**
     * <code>optional uint32 os_ext = 80;</code>
     * @return The osExt.
     */
    int getOsExt();

    /**
     * <code>optional string system_information_string = 90;</code>
     * @return Whether the systemInformationString field is set.
     */
    boolean hasSystemInformationString();
    /**
     * <code>optional string system_information_string = 90;</code>
     * @return The systemInformationString.
     */
    java.lang.String getSystemInformationString();
    /**
     * <code>optional string system_information_string = 90;</code>
     * @return The bytes for systemInformationString.
     */
    com.google.protobuf.ByteString
        getSystemInformationStringBytes();

    /**
     * <code>optional string device_id = 100;</code>
     * @return Whether the deviceId field is set.
     */
    boolean hasDeviceId();
    /**
     * <code>optional string device_id = 100;</code>
     * @return The deviceId.
     */
    java.lang.String getDeviceId();
    /**
     * <code>optional string device_id = 100;</code>
     * @return The bytes for deviceId.
     */
    com.google.protobuf.ByteString
        getDeviceIdBytes();
  }
  /**
   * Protobuf type {@code spotify.SystemInfo}
   */
  public  static final class SystemInfo extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.SystemInfo)
      SystemInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SystemInfo.newBuilder() to construct.
    private SystemInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SystemInfo() {
      cpuFamily_ = 0;
      brand_ = 0;
      os_ = 0;
      systemInformationString_ = "";
      deviceId_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new SystemInfo();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SystemInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 80: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              com.spotify.Authentication.CpuFamily value = com.spotify.Authentication.CpuFamily.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(10, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                cpuFamily_ = rawValue;
              }
              break;
            }
            case 160: {
              bitField0_ |= 0x00000002;
              cpuSubtype_ = input.readUInt32();
              break;
            }
            case 240: {
              bitField0_ |= 0x00000004;
              cpuExt_ = input.readUInt32();
              break;
            }
            case 320: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              com.spotify.Authentication.Brand value = com.spotify.Authentication.Brand.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(40, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                brand_ = rawValue;
              }
              break;
            }
            case 400: {
              bitField0_ |= 0x00000010;
              brandFlags_ = input.readUInt32();
              break;
            }
            case 480: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              com.spotify.Authentication.Os value = com.spotify.Authentication.Os.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(60, rawValue);
              } else {
                bitField0_ |= 0x00000020;
                os_ = rawValue;
              }
              break;
            }
            case 560: {
              bitField0_ |= 0x00000040;
              osVersion_ = input.readUInt32();
              break;
            }
            case 640: {
              bitField0_ |= 0x00000080;
              osExt_ = input.readUInt32();
              break;
            }
            case 722: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000100;
              systemInformationString_ = bs;
              break;
            }
            case 802: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000200;
              deviceId_ = bs;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_SystemInfo_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_SystemInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.SystemInfo.class, com.spotify.Authentication.SystemInfo.Builder.class);
    }

    private int bitField0_;
    public static final int CPU_FAMILY_FIELD_NUMBER = 10;
    private int cpuFamily_;
    /**
     * <code>required .spotify.CpuFamily cpu_family = 10;</code>
     * @return Whether the cpuFamily field is set.
     */
    public boolean hasCpuFamily() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required .spotify.CpuFamily cpu_family = 10;</code>
     * @return The cpuFamily.
     */
    public com.spotify.Authentication.CpuFamily getCpuFamily() {
      @SuppressWarnings("deprecation")
      com.spotify.Authentication.CpuFamily result = com.spotify.Authentication.CpuFamily.valueOf(cpuFamily_);
      return result == null ? com.spotify.Authentication.CpuFamily.CPU_UNKNOWN : result;
    }

    public static final int CPU_SUBTYPE_FIELD_NUMBER = 20;
    private int cpuSubtype_;
    /**
     * <code>optional uint32 cpu_subtype = 20;</code>
     * @return Whether the cpuSubtype field is set.
     */
    public boolean hasCpuSubtype() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional uint32 cpu_subtype = 20;</code>
     * @return The cpuSubtype.
     */
    public int getCpuSubtype() {
      return cpuSubtype_;
    }

    public static final int CPU_EXT_FIELD_NUMBER = 30;
    private int cpuExt_;
    /**
     * <code>optional uint32 cpu_ext = 30;</code>
     * @return Whether the cpuExt field is set.
     */
    public boolean hasCpuExt() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional uint32 cpu_ext = 30;</code>
     * @return The cpuExt.
     */
    public int getCpuExt() {
      return cpuExt_;
    }

    public static final int BRAND_FIELD_NUMBER = 40;
    private int brand_;
    /**
     * <code>optional .spotify.Brand brand = 40;</code>
     * @return Whether the brand field is set.
     */
    public boolean hasBrand() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional .spotify.Brand brand = 40;</code>
     * @return The brand.
     */
    public com.spotify.Authentication.Brand getBrand() {
      @SuppressWarnings("deprecation")
      com.spotify.Authentication.Brand result = com.spotify.Authentication.Brand.valueOf(brand_);
      return result == null ? com.spotify.Authentication.Brand.BRAND_UNBRANDED : result;
    }

    public static final int BRAND_FLAGS_FIELD_NUMBER = 50;
    private int brandFlags_;
    /**
     * <code>optional uint32 brand_flags = 50;</code>
     * @return Whether the brandFlags field is set.
     */
    public boolean hasBrandFlags() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional uint32 brand_flags = 50;</code>
     * @return The brandFlags.
     */
    public int getBrandFlags() {
      return brandFlags_;
    }

    public static final int OS_FIELD_NUMBER = 60;
    private int os_;
    /**
     * <code>required .spotify.Os os = 60;</code>
     * @return Whether the os field is set.
     */
    public boolean hasOs() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>required .spotify.Os os = 60;</code>
     * @return The os.
     */
    public com.spotify.Authentication.Os getOs() {
      @SuppressWarnings("deprecation")
      com.spotify.Authentication.Os result = com.spotify.Authentication.Os.valueOf(os_);
      return result == null ? com.spotify.Authentication.Os.OS_UNKNOWN : result;
    }

    public static final int OS_VERSION_FIELD_NUMBER = 70;
    private int osVersion_;
    /**
     * <code>optional uint32 os_version = 70;</code>
     * @return Whether the osVersion field is set.
     */
    public boolean hasOsVersion() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional uint32 os_version = 70;</code>
     * @return The osVersion.
     */
    public int getOsVersion() {
      return osVersion_;
    }

    public static final int OS_EXT_FIELD_NUMBER = 80;
    private int osExt_;
    /**
     * <code>optional uint32 os_ext = 80;</code>
     * @return Whether the osExt field is set.
     */
    public boolean hasOsExt() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional uint32 os_ext = 80;</code>
     * @return The osExt.
     */
    public int getOsExt() {
      return osExt_;
    }

    public static final int SYSTEM_INFORMATION_STRING_FIELD_NUMBER = 90;
    private volatile java.lang.Object systemInformationString_;
    /**
     * <code>optional string system_information_string = 90;</code>
     * @return Whether the systemInformationString field is set.
     */
    public boolean hasSystemInformationString() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <code>optional string system_information_string = 90;</code>
     * @return The systemInformationString.
     */
    public java.lang.String getSystemInformationString() {
      java.lang.Object ref = systemInformationString_;
      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()) {
          systemInformationString_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string system_information_string = 90;</code>
     * @return The bytes for systemInformationString.
     */
    public com.google.protobuf.ByteString
        getSystemInformationStringBytes() {
      java.lang.Object ref = systemInformationString_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        systemInformationString_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEVICE_ID_FIELD_NUMBER = 100;
    private volatile java.lang.Object deviceId_;
    /**
     * <code>optional string device_id = 100;</code>
     * @return Whether the deviceId field is set.
     */
    public boolean hasDeviceId() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <code>optional string device_id = 100;</code>
     * @return The deviceId.
     */
    public java.lang.String getDeviceId() {
      java.lang.Object ref = deviceId_;
      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()) {
          deviceId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string device_id = 100;</code>
     * @return The bytes for deviceId.
     */
    public com.google.protobuf.ByteString
        getDeviceIdBytes() {
      java.lang.Object ref = deviceId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        deviceId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

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

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeEnum(10, cpuFamily_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeUInt32(20, cpuSubtype_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeUInt32(30, cpuExt_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeEnum(40, brand_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeUInt32(50, brandFlags_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeEnum(60, os_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        output.writeUInt32(70, osVersion_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        output.writeUInt32(80, osExt_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 90, systemInformationString_);
      }
      if (((bitField0_ & 0x00000200) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 100, deviceId_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(10, cpuFamily_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(20, cpuSubtype_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(30, cpuExt_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(40, brand_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(50, brandFlags_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(60, os_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(70, osVersion_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(80, osExt_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(90, systemInformationString_);
      }
      if (((bitField0_ & 0x00000200) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(100, deviceId_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.SystemInfo)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.SystemInfo other = (com.spotify.Authentication.SystemInfo) obj;

      if (hasCpuFamily() != other.hasCpuFamily()) return false;
      if (hasCpuFamily()) {
        if (cpuFamily_ != other.cpuFamily_) return false;
      }
      if (hasCpuSubtype() != other.hasCpuSubtype()) return false;
      if (hasCpuSubtype()) {
        if (getCpuSubtype()
            != other.getCpuSubtype()) return false;
      }
      if (hasCpuExt() != other.hasCpuExt()) return false;
      if (hasCpuExt()) {
        if (getCpuExt()
            != other.getCpuExt()) return false;
      }
      if (hasBrand() != other.hasBrand()) return false;
      if (hasBrand()) {
        if (brand_ != other.brand_) return false;
      }
      if (hasBrandFlags() != other.hasBrandFlags()) return false;
      if (hasBrandFlags()) {
        if (getBrandFlags()
            != other.getBrandFlags()) return false;
      }
      if (hasOs() != other.hasOs()) return false;
      if (hasOs()) {
        if (os_ != other.os_) return false;
      }
      if (hasOsVersion() != other.hasOsVersion()) return false;
      if (hasOsVersion()) {
        if (getOsVersion()
            != other.getOsVersion()) return false;
      }
      if (hasOsExt() != other.hasOsExt()) return false;
      if (hasOsExt()) {
        if (getOsExt()
            != other.getOsExt()) return false;
      }
      if (hasSystemInformationString() != other.hasSystemInformationString()) return false;
      if (hasSystemInformationString()) {
        if (!getSystemInformationString()
            .equals(other.getSystemInformationString())) return false;
      }
      if (hasDeviceId() != other.hasDeviceId()) return false;
      if (hasDeviceId()) {
        if (!getDeviceId()
            .equals(other.getDeviceId())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasCpuFamily()) {
        hash = (37 * hash) + CPU_FAMILY_FIELD_NUMBER;
        hash = (53 * hash) + cpuFamily_;
      }
      if (hasCpuSubtype()) {
        hash = (37 * hash) + CPU_SUBTYPE_FIELD_NUMBER;
        hash = (53 * hash) + getCpuSubtype();
      }
      if (hasCpuExt()) {
        hash = (37 * hash) + CPU_EXT_FIELD_NUMBER;
        hash = (53 * hash) + getCpuExt();
      }
      if (hasBrand()) {
        hash = (37 * hash) + BRAND_FIELD_NUMBER;
        hash = (53 * hash) + brand_;
      }
      if (hasBrandFlags()) {
        hash = (37 * hash) + BRAND_FLAGS_FIELD_NUMBER;
        hash = (53 * hash) + getBrandFlags();
      }
      if (hasOs()) {
        hash = (37 * hash) + OS_FIELD_NUMBER;
        hash = (53 * hash) + os_;
      }
      if (hasOsVersion()) {
        hash = (37 * hash) + OS_VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getOsVersion();
      }
      if (hasOsExt()) {
        hash = (37 * hash) + OS_EXT_FIELD_NUMBER;
        hash = (53 * hash) + getOsExt();
      }
      if (hasSystemInformationString()) {
        hash = (37 * hash) + SYSTEM_INFORMATION_STRING_FIELD_NUMBER;
        hash = (53 * hash) + getSystemInformationString().hashCode();
      }
      if (hasDeviceId()) {
        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
        hash = (53 * hash) + getDeviceId().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.spotify.Authentication.SystemInfo parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.SystemInfo parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.SystemInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.SystemInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.SystemInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.SystemInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.SystemInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.SystemInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.SystemInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.SystemInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.SystemInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.SystemInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.SystemInfo prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.SystemInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.SystemInfo)
        com.spotify.Authentication.SystemInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_SystemInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_SystemInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.SystemInfo.class, com.spotify.Authentication.SystemInfo.Builder.class);
      }

      // Construct using com.spotify.Authentication.SystemInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        cpuFamily_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        cpuSubtype_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        cpuExt_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        brand_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        brandFlags_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        os_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        osVersion_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        osExt_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        systemInformationString_ = "";
        bitField0_ = (bitField0_ & ~0x00000100);
        deviceId_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_SystemInfo_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.SystemInfo getDefaultInstanceForType() {
        return com.spotify.Authentication.SystemInfo.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.SystemInfo build() {
        com.spotify.Authentication.SystemInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.SystemInfo buildPartial() {
        com.spotify.Authentication.SystemInfo result = new com.spotify.Authentication.SystemInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.cpuFamily_ = cpuFamily_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.cpuSubtype_ = cpuSubtype_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.cpuExt_ = cpuExt_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.brand_ = brand_;
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.brandFlags_ = brandFlags_;
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          to_bitField0_ |= 0x00000020;
        }
        result.os_ = os_;
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.osVersion_ = osVersion_;
          to_bitField0_ |= 0x00000040;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.osExt_ = osExt_;
          to_bitField0_ |= 0x00000080;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          to_bitField0_ |= 0x00000100;
        }
        result.systemInformationString_ = systemInformationString_;
        if (((from_bitField0_ & 0x00000200) != 0)) {
          to_bitField0_ |= 0x00000200;
        }
        result.deviceId_ = deviceId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.SystemInfo other) {
        if (other == com.spotify.Authentication.SystemInfo.getDefaultInstance()) return this;
        if (other.hasCpuFamily()) {
          setCpuFamily(other.getCpuFamily());
        }
        if (other.hasCpuSubtype()) {
          setCpuSubtype(other.getCpuSubtype());
        }
        if (other.hasCpuExt()) {
          setCpuExt(other.getCpuExt());
        }
        if (other.hasBrand()) {
          setBrand(other.getBrand());
        }
        if (other.hasBrandFlags()) {
          setBrandFlags(other.getBrandFlags());
        }
        if (other.hasOs()) {
          setOs(other.getOs());
        }
        if (other.hasOsVersion()) {
          setOsVersion(other.getOsVersion());
        }
        if (other.hasOsExt()) {
          setOsExt(other.getOsExt());
        }
        if (other.hasSystemInformationString()) {
          bitField0_ |= 0x00000100;
          systemInformationString_ = other.systemInformationString_;
          onChanged();
        }
        if (other.hasDeviceId()) {
          bitField0_ |= 0x00000200;
          deviceId_ = other.deviceId_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        if (!hasCpuFamily()) {
          return false;
        }
        if (!hasOs()) {
          return false;
        }
        return true;
      }

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

      private int cpuFamily_ = 0;
      /**
       * <code>required .spotify.CpuFamily cpu_family = 10;</code>
       * @return Whether the cpuFamily field is set.
       */
      public boolean hasCpuFamily() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required .spotify.CpuFamily cpu_family = 10;</code>
       * @return The cpuFamily.
       */
      public com.spotify.Authentication.CpuFamily getCpuFamily() {
        @SuppressWarnings("deprecation")
        com.spotify.Authentication.CpuFamily result = com.spotify.Authentication.CpuFamily.valueOf(cpuFamily_);
        return result == null ? com.spotify.Authentication.CpuFamily.CPU_UNKNOWN : result;
      }
      /**
       * <code>required .spotify.CpuFamily cpu_family = 10;</code>
       * @param value The cpuFamily to set.
       * @return This builder for chaining.
       */
      public Builder setCpuFamily(com.spotify.Authentication.CpuFamily value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        cpuFamily_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>required .spotify.CpuFamily cpu_family = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearCpuFamily() {
        bitField0_ = (bitField0_ & ~0x00000001);
        cpuFamily_ = 0;
        onChanged();
        return this;
      }

      private int cpuSubtype_ ;
      /**
       * <code>optional uint32 cpu_subtype = 20;</code>
       * @return Whether the cpuSubtype field is set.
       */
      public boolean hasCpuSubtype() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional uint32 cpu_subtype = 20;</code>
       * @return The cpuSubtype.
       */
      public int getCpuSubtype() {
        return cpuSubtype_;
      }
      /**
       * <code>optional uint32 cpu_subtype = 20;</code>
       * @param value The cpuSubtype to set.
       * @return This builder for chaining.
       */
      public Builder setCpuSubtype(int value) {
        bitField0_ |= 0x00000002;
        cpuSubtype_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 cpu_subtype = 20;</code>
       * @return This builder for chaining.
       */
      public Builder clearCpuSubtype() {
        bitField0_ = (bitField0_ & ~0x00000002);
        cpuSubtype_ = 0;
        onChanged();
        return this;
      }

      private int cpuExt_ ;
      /**
       * <code>optional uint32 cpu_ext = 30;</code>
       * @return Whether the cpuExt field is set.
       */
      public boolean hasCpuExt() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional uint32 cpu_ext = 30;</code>
       * @return The cpuExt.
       */
      public int getCpuExt() {
        return cpuExt_;
      }
      /**
       * <code>optional uint32 cpu_ext = 30;</code>
       * @param value The cpuExt to set.
       * @return This builder for chaining.
       */
      public Builder setCpuExt(int value) {
        bitField0_ |= 0x00000004;
        cpuExt_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 cpu_ext = 30;</code>
       * @return This builder for chaining.
       */
      public Builder clearCpuExt() {
        bitField0_ = (bitField0_ & ~0x00000004);
        cpuExt_ = 0;
        onChanged();
        return this;
      }

      private int brand_ = 0;
      /**
       * <code>optional .spotify.Brand brand = 40;</code>
       * @return Whether the brand field is set.
       */
      public boolean hasBrand() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional .spotify.Brand brand = 40;</code>
       * @return The brand.
       */
      public com.spotify.Authentication.Brand getBrand() {
        @SuppressWarnings("deprecation")
        com.spotify.Authentication.Brand result = com.spotify.Authentication.Brand.valueOf(brand_);
        return result == null ? com.spotify.Authentication.Brand.BRAND_UNBRANDED : result;
      }
      /**
       * <code>optional .spotify.Brand brand = 40;</code>
       * @param value The brand to set.
       * @return This builder for chaining.
       */
      public Builder setBrand(com.spotify.Authentication.Brand value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        brand_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .spotify.Brand brand = 40;</code>
       * @return This builder for chaining.
       */
      public Builder clearBrand() {
        bitField0_ = (bitField0_ & ~0x00000008);
        brand_ = 0;
        onChanged();
        return this;
      }

      private int brandFlags_ ;
      /**
       * <code>optional uint32 brand_flags = 50;</code>
       * @return Whether the brandFlags field is set.
       */
      public boolean hasBrandFlags() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional uint32 brand_flags = 50;</code>
       * @return The brandFlags.
       */
      public int getBrandFlags() {
        return brandFlags_;
      }
      /**
       * <code>optional uint32 brand_flags = 50;</code>
       * @param value The brandFlags to set.
       * @return This builder for chaining.
       */
      public Builder setBrandFlags(int value) {
        bitField0_ |= 0x00000010;
        brandFlags_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 brand_flags = 50;</code>
       * @return This builder for chaining.
       */
      public Builder clearBrandFlags() {
        bitField0_ = (bitField0_ & ~0x00000010);
        brandFlags_ = 0;
        onChanged();
        return this;
      }

      private int os_ = 0;
      /**
       * <code>required .spotify.Os os = 60;</code>
       * @return Whether the os field is set.
       */
      public boolean hasOs() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>required .spotify.Os os = 60;</code>
       * @return The os.
       */
      public com.spotify.Authentication.Os getOs() {
        @SuppressWarnings("deprecation")
        com.spotify.Authentication.Os result = com.spotify.Authentication.Os.valueOf(os_);
        return result == null ? com.spotify.Authentication.Os.OS_UNKNOWN : result;
      }
      /**
       * <code>required .spotify.Os os = 60;</code>
       * @param value The os to set.
       * @return This builder for chaining.
       */
      public Builder setOs(com.spotify.Authentication.Os value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000020;
        os_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>required .spotify.Os os = 60;</code>
       * @return This builder for chaining.
       */
      public Builder clearOs() {
        bitField0_ = (bitField0_ & ~0x00000020);
        os_ = 0;
        onChanged();
        return this;
      }

      private int osVersion_ ;
      /**
       * <code>optional uint32 os_version = 70;</code>
       * @return Whether the osVersion field is set.
       */
      public boolean hasOsVersion() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional uint32 os_version = 70;</code>
       * @return The osVersion.
       */
      public int getOsVersion() {
        return osVersion_;
      }
      /**
       * <code>optional uint32 os_version = 70;</code>
       * @param value The osVersion to set.
       * @return This builder for chaining.
       */
      public Builder setOsVersion(int value) {
        bitField0_ |= 0x00000040;
        osVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 os_version = 70;</code>
       * @return This builder for chaining.
       */
      public Builder clearOsVersion() {
        bitField0_ = (bitField0_ & ~0x00000040);
        osVersion_ = 0;
        onChanged();
        return this;
      }

      private int osExt_ ;
      /**
       * <code>optional uint32 os_ext = 80;</code>
       * @return Whether the osExt field is set.
       */
      public boolean hasOsExt() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional uint32 os_ext = 80;</code>
       * @return The osExt.
       */
      public int getOsExt() {
        return osExt_;
      }
      /**
       * <code>optional uint32 os_ext = 80;</code>
       * @param value The osExt to set.
       * @return This builder for chaining.
       */
      public Builder setOsExt(int value) {
        bitField0_ |= 0x00000080;
        osExt_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint32 os_ext = 80;</code>
       * @return This builder for chaining.
       */
      public Builder clearOsExt() {
        bitField0_ = (bitField0_ & ~0x00000080);
        osExt_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object systemInformationString_ = "";
      /**
       * <code>optional string system_information_string = 90;</code>
       * @return Whether the systemInformationString field is set.
       */
      public boolean hasSystemInformationString() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <code>optional string system_information_string = 90;</code>
       * @return The systemInformationString.
       */
      public java.lang.String getSystemInformationString() {
        java.lang.Object ref = systemInformationString_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            systemInformationString_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string system_information_string = 90;</code>
       * @return The bytes for systemInformationString.
       */
      public com.google.protobuf.ByteString
          getSystemInformationStringBytes() {
        java.lang.Object ref = systemInformationString_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          systemInformationString_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string system_information_string = 90;</code>
       * @param value The systemInformationString to set.
       * @return This builder for chaining.
       */
      public Builder setSystemInformationString(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        systemInformationString_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string system_information_string = 90;</code>
       * @return This builder for chaining.
       */
      public Builder clearSystemInformationString() {
        bitField0_ = (bitField0_ & ~0x00000100);
        systemInformationString_ = getDefaultInstance().getSystemInformationString();
        onChanged();
        return this;
      }
      /**
       * <code>optional string system_information_string = 90;</code>
       * @param value The bytes for systemInformationString to set.
       * @return This builder for chaining.
       */
      public Builder setSystemInformationStringBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        systemInformationString_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object deviceId_ = "";
      /**
       * <code>optional string device_id = 100;</code>
       * @return Whether the deviceId field is set.
       */
      public boolean hasDeviceId() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * <code>optional string device_id = 100;</code>
       * @return The deviceId.
       */
      public java.lang.String getDeviceId() {
        java.lang.Object ref = deviceId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            deviceId_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string device_id = 100;</code>
       * @return The bytes for deviceId.
       */
      public com.google.protobuf.ByteString
          getDeviceIdBytes() {
        java.lang.Object ref = deviceId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          deviceId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string device_id = 100;</code>
       * @param value The deviceId to set.
       * @return This builder for chaining.
       */
      public Builder setDeviceId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        deviceId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string device_id = 100;</code>
       * @return This builder for chaining.
       */
      public Builder clearDeviceId() {
        bitField0_ = (bitField0_ & ~0x00000200);
        deviceId_ = getDefaultInstance().getDeviceId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string device_id = 100;</code>
       * @param value The bytes for deviceId to set.
       * @return This builder for chaining.
       */
      public Builder setDeviceIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        deviceId_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.SystemInfo)
    }

    // @@protoc_insertion_point(class_scope:spotify.SystemInfo)
    private static final com.spotify.Authentication.SystemInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.SystemInfo();
    }

    public static com.spotify.Authentication.SystemInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.SystemInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LibspotifyAppKeyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.LibspotifyAppKey)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required uint32 version = 1;</code>
     * @return Whether the version field is set.
     */
    boolean hasVersion();
    /**
     * <code>required uint32 version = 1;</code>
     * @return The version.
     */
    int getVersion();

    /**
     * <code>required bytes devkey = 2;</code>
     * @return Whether the devkey field is set.
     */
    boolean hasDevkey();
    /**
     * <code>required bytes devkey = 2;</code>
     * @return The devkey.
     */
    com.google.protobuf.ByteString getDevkey();

    /**
     * <code>required bytes signature = 3;</code>
     * @return Whether the signature field is set.
     */
    boolean hasSignature();
    /**
     * <code>required bytes signature = 3;</code>
     * @return The signature.
     */
    com.google.protobuf.ByteString getSignature();

    /**
     * <code>required string useragent = 4;</code>
     * @return Whether the useragent field is set.
     */
    boolean hasUseragent();
    /**
     * <code>required string useragent = 4;</code>
     * @return The useragent.
     */
    java.lang.String getUseragent();
    /**
     * <code>required string useragent = 4;</code>
     * @return The bytes for useragent.
     */
    com.google.protobuf.ByteString
        getUseragentBytes();

    /**
     * <code>required bytes callback_hash = 5;</code>
     * @return Whether the callbackHash field is set.
     */
    boolean hasCallbackHash();
    /**
     * <code>required bytes callback_hash = 5;</code>
     * @return The callbackHash.
     */
    com.google.protobuf.ByteString getCallbackHash();
  }
  /**
   * Protobuf type {@code spotify.LibspotifyAppKey}
   */
  public  static final class LibspotifyAppKey extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.LibspotifyAppKey)
      LibspotifyAppKeyOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use LibspotifyAppKey.newBuilder() to construct.
    private LibspotifyAppKey(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private LibspotifyAppKey() {
      devkey_ = com.google.protobuf.ByteString.EMPTY;
      signature_ = com.google.protobuf.ByteString.EMPTY;
      useragent_ = "";
      callbackHash_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new LibspotifyAppKey();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private LibspotifyAppKey(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {
              bitField0_ |= 0x00000001;
              version_ = input.readUInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              devkey_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              signature_ = input.readBytes();
              break;
            }
            case 34: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000008;
              useragent_ = bs;
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              callbackHash_ = input.readBytes();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_LibspotifyAppKey_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_LibspotifyAppKey_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.LibspotifyAppKey.class, com.spotify.Authentication.LibspotifyAppKey.Builder.class);
    }

    private int bitField0_;
    public static final int VERSION_FIELD_NUMBER = 1;
    private int version_;
    /**
     * <code>required uint32 version = 1;</code>
     * @return Whether the version field is set.
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required uint32 version = 1;</code>
     * @return The version.
     */
    public int getVersion() {
      return version_;
    }

    public static final int DEVKEY_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString devkey_;
    /**
     * <code>required bytes devkey = 2;</code>
     * @return Whether the devkey field is set.
     */
    public boolean hasDevkey() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required bytes devkey = 2;</code>
     * @return The devkey.
     */
    public com.google.protobuf.ByteString getDevkey() {
      return devkey_;
    }

    public static final int SIGNATURE_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString signature_;
    /**
     * <code>required bytes signature = 3;</code>
     * @return Whether the signature field is set.
     */
    public boolean hasSignature() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>required bytes signature = 3;</code>
     * @return The signature.
     */
    public com.google.protobuf.ByteString getSignature() {
      return signature_;
    }

    public static final int USERAGENT_FIELD_NUMBER = 4;
    private volatile java.lang.Object useragent_;
    /**
     * <code>required string useragent = 4;</code>
     * @return Whether the useragent field is set.
     */
    public boolean hasUseragent() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>required string useragent = 4;</code>
     * @return The useragent.
     */
    public java.lang.String getUseragent() {
      java.lang.Object ref = useragent_;
      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()) {
          useragent_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string useragent = 4;</code>
     * @return The bytes for useragent.
     */
    public com.google.protobuf.ByteString
        getUseragentBytes() {
      java.lang.Object ref = useragent_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        useragent_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CALLBACK_HASH_FIELD_NUMBER = 5;
    private com.google.protobuf.ByteString callbackHash_;
    /**
     * <code>required bytes callback_hash = 5;</code>
     * @return Whether the callbackHash field is set.
     */
    public boolean hasCallbackHash() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>required bytes callback_hash = 5;</code>
     * @return The callbackHash.
     */
    public com.google.protobuf.ByteString getCallbackHash() {
      return callbackHash_;
    }

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

      if (!hasVersion()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDevkey()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasSignature()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasUseragent()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasCallbackHash()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeUInt32(1, version_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeBytes(2, devkey_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeBytes(3, signature_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, useragent_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeBytes(5, callbackHash_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, version_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, devkey_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, signature_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, useragent_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, callbackHash_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.LibspotifyAppKey)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.LibspotifyAppKey other = (com.spotify.Authentication.LibspotifyAppKey) obj;

      if (hasVersion() != other.hasVersion()) return false;
      if (hasVersion()) {
        if (getVersion()
            != other.getVersion()) return false;
      }
      if (hasDevkey() != other.hasDevkey()) return false;
      if (hasDevkey()) {
        if (!getDevkey()
            .equals(other.getDevkey())) return false;
      }
      if (hasSignature() != other.hasSignature()) return false;
      if (hasSignature()) {
        if (!getSignature()
            .equals(other.getSignature())) return false;
      }
      if (hasUseragent() != other.hasUseragent()) return false;
      if (hasUseragent()) {
        if (!getUseragent()
            .equals(other.getUseragent())) return false;
      }
      if (hasCallbackHash() != other.hasCallbackHash()) return false;
      if (hasCallbackHash()) {
        if (!getCallbackHash()
            .equals(other.getCallbackHash())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasVersion()) {
        hash = (37 * hash) + VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getVersion();
      }
      if (hasDevkey()) {
        hash = (37 * hash) + DEVKEY_FIELD_NUMBER;
        hash = (53 * hash) + getDevkey().hashCode();
      }
      if (hasSignature()) {
        hash = (37 * hash) + SIGNATURE_FIELD_NUMBER;
        hash = (53 * hash) + getSignature().hashCode();
      }
      if (hasUseragent()) {
        hash = (37 * hash) + USERAGENT_FIELD_NUMBER;
        hash = (53 * hash) + getUseragent().hashCode();
      }
      if (hasCallbackHash()) {
        hash = (37 * hash) + CALLBACK_HASH_FIELD_NUMBER;
        hash = (53 * hash) + getCallbackHash().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.spotify.Authentication.LibspotifyAppKey parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.LibspotifyAppKey parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.LibspotifyAppKey parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.LibspotifyAppKey parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.LibspotifyAppKey parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.LibspotifyAppKey parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.LibspotifyAppKey parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.LibspotifyAppKey parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.LibspotifyAppKey parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.LibspotifyAppKey parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.LibspotifyAppKey parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.LibspotifyAppKey parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.LibspotifyAppKey prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.LibspotifyAppKey}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.LibspotifyAppKey)
        com.spotify.Authentication.LibspotifyAppKeyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_LibspotifyAppKey_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_LibspotifyAppKey_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.LibspotifyAppKey.class, com.spotify.Authentication.LibspotifyAppKey.Builder.class);
      }

      // Construct using com.spotify.Authentication.LibspotifyAppKey.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        version_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        devkey_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        signature_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        useragent_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        callbackHash_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_LibspotifyAppKey_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.LibspotifyAppKey getDefaultInstanceForType() {
        return com.spotify.Authentication.LibspotifyAppKey.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.LibspotifyAppKey build() {
        com.spotify.Authentication.LibspotifyAppKey result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.LibspotifyAppKey buildPartial() {
        com.spotify.Authentication.LibspotifyAppKey result = new com.spotify.Authentication.LibspotifyAppKey(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.version_ = version_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.devkey_ = devkey_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.signature_ = signature_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.useragent_ = useragent_;
        if (((from_bitField0_ & 0x00000010) != 0)) {
          to_bitField0_ |= 0x00000010;
        }
        result.callbackHash_ = callbackHash_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.LibspotifyAppKey other) {
        if (other == com.spotify.Authentication.LibspotifyAppKey.getDefaultInstance()) return this;
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (other.hasDevkey()) {
          setDevkey(other.getDevkey());
        }
        if (other.hasSignature()) {
          setSignature(other.getSignature());
        }
        if (other.hasUseragent()) {
          bitField0_ |= 0x00000008;
          useragent_ = other.useragent_;
          onChanged();
        }
        if (other.hasCallbackHash()) {
          setCallbackHash(other.getCallbackHash());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        if (!hasVersion()) {
          return false;
        }
        if (!hasDevkey()) {
          return false;
        }
        if (!hasSignature()) {
          return false;
        }
        if (!hasUseragent()) {
          return false;
        }
        if (!hasCallbackHash()) {
          return false;
        }
        return true;
      }

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

      private int version_ ;
      /**
       * <code>required uint32 version = 1;</code>
       * @return Whether the version field is set.
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required uint32 version = 1;</code>
       * @return The version.
       */
      public int getVersion() {
        return version_;
      }
      /**
       * <code>required uint32 version = 1;</code>
       * @param value The version to set.
       * @return This builder for chaining.
       */
      public Builder setVersion(int value) {
        bitField0_ |= 0x00000001;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required uint32 version = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000001);
        version_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString devkey_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes devkey = 2;</code>
       * @return Whether the devkey field is set.
       */
      public boolean hasDevkey() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required bytes devkey = 2;</code>
       * @return The devkey.
       */
      public com.google.protobuf.ByteString getDevkey() {
        return devkey_;
      }
      /**
       * <code>required bytes devkey = 2;</code>
       * @param value The devkey to set.
       * @return This builder for chaining.
       */
      public Builder setDevkey(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        devkey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes devkey = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearDevkey() {
        bitField0_ = (bitField0_ & ~0x00000002);
        devkey_ = getDefaultInstance().getDevkey();
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString signature_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes signature = 3;</code>
       * @return Whether the signature field is set.
       */
      public boolean hasSignature() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>required bytes signature = 3;</code>
       * @return The signature.
       */
      public com.google.protobuf.ByteString getSignature() {
        return signature_;
      }
      /**
       * <code>required bytes signature = 3;</code>
       * @param value The signature to set.
       * @return This builder for chaining.
       */
      public Builder setSignature(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        signature_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes signature = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearSignature() {
        bitField0_ = (bitField0_ & ~0x00000004);
        signature_ = getDefaultInstance().getSignature();
        onChanged();
        return this;
      }

      private java.lang.Object useragent_ = "";
      /**
       * <code>required string useragent = 4;</code>
       * @return Whether the useragent field is set.
       */
      public boolean hasUseragent() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>required string useragent = 4;</code>
       * @return The useragent.
       */
      public java.lang.String getUseragent() {
        java.lang.Object ref = useragent_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            useragent_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string useragent = 4;</code>
       * @return The bytes for useragent.
       */
      public com.google.protobuf.ByteString
          getUseragentBytes() {
        java.lang.Object ref = useragent_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          useragent_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string useragent = 4;</code>
       * @param value The useragent to set.
       * @return This builder for chaining.
       */
      public Builder setUseragent(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        useragent_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string useragent = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearUseragent() {
        bitField0_ = (bitField0_ & ~0x00000008);
        useragent_ = getDefaultInstance().getUseragent();
        onChanged();
        return this;
      }
      /**
       * <code>required string useragent = 4;</code>
       * @param value The bytes for useragent to set.
       * @return This builder for chaining.
       */
      public Builder setUseragentBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        useragent_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString callbackHash_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes callback_hash = 5;</code>
       * @return Whether the callbackHash field is set.
       */
      public boolean hasCallbackHash() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>required bytes callback_hash = 5;</code>
       * @return The callbackHash.
       */
      public com.google.protobuf.ByteString getCallbackHash() {
        return callbackHash_;
      }
      /**
       * <code>required bytes callback_hash = 5;</code>
       * @param value The callbackHash to set.
       * @return This builder for chaining.
       */
      public Builder setCallbackHash(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        callbackHash_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes callback_hash = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearCallbackHash() {
        bitField0_ = (bitField0_ & ~0x00000010);
        callbackHash_ = getDefaultInstance().getCallbackHash();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.LibspotifyAppKey)
    }

    // @@protoc_insertion_point(class_scope:spotify.LibspotifyAppKey)
    private static final com.spotify.Authentication.LibspotifyAppKey DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.LibspotifyAppKey();
    }

    public static com.spotify.Authentication.LibspotifyAppKey getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.LibspotifyAppKey getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ClientInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.ClientInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bool limited = 1;</code>
     * @return Whether the limited field is set.
     */
    boolean hasLimited();
    /**
     * <code>optional bool limited = 1;</code>
     * @return The limited.
     */
    boolean getLimited();

    /**
     * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
     * @return Whether the fb field is set.
     */
    boolean hasFb();
    /**
     * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
     * @return The fb.
     */
    com.spotify.Authentication.ClientInfoFacebook getFb();
    /**
     * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
     */
    com.spotify.Authentication.ClientInfoFacebookOrBuilder getFbOrBuilder();

    /**
     * <code>optional string language = 3;</code>
     * @return Whether the language field is set.
     */
    boolean hasLanguage();
    /**
     * <code>optional string language = 3;</code>
     * @return The language.
     */
    java.lang.String getLanguage();
    /**
     * <code>optional string language = 3;</code>
     * @return The bytes for language.
     */
    com.google.protobuf.ByteString
        getLanguageBytes();
  }
  /**
   * Protobuf type {@code spotify.ClientInfo}
   */
  public  static final class ClientInfo extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.ClientInfo)
      ClientInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ClientInfo.newBuilder() to construct.
    private ClientInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ClientInfo() {
      language_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ClientInfo();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ClientInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {
              bitField0_ |= 0x00000001;
              limited_ = input.readBool();
              break;
            }
            case 18: {
              com.spotify.Authentication.ClientInfoFacebook.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) != 0)) {
                subBuilder = fb_.toBuilder();
              }
              fb_ = input.readMessage(com.spotify.Authentication.ClientInfoFacebook.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(fb_);
                fb_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              language_ = bs;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_ClientInfo_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_ClientInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.ClientInfo.class, com.spotify.Authentication.ClientInfo.Builder.class);
    }

    private int bitField0_;
    public static final int LIMITED_FIELD_NUMBER = 1;
    private boolean limited_;
    /**
     * <code>optional bool limited = 1;</code>
     * @return Whether the limited field is set.
     */
    public boolean hasLimited() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bool limited = 1;</code>
     * @return The limited.
     */
    public boolean getLimited() {
      return limited_;
    }

    public static final int FB_FIELD_NUMBER = 2;
    private com.spotify.Authentication.ClientInfoFacebook fb_;
    /**
     * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
     * @return Whether the fb field is set.
     */
    public boolean hasFb() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
     * @return The fb.
     */
    public com.spotify.Authentication.ClientInfoFacebook getFb() {
      return fb_ == null ? com.spotify.Authentication.ClientInfoFacebook.getDefaultInstance() : fb_;
    }
    /**
     * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
     */
    public com.spotify.Authentication.ClientInfoFacebookOrBuilder getFbOrBuilder() {
      return fb_ == null ? com.spotify.Authentication.ClientInfoFacebook.getDefaultInstance() : fb_;
    }

    public static final int LANGUAGE_FIELD_NUMBER = 3;
    private volatile java.lang.Object language_;
    /**
     * <code>optional string language = 3;</code>
     * @return Whether the language field is set.
     */
    public boolean hasLanguage() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional string language = 3;</code>
     * @return The language.
     */
    public java.lang.String getLanguage() {
      java.lang.Object ref = language_;
      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()) {
          language_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string language = 3;</code>
     * @return The bytes for language.
     */
    public com.google.protobuf.ByteString
        getLanguageBytes() {
      java.lang.Object ref = language_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        language_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeBool(1, limited_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeMessage(2, getFb());
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, language_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, limited_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getFb());
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, language_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.ClientInfo)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.ClientInfo other = (com.spotify.Authentication.ClientInfo) obj;

      if (hasLimited() != other.hasLimited()) return false;
      if (hasLimited()) {
        if (getLimited()
            != other.getLimited()) return false;
      }
      if (hasFb() != other.hasFb()) return false;
      if (hasFb()) {
        if (!getFb()
            .equals(other.getFb())) return false;
      }
      if (hasLanguage() != other.hasLanguage()) return false;
      if (hasLanguage()) {
        if (!getLanguage()
            .equals(other.getLanguage())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasLimited()) {
        hash = (37 * hash) + LIMITED_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getLimited());
      }
      if (hasFb()) {
        hash = (37 * hash) + FB_FIELD_NUMBER;
        hash = (53 * hash) + getFb().hashCode();
      }
      if (hasLanguage()) {
        hash = (37 * hash) + LANGUAGE_FIELD_NUMBER;
        hash = (53 * hash) + getLanguage().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.spotify.Authentication.ClientInfo parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.ClientInfo parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.ClientInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.ClientInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.ClientInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.ClientInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.ClientInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.ClientInfo prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.ClientInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.ClientInfo)
        com.spotify.Authentication.ClientInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_ClientInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_ClientInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.ClientInfo.class, com.spotify.Authentication.ClientInfo.Builder.class);
      }

      // Construct using com.spotify.Authentication.ClientInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getFbFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        limited_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (fbBuilder_ == null) {
          fb_ = null;
        } else {
          fbBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        language_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_ClientInfo_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.ClientInfo getDefaultInstanceForType() {
        return com.spotify.Authentication.ClientInfo.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.ClientInfo build() {
        com.spotify.Authentication.ClientInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.ClientInfo buildPartial() {
        com.spotify.Authentication.ClientInfo result = new com.spotify.Authentication.ClientInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.limited_ = limited_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (fbBuilder_ == null) {
            result.fb_ = fb_;
          } else {
            result.fb_ = fbBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.language_ = language_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.ClientInfo other) {
        if (other == com.spotify.Authentication.ClientInfo.getDefaultInstance()) return this;
        if (other.hasLimited()) {
          setLimited(other.getLimited());
        }
        if (other.hasFb()) {
          mergeFb(other.getFb());
        }
        if (other.hasLanguage()) {
          bitField0_ |= 0x00000004;
          language_ = other.language_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

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

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

      private boolean limited_ ;
      /**
       * <code>optional bool limited = 1;</code>
       * @return Whether the limited field is set.
       */
      public boolean hasLimited() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bool limited = 1;</code>
       * @return The limited.
       */
      public boolean getLimited() {
        return limited_;
      }
      /**
       * <code>optional bool limited = 1;</code>
       * @param value The limited to set.
       * @return This builder for chaining.
       */
      public Builder setLimited(boolean value) {
        bitField0_ |= 0x00000001;
        limited_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool limited = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearLimited() {
        bitField0_ = (bitField0_ & ~0x00000001);
        limited_ = false;
        onChanged();
        return this;
      }

      private com.spotify.Authentication.ClientInfoFacebook fb_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.ClientInfoFacebook, com.spotify.Authentication.ClientInfoFacebook.Builder, com.spotify.Authentication.ClientInfoFacebookOrBuilder> fbBuilder_;
      /**
       * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
       * @return Whether the fb field is set.
       */
      public boolean hasFb() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
       * @return The fb.
       */
      public com.spotify.Authentication.ClientInfoFacebook getFb() {
        if (fbBuilder_ == null) {
          return fb_ == null ? com.spotify.Authentication.ClientInfoFacebook.getDefaultInstance() : fb_;
        } else {
          return fbBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
       */
      public Builder setFb(com.spotify.Authentication.ClientInfoFacebook value) {
        if (fbBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          fb_ = value;
          onChanged();
        } else {
          fbBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
       */
      public Builder setFb(
          com.spotify.Authentication.ClientInfoFacebook.Builder builderForValue) {
        if (fbBuilder_ == null) {
          fb_ = builderForValue.build();
          onChanged();
        } else {
          fbBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
       */
      public Builder mergeFb(com.spotify.Authentication.ClientInfoFacebook value) {
        if (fbBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              fb_ != null &&
              fb_ != com.spotify.Authentication.ClientInfoFacebook.getDefaultInstance()) {
            fb_ =
              com.spotify.Authentication.ClientInfoFacebook.newBuilder(fb_).mergeFrom(value).buildPartial();
          } else {
            fb_ = value;
          }
          onChanged();
        } else {
          fbBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
       */
      public Builder clearFb() {
        if (fbBuilder_ == null) {
          fb_ = null;
          onChanged();
        } else {
          fbBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
       */
      public com.spotify.Authentication.ClientInfoFacebook.Builder getFbBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getFbFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
       */
      public com.spotify.Authentication.ClientInfoFacebookOrBuilder getFbOrBuilder() {
        if (fbBuilder_ != null) {
          return fbBuilder_.getMessageOrBuilder();
        } else {
          return fb_ == null ?
              com.spotify.Authentication.ClientInfoFacebook.getDefaultInstance() : fb_;
        }
      }
      /**
       * <code>optional .spotify.ClientInfoFacebook fb = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.ClientInfoFacebook, com.spotify.Authentication.ClientInfoFacebook.Builder, com.spotify.Authentication.ClientInfoFacebookOrBuilder> 
          getFbFieldBuilder() {
        if (fbBuilder_ == null) {
          fbBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.ClientInfoFacebook, com.spotify.Authentication.ClientInfoFacebook.Builder, com.spotify.Authentication.ClientInfoFacebookOrBuilder>(
                  getFb(),
                  getParentForChildren(),
                  isClean());
          fb_ = null;
        }
        return fbBuilder_;
      }

      private java.lang.Object language_ = "";
      /**
       * <code>optional string language = 3;</code>
       * @return Whether the language field is set.
       */
      public boolean hasLanguage() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional string language = 3;</code>
       * @return The language.
       */
      public java.lang.String getLanguage() {
        java.lang.Object ref = language_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            language_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string language = 3;</code>
       * @return The bytes for language.
       */
      public com.google.protobuf.ByteString
          getLanguageBytes() {
        java.lang.Object ref = language_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          language_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string language = 3;</code>
       * @param value The language to set.
       * @return This builder for chaining.
       */
      public Builder setLanguage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        language_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string language = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearLanguage() {
        bitField0_ = (bitField0_ & ~0x00000004);
        language_ = getDefaultInstance().getLanguage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string language = 3;</code>
       * @param value The bytes for language to set.
       * @return This builder for chaining.
       */
      public Builder setLanguageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        language_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.ClientInfo)
    }

    // @@protoc_insertion_point(class_scope:spotify.ClientInfo)
    private static final com.spotify.Authentication.ClientInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.ClientInfo();
    }

    public static com.spotify.Authentication.ClientInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.ClientInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ClientInfoFacebookOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.ClientInfoFacebook)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string machine_id = 1;</code>
     * @return Whether the machineId field is set.
     */
    boolean hasMachineId();
    /**
     * <code>optional string machine_id = 1;</code>
     * @return The machineId.
     */
    java.lang.String getMachineId();
    /**
     * <code>optional string machine_id = 1;</code>
     * @return The bytes for machineId.
     */
    com.google.protobuf.ByteString
        getMachineIdBytes();
  }
  /**
   * Protobuf type {@code spotify.ClientInfoFacebook}
   */
  public  static final class ClientInfoFacebook extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.ClientInfoFacebook)
      ClientInfoFacebookOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ClientInfoFacebook.newBuilder() to construct.
    private ClientInfoFacebook(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ClientInfoFacebook() {
      machineId_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ClientInfoFacebook();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ClientInfoFacebook(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              machineId_ = bs;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_ClientInfoFacebook_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_ClientInfoFacebook_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.ClientInfoFacebook.class, com.spotify.Authentication.ClientInfoFacebook.Builder.class);
    }

    private int bitField0_;
    public static final int MACHINE_ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object machineId_;
    /**
     * <code>optional string machine_id = 1;</code>
     * @return Whether the machineId field is set.
     */
    public boolean hasMachineId() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional string machine_id = 1;</code>
     * @return The machineId.
     */
    public java.lang.String getMachineId() {
      java.lang.Object ref = machineId_;
      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()) {
          machineId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string machine_id = 1;</code>
     * @return The bytes for machineId.
     */
    public com.google.protobuf.ByteString
        getMachineIdBytes() {
      java.lang.Object ref = machineId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        machineId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, machineId_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, machineId_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.ClientInfoFacebook)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.ClientInfoFacebook other = (com.spotify.Authentication.ClientInfoFacebook) obj;

      if (hasMachineId() != other.hasMachineId()) return false;
      if (hasMachineId()) {
        if (!getMachineId()
            .equals(other.getMachineId())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

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

    public static com.spotify.Authentication.ClientInfoFacebook parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.ClientInfoFacebook parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientInfoFacebook parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.ClientInfoFacebook parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientInfoFacebook parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.ClientInfoFacebook parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientInfoFacebook parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.ClientInfoFacebook parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientInfoFacebook parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.ClientInfoFacebook parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.ClientInfoFacebook parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.ClientInfoFacebook parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.ClientInfoFacebook prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.ClientInfoFacebook}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.ClientInfoFacebook)
        com.spotify.Authentication.ClientInfoFacebookOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_ClientInfoFacebook_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_ClientInfoFacebook_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.ClientInfoFacebook.class, com.spotify.Authentication.ClientInfoFacebook.Builder.class);
      }

      // Construct using com.spotify.Authentication.ClientInfoFacebook.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        machineId_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_ClientInfoFacebook_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.ClientInfoFacebook getDefaultInstanceForType() {
        return com.spotify.Authentication.ClientInfoFacebook.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.ClientInfoFacebook build() {
        com.spotify.Authentication.ClientInfoFacebook result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.ClientInfoFacebook buildPartial() {
        com.spotify.Authentication.ClientInfoFacebook result = new com.spotify.Authentication.ClientInfoFacebook(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.machineId_ = machineId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.ClientInfoFacebook other) {
        if (other == com.spotify.Authentication.ClientInfoFacebook.getDefaultInstance()) return this;
        if (other.hasMachineId()) {
          bitField0_ |= 0x00000001;
          machineId_ = other.machineId_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

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

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

      private java.lang.Object machineId_ = "";
      /**
       * <code>optional string machine_id = 1;</code>
       * @return Whether the machineId field is set.
       */
      public boolean hasMachineId() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional string machine_id = 1;</code>
       * @return The machineId.
       */
      public java.lang.String getMachineId() {
        java.lang.Object ref = machineId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            machineId_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string machine_id = 1;</code>
       * @return The bytes for machineId.
       */
      public com.google.protobuf.ByteString
          getMachineIdBytes() {
        java.lang.Object ref = machineId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          machineId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string machine_id = 1;</code>
       * @param value The machineId to set.
       * @return This builder for chaining.
       */
      public Builder setMachineId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        machineId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string machine_id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearMachineId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        machineId_ = getDefaultInstance().getMachineId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string machine_id = 1;</code>
       * @param value The bytes for machineId to set.
       * @return This builder for chaining.
       */
      public Builder setMachineIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        machineId_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.ClientInfoFacebook)
    }

    // @@protoc_insertion_point(class_scope:spotify.ClientInfoFacebook)
    private static final com.spotify.Authentication.ClientInfoFacebook DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.ClientInfoFacebook();
    }

    public static com.spotify.Authentication.ClientInfoFacebook getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.ClientInfoFacebook getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface APWelcomeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.APWelcome)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required string canonical_username = 10;</code>
     * @return Whether the canonicalUsername field is set.
     */
    boolean hasCanonicalUsername();
    /**
     * <code>required string canonical_username = 10;</code>
     * @return The canonicalUsername.
     */
    java.lang.String getCanonicalUsername();
    /**
     * <code>required string canonical_username = 10;</code>
     * @return The bytes for canonicalUsername.
     */
    com.google.protobuf.ByteString
        getCanonicalUsernameBytes();

    /**
     * <code>required .spotify.AccountType account_type_logged_in = 20;</code>
     * @return Whether the accountTypeLoggedIn field is set.
     */
    boolean hasAccountTypeLoggedIn();
    /**
     * <code>required .spotify.AccountType account_type_logged_in = 20;</code>
     * @return The accountTypeLoggedIn.
     */
    com.spotify.Authentication.AccountType getAccountTypeLoggedIn();

    /**
     * <code>required .spotify.AccountType credentials_type_logged_in = 25;</code>
     * @return Whether the credentialsTypeLoggedIn field is set.
     */
    boolean hasCredentialsTypeLoggedIn();
    /**
     * <code>required .spotify.AccountType credentials_type_logged_in = 25;</code>
     * @return The credentialsTypeLoggedIn.
     */
    com.spotify.Authentication.AccountType getCredentialsTypeLoggedIn();

    /**
     * <code>required .spotify.AuthenticationType reusable_auth_credentials_type = 30;</code>
     * @return Whether the reusableAuthCredentialsType field is set.
     */
    boolean hasReusableAuthCredentialsType();
    /**
     * <code>required .spotify.AuthenticationType reusable_auth_credentials_type = 30;</code>
     * @return The reusableAuthCredentialsType.
     */
    com.spotify.Authentication.AuthenticationType getReusableAuthCredentialsType();

    /**
     * <code>required bytes reusable_auth_credentials = 40;</code>
     * @return Whether the reusableAuthCredentials field is set.
     */
    boolean hasReusableAuthCredentials();
    /**
     * <code>required bytes reusable_auth_credentials = 40;</code>
     * @return The reusableAuthCredentials.
     */
    com.google.protobuf.ByteString getReusableAuthCredentials();

    /**
     * <code>optional bytes lfs_secret = 50;</code>
     * @return Whether the lfsSecret field is set.
     */
    boolean hasLfsSecret();
    /**
     * <code>optional bytes lfs_secret = 50;</code>
     * @return The lfsSecret.
     */
    com.google.protobuf.ByteString getLfsSecret();

    /**
     * <code>optional .spotify.AccountInfo account_info = 60;</code>
     * @return Whether the accountInfo field is set.
     */
    boolean hasAccountInfo();
    /**
     * <code>optional .spotify.AccountInfo account_info = 60;</code>
     * @return The accountInfo.
     */
    com.spotify.Authentication.AccountInfo getAccountInfo();
    /**
     * <code>optional .spotify.AccountInfo account_info = 60;</code>
     */
    com.spotify.Authentication.AccountInfoOrBuilder getAccountInfoOrBuilder();

    /**
     * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
     * @return Whether the fb field is set.
     */
    boolean hasFb();
    /**
     * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
     * @return The fb.
     */
    com.spotify.Authentication.AccountInfoFacebook getFb();
    /**
     * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
     */
    com.spotify.Authentication.AccountInfoFacebookOrBuilder getFbOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.APWelcome}
   */
  public  static final class APWelcome extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.APWelcome)
      APWelcomeOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use APWelcome.newBuilder() to construct.
    private APWelcome(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private APWelcome() {
      canonicalUsername_ = "";
      accountTypeLoggedIn_ = 0;
      credentialsTypeLoggedIn_ = 0;
      reusableAuthCredentialsType_ = 0;
      reusableAuthCredentials_ = com.google.protobuf.ByteString.EMPTY;
      lfsSecret_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new APWelcome();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private APWelcome(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 82: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              canonicalUsername_ = bs;
              break;
            }
            case 160: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              com.spotify.Authentication.AccountType value = com.spotify.Authentication.AccountType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(20, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                accountTypeLoggedIn_ = rawValue;
              }
              break;
            }
            case 200: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              com.spotify.Authentication.AccountType value = com.spotify.Authentication.AccountType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(25, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                credentialsTypeLoggedIn_ = rawValue;
              }
              break;
            }
            case 240: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              com.spotify.Authentication.AuthenticationType value = com.spotify.Authentication.AuthenticationType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(30, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                reusableAuthCredentialsType_ = rawValue;
              }
              break;
            }
            case 322: {
              bitField0_ |= 0x00000010;
              reusableAuthCredentials_ = input.readBytes();
              break;
            }
            case 402: {
              bitField0_ |= 0x00000020;
              lfsSecret_ = input.readBytes();
              break;
            }
            case 482: {
              com.spotify.Authentication.AccountInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) != 0)) {
                subBuilder = accountInfo_.toBuilder();
              }
              accountInfo_ = input.readMessage(com.spotify.Authentication.AccountInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(accountInfo_);
                accountInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 562: {
              com.spotify.Authentication.AccountInfoFacebook.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) != 0)) {
                subBuilder = fb_.toBuilder();
              }
              fb_ = input.readMessage(com.spotify.Authentication.AccountInfoFacebook.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(fb_);
                fb_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_APWelcome_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_APWelcome_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.APWelcome.class, com.spotify.Authentication.APWelcome.Builder.class);
    }

    private int bitField0_;
    public static final int CANONICAL_USERNAME_FIELD_NUMBER = 10;
    private volatile java.lang.Object canonicalUsername_;
    /**
     * <code>required string canonical_username = 10;</code>
     * @return Whether the canonicalUsername field is set.
     */
    public boolean hasCanonicalUsername() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required string canonical_username = 10;</code>
     * @return The canonicalUsername.
     */
    public java.lang.String getCanonicalUsername() {
      java.lang.Object ref = canonicalUsername_;
      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()) {
          canonicalUsername_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string canonical_username = 10;</code>
     * @return The bytes for canonicalUsername.
     */
    public com.google.protobuf.ByteString
        getCanonicalUsernameBytes() {
      java.lang.Object ref = canonicalUsername_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        canonicalUsername_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ACCOUNT_TYPE_LOGGED_IN_FIELD_NUMBER = 20;
    private int accountTypeLoggedIn_;
    /**
     * <code>required .spotify.AccountType account_type_logged_in = 20;</code>
     * @return Whether the accountTypeLoggedIn field is set.
     */
    public boolean hasAccountTypeLoggedIn() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required .spotify.AccountType account_type_logged_in = 20;</code>
     * @return The accountTypeLoggedIn.
     */
    public com.spotify.Authentication.AccountType getAccountTypeLoggedIn() {
      @SuppressWarnings("deprecation")
      com.spotify.Authentication.AccountType result = com.spotify.Authentication.AccountType.valueOf(accountTypeLoggedIn_);
      return result == null ? com.spotify.Authentication.AccountType.Spotify : result;
    }

    public static final int CREDENTIALS_TYPE_LOGGED_IN_FIELD_NUMBER = 25;
    private int credentialsTypeLoggedIn_;
    /**
     * <code>required .spotify.AccountType credentials_type_logged_in = 25;</code>
     * @return Whether the credentialsTypeLoggedIn field is set.
     */
    public boolean hasCredentialsTypeLoggedIn() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>required .spotify.AccountType credentials_type_logged_in = 25;</code>
     * @return The credentialsTypeLoggedIn.
     */
    public com.spotify.Authentication.AccountType getCredentialsTypeLoggedIn() {
      @SuppressWarnings("deprecation")
      com.spotify.Authentication.AccountType result = com.spotify.Authentication.AccountType.valueOf(credentialsTypeLoggedIn_);
      return result == null ? com.spotify.Authentication.AccountType.Spotify : result;
    }

    public static final int REUSABLE_AUTH_CREDENTIALS_TYPE_FIELD_NUMBER = 30;
    private int reusableAuthCredentialsType_;
    /**
     * <code>required .spotify.AuthenticationType reusable_auth_credentials_type = 30;</code>
     * @return Whether the reusableAuthCredentialsType field is set.
     */
    public boolean hasReusableAuthCredentialsType() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>required .spotify.AuthenticationType reusable_auth_credentials_type = 30;</code>
     * @return The reusableAuthCredentialsType.
     */
    public com.spotify.Authentication.AuthenticationType getReusableAuthCredentialsType() {
      @SuppressWarnings("deprecation")
      com.spotify.Authentication.AuthenticationType result = com.spotify.Authentication.AuthenticationType.valueOf(reusableAuthCredentialsType_);
      return result == null ? com.spotify.Authentication.AuthenticationType.AUTHENTICATION_USER_PASS : result;
    }

    public static final int REUSABLE_AUTH_CREDENTIALS_FIELD_NUMBER = 40;
    private com.google.protobuf.ByteString reusableAuthCredentials_;
    /**
     * <code>required bytes reusable_auth_credentials = 40;</code>
     * @return Whether the reusableAuthCredentials field is set.
     */
    public boolean hasReusableAuthCredentials() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>required bytes reusable_auth_credentials = 40;</code>
     * @return The reusableAuthCredentials.
     */
    public com.google.protobuf.ByteString getReusableAuthCredentials() {
      return reusableAuthCredentials_;
    }

    public static final int LFS_SECRET_FIELD_NUMBER = 50;
    private com.google.protobuf.ByteString lfsSecret_;
    /**
     * <code>optional bytes lfs_secret = 50;</code>
     * @return Whether the lfsSecret field is set.
     */
    public boolean hasLfsSecret() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional bytes lfs_secret = 50;</code>
     * @return The lfsSecret.
     */
    public com.google.protobuf.ByteString getLfsSecret() {
      return lfsSecret_;
    }

    public static final int ACCOUNT_INFO_FIELD_NUMBER = 60;
    private com.spotify.Authentication.AccountInfo accountInfo_;
    /**
     * <code>optional .spotify.AccountInfo account_info = 60;</code>
     * @return Whether the accountInfo field is set.
     */
    public boolean hasAccountInfo() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional .spotify.AccountInfo account_info = 60;</code>
     * @return The accountInfo.
     */
    public com.spotify.Authentication.AccountInfo getAccountInfo() {
      return accountInfo_ == null ? com.spotify.Authentication.AccountInfo.getDefaultInstance() : accountInfo_;
    }
    /**
     * <code>optional .spotify.AccountInfo account_info = 60;</code>
     */
    public com.spotify.Authentication.AccountInfoOrBuilder getAccountInfoOrBuilder() {
      return accountInfo_ == null ? com.spotify.Authentication.AccountInfo.getDefaultInstance() : accountInfo_;
    }

    public static final int FB_FIELD_NUMBER = 70;
    private com.spotify.Authentication.AccountInfoFacebook fb_;
    /**
     * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
     * @return Whether the fb field is set.
     */
    public boolean hasFb() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
     * @return The fb.
     */
    public com.spotify.Authentication.AccountInfoFacebook getFb() {
      return fb_ == null ? com.spotify.Authentication.AccountInfoFacebook.getDefaultInstance() : fb_;
    }
    /**
     * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
     */
    public com.spotify.Authentication.AccountInfoFacebookOrBuilder getFbOrBuilder() {
      return fb_ == null ? com.spotify.Authentication.AccountInfoFacebook.getDefaultInstance() : fb_;
    }

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

      if (!hasCanonicalUsername()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasAccountTypeLoggedIn()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasCredentialsTypeLoggedIn()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasReusableAuthCredentialsType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasReusableAuthCredentials()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 10, canonicalUsername_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeEnum(20, accountTypeLoggedIn_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeEnum(25, credentialsTypeLoggedIn_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeEnum(30, reusableAuthCredentialsType_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeBytes(40, reusableAuthCredentials_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeBytes(50, lfsSecret_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        output.writeMessage(60, getAccountInfo());
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        output.writeMessage(70, getFb());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, canonicalUsername_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(20, accountTypeLoggedIn_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(25, credentialsTypeLoggedIn_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(30, reusableAuthCredentialsType_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(40, reusableAuthCredentials_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(50, lfsSecret_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(60, getAccountInfo());
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(70, getFb());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.APWelcome)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.APWelcome other = (com.spotify.Authentication.APWelcome) obj;

      if (hasCanonicalUsername() != other.hasCanonicalUsername()) return false;
      if (hasCanonicalUsername()) {
        if (!getCanonicalUsername()
            .equals(other.getCanonicalUsername())) return false;
      }
      if (hasAccountTypeLoggedIn() != other.hasAccountTypeLoggedIn()) return false;
      if (hasAccountTypeLoggedIn()) {
        if (accountTypeLoggedIn_ != other.accountTypeLoggedIn_) return false;
      }
      if (hasCredentialsTypeLoggedIn() != other.hasCredentialsTypeLoggedIn()) return false;
      if (hasCredentialsTypeLoggedIn()) {
        if (credentialsTypeLoggedIn_ != other.credentialsTypeLoggedIn_) return false;
      }
      if (hasReusableAuthCredentialsType() != other.hasReusableAuthCredentialsType()) return false;
      if (hasReusableAuthCredentialsType()) {
        if (reusableAuthCredentialsType_ != other.reusableAuthCredentialsType_) return false;
      }
      if (hasReusableAuthCredentials() != other.hasReusableAuthCredentials()) return false;
      if (hasReusableAuthCredentials()) {
        if (!getReusableAuthCredentials()
            .equals(other.getReusableAuthCredentials())) return false;
      }
      if (hasLfsSecret() != other.hasLfsSecret()) return false;
      if (hasLfsSecret()) {
        if (!getLfsSecret()
            .equals(other.getLfsSecret())) return false;
      }
      if (hasAccountInfo() != other.hasAccountInfo()) return false;
      if (hasAccountInfo()) {
        if (!getAccountInfo()
            .equals(other.getAccountInfo())) return false;
      }
      if (hasFb() != other.hasFb()) return false;
      if (hasFb()) {
        if (!getFb()
            .equals(other.getFb())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasCanonicalUsername()) {
        hash = (37 * hash) + CANONICAL_USERNAME_FIELD_NUMBER;
        hash = (53 * hash) + getCanonicalUsername().hashCode();
      }
      if (hasAccountTypeLoggedIn()) {
        hash = (37 * hash) + ACCOUNT_TYPE_LOGGED_IN_FIELD_NUMBER;
        hash = (53 * hash) + accountTypeLoggedIn_;
      }
      if (hasCredentialsTypeLoggedIn()) {
        hash = (37 * hash) + CREDENTIALS_TYPE_LOGGED_IN_FIELD_NUMBER;
        hash = (53 * hash) + credentialsTypeLoggedIn_;
      }
      if (hasReusableAuthCredentialsType()) {
        hash = (37 * hash) + REUSABLE_AUTH_CREDENTIALS_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + reusableAuthCredentialsType_;
      }
      if (hasReusableAuthCredentials()) {
        hash = (37 * hash) + REUSABLE_AUTH_CREDENTIALS_FIELD_NUMBER;
        hash = (53 * hash) + getReusableAuthCredentials().hashCode();
      }
      if (hasLfsSecret()) {
        hash = (37 * hash) + LFS_SECRET_FIELD_NUMBER;
        hash = (53 * hash) + getLfsSecret().hashCode();
      }
      if (hasAccountInfo()) {
        hash = (37 * hash) + ACCOUNT_INFO_FIELD_NUMBER;
        hash = (53 * hash) + getAccountInfo().hashCode();
      }
      if (hasFb()) {
        hash = (37 * hash) + FB_FIELD_NUMBER;
        hash = (53 * hash) + getFb().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.spotify.Authentication.APWelcome parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.APWelcome parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.APWelcome parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.APWelcome parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.APWelcome parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.APWelcome parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.APWelcome parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.APWelcome parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.APWelcome parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.APWelcome parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.APWelcome parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.APWelcome parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.APWelcome prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.APWelcome}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.APWelcome)
        com.spotify.Authentication.APWelcomeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_APWelcome_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_APWelcome_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.APWelcome.class, com.spotify.Authentication.APWelcome.Builder.class);
      }

      // Construct using com.spotify.Authentication.APWelcome.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAccountInfoFieldBuilder();
          getFbFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        canonicalUsername_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        accountTypeLoggedIn_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        credentialsTypeLoggedIn_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        reusableAuthCredentialsType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        reusableAuthCredentials_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        lfsSecret_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        if (accountInfoBuilder_ == null) {
          accountInfo_ = null;
        } else {
          accountInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (fbBuilder_ == null) {
          fb_ = null;
        } else {
          fbBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_APWelcome_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.APWelcome getDefaultInstanceForType() {
        return com.spotify.Authentication.APWelcome.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.APWelcome build() {
        com.spotify.Authentication.APWelcome result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.APWelcome buildPartial() {
        com.spotify.Authentication.APWelcome result = new com.spotify.Authentication.APWelcome(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.canonicalUsername_ = canonicalUsername_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.accountTypeLoggedIn_ = accountTypeLoggedIn_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.credentialsTypeLoggedIn_ = credentialsTypeLoggedIn_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.reusableAuthCredentialsType_ = reusableAuthCredentialsType_;
        if (((from_bitField0_ & 0x00000010) != 0)) {
          to_bitField0_ |= 0x00000010;
        }
        result.reusableAuthCredentials_ = reusableAuthCredentials_;
        if (((from_bitField0_ & 0x00000020) != 0)) {
          to_bitField0_ |= 0x00000020;
        }
        result.lfsSecret_ = lfsSecret_;
        if (((from_bitField0_ & 0x00000040) != 0)) {
          if (accountInfoBuilder_ == null) {
            result.accountInfo_ = accountInfo_;
          } else {
            result.accountInfo_ = accountInfoBuilder_.build();
          }
          to_bitField0_ |= 0x00000040;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          if (fbBuilder_ == null) {
            result.fb_ = fb_;
          } else {
            result.fb_ = fbBuilder_.build();
          }
          to_bitField0_ |= 0x00000080;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.APWelcome other) {
        if (other == com.spotify.Authentication.APWelcome.getDefaultInstance()) return this;
        if (other.hasCanonicalUsername()) {
          bitField0_ |= 0x00000001;
          canonicalUsername_ = other.canonicalUsername_;
          onChanged();
        }
        if (other.hasAccountTypeLoggedIn()) {
          setAccountTypeLoggedIn(other.getAccountTypeLoggedIn());
        }
        if (other.hasCredentialsTypeLoggedIn()) {
          setCredentialsTypeLoggedIn(other.getCredentialsTypeLoggedIn());
        }
        if (other.hasReusableAuthCredentialsType()) {
          setReusableAuthCredentialsType(other.getReusableAuthCredentialsType());
        }
        if (other.hasReusableAuthCredentials()) {
          setReusableAuthCredentials(other.getReusableAuthCredentials());
        }
        if (other.hasLfsSecret()) {
          setLfsSecret(other.getLfsSecret());
        }
        if (other.hasAccountInfo()) {
          mergeAccountInfo(other.getAccountInfo());
        }
        if (other.hasFb()) {
          mergeFb(other.getFb());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        if (!hasCanonicalUsername()) {
          return false;
        }
        if (!hasAccountTypeLoggedIn()) {
          return false;
        }
        if (!hasCredentialsTypeLoggedIn()) {
          return false;
        }
        if (!hasReusableAuthCredentialsType()) {
          return false;
        }
        if (!hasReusableAuthCredentials()) {
          return false;
        }
        return true;
      }

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

      private java.lang.Object canonicalUsername_ = "";
      /**
       * <code>required string canonical_username = 10;</code>
       * @return Whether the canonicalUsername field is set.
       */
      public boolean hasCanonicalUsername() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required string canonical_username = 10;</code>
       * @return The canonicalUsername.
       */
      public java.lang.String getCanonicalUsername() {
        java.lang.Object ref = canonicalUsername_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            canonicalUsername_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string canonical_username = 10;</code>
       * @return The bytes for canonicalUsername.
       */
      public com.google.protobuf.ByteString
          getCanonicalUsernameBytes() {
        java.lang.Object ref = canonicalUsername_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          canonicalUsername_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string canonical_username = 10;</code>
       * @param value The canonicalUsername to set.
       * @return This builder for chaining.
       */
      public Builder setCanonicalUsername(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        canonicalUsername_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string canonical_username = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearCanonicalUsername() {
        bitField0_ = (bitField0_ & ~0x00000001);
        canonicalUsername_ = getDefaultInstance().getCanonicalUsername();
        onChanged();
        return this;
      }
      /**
       * <code>required string canonical_username = 10;</code>
       * @param value The bytes for canonicalUsername to set.
       * @return This builder for chaining.
       */
      public Builder setCanonicalUsernameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        canonicalUsername_ = value;
        onChanged();
        return this;
      }

      private int accountTypeLoggedIn_ = 0;
      /**
       * <code>required .spotify.AccountType account_type_logged_in = 20;</code>
       * @return Whether the accountTypeLoggedIn field is set.
       */
      public boolean hasAccountTypeLoggedIn() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required .spotify.AccountType account_type_logged_in = 20;</code>
       * @return The accountTypeLoggedIn.
       */
      public com.spotify.Authentication.AccountType getAccountTypeLoggedIn() {
        @SuppressWarnings("deprecation")
        com.spotify.Authentication.AccountType result = com.spotify.Authentication.AccountType.valueOf(accountTypeLoggedIn_);
        return result == null ? com.spotify.Authentication.AccountType.Spotify : result;
      }
      /**
       * <code>required .spotify.AccountType account_type_logged_in = 20;</code>
       * @param value The accountTypeLoggedIn to set.
       * @return This builder for chaining.
       */
      public Builder setAccountTypeLoggedIn(com.spotify.Authentication.AccountType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        accountTypeLoggedIn_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>required .spotify.AccountType account_type_logged_in = 20;</code>
       * @return This builder for chaining.
       */
      public Builder clearAccountTypeLoggedIn() {
        bitField0_ = (bitField0_ & ~0x00000002);
        accountTypeLoggedIn_ = 0;
        onChanged();
        return this;
      }

      private int credentialsTypeLoggedIn_ = 0;
      /**
       * <code>required .spotify.AccountType credentials_type_logged_in = 25;</code>
       * @return Whether the credentialsTypeLoggedIn field is set.
       */
      public boolean hasCredentialsTypeLoggedIn() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>required .spotify.AccountType credentials_type_logged_in = 25;</code>
       * @return The credentialsTypeLoggedIn.
       */
      public com.spotify.Authentication.AccountType getCredentialsTypeLoggedIn() {
        @SuppressWarnings("deprecation")
        com.spotify.Authentication.AccountType result = com.spotify.Authentication.AccountType.valueOf(credentialsTypeLoggedIn_);
        return result == null ? com.spotify.Authentication.AccountType.Spotify : result;
      }
      /**
       * <code>required .spotify.AccountType credentials_type_logged_in = 25;</code>
       * @param value The credentialsTypeLoggedIn to set.
       * @return This builder for chaining.
       */
      public Builder setCredentialsTypeLoggedIn(com.spotify.Authentication.AccountType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        credentialsTypeLoggedIn_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>required .spotify.AccountType credentials_type_logged_in = 25;</code>
       * @return This builder for chaining.
       */
      public Builder clearCredentialsTypeLoggedIn() {
        bitField0_ = (bitField0_ & ~0x00000004);
        credentialsTypeLoggedIn_ = 0;
        onChanged();
        return this;
      }

      private int reusableAuthCredentialsType_ = 0;
      /**
       * <code>required .spotify.AuthenticationType reusable_auth_credentials_type = 30;</code>
       * @return Whether the reusableAuthCredentialsType field is set.
       */
      public boolean hasReusableAuthCredentialsType() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>required .spotify.AuthenticationType reusable_auth_credentials_type = 30;</code>
       * @return The reusableAuthCredentialsType.
       */
      public com.spotify.Authentication.AuthenticationType getReusableAuthCredentialsType() {
        @SuppressWarnings("deprecation")
        com.spotify.Authentication.AuthenticationType result = com.spotify.Authentication.AuthenticationType.valueOf(reusableAuthCredentialsType_);
        return result == null ? com.spotify.Authentication.AuthenticationType.AUTHENTICATION_USER_PASS : result;
      }
      /**
       * <code>required .spotify.AuthenticationType reusable_auth_credentials_type = 30;</code>
       * @param value The reusableAuthCredentialsType to set.
       * @return This builder for chaining.
       */
      public Builder setReusableAuthCredentialsType(com.spotify.Authentication.AuthenticationType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        reusableAuthCredentialsType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>required .spotify.AuthenticationType reusable_auth_credentials_type = 30;</code>
       * @return This builder for chaining.
       */
      public Builder clearReusableAuthCredentialsType() {
        bitField0_ = (bitField0_ & ~0x00000008);
        reusableAuthCredentialsType_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString reusableAuthCredentials_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>required bytes reusable_auth_credentials = 40;</code>
       * @return Whether the reusableAuthCredentials field is set.
       */
      public boolean hasReusableAuthCredentials() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>required bytes reusable_auth_credentials = 40;</code>
       * @return The reusableAuthCredentials.
       */
      public com.google.protobuf.ByteString getReusableAuthCredentials() {
        return reusableAuthCredentials_;
      }
      /**
       * <code>required bytes reusable_auth_credentials = 40;</code>
       * @param value The reusableAuthCredentials to set.
       * @return This builder for chaining.
       */
      public Builder setReusableAuthCredentials(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        reusableAuthCredentials_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bytes reusable_auth_credentials = 40;</code>
       * @return This builder for chaining.
       */
      public Builder clearReusableAuthCredentials() {
        bitField0_ = (bitField0_ & ~0x00000010);
        reusableAuthCredentials_ = getDefaultInstance().getReusableAuthCredentials();
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString lfsSecret_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes lfs_secret = 50;</code>
       * @return Whether the lfsSecret field is set.
       */
      public boolean hasLfsSecret() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional bytes lfs_secret = 50;</code>
       * @return The lfsSecret.
       */
      public com.google.protobuf.ByteString getLfsSecret() {
        return lfsSecret_;
      }
      /**
       * <code>optional bytes lfs_secret = 50;</code>
       * @param value The lfsSecret to set.
       * @return This builder for chaining.
       */
      public Builder setLfsSecret(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        lfsSecret_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes lfs_secret = 50;</code>
       * @return This builder for chaining.
       */
      public Builder clearLfsSecret() {
        bitField0_ = (bitField0_ & ~0x00000020);
        lfsSecret_ = getDefaultInstance().getLfsSecret();
        onChanged();
        return this;
      }

      private com.spotify.Authentication.AccountInfo accountInfo_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.AccountInfo, com.spotify.Authentication.AccountInfo.Builder, com.spotify.Authentication.AccountInfoOrBuilder> accountInfoBuilder_;
      /**
       * <code>optional .spotify.AccountInfo account_info = 60;</code>
       * @return Whether the accountInfo field is set.
       */
      public boolean hasAccountInfo() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional .spotify.AccountInfo account_info = 60;</code>
       * @return The accountInfo.
       */
      public com.spotify.Authentication.AccountInfo getAccountInfo() {
        if (accountInfoBuilder_ == null) {
          return accountInfo_ == null ? com.spotify.Authentication.AccountInfo.getDefaultInstance() : accountInfo_;
        } else {
          return accountInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.AccountInfo account_info = 60;</code>
       */
      public Builder setAccountInfo(com.spotify.Authentication.AccountInfo value) {
        if (accountInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          accountInfo_ = value;
          onChanged();
        } else {
          accountInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfo account_info = 60;</code>
       */
      public Builder setAccountInfo(
          com.spotify.Authentication.AccountInfo.Builder builderForValue) {
        if (accountInfoBuilder_ == null) {
          accountInfo_ = builderForValue.build();
          onChanged();
        } else {
          accountInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfo account_info = 60;</code>
       */
      public Builder mergeAccountInfo(com.spotify.Authentication.AccountInfo value) {
        if (accountInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000040) != 0) &&
              accountInfo_ != null &&
              accountInfo_ != com.spotify.Authentication.AccountInfo.getDefaultInstance()) {
            accountInfo_ =
              com.spotify.Authentication.AccountInfo.newBuilder(accountInfo_).mergeFrom(value).buildPartial();
          } else {
            accountInfo_ = value;
          }
          onChanged();
        } else {
          accountInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfo account_info = 60;</code>
       */
      public Builder clearAccountInfo() {
        if (accountInfoBuilder_ == null) {
          accountInfo_ = null;
          onChanged();
        } else {
          accountInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfo account_info = 60;</code>
       */
      public com.spotify.Authentication.AccountInfo.Builder getAccountInfoBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getAccountInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.AccountInfo account_info = 60;</code>
       */
      public com.spotify.Authentication.AccountInfoOrBuilder getAccountInfoOrBuilder() {
        if (accountInfoBuilder_ != null) {
          return accountInfoBuilder_.getMessageOrBuilder();
        } else {
          return accountInfo_ == null ?
              com.spotify.Authentication.AccountInfo.getDefaultInstance() : accountInfo_;
        }
      }
      /**
       * <code>optional .spotify.AccountInfo account_info = 60;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.AccountInfo, com.spotify.Authentication.AccountInfo.Builder, com.spotify.Authentication.AccountInfoOrBuilder> 
          getAccountInfoFieldBuilder() {
        if (accountInfoBuilder_ == null) {
          accountInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.AccountInfo, com.spotify.Authentication.AccountInfo.Builder, com.spotify.Authentication.AccountInfoOrBuilder>(
                  getAccountInfo(),
                  getParentForChildren(),
                  isClean());
          accountInfo_ = null;
        }
        return accountInfoBuilder_;
      }

      private com.spotify.Authentication.AccountInfoFacebook fb_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.AccountInfoFacebook, com.spotify.Authentication.AccountInfoFacebook.Builder, com.spotify.Authentication.AccountInfoFacebookOrBuilder> fbBuilder_;
      /**
       * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
       * @return Whether the fb field is set.
       */
      public boolean hasFb() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
       * @return The fb.
       */
      public com.spotify.Authentication.AccountInfoFacebook getFb() {
        if (fbBuilder_ == null) {
          return fb_ == null ? com.spotify.Authentication.AccountInfoFacebook.getDefaultInstance() : fb_;
        } else {
          return fbBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
       */
      public Builder setFb(com.spotify.Authentication.AccountInfoFacebook value) {
        if (fbBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          fb_ = value;
          onChanged();
        } else {
          fbBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
       */
      public Builder setFb(
          com.spotify.Authentication.AccountInfoFacebook.Builder builderForValue) {
        if (fbBuilder_ == null) {
          fb_ = builderForValue.build();
          onChanged();
        } else {
          fbBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
       */
      public Builder mergeFb(com.spotify.Authentication.AccountInfoFacebook value) {
        if (fbBuilder_ == null) {
          if (((bitField0_ & 0x00000080) != 0) &&
              fb_ != null &&
              fb_ != com.spotify.Authentication.AccountInfoFacebook.getDefaultInstance()) {
            fb_ =
              com.spotify.Authentication.AccountInfoFacebook.newBuilder(fb_).mergeFrom(value).buildPartial();
          } else {
            fb_ = value;
          }
          onChanged();
        } else {
          fbBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
       */
      public Builder clearFb() {
        if (fbBuilder_ == null) {
          fb_ = null;
          onChanged();
        } else {
          fbBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
       */
      public com.spotify.Authentication.AccountInfoFacebook.Builder getFbBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getFbFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
       */
      public com.spotify.Authentication.AccountInfoFacebookOrBuilder getFbOrBuilder() {
        if (fbBuilder_ != null) {
          return fbBuilder_.getMessageOrBuilder();
        } else {
          return fb_ == null ?
              com.spotify.Authentication.AccountInfoFacebook.getDefaultInstance() : fb_;
        }
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook fb = 70;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.AccountInfoFacebook, com.spotify.Authentication.AccountInfoFacebook.Builder, com.spotify.Authentication.AccountInfoFacebookOrBuilder> 
          getFbFieldBuilder() {
        if (fbBuilder_ == null) {
          fbBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.AccountInfoFacebook, com.spotify.Authentication.AccountInfoFacebook.Builder, com.spotify.Authentication.AccountInfoFacebookOrBuilder>(
                  getFb(),
                  getParentForChildren(),
                  isClean());
          fb_ = null;
        }
        return fbBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.APWelcome)
    }

    // @@protoc_insertion_point(class_scope:spotify.APWelcome)
    private static final com.spotify.Authentication.APWelcome DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.APWelcome();
    }

    public static com.spotify.Authentication.APWelcome getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.APWelcome getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AccountInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.AccountInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
     * @return Whether the spotify field is set.
     */
    boolean hasSpotify();
    /**
     * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
     * @return The spotify.
     */
    com.spotify.Authentication.AccountInfoSpotify getSpotify();
    /**
     * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
     */
    com.spotify.Authentication.AccountInfoSpotifyOrBuilder getSpotifyOrBuilder();

    /**
     * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
     * @return Whether the facebook field is set.
     */
    boolean hasFacebook();
    /**
     * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
     * @return The facebook.
     */
    com.spotify.Authentication.AccountInfoFacebook getFacebook();
    /**
     * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
     */
    com.spotify.Authentication.AccountInfoFacebookOrBuilder getFacebookOrBuilder();
  }
  /**
   * Protobuf type {@code spotify.AccountInfo}
   */
  public  static final class AccountInfo extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.AccountInfo)
      AccountInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AccountInfo.newBuilder() to construct.
    private AccountInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AccountInfo() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AccountInfo();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private AccountInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              com.spotify.Authentication.AccountInfoSpotify.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) != 0)) {
                subBuilder = spotify_.toBuilder();
              }
              spotify_ = input.readMessage(com.spotify.Authentication.AccountInfoSpotify.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(spotify_);
                spotify_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.spotify.Authentication.AccountInfoFacebook.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) != 0)) {
                subBuilder = facebook_.toBuilder();
              }
              facebook_ = input.readMessage(com.spotify.Authentication.AccountInfoFacebook.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(facebook_);
                facebook_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_AccountInfo_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_AccountInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.AccountInfo.class, com.spotify.Authentication.AccountInfo.Builder.class);
    }

    private int bitField0_;
    public static final int SPOTIFY_FIELD_NUMBER = 1;
    private com.spotify.Authentication.AccountInfoSpotify spotify_;
    /**
     * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
     * @return Whether the spotify field is set.
     */
    public boolean hasSpotify() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
     * @return The spotify.
     */
    public com.spotify.Authentication.AccountInfoSpotify getSpotify() {
      return spotify_ == null ? com.spotify.Authentication.AccountInfoSpotify.getDefaultInstance() : spotify_;
    }
    /**
     * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
     */
    public com.spotify.Authentication.AccountInfoSpotifyOrBuilder getSpotifyOrBuilder() {
      return spotify_ == null ? com.spotify.Authentication.AccountInfoSpotify.getDefaultInstance() : spotify_;
    }

    public static final int FACEBOOK_FIELD_NUMBER = 2;
    private com.spotify.Authentication.AccountInfoFacebook facebook_;
    /**
     * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
     * @return Whether the facebook field is set.
     */
    public boolean hasFacebook() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
     * @return The facebook.
     */
    public com.spotify.Authentication.AccountInfoFacebook getFacebook() {
      return facebook_ == null ? com.spotify.Authentication.AccountInfoFacebook.getDefaultInstance() : facebook_;
    }
    /**
     * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
     */
    public com.spotify.Authentication.AccountInfoFacebookOrBuilder getFacebookOrBuilder() {
      return facebook_ == null ? com.spotify.Authentication.AccountInfoFacebook.getDefaultInstance() : facebook_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeMessage(1, getSpotify());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeMessage(2, getFacebook());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getSpotify());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getFacebook());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.AccountInfo)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.AccountInfo other = (com.spotify.Authentication.AccountInfo) obj;

      if (hasSpotify() != other.hasSpotify()) return false;
      if (hasSpotify()) {
        if (!getSpotify()
            .equals(other.getSpotify())) return false;
      }
      if (hasFacebook() != other.hasFacebook()) return false;
      if (hasFacebook()) {
        if (!getFacebook()
            .equals(other.getFacebook())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasSpotify()) {
        hash = (37 * hash) + SPOTIFY_FIELD_NUMBER;
        hash = (53 * hash) + getSpotify().hashCode();
      }
      if (hasFacebook()) {
        hash = (37 * hash) + FACEBOOK_FIELD_NUMBER;
        hash = (53 * hash) + getFacebook().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.spotify.Authentication.AccountInfo parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.AccountInfo parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.AccountInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.AccountInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.AccountInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.AccountInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.AccountInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.AccountInfo prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.AccountInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.AccountInfo)
        com.spotify.Authentication.AccountInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_AccountInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_AccountInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.AccountInfo.class, com.spotify.Authentication.AccountInfo.Builder.class);
      }

      // Construct using com.spotify.Authentication.AccountInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getSpotifyFieldBuilder();
          getFacebookFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (spotifyBuilder_ == null) {
          spotify_ = null;
        } else {
          spotifyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (facebookBuilder_ == null) {
          facebook_ = null;
        } else {
          facebookBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_AccountInfo_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.AccountInfo getDefaultInstanceForType() {
        return com.spotify.Authentication.AccountInfo.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.AccountInfo build() {
        com.spotify.Authentication.AccountInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.AccountInfo buildPartial() {
        com.spotify.Authentication.AccountInfo result = new com.spotify.Authentication.AccountInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (spotifyBuilder_ == null) {
            result.spotify_ = spotify_;
          } else {
            result.spotify_ = spotifyBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (facebookBuilder_ == null) {
            result.facebook_ = facebook_;
          } else {
            result.facebook_ = facebookBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.AccountInfo other) {
        if (other == com.spotify.Authentication.AccountInfo.getDefaultInstance()) return this;
        if (other.hasSpotify()) {
          mergeSpotify(other.getSpotify());
        }
        if (other.hasFacebook()) {
          mergeFacebook(other.getFacebook());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

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

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

      private com.spotify.Authentication.AccountInfoSpotify spotify_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.AccountInfoSpotify, com.spotify.Authentication.AccountInfoSpotify.Builder, com.spotify.Authentication.AccountInfoSpotifyOrBuilder> spotifyBuilder_;
      /**
       * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
       * @return Whether the spotify field is set.
       */
      public boolean hasSpotify() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
       * @return The spotify.
       */
      public com.spotify.Authentication.AccountInfoSpotify getSpotify() {
        if (spotifyBuilder_ == null) {
          return spotify_ == null ? com.spotify.Authentication.AccountInfoSpotify.getDefaultInstance() : spotify_;
        } else {
          return spotifyBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
       */
      public Builder setSpotify(com.spotify.Authentication.AccountInfoSpotify value) {
        if (spotifyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          spotify_ = value;
          onChanged();
        } else {
          spotifyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
       */
      public Builder setSpotify(
          com.spotify.Authentication.AccountInfoSpotify.Builder builderForValue) {
        if (spotifyBuilder_ == null) {
          spotify_ = builderForValue.build();
          onChanged();
        } else {
          spotifyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
       */
      public Builder mergeSpotify(com.spotify.Authentication.AccountInfoSpotify value) {
        if (spotifyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              spotify_ != null &&
              spotify_ != com.spotify.Authentication.AccountInfoSpotify.getDefaultInstance()) {
            spotify_ =
              com.spotify.Authentication.AccountInfoSpotify.newBuilder(spotify_).mergeFrom(value).buildPartial();
          } else {
            spotify_ = value;
          }
          onChanged();
        } else {
          spotifyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
       */
      public Builder clearSpotify() {
        if (spotifyBuilder_ == null) {
          spotify_ = null;
          onChanged();
        } else {
          spotifyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
       */
      public com.spotify.Authentication.AccountInfoSpotify.Builder getSpotifyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getSpotifyFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
       */
      public com.spotify.Authentication.AccountInfoSpotifyOrBuilder getSpotifyOrBuilder() {
        if (spotifyBuilder_ != null) {
          return spotifyBuilder_.getMessageOrBuilder();
        } else {
          return spotify_ == null ?
              com.spotify.Authentication.AccountInfoSpotify.getDefaultInstance() : spotify_;
        }
      }
      /**
       * <code>optional .spotify.AccountInfoSpotify spotify = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.AccountInfoSpotify, com.spotify.Authentication.AccountInfoSpotify.Builder, com.spotify.Authentication.AccountInfoSpotifyOrBuilder> 
          getSpotifyFieldBuilder() {
        if (spotifyBuilder_ == null) {
          spotifyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.AccountInfoSpotify, com.spotify.Authentication.AccountInfoSpotify.Builder, com.spotify.Authentication.AccountInfoSpotifyOrBuilder>(
                  getSpotify(),
                  getParentForChildren(),
                  isClean());
          spotify_ = null;
        }
        return spotifyBuilder_;
      }

      private com.spotify.Authentication.AccountInfoFacebook facebook_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.AccountInfoFacebook, com.spotify.Authentication.AccountInfoFacebook.Builder, com.spotify.Authentication.AccountInfoFacebookOrBuilder> facebookBuilder_;
      /**
       * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
       * @return Whether the facebook field is set.
       */
      public boolean hasFacebook() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
       * @return The facebook.
       */
      public com.spotify.Authentication.AccountInfoFacebook getFacebook() {
        if (facebookBuilder_ == null) {
          return facebook_ == null ? com.spotify.Authentication.AccountInfoFacebook.getDefaultInstance() : facebook_;
        } else {
          return facebookBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
       */
      public Builder setFacebook(com.spotify.Authentication.AccountInfoFacebook value) {
        if (facebookBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          facebook_ = value;
          onChanged();
        } else {
          facebookBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
       */
      public Builder setFacebook(
          com.spotify.Authentication.AccountInfoFacebook.Builder builderForValue) {
        if (facebookBuilder_ == null) {
          facebook_ = builderForValue.build();
          onChanged();
        } else {
          facebookBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
       */
      public Builder mergeFacebook(com.spotify.Authentication.AccountInfoFacebook value) {
        if (facebookBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              facebook_ != null &&
              facebook_ != com.spotify.Authentication.AccountInfoFacebook.getDefaultInstance()) {
            facebook_ =
              com.spotify.Authentication.AccountInfoFacebook.newBuilder(facebook_).mergeFrom(value).buildPartial();
          } else {
            facebook_ = value;
          }
          onChanged();
        } else {
          facebookBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
       */
      public Builder clearFacebook() {
        if (facebookBuilder_ == null) {
          facebook_ = null;
          onChanged();
        } else {
          facebookBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
       */
      public com.spotify.Authentication.AccountInfoFacebook.Builder getFacebookBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getFacebookFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
       */
      public com.spotify.Authentication.AccountInfoFacebookOrBuilder getFacebookOrBuilder() {
        if (facebookBuilder_ != null) {
          return facebookBuilder_.getMessageOrBuilder();
        } else {
          return facebook_ == null ?
              com.spotify.Authentication.AccountInfoFacebook.getDefaultInstance() : facebook_;
        }
      }
      /**
       * <code>optional .spotify.AccountInfoFacebook facebook = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.Authentication.AccountInfoFacebook, com.spotify.Authentication.AccountInfoFacebook.Builder, com.spotify.Authentication.AccountInfoFacebookOrBuilder> 
          getFacebookFieldBuilder() {
        if (facebookBuilder_ == null) {
          facebookBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.Authentication.AccountInfoFacebook, com.spotify.Authentication.AccountInfoFacebook.Builder, com.spotify.Authentication.AccountInfoFacebookOrBuilder>(
                  getFacebook(),
                  getParentForChildren(),
                  isClean());
          facebook_ = null;
        }
        return facebookBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.AccountInfo)
    }

    // @@protoc_insertion_point(class_scope:spotify.AccountInfo)
    private static final com.spotify.Authentication.AccountInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.AccountInfo();
    }

    public static com.spotify.Authentication.AccountInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.AccountInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AccountInfoSpotifyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.AccountInfoSpotify)
      com.google.protobuf.MessageOrBuilder {
  }
  /**
   * Protobuf type {@code spotify.AccountInfoSpotify}
   */
  public  static final class AccountInfoSpotify extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.AccountInfoSpotify)
      AccountInfoSpotifyOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AccountInfoSpotify.newBuilder() to construct.
    private AccountInfoSpotify(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AccountInfoSpotify() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AccountInfoSpotify();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private AccountInfoSpotify(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_AccountInfoSpotify_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_AccountInfoSpotify_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.AccountInfoSpotify.class, com.spotify.Authentication.AccountInfoSpotify.Builder.class);
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      unknownFields.writeTo(output);
    }

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

      size = 0;
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.AccountInfoSpotify)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.AccountInfoSpotify other = (com.spotify.Authentication.AccountInfoSpotify) obj;

      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

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

    public static com.spotify.Authentication.AccountInfoSpotify parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.AccountInfoSpotify parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfoSpotify parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.AccountInfoSpotify parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfoSpotify parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.AccountInfoSpotify parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfoSpotify parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.AccountInfoSpotify parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfoSpotify parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.AccountInfoSpotify parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfoSpotify parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.AccountInfoSpotify parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.AccountInfoSpotify prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.AccountInfoSpotify}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.AccountInfoSpotify)
        com.spotify.Authentication.AccountInfoSpotifyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_AccountInfoSpotify_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_AccountInfoSpotify_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.AccountInfoSpotify.class, com.spotify.Authentication.AccountInfoSpotify.Builder.class);
      }

      // Construct using com.spotify.Authentication.AccountInfoSpotify.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_AccountInfoSpotify_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.AccountInfoSpotify getDefaultInstanceForType() {
        return com.spotify.Authentication.AccountInfoSpotify.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.AccountInfoSpotify build() {
        com.spotify.Authentication.AccountInfoSpotify result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.AccountInfoSpotify buildPartial() {
        com.spotify.Authentication.AccountInfoSpotify result = new com.spotify.Authentication.AccountInfoSpotify(this);
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.AccountInfoSpotify other) {
        if (other == com.spotify.Authentication.AccountInfoSpotify.getDefaultInstance()) return this;
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.spotify.Authentication.AccountInfoSpotify parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.spotify.Authentication.AccountInfoSpotify) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.AccountInfoSpotify)
    }

    // @@protoc_insertion_point(class_scope:spotify.AccountInfoSpotify)
    private static final com.spotify.Authentication.AccountInfoSpotify DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.AccountInfoSpotify();
    }

    public static com.spotify.Authentication.AccountInfoSpotify getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.AccountInfoSpotify getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AccountInfoFacebookOrBuilder extends
      // @@protoc_insertion_point(interface_extends:spotify.AccountInfoFacebook)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string access_token = 1;</code>
     * @return Whether the accessToken field is set.
     */
    boolean hasAccessToken();
    /**
     * <code>optional string access_token = 1;</code>
     * @return The accessToken.
     */
    java.lang.String getAccessToken();
    /**
     * <code>optional string access_token = 1;</code>
     * @return The bytes for accessToken.
     */
    com.google.protobuf.ByteString
        getAccessTokenBytes();

    /**
     * <code>optional string machine_id = 2;</code>
     * @return Whether the machineId field is set.
     */
    boolean hasMachineId();
    /**
     * <code>optional string machine_id = 2;</code>
     * @return The machineId.
     */
    java.lang.String getMachineId();
    /**
     * <code>optional string machine_id = 2;</code>
     * @return The bytes for machineId.
     */
    com.google.protobuf.ByteString
        getMachineIdBytes();
  }
  /**
   * Protobuf type {@code spotify.AccountInfoFacebook}
   */
  public  static final class AccountInfoFacebook extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:spotify.AccountInfoFacebook)
      AccountInfoFacebookOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AccountInfoFacebook.newBuilder() to construct.
    private AccountInfoFacebook(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AccountInfoFacebook() {
      accessToken_ = "";
      machineId_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AccountInfoFacebook();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private AccountInfoFacebook(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              accessToken_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              machineId_ = bs;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.Authentication.internal_static_spotify_AccountInfoFacebook_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.Authentication.internal_static_spotify_AccountInfoFacebook_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.Authentication.AccountInfoFacebook.class, com.spotify.Authentication.AccountInfoFacebook.Builder.class);
    }

    private int bitField0_;
    public static final int ACCESS_TOKEN_FIELD_NUMBER = 1;
    private volatile java.lang.Object accessToken_;
    /**
     * <code>optional string access_token = 1;</code>
     * @return Whether the accessToken field is set.
     */
    public boolean hasAccessToken() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional string access_token = 1;</code>
     * @return The accessToken.
     */
    public java.lang.String getAccessToken() {
      java.lang.Object ref = accessToken_;
      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()) {
          accessToken_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string access_token = 1;</code>
     * @return The bytes for accessToken.
     */
    public com.google.protobuf.ByteString
        getAccessTokenBytes() {
      java.lang.Object ref = accessToken_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        accessToken_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MACHINE_ID_FIELD_NUMBER = 2;
    private volatile java.lang.Object machineId_;
    /**
     * <code>optional string machine_id = 2;</code>
     * @return Whether the machineId field is set.
     */
    public boolean hasMachineId() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string machine_id = 2;</code>
     * @return The machineId.
     */
    public java.lang.String getMachineId() {
      java.lang.Object ref = machineId_;
      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()) {
          machineId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string machine_id = 2;</code>
     * @return The bytes for machineId.
     */
    public com.google.protobuf.ByteString
        getMachineIdBytes() {
      java.lang.Object ref = machineId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        machineId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, accessToken_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, machineId_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, accessToken_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, machineId_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.spotify.Authentication.AccountInfoFacebook)) {
        return super.equals(obj);
      }
      com.spotify.Authentication.AccountInfoFacebook other = (com.spotify.Authentication.AccountInfoFacebook) obj;

      if (hasAccessToken() != other.hasAccessToken()) return false;
      if (hasAccessToken()) {
        if (!getAccessToken()
            .equals(other.getAccessToken())) return false;
      }
      if (hasMachineId() != other.hasMachineId()) return false;
      if (hasMachineId()) {
        if (!getMachineId()
            .equals(other.getMachineId())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasAccessToken()) {
        hash = (37 * hash) + ACCESS_TOKEN_FIELD_NUMBER;
        hash = (53 * hash) + getAccessToken().hashCode();
      }
      if (hasMachineId()) {
        hash = (37 * hash) + MACHINE_ID_FIELD_NUMBER;
        hash = (53 * hash) + getMachineId().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.spotify.Authentication.AccountInfoFacebook parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.AccountInfoFacebook parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfoFacebook parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.AccountInfoFacebook parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfoFacebook parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.spotify.Authentication.AccountInfoFacebook parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfoFacebook parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.AccountInfoFacebook parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfoFacebook parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.AccountInfoFacebook parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.spotify.Authentication.AccountInfoFacebook parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.spotify.Authentication.AccountInfoFacebook parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.Authentication.AccountInfoFacebook prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code spotify.AccountInfoFacebook}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:spotify.AccountInfoFacebook)
        com.spotify.Authentication.AccountInfoFacebookOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.Authentication.internal_static_spotify_AccountInfoFacebook_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.Authentication.internal_static_spotify_AccountInfoFacebook_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.Authentication.AccountInfoFacebook.class, com.spotify.Authentication.AccountInfoFacebook.Builder.class);
      }

      // Construct using com.spotify.Authentication.AccountInfoFacebook.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        accessToken_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        machineId_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.Authentication.internal_static_spotify_AccountInfoFacebook_descriptor;
      }

      @java.lang.Override
      public com.spotify.Authentication.AccountInfoFacebook getDefaultInstanceForType() {
        return com.spotify.Authentication.AccountInfoFacebook.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.Authentication.AccountInfoFacebook build() {
        com.spotify.Authentication.AccountInfoFacebook result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.Authentication.AccountInfoFacebook buildPartial() {
        com.spotify.Authentication.AccountInfoFacebook result = new com.spotify.Authentication.AccountInfoFacebook(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.accessToken_ = accessToken_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.machineId_ = machineId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

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

      public Builder mergeFrom(com.spotify.Authentication.AccountInfoFacebook other) {
        if (other == com.spotify.Authentication.AccountInfoFacebook.getDefaultInstance()) return this;
        if (other.hasAccessToken()) {
          bitField0_ |= 0x00000001;
          accessToken_ = other.accessToken_;
          onChanged();
        }
        if (other.hasMachineId()) {
          bitField0_ |= 0x00000002;
          machineId_ = other.machineId_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

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

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

      private java.lang.Object accessToken_ = "";
      /**
       * <code>optional string access_token = 1;</code>
       * @return Whether the accessToken field is set.
       */
      public boolean hasAccessToken() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional string access_token = 1;</code>
       * @return The accessToken.
       */
      public java.lang.String getAccessToken() {
        java.lang.Object ref = accessToken_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            accessToken_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string access_token = 1;</code>
       * @return The bytes for accessToken.
       */
      public com.google.protobuf.ByteString
          getAccessTokenBytes() {
        java.lang.Object ref = accessToken_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          accessToken_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string access_token = 1;</code>
       * @param value The accessToken to set.
       * @return This builder for chaining.
       */
      public Builder setAccessToken(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        accessToken_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string access_token = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearAccessToken() {
        bitField0_ = (bitField0_ & ~0x00000001);
        accessToken_ = getDefaultInstance().getAccessToken();
        onChanged();
        return this;
      }
      /**
       * <code>optional string access_token = 1;</code>
       * @param value The bytes for accessToken to set.
       * @return This builder for chaining.
       */
      public Builder setAccessTokenBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        accessToken_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object machineId_ = "";
      /**
       * <code>optional string machine_id = 2;</code>
       * @return Whether the machineId field is set.
       */
      public boolean hasMachineId() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional string machine_id = 2;</code>
       * @return The machineId.
       */
      public java.lang.String getMachineId() {
        java.lang.Object ref = machineId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            machineId_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string machine_id = 2;</code>
       * @return The bytes for machineId.
       */
      public com.google.protobuf.ByteString
          getMachineIdBytes() {
        java.lang.Object ref = machineId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          machineId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string machine_id = 2;</code>
       * @param value The machineId to set.
       * @return This builder for chaining.
       */
      public Builder setMachineId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        machineId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string machine_id = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearMachineId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        machineId_ = getDefaultInstance().getMachineId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string machine_id = 2;</code>
       * @param value The bytes for machineId to set.
       * @return This builder for chaining.
       */
      public Builder setMachineIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        machineId_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:spotify.AccountInfoFacebook)
    }

    // @@protoc_insertion_point(class_scope:spotify.AccountInfoFacebook)
    private static final com.spotify.Authentication.AccountInfoFacebook DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.Authentication.AccountInfoFacebook();
    }

    public static com.spotify.Authentication.AccountInfoFacebook getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public com.spotify.Authentication.AccountInfoFacebook getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_ClientResponseEncrypted_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_ClientResponseEncrypted_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_LoginCredentials_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_LoginCredentials_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_FingerprintResponseUnion_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_FingerprintResponseUnion_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_FingerprintGrainResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_FingerprintGrainResponse_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_FingerprintHmacRipemdResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_FingerprintHmacRipemdResponse_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_PeerTicketUnion_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_PeerTicketUnion_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_PeerTicketPublicKey_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_PeerTicketPublicKey_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_PeerTicketOld_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_PeerTicketOld_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_SystemInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_SystemInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_LibspotifyAppKey_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_LibspotifyAppKey_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_ClientInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_ClientInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_ClientInfoFacebook_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_ClientInfoFacebook_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_APWelcome_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_APWelcome_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_AccountInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_AccountInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_AccountInfoSpotify_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_AccountInfoSpotify_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_spotify_AccountInfoFacebook_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_spotify_AccountInfoFacebook_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\024authentication.proto\022\007spotify\"\242\003\n\027Clie" +
      "ntResponseEncrypted\0224\n\021login_credentials" +
      "\030\n \002(\0132\031.spotify.LoginCredentials\0222\n\020acc" +
      "ount_creation\030\024 \001(\0162\030.spotify.AccountCre" +
      "ation\022?\n\024fingerprint_response\030\036 \001(\0132!.sp" +
      "otify.FingerprintResponseUnion\022-\n\013peer_t" +
      "icket\030( \001(\0132\030.spotify.PeerTicketUnion\022(\n" +
      "\013system_info\0302 \002(\0132\023.spotify.SystemInfo\022" +
      "\026\n\016platform_model\030< \001(\t\022\026\n\016version_strin" +
      "g\030F \001(\t\022)\n\006appkey\030P \001(\0132\031.spotify.Libspo" +
      "tifyAppKey\022(\n\013client_info\030Z \001(\0132\023.spotif" +
      "y.ClientInfo\"a\n\020LoginCredentials\022\020\n\010user" +
      "name\030\n \001(\t\022(\n\003typ\030\024 \002(\0162\033.spotify.Authen" +
      "ticationType\022\021\n\tauth_data\030\036 \001(\014\"\211\001\n\030Fing" +
      "erprintResponseUnion\0220\n\005grain\030\n \001(\0132!.sp" +
      "otify.FingerprintGrainResponse\022;\n\013hmac_r" +
      "ipemd\030\024 \001(\0132&.spotify.FingerprintHmacRip" +
      "emdResponse\"1\n\030FingerprintGrainResponse\022" +
      "\025\n\rencrypted_key\030\n \002(\014\"-\n\035FingerprintHma" +
      "cRipemdResponse\022\014\n\004hmac\030\n \002(\014\"o\n\017PeerTic" +
      "ketUnion\0220\n\npublic_key\030\n \001(\0132\034.spotify.P" +
      "eerTicketPublicKey\022*\n\nold_ticket\030\024 \001(\0132\026" +
      ".spotify.PeerTicketOld\")\n\023PeerTicketPubl" +
      "icKey\022\022\n\npublic_key\030\n \002(\014\"C\n\rPeerTicketO" +
      "ld\022\023\n\013peer_ticket\030\n \002(\014\022\035\n\025peer_ticket_s" +
      "ignature\030\024 \002(\014\"\201\002\n\nSystemInfo\022&\n\ncpu_fam" +
      "ily\030\n \002(\0162\022.spotify.CpuFamily\022\023\n\013cpu_sub" +
      "type\030\024 \001(\r\022\017\n\007cpu_ext\030\036 \001(\r\022\035\n\005brand\030( \001" +
      "(\0162\016.spotify.Brand\022\023\n\013brand_flags\0302 \001(\r\022" +
      "\027\n\002os\030< \002(\0162\013.spotify.Os\022\022\n\nos_version\030F" +
      " \001(\r\022\016\n\006os_ext\030P \001(\r\022!\n\031system_informati" +
      "on_string\030Z \001(\t\022\021\n\tdevice_id\030d \001(\t\"p\n\020Li" +
      "bspotifyAppKey\022\017\n\007version\030\001 \002(\r\022\016\n\006devke" +
      "y\030\002 \002(\014\022\021\n\tsignature\030\003 \002(\014\022\021\n\tuseragent\030" +
      "\004 \002(\t\022\025\n\rcallback_hash\030\005 \002(\014\"X\n\nClientIn" +
      "fo\022\017\n\007limited\030\001 \001(\010\022\'\n\002fb\030\002 \001(\0132\033.spotif" +
      "y.ClientInfoFacebook\022\020\n\010language\030\003 \001(\t\"(" +
      "\n\022ClientInfoFacebook\022\022\n\nmachine_id\030\001 \001(\t" +
      "\"\351\002\n\tAPWelcome\022\032\n\022canonical_username\030\n \002" +
      "(\t\0224\n\026account_type_logged_in\030\024 \002(\0162\024.spo" +
      "tify.AccountType\0228\n\032credentials_type_log" +
      "ged_in\030\031 \002(\0162\024.spotify.AccountType\022C\n\036re" +
      "usable_auth_credentials_type\030\036 \002(\0162\033.spo" +
      "tify.AuthenticationType\022!\n\031reusable_auth" +
      "_credentials\030( \002(\014\022\022\n\nlfs_secret\0302 \001(\014\022*" +
      "\n\014account_info\030< \001(\0132\024.spotify.AccountIn" +
      "fo\022(\n\002fb\030F \001(\0132\034.spotify.AccountInfoFace" +
      "book\"k\n\013AccountInfo\022,\n\007spotify\030\001 \001(\0132\033.s" +
      "potify.AccountInfoSpotify\022.\n\010facebook\030\002 " +
      "\001(\0132\034.spotify.AccountInfoFacebook\"\024\n\022Acc" +
      "ountInfoSpotify\"?\n\023AccountInfoFacebook\022\024" +
      "\n\014access_token\030\001 \001(\t\022\022\n\nmachine_id\030\002 \001(\t" +
      "*\326\001\n\022AuthenticationType\022\034\n\030AUTHENTICATIO" +
      "N_USER_PASS\020\000\022-\n)AUTHENTICATION_STORED_S" +
      "POTIFY_CREDENTIALS\020\001\022.\n*AUTHENTICATION_S" +
      "TORED_FACEBOOK_CREDENTIALS\020\002\022 \n\034AUTHENTI" +
      "CATION_SPOTIFY_TOKEN\020\003\022!\n\035AUTHENTICATION" +
      "_FACEBOOK_TOKEN\020\004*Y\n\017AccountCreation\022\"\n\036" +
      "ACCOUNT_CREATION_ALWAYS_PROMPT\020\001\022\"\n\036ACCO" +
      "UNT_CREATION_ALWAYS_CREATE\020\003*\235\001\n\tCpuFami" +
      "ly\022\017\n\013CPU_UNKNOWN\020\000\022\013\n\007CPU_X86\020\001\022\016\n\nCPU_" +
      "X86_64\020\002\022\013\n\007CPU_PPC\020\003\022\016\n\nCPU_PPC_64\020\004\022\013\n" +
      "\007CPU_ARM\020\005\022\014\n\010CPU_IA64\020\006\022\n\n\006CPU_SH\020\007\022\014\n\010" +
      "CPU_MIPS\020\010\022\020\n\014CPU_BLACKFIN\020\t*K\n\005Brand\022\023\n" +
      "\017BRAND_UNBRANDED\020\000\022\r\n\tBRAND_INQ\020\001\022\r\n\tBRA" +
      "ND_HTC\020\002\022\017\n\013BRAND_NOKIA\020\003*\321\002\n\002Os\022\016\n\nOS_U" +
      "NKNOWN\020\000\022\016\n\nOS_WINDOWS\020\001\022\n\n\006OS_OSX\020\002\022\r\n\t" +
      "OS_IPHONE\020\003\022\n\n\006OS_S60\020\004\022\014\n\010OS_LINUX\020\005\022\021\n" +
      "\rOS_WINDOWS_CE\020\006\022\016\n\nOS_ANDROID\020\007\022\013\n\007OS_P" +
      "ALM\020\010\022\016\n\nOS_FREEBSD\020\t\022\021\n\rOS_BLACKBERRY\020\n" +
      "\022\014\n\010OS_SONOS\020\013\022\017\n\013OS_LOGITECH\020\014\022\n\n\006OS_WP" +
      "7\020\r\022\014\n\010OS_ONKYO\020\016\022\016\n\nOS_PHILIPS\020\017\022\t\n\005OS_" +
      "WD\020\020\022\014\n\010OS_VOLVO\020\021\022\013\n\007OS_TIVO\020\022\022\013\n\007OS_AW" +
      "OX\020\023\022\014\n\010OS_MEEGO\020\024\022\r\n\tOS_QNXNTO\020\025\022\n\n\006OS_" +
      "BCO\020\026*(\n\013AccountType\022\013\n\007Spotify\020\000\022\014\n\010Fac" +
      "ebook\020\001B\r\n\013com.spotify"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        });
    internal_static_spotify_ClientResponseEncrypted_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_spotify_ClientResponseEncrypted_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_ClientResponseEncrypted_descriptor,
        new java.lang.String[] { "LoginCredentials", "AccountCreation", "FingerprintResponse", "PeerTicket", "SystemInfo", "PlatformModel", "VersionString", "Appkey", "ClientInfo", });
    internal_static_spotify_LoginCredentials_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_spotify_LoginCredentials_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_LoginCredentials_descriptor,
        new java.lang.String[] { "Username", "Typ", "AuthData", });
    internal_static_spotify_FingerprintResponseUnion_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_spotify_FingerprintResponseUnion_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_FingerprintResponseUnion_descriptor,
        new java.lang.String[] { "Grain", "HmacRipemd", });
    internal_static_spotify_FingerprintGrainResponse_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_spotify_FingerprintGrainResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_FingerprintGrainResponse_descriptor,
        new java.lang.String[] { "EncryptedKey", });
    internal_static_spotify_FingerprintHmacRipemdResponse_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_spotify_FingerprintHmacRipemdResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_FingerprintHmacRipemdResponse_descriptor,
        new java.lang.String[] { "Hmac", });
    internal_static_spotify_PeerTicketUnion_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_spotify_PeerTicketUnion_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_PeerTicketUnion_descriptor,
        new java.lang.String[] { "PublicKey", "OldTicket", });
    internal_static_spotify_PeerTicketPublicKey_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_spotify_PeerTicketPublicKey_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_PeerTicketPublicKey_descriptor,
        new java.lang.String[] { "PublicKey", });
    internal_static_spotify_PeerTicketOld_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_spotify_PeerTicketOld_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_PeerTicketOld_descriptor,
        new java.lang.String[] { "PeerTicket", "PeerTicketSignature", });
    internal_static_spotify_SystemInfo_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_spotify_SystemInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_SystemInfo_descriptor,
        new java.lang.String[] { "CpuFamily", "CpuSubtype", "CpuExt", "Brand", "BrandFlags", "Os", "OsVersion", "OsExt", "SystemInformationString", "DeviceId", });
    internal_static_spotify_LibspotifyAppKey_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_spotify_LibspotifyAppKey_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_LibspotifyAppKey_descriptor,
        new java.lang.String[] { "Version", "Devkey", "Signature", "Useragent", "CallbackHash", });
    internal_static_spotify_ClientInfo_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_spotify_ClientInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_ClientInfo_descriptor,
        new java.lang.String[] { "Limited", "Fb", "Language", });
    internal_static_spotify_ClientInfoFacebook_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_spotify_ClientInfoFacebook_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_ClientInfoFacebook_descriptor,
        new java.lang.String[] { "MachineId", });
    internal_static_spotify_APWelcome_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_spotify_APWelcome_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_APWelcome_descriptor,
        new java.lang.String[] { "CanonicalUsername", "AccountTypeLoggedIn", "CredentialsTypeLoggedIn", "ReusableAuthCredentialsType", "ReusableAuthCredentials", "LfsSecret", "AccountInfo", "Fb", });
    internal_static_spotify_AccountInfo_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_spotify_AccountInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_AccountInfo_descriptor,
        new java.lang.String[] { "Spotify", "Facebook", });
    internal_static_spotify_AccountInfoSpotify_descriptor =
      getDescriptor().getMessageTypes().get(14);
    internal_static_spotify_AccountInfoSpotify_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_AccountInfoSpotify_descriptor,
        new java.lang.String[] { });
    internal_static_spotify_AccountInfoFacebook_descriptor =
      getDescriptor().getMessageTypes().get(15);
    internal_static_spotify_AccountInfoFacebook_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_spotify_AccountInfoFacebook_descriptor,
        new java.lang.String[] { "AccessToken", "MachineId", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
