// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: Global_Uconnect_Ext_PHEV.proto
#pragma warning disable 1591, 0612, 3021
#region Designer generated code

using pb = global::Google.Protobuf;
using pbc = global::Google.Protobuf.Collections;
using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
namespace Com.Fca.Uconnect.Global {

  /// <summary>Holder for reflection information generated from Global_Uconnect_Ext_PHEV.proto</summary>
  public static partial class GlobalUconnectExtPHEVReflection {

    #region Descriptor
    /// <summary>File descriptor for Global_Uconnect_Ext_PHEV.proto</summary>
    public static pbr::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbr::FileDescriptor descriptor;

    static GlobalUconnectExtPHEVReflection() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "Ch5HbG9iYWxfVWNvbm5lY3RfRXh0X1BIRVYucHJvdG8SF2NvbS5mY2EudWNv",
            "bm5lY3QuZ2xvYmFsIp4BChBDaGFyZ2VOb3dSZXF1ZXN0ElIKDWNoYXJnZUNv",
            "bW1hbmQYASABKA4yOy5jb20uZmNhLnVjb25uZWN0Lmdsb2JhbC5DaGFyZ2VO",
            "b3dSZXF1ZXN0LkNoYXJnZUNvbW1hbmRFbnVtIjYKEUNoYXJnZUNvbW1hbmRF",
            "bnVtEhAKDFNUQVJUX0NIQVJHRRAAEg8KC1NUT1BfQ0hBUkdFEAEizwEKEUNo",
            "YXJnZU5vd1Jlc3BvbnNlEkkKCHJlc3BvbnNlGAUgASgOMjcuY29tLmZjYS51",
            "Y29ubmVjdC5nbG9iYWwuQ2hhcmdlTm93UmVzcG9uc2UuUmVzcG9uc2VFbnVt",
            "EhMKC2lzVHJhbnNpZW50GAMgASgIEhkKEWZhaWx1cmVSZWFzb25Db2RlGAQg",
            "ASgFIj8KDFJlc3BvbnNlRW51bRILCgdTVUNDRVNTEAASFQoRVU5QTFVHR0VE",
            "X0ZBSUxVUkUQARILCgdGQUlMVVJFEAIiEwoRQ2hhcmdlRGF0YVJlcXVlc3Qi",
            "xwsKEUNoYXJnZURhdGFQdWJsaXNoEhQKDEJhdHRlcnlMZXZlbBgIIAEoAhJR",
            "CgxldmVudFRyaWdnZXIYASABKA4yOy5jb20uZmNhLnVjb25uZWN0Lmdsb2Jh",
            "bC5DaGFyZ2VEYXRhUHVibGlzaC5QdWJsaXNoRXZlbnRFbnVtEkkKCnBsdWdT",
            "dGF0dXMYAiABKAsyNS5jb20uZmNhLnVjb25uZWN0Lmdsb2JhbC5DaGFyZ2VE",
            "YXRhUHVibGlzaC5QbHVnU3RhdHVzEkgKDnJhbmdlRXN0aW1hdGVzGAMgASgL",
            "MjAuY29tLmZjYS51Y29ubmVjdC5nbG9iYWwuQ2hhcmdlRGF0YVB1Ymxpc2gu",
            "UmFuZ2USUQoMY2hhcmdlU3RhdHVzGAQgASgOMjsuY29tLmZjYS51Y29ubmVj",
            "dC5nbG9iYWwuQ2hhcmdlRGF0YVB1Ymxpc2guQ2hhcmdlU3RhdHVzRW51bRJA",
            "Cg9jaGFyZ2VTY2hlZHVsZXMYBSADKAsyJy5jb20uZmNhLnVjb25uZWN0Lmds",
            "b2JhbC5DaGFyZ2VTY2hlZHVsZRJEChFjaGFyZ2VTY2hlZHVsZXNWMhgKIAMo",
            "CzIpLmNvbS5mY2EudWNvbm5lY3QuZ2xvYmFsLkNoYXJnZVNjaGVkdWxlVjIS",
            "SQoIcmVzcG9uc2UYCSABKA4yNy5jb20uZmNhLnVjb25uZWN0Lmdsb2JhbC5D",
            "aGFyZ2VEYXRhUHVibGlzaC5SZXNwb25zZUVudW0aMwoFUmFuZ2USFgoOZXN0",
            "aW1hdGVkUmFuZ2UYASABKAUSEgoKdG90YWxSYW5nZRgCIAEoBRpuCgpQbHVn",
            "U3RhdHVzEhMKC2lzUGx1Z2dlZEluGAEgASgIEksKC2NoYXJnZUxldmVsGAIg",
            "ASgLMjYuY29tLmZjYS51Y29ubmVjdC5nbG9iYWwuQ2hhcmdlRGF0YVB1Ymxp",
            "c2guQ2hhcmdlTGV2ZWwa8gEKC0NoYXJnZUxldmVsEksKC2NoYXJnZUxldmVs",
            "GAIgASgOMjYuY29tLmZjYS51Y29ubmVjdC5nbG9iYWwuQ2hhcmdlRGF0YVB1",
            "Ymxpc2guVm9sdGFnZUVudW0SIgoaRXN0aW1hdGVkVGltZVRvQ2hhcmdlX0xF",
            "VjEYAyABKAkSIgoaRXN0aW1hdGVkVGltZVRvQ2hhcmdlX0xFVjIYBCABKAkS",
            "JgoeSW50X0VzdGltYXRlZFRpbWVUb0NoYXJnZV9MRVYxGAUgASgFEiYKHklu",
            "dF9Fc3RpbWF0ZWRUaW1lVG9DaGFyZ2VfTEVWMhgGIAEoBSJfCgxSZXNwb25z",
            "ZUVudW0SCwoHU1VDQ0VTUxAAEhUKEVVOUExVR0dFRF9GQUlMVVJFEAESCwoH",
            "RkFJTFVSRRACEh4KGlZFSElDTEVfREFUQV9OT1RfQVZBSUxBQkxFEAMieAoQ",
            "Q2hhcmdlU3RhdHVzRW51bRIQCgxOT1RfQ0hBUkdJTkcQABIMCghDSEFSR0lO",
            "RxABEhQKEENIQVJHRV9JTlRFUlJVUFQQAhIQCgxDSEFSR0VfRkFVTFQQAxIT",
            "Cg9DSEFSR0VfQ09NUExFVEUQBBIHCgNTTkEQBSLiAQoQUHVibGlzaEV2ZW50",
            "RW51bRIPCgtJR05JVElPTl9PThAAEhAKDElHTklUSU9OX09GRhABEg4KClBM",
            "VUdHRURfSU4QAhINCglVTlBMVUdHRUQQAxIQCgxDSEFSR0VfU1RBUlQQBBIU",
            "ChBDSEFSR0VfQ09NUExFVEVEEAUSFgoSQ0hBUkdFX0lOVEVSUlVQVEVEEAYS",
            "EgoOQ0hBUkdFX0ZBVUxURUQQBxINCglPTl9ERU1BTkQQCBITCg9DSEFSR0Vf",
            "U0NIRURVTEUQCRIUChBQT1dFUl9QUkVGRVJFTkNFEAoiNAoLVm9sdGFnZUVu",
            "dW0SCwoHREVGQVVMVBAAEgsKB0xFVkVMXzEQARILCgdMRVZFTF8yEAIiqgEK",
            "FFVwZGF0ZUNoYXJnZVNjaGVkdWxlEkcKFnVwZGF0ZWRDaGFyZ2VTY2hlZHVs",
            "ZXMYASADKAsyJy5jb20uZmNhLnVjb25uZWN0Lmdsb2JhbC5DaGFyZ2VTY2hl",
            "ZHVsZRJJChZ1cGRhdGVDaGFyZ2VTaGVkdWxlc1YyGAIgAygLMikuY29tLmZj",
            "YS51Y29ubmVjdC5nbG9iYWwuQ2hhcmdlU2NoZWR1bGVWMiLOAgoQQ2hhcmdl",
            "U2NoZWR1bGVWMhIaChJFbmFibGVTY2hlZHVsZVR5cGUYASABKAgSTAoMc2No",
            "ZWR1bGVUeXBlGAIgASgOMjYuY29tLmZjYS51Y29ubmVjdC5nbG9iYWwuQ2hh",
            "cmdlU2NoZWR1bGVWMi5TY2hlZHVsZVR5cGUSEQoJU3RhcnRUaW1lGAMgASgF",
            "Eg8KB0VuZFRpbWUYBCABKAUSFAoMQ2hhcmdlVG9GdWxsGAUgASgIEhUKDUNh",
            "YmluUHJpb3JpdHkYBiABKAgSNAoNc2NoZWR1bGVkRGF5cxgHIAEoCzIdLmNv",
            "bS5mY2EudWNvbm5lY3QuZ2xvYmFsLkRheXMSFgoOUmVwZWF0U2NoZWR1bGUY",
            "CCABKAgiMQoMU2NoZWR1bGVUeXBlEggKBE5PTkUQABIKCgZDSEFSR0UQARIL",
            "CgdDTElNQVRFEAIijAEKBERheXMSEAoIaXNTdW5kYXkYASABKAgSEAoIaXNN",
            "b25kYXkYAiABKAgSEQoJaXNUdWVzZGF5GAMgASgIEhMKC2lzV2VkbmVzZGF5",
            "GAQgASgIEhIKCmlzVGh1cnNkYXkYBSABKAgSEAoIaXNGcmlkYXkYBiABKAgS",
            "EgoKaXNTYXR1cmRheRgHIAEoCCKPAwoOQ2hhcmdlU2NoZWR1bGUSXgoUZW5h",
            "YmxlQ2hhcmdlU2NoZWR1bGUYBSABKA4yQC5jb20uZmNhLnVjb25uZWN0Lmds",
            "b2JhbC5DaGFyZ2VTY2hlZHVsZS5FbmFibGVDaGFyZ2VTY2hlZHVsZVR5cGUS",
            "TgoMc2NoZWR1bGVUeXBlGAEgASgOMjguY29tLmZjYS51Y29ubmVjdC5nbG9i",
            "YWwuQ2hhcmdlU2NoZWR1bGUuU2NoZWR1bGVUeXBlRW51bRIXCg9jaGFyZ2VV",
            "bnRpbEZ1bGwYAiABKAgSGQoRc2NoZWR1bGVTdGFydFRpbWUYAyABKAUSFwoP",
            "c2NoZWR1bGVFbmRUaW1lGAQgASgFIiwKEFNjaGVkdWxlVHlwZUVudW0SCwoH",
            "V0VFS0RBWRAAEgsKB1dFRUtFTkQQASJSChhFbmFibGVDaGFyZ2VTY2hlZHVs",
            "ZVR5cGUSCwoHREVGQVVMVBAAEhMKD0VOQUJMRV9TQ0hFRFVMRRABEhQKEERJ",
            "U0FCTEVfU0NIRURVTEUQAiLhAQoVQ2hhcmdlUG93ZXJQcmVmZXJlbmNlElIK",
            "CnByZWZlcmVuY2UYASABKA4yPi5jb20uZmNhLnVjb25uZWN0Lmdsb2JhbC5D",
            "aGFyZ2VQb3dlclByZWZlcmVuY2UuUHJlZmVyZW5jZXNFbnVtInQKD1ByZWZl",
            "cmVuY2VzRW51bRISCg5OT1RfVVNFRF9WQUxVRRAAEg0KCUxFVkVMX09ORRAB",
            "Eg0KCUxFVkVMX1RXTxACEg8KC0xFVkVMX1RIUkVFEAMSDgoKTEVWRUxfRk9V",
            "UhAEEg4KCkxFVkVMX0ZJVkUQBWIGcHJvdG8z"));
      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
          new pbr::FileDescriptor[] { },
          new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.ChargeNowRequest), global::Com.Fca.Uconnect.Global.ChargeNowRequest.Parser, new[]{ "ChargeCommand" }, null, new[]{ typeof(global::Com.Fca.Uconnect.Global.ChargeNowRequest.Types.ChargeCommandEnum) }, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.ChargeNowResponse), global::Com.Fca.Uconnect.Global.ChargeNowResponse.Parser, new[]{ "Response", "IsTransient", "FailureReasonCode" }, null, new[]{ typeof(global::Com.Fca.Uconnect.Global.ChargeNowResponse.Types.ResponseEnum) }, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.ChargeDataRequest), global::Com.Fca.Uconnect.Global.ChargeDataRequest.Parser, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.ChargeDataPublish), global::Com.Fca.Uconnect.Global.ChargeDataPublish.Parser, new[]{ "BatteryLevel", "EventTrigger", "PlugStatus", "RangeEstimates", "ChargeStatus", "ChargeSchedules", "ChargeSchedulesV2", "Response" }, null, new[]{ typeof(global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ResponseEnum), typeof(global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ChargeStatusEnum), typeof(global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.PublishEventEnum), typeof(global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.VoltageEnum) }, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.Range), global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.Range.Parser, new[]{ "EstimatedRange", "TotalRange" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.PlugStatus), global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.PlugStatus.Parser, new[]{ "IsPluggedIn", "ChargeLevel" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ChargeLevel), global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ChargeLevel.Parser, new[]{ "ChargeLevel_", "EstimatedTimeToChargeLEV1", "EstimatedTimeToChargeLEV2", "IntEstimatedTimeToChargeLEV1", "IntEstimatedTimeToChargeLEV2" }, null, null, null)}),
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.UpdateChargeSchedule), global::Com.Fca.Uconnect.Global.UpdateChargeSchedule.Parser, new[]{ "UpdatedChargeSchedules", "UpdateChargeShedulesV2" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.ChargeScheduleV2), global::Com.Fca.Uconnect.Global.ChargeScheduleV2.Parser, new[]{ "EnableScheduleType", "ScheduleType", "StartTime", "EndTime", "ChargeToFull", "CabinPriority", "ScheduledDays", "RepeatSchedule" }, null, new[]{ typeof(global::Com.Fca.Uconnect.Global.ChargeScheduleV2.Types.ScheduleType) }, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.Days), global::Com.Fca.Uconnect.Global.Days.Parser, new[]{ "IsSunday", "IsMonday", "IsTuesday", "IsWednesday", "IsThursday", "IsFriday", "IsSaturday" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.ChargeSchedule), global::Com.Fca.Uconnect.Global.ChargeSchedule.Parser, new[]{ "EnableChargeSchedule", "ScheduleType", "ChargeUntilFull", "ScheduleStartTime", "ScheduleEndTime" }, null, new[]{ typeof(global::Com.Fca.Uconnect.Global.ChargeSchedule.Types.ScheduleTypeEnum), typeof(global::Com.Fca.Uconnect.Global.ChargeSchedule.Types.EnableChargeScheduleType) }, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Com.Fca.Uconnect.Global.ChargePowerPreference), global::Com.Fca.Uconnect.Global.ChargePowerPreference.Parser, new[]{ "Preference" }, null, new[]{ typeof(global::Com.Fca.Uconnect.Global.ChargePowerPreference.Types.PreferencesEnum) }, null)
          }));
    }
    #endregion

  }
  #region Messages
  /// <summary>
  ///*
  /// &lt;div class=exmsg-main>
  /// &lt;h4>PHEVData Example Message:&lt;/h4>
  /// &lt;div class=ex-msg>
  ///	&lt;code>
  /// 		timestamp: 1497889690516
  /// 		messageId: 1
  /// 		messages {
  /// 		[com.fca.uconnect.global.phevData]
  /// 		{
  /// 		 data: "\000\000\000\000\000\000\000\000\000\000\000\000\000"
  /// 		 commandMark: VEHICLE_LOGIN
  /// 		 dataCollectionTimestamp: 1497889690516
  /// 		}
  /// 	  }
  ///  &lt;/code>
  /// &lt;/div>
  ///&lt;/div>
  /// </summary>
  public sealed partial class ChargeNowRequest : pb::IMessage<ChargeNowRequest> {
    private static readonly pb::MessageParser<ChargeNowRequest> _parser = new pb::MessageParser<ChargeNowRequest>(() => new ChargeNowRequest());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ChargeNowRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Com.Fca.Uconnect.Global.GlobalUconnectExtPHEVReflection.Descriptor.MessageTypes[0]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeNowRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeNowRequest(ChargeNowRequest other) : this() {
      chargeCommand_ = other.chargeCommand_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeNowRequest Clone() {
      return new ChargeNowRequest(this);
    }

    /// <summary>Field number for the "chargeCommand" field.</summary>
    public const int ChargeCommandFieldNumber = 1;
    private global::Com.Fca.Uconnect.Global.ChargeNowRequest.Types.ChargeCommandEnum chargeCommand_ = 0;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.ChargeNowRequest.Types.ChargeCommandEnum ChargeCommand {
      get { return chargeCommand_; }
      set {
        chargeCommand_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ChargeNowRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ChargeNowRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (ChargeCommand != other.ChargeCommand) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (ChargeCommand != 0) hash ^= ChargeCommand.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (ChargeCommand != 0) {
        output.WriteRawTag(8);
        output.WriteEnum((int) ChargeCommand);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (ChargeCommand != 0) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ChargeCommand);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ChargeNowRequest other) {
      if (other == null) {
        return;
      }
      if (other.ChargeCommand != 0) {
        ChargeCommand = other.ChargeCommand;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            chargeCommand_ = (global::Com.Fca.Uconnect.Global.ChargeNowRequest.Types.ChargeCommandEnum) input.ReadEnum();
            break;
          }
        }
      }
    }

    #region Nested types
    /// <summary>Container for nested types declared in the ChargeNowRequest message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static partial class Types {
      public enum ChargeCommandEnum {
        [pbr::OriginalName("START_CHARGE")] StartCharge = 0,
        [pbr::OriginalName("STOP_CHARGE")] StopCharge = 1,
      }

    }
    #endregion

  }

  public sealed partial class ChargeNowResponse : pb::IMessage<ChargeNowResponse> {
    private static readonly pb::MessageParser<ChargeNowResponse> _parser = new pb::MessageParser<ChargeNowResponse>(() => new ChargeNowResponse());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ChargeNowResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Com.Fca.Uconnect.Global.GlobalUconnectExtPHEVReflection.Descriptor.MessageTypes[1]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeNowResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeNowResponse(ChargeNowResponse other) : this() {
      response_ = other.response_;
      isTransient_ = other.isTransient_;
      failureReasonCode_ = other.failureReasonCode_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeNowResponse Clone() {
      return new ChargeNowResponse(this);
    }

    /// <summary>Field number for the "response" field.</summary>
    public const int ResponseFieldNumber = 5;
    private global::Com.Fca.Uconnect.Global.ChargeNowResponse.Types.ResponseEnum response_ = 0;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.ChargeNowResponse.Types.ResponseEnum Response {
      get { return response_; }
      set {
        response_ = value;
      }
    }

    /// <summary>Field number for the "isTransient" field.</summary>
    public const int IsTransientFieldNumber = 3;
    private bool isTransient_;
    /// <summary>
    //// Indicates a transient error and a retry can be attempted.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool IsTransient {
      get { return isTransient_; }
      set {
        isTransient_ = value;
      }
    }

    /// <summary>Field number for the "failureReasonCode" field.</summary>
    public const int FailureReasonCodeFieldNumber = 4;
    private int failureReasonCode_;
    /// <summary>
    //// Specific error code.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int FailureReasonCode {
      get { return failureReasonCode_; }
      set {
        failureReasonCode_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ChargeNowResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ChargeNowResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Response != other.Response) return false;
      if (IsTransient != other.IsTransient) return false;
      if (FailureReasonCode != other.FailureReasonCode) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Response != 0) hash ^= Response.GetHashCode();
      if (IsTransient != false) hash ^= IsTransient.GetHashCode();
      if (FailureReasonCode != 0) hash ^= FailureReasonCode.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (IsTransient != false) {
        output.WriteRawTag(24);
        output.WriteBool(IsTransient);
      }
      if (FailureReasonCode != 0) {
        output.WriteRawTag(32);
        output.WriteInt32(FailureReasonCode);
      }
      if (Response != 0) {
        output.WriteRawTag(40);
        output.WriteEnum((int) Response);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Response != 0) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Response);
      }
      if (IsTransient != false) {
        size += 1 + 1;
      }
      if (FailureReasonCode != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(FailureReasonCode);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ChargeNowResponse other) {
      if (other == null) {
        return;
      }
      if (other.Response != 0) {
        Response = other.Response;
      }
      if (other.IsTransient != false) {
        IsTransient = other.IsTransient;
      }
      if (other.FailureReasonCode != 0) {
        FailureReasonCode = other.FailureReasonCode;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 24: {
            IsTransient = input.ReadBool();
            break;
          }
          case 32: {
            FailureReasonCode = input.ReadInt32();
            break;
          }
          case 40: {
            response_ = (global::Com.Fca.Uconnect.Global.ChargeNowResponse.Types.ResponseEnum) input.ReadEnum();
            break;
          }
        }
      }
    }

    #region Nested types
    /// <summary>Container for nested types declared in the ChargeNowResponse message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static partial class Types {
      public enum ResponseEnum {
        /// <summary>
        //// Success
        /// </summary>
        [pbr::OriginalName("SUCCESS")] Success = 0,
        /// <summary>
        //// Vehicle Is Not Plugged in
        /// </summary>
        [pbr::OriginalName("UNPLUGGED_FAILURE")] UnpluggedFailure = 1,
        /// <summary>
        //// General FAILURE
        /// </summary>
        [pbr::OriginalName("FAILURE")] Failure = 2,
      }

    }
    #endregion

  }

  /// <summary>
  ////	bytes serviceRequestID = 1;
  /// </summary>
  public sealed partial class ChargeDataRequest : pb::IMessage<ChargeDataRequest> {
    private static readonly pb::MessageParser<ChargeDataRequest> _parser = new pb::MessageParser<ChargeDataRequest>(() => new ChargeDataRequest());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ChargeDataRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Com.Fca.Uconnect.Global.GlobalUconnectExtPHEVReflection.Descriptor.MessageTypes[2]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeDataRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeDataRequest(ChargeDataRequest other) : this() {
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeDataRequest Clone() {
      return new ChargeDataRequest(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ChargeDataRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ChargeDataRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ChargeDataRequest other) {
      if (other == null) {
        return;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
        }
      }
    }

  }

  public sealed partial class ChargeDataPublish : pb::IMessage<ChargeDataPublish> {
    private static readonly pb::MessageParser<ChargeDataPublish> _parser = new pb::MessageParser<ChargeDataPublish>(() => new ChargeDataPublish());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ChargeDataPublish> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Com.Fca.Uconnect.Global.GlobalUconnectExtPHEVReflection.Descriptor.MessageTypes[3]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeDataPublish() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeDataPublish(ChargeDataPublish other) : this() {
      batteryLevel_ = other.batteryLevel_;
      eventTrigger_ = other.eventTrigger_;
      PlugStatus = other.plugStatus_ != null ? other.PlugStatus.Clone() : null;
      RangeEstimates = other.rangeEstimates_ != null ? other.RangeEstimates.Clone() : null;
      chargeStatus_ = other.chargeStatus_;
      chargeSchedules_ = other.chargeSchedules_.Clone();
      chargeSchedulesV2_ = other.chargeSchedulesV2_.Clone();
      response_ = other.response_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeDataPublish Clone() {
      return new ChargeDataPublish(this);
    }

    /// <summary>Field number for the "BatteryLevel" field.</summary>
    public const int BatteryLevelFieldNumber = 8;
    private float batteryLevel_;
    /// <summary>
    //// High voltage battery level in percent
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float BatteryLevel {
      get { return batteryLevel_; }
      set {
        batteryLevel_ = value;
      }
    }

    /// <summary>Field number for the "eventTrigger" field.</summary>
    public const int EventTriggerFieldNumber = 1;
    private global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.PublishEventEnum eventTrigger_ = 0;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.PublishEventEnum EventTrigger {
      get { return eventTrigger_; }
      set {
        eventTrigger_ = value;
      }
    }

    /// <summary>Field number for the "plugStatus" field.</summary>
    public const int PlugStatusFieldNumber = 2;
    private global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.PlugStatus plugStatus_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.PlugStatus PlugStatus {
      get { return plugStatus_; }
      set {
        plugStatus_ = value;
      }
    }

    /// <summary>Field number for the "rangeEstimates" field.</summary>
    public const int RangeEstimatesFieldNumber = 3;
    private global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.Range rangeEstimates_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.Range RangeEstimates {
      get { return rangeEstimates_; }
      set {
        rangeEstimates_ = value;
      }
    }

    /// <summary>Field number for the "chargeStatus" field.</summary>
    public const int ChargeStatusFieldNumber = 4;
    private global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ChargeStatusEnum chargeStatus_ = 0;
    /// <summary>
    //// actual reported value of the ChargeSysStat can signal
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ChargeStatusEnum ChargeStatus {
      get { return chargeStatus_; }
      set {
        chargeStatus_ = value;
      }
    }

    /// <summary>Field number for the "chargeSchedules" field.</summary>
    public const int ChargeSchedulesFieldNumber = 5;
    private static readonly pb::FieldCodec<global::Com.Fca.Uconnect.Global.ChargeSchedule> _repeated_chargeSchedules_codec
        = pb::FieldCodec.ForMessage(42, global::Com.Fca.Uconnect.Global.ChargeSchedule.Parser);
    private readonly pbc::RepeatedField<global::Com.Fca.Uconnect.Global.ChargeSchedule> chargeSchedules_ = new pbc::RepeatedField<global::Com.Fca.Uconnect.Global.ChargeSchedule>();
    /// <summary>
    //// Only required once charge now and charge scheduling are implemented
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Com.Fca.Uconnect.Global.ChargeSchedule> ChargeSchedules {
      get { return chargeSchedules_; }
    }

    /// <summary>Field number for the "chargeSchedulesV2" field.</summary>
    public const int ChargeSchedulesV2FieldNumber = 10;
    private static readonly pb::FieldCodec<global::Com.Fca.Uconnect.Global.ChargeScheduleV2> _repeated_chargeSchedulesV2_codec
        = pb::FieldCodec.ForMessage(82, global::Com.Fca.Uconnect.Global.ChargeScheduleV2.Parser);
    private readonly pbc::RepeatedField<global::Com.Fca.Uconnect.Global.ChargeScheduleV2> chargeSchedulesV2_ = new pbc::RepeatedField<global::Com.Fca.Uconnect.Global.ChargeScheduleV2>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Com.Fca.Uconnect.Global.ChargeScheduleV2> ChargeSchedulesV2 {
      get { return chargeSchedulesV2_; }
    }

    /// <summary>Field number for the "response" field.</summary>
    public const int ResponseFieldNumber = 9;
    private global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ResponseEnum response_ = 0;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ResponseEnum Response {
      get { return response_; }
      set {
        response_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ChargeDataPublish);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ChargeDataPublish other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (BatteryLevel != other.BatteryLevel) return false;
      if (EventTrigger != other.EventTrigger) return false;
      if (!object.Equals(PlugStatus, other.PlugStatus)) return false;
      if (!object.Equals(RangeEstimates, other.RangeEstimates)) return false;
      if (ChargeStatus != other.ChargeStatus) return false;
      if(!chargeSchedules_.Equals(other.chargeSchedules_)) return false;
      if(!chargeSchedulesV2_.Equals(other.chargeSchedulesV2_)) return false;
      if (Response != other.Response) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (BatteryLevel != 0F) hash ^= BatteryLevel.GetHashCode();
      if (EventTrigger != 0) hash ^= EventTrigger.GetHashCode();
      if (plugStatus_ != null) hash ^= PlugStatus.GetHashCode();
      if (rangeEstimates_ != null) hash ^= RangeEstimates.GetHashCode();
      if (ChargeStatus != 0) hash ^= ChargeStatus.GetHashCode();
      hash ^= chargeSchedules_.GetHashCode();
      hash ^= chargeSchedulesV2_.GetHashCode();
      if (Response != 0) hash ^= Response.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (EventTrigger != 0) {
        output.WriteRawTag(8);
        output.WriteEnum((int) EventTrigger);
      }
      if (plugStatus_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(PlugStatus);
      }
      if (rangeEstimates_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(RangeEstimates);
      }
      if (ChargeStatus != 0) {
        output.WriteRawTag(32);
        output.WriteEnum((int) ChargeStatus);
      }
      chargeSchedules_.WriteTo(output, _repeated_chargeSchedules_codec);
      if (BatteryLevel != 0F) {
        output.WriteRawTag(69);
        output.WriteFloat(BatteryLevel);
      }
      if (Response != 0) {
        output.WriteRawTag(72);
        output.WriteEnum((int) Response);
      }
      chargeSchedulesV2_.WriteTo(output, _repeated_chargeSchedulesV2_codec);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (BatteryLevel != 0F) {
        size += 1 + 4;
      }
      if (EventTrigger != 0) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) EventTrigger);
      }
      if (plugStatus_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(PlugStatus);
      }
      if (rangeEstimates_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(RangeEstimates);
      }
      if (ChargeStatus != 0) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ChargeStatus);
      }
      size += chargeSchedules_.CalculateSize(_repeated_chargeSchedules_codec);
      size += chargeSchedulesV2_.CalculateSize(_repeated_chargeSchedulesV2_codec);
      if (Response != 0) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Response);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ChargeDataPublish other) {
      if (other == null) {
        return;
      }
      if (other.BatteryLevel != 0F) {
        BatteryLevel = other.BatteryLevel;
      }
      if (other.EventTrigger != 0) {
        EventTrigger = other.EventTrigger;
      }
      if (other.plugStatus_ != null) {
        if (plugStatus_ == null) {
          plugStatus_ = new global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.PlugStatus();
        }
        PlugStatus.MergeFrom(other.PlugStatus);
      }
      if (other.rangeEstimates_ != null) {
        if (rangeEstimates_ == null) {
          rangeEstimates_ = new global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.Range();
        }
        RangeEstimates.MergeFrom(other.RangeEstimates);
      }
      if (other.ChargeStatus != 0) {
        ChargeStatus = other.ChargeStatus;
      }
      chargeSchedules_.Add(other.chargeSchedules_);
      chargeSchedulesV2_.Add(other.chargeSchedulesV2_);
      if (other.Response != 0) {
        Response = other.Response;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            eventTrigger_ = (global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.PublishEventEnum) input.ReadEnum();
            break;
          }
          case 18: {
            if (plugStatus_ == null) {
              plugStatus_ = new global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.PlugStatus();
            }
            input.ReadMessage(plugStatus_);
            break;
          }
          case 26: {
            if (rangeEstimates_ == null) {
              rangeEstimates_ = new global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.Range();
            }
            input.ReadMessage(rangeEstimates_);
            break;
          }
          case 32: {
            chargeStatus_ = (global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ChargeStatusEnum) input.ReadEnum();
            break;
          }
          case 42: {
            chargeSchedules_.AddEntriesFrom(input, _repeated_chargeSchedules_codec);
            break;
          }
          case 69: {
            BatteryLevel = input.ReadFloat();
            break;
          }
          case 72: {
            response_ = (global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ResponseEnum) input.ReadEnum();
            break;
          }
          case 82: {
            chargeSchedulesV2_.AddEntriesFrom(input, _repeated_chargeSchedulesV2_codec);
            break;
          }
        }
      }
    }

    #region Nested types
    /// <summary>Container for nested types declared in the ChargeDataPublish message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static partial class Types {
      public enum ResponseEnum {
        /// <summary>
        //// Success
        /// </summary>
        [pbr::OriginalName("SUCCESS")] Success = 0,
        /// <summary>
        //// Vehicle Is Not Plugged in
        /// </summary>
        [pbr::OriginalName("UNPLUGGED_FAILURE")] UnpluggedFailure = 1,
        /// <summary>
        //// General FAILURE
        /// </summary>
        [pbr::OriginalName("FAILURE")] Failure = 2,
        [pbr::OriginalName("VEHICLE_DATA_NOT_AVAILABLE")] VehicleDataNotAvailable = 3,
      }

      public enum ChargeStatusEnum {
        [pbr::OriginalName("NOT_CHARGING")] NotCharging = 0,
        [pbr::OriginalName("CHARGING")] Charging = 1,
        [pbr::OriginalName("CHARGE_INTERRUPT")] ChargeInterrupt = 2,
        [pbr::OriginalName("CHARGE_FAULT")] ChargeFault = 3,
        [pbr::OriginalName("CHARGE_COMPLETE")] ChargeComplete = 4,
        [pbr::OriginalName("SNA")] Sna = 5,
      }

      public enum PublishEventEnum {
        [pbr::OriginalName("IGNITION_ON")] IgnitionOn = 0,
        [pbr::OriginalName("IGNITION_OFF")] IgnitionOff = 1,
        [pbr::OriginalName("PLUGGED_IN")] PluggedIn = 2,
        [pbr::OriginalName("UNPLUGGED")] Unplugged = 3,
        [pbr::OriginalName("CHARGE_START")] ChargeStart = 4,
        [pbr::OriginalName("CHARGE_COMPLETED")] ChargeCompleted = 5,
        [pbr::OriginalName("CHARGE_INTERRUPTED")] ChargeInterrupted = 6,
        [pbr::OriginalName("CHARGE_FAULTED")] ChargeFaulted = 7,
        [pbr::OriginalName("ON_DEMAND")] OnDemand = 8,
        [pbr::OriginalName("CHARGE_SCHEDULE")] ChargeSchedule = 9,
        [pbr::OriginalName("POWER_PREFERENCE")] PowerPreference = 10,
      }

      public enum VoltageEnum {
        [pbr::OriginalName("DEFAULT")] Default = 0,
        /// <summary>
        /// Not expected to be used for China market
        /// </summary>
        [pbr::OriginalName("LEVEL_1")] Level1 = 1,
        [pbr::OriginalName("LEVEL_2")] Level2 = 2,
      }

      public sealed partial class Range : pb::IMessage<Range> {
        private static readonly pb::MessageParser<Range> _parser = new pb::MessageParser<Range>(() => new Range());
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public static pb::MessageParser<Range> Parser { get { return _parser; } }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public static pbr::MessageDescriptor Descriptor {
          get { return global::Com.Fca.Uconnect.Global.ChargeDataPublish.Descriptor.NestedTypes[0]; }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        pbr::MessageDescriptor pb::IMessage.Descriptor {
          get { return Descriptor; }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public Range() {
          OnConstruction();
        }

        partial void OnConstruction();

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public Range(Range other) : this() {
          estimatedRange_ = other.estimatedRange_;
          totalRange_ = other.totalRange_;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public Range Clone() {
          return new Range(this);
        }

        /// <summary>Field number for the "estimatedRange" field.</summary>
        public const int EstimatedRangeFieldNumber = 1;
        private int estimatedRange_;
        /// <summary>
        //// This is the estimated electric Range
        /// </summary>
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public int EstimatedRange {
          get { return estimatedRange_; }
          set {
            estimatedRange_ = value;
          }
        }

        /// <summary>Field number for the "totalRange" field.</summary>
        public const int TotalRangeFieldNumber = 2;
        private int totalRange_;
        /// <summary>
        //// TotalRange is the Hybrid Range including fuel
        /// </summary>
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public int TotalRange {
          get { return totalRange_; }
          set {
            totalRange_ = value;
          }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public override bool Equals(object other) {
          return Equals(other as Range);
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public bool Equals(Range other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (EstimatedRange != other.EstimatedRange) return false;
          if (TotalRange != other.TotalRange) return false;
          return true;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public override int GetHashCode() {
          int hash = 1;
          if (EstimatedRange != 0) hash ^= EstimatedRange.GetHashCode();
          if (TotalRange != 0) hash ^= TotalRange.GetHashCode();
          return hash;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public override string ToString() {
          return pb::JsonFormatter.ToDiagnosticString(this);
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public void WriteTo(pb::CodedOutputStream output) {
          if (EstimatedRange != 0) {
            output.WriteRawTag(8);
            output.WriteInt32(EstimatedRange);
          }
          if (TotalRange != 0) {
            output.WriteRawTag(16);
            output.WriteInt32(TotalRange);
          }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public int CalculateSize() {
          int size = 0;
          if (EstimatedRange != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(EstimatedRange);
          }
          if (TotalRange != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(TotalRange);
          }
          return size;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public void MergeFrom(Range other) {
          if (other == null) {
            return;
          }
          if (other.EstimatedRange != 0) {
            EstimatedRange = other.EstimatedRange;
          }
          if (other.TotalRange != 0) {
            TotalRange = other.TotalRange;
          }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while ((tag = input.ReadTag()) != 0) {
            switch(tag) {
              default:
                input.SkipLastField();
                break;
              case 8: {
                EstimatedRange = input.ReadInt32();
                break;
              }
              case 16: {
                TotalRange = input.ReadInt32();
                break;
              }
            }
          }
        }

      }

      public sealed partial class PlugStatus : pb::IMessage<PlugStatus> {
        private static readonly pb::MessageParser<PlugStatus> _parser = new pb::MessageParser<PlugStatus>(() => new PlugStatus());
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public static pb::MessageParser<PlugStatus> Parser { get { return _parser; } }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public static pbr::MessageDescriptor Descriptor {
          get { return global::Com.Fca.Uconnect.Global.ChargeDataPublish.Descriptor.NestedTypes[1]; }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        pbr::MessageDescriptor pb::IMessage.Descriptor {
          get { return Descriptor; }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public PlugStatus() {
          OnConstruction();
        }

        partial void OnConstruction();

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public PlugStatus(PlugStatus other) : this() {
          isPluggedIn_ = other.isPluggedIn_;
          ChargeLevel = other.chargeLevel_ != null ? other.ChargeLevel.Clone() : null;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public PlugStatus Clone() {
          return new PlugStatus(this);
        }

        /// <summary>Field number for the "isPluggedIn" field.</summary>
        public const int IsPluggedInFieldNumber = 1;
        private bool isPluggedIn_;
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public bool IsPluggedIn {
          get { return isPluggedIn_; }
          set {
            isPluggedIn_ = value;
          }
        }

        /// <summary>Field number for the "chargeLevel" field.</summary>
        public const int ChargeLevelFieldNumber = 2;
        private global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ChargeLevel chargeLevel_;
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ChargeLevel ChargeLevel {
          get { return chargeLevel_; }
          set {
            chargeLevel_ = value;
          }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public override bool Equals(object other) {
          return Equals(other as PlugStatus);
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public bool Equals(PlugStatus other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (IsPluggedIn != other.IsPluggedIn) return false;
          if (!object.Equals(ChargeLevel, other.ChargeLevel)) return false;
          return true;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public override int GetHashCode() {
          int hash = 1;
          if (IsPluggedIn != false) hash ^= IsPluggedIn.GetHashCode();
          if (chargeLevel_ != null) hash ^= ChargeLevel.GetHashCode();
          return hash;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public override string ToString() {
          return pb::JsonFormatter.ToDiagnosticString(this);
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public void WriteTo(pb::CodedOutputStream output) {
          if (IsPluggedIn != false) {
            output.WriteRawTag(8);
            output.WriteBool(IsPluggedIn);
          }
          if (chargeLevel_ != null) {
            output.WriteRawTag(18);
            output.WriteMessage(ChargeLevel);
          }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public int CalculateSize() {
          int size = 0;
          if (IsPluggedIn != false) {
            size += 1 + 1;
          }
          if (chargeLevel_ != null) {
            size += 1 + pb::CodedOutputStream.ComputeMessageSize(ChargeLevel);
          }
          return size;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public void MergeFrom(PlugStatus other) {
          if (other == null) {
            return;
          }
          if (other.IsPluggedIn != false) {
            IsPluggedIn = other.IsPluggedIn;
          }
          if (other.chargeLevel_ != null) {
            if (chargeLevel_ == null) {
              chargeLevel_ = new global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ChargeLevel();
            }
            ChargeLevel.MergeFrom(other.ChargeLevel);
          }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while ((tag = input.ReadTag()) != 0) {
            switch(tag) {
              default:
                input.SkipLastField();
                break;
              case 8: {
                IsPluggedIn = input.ReadBool();
                break;
              }
              case 18: {
                if (chargeLevel_ == null) {
                  chargeLevel_ = new global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.ChargeLevel();
                }
                input.ReadMessage(chargeLevel_);
                break;
              }
            }
          }
        }

      }

      public sealed partial class ChargeLevel : pb::IMessage<ChargeLevel> {
        private static readonly pb::MessageParser<ChargeLevel> _parser = new pb::MessageParser<ChargeLevel>(() => new ChargeLevel());
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public static pb::MessageParser<ChargeLevel> Parser { get { return _parser; } }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public static pbr::MessageDescriptor Descriptor {
          get { return global::Com.Fca.Uconnect.Global.ChargeDataPublish.Descriptor.NestedTypes[2]; }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        pbr::MessageDescriptor pb::IMessage.Descriptor {
          get { return Descriptor; }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public ChargeLevel() {
          OnConstruction();
        }

        partial void OnConstruction();

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public ChargeLevel(ChargeLevel other) : this() {
          chargeLevel_ = other.chargeLevel_;
          estimatedTimeToChargeLEV1_ = other.estimatedTimeToChargeLEV1_;
          estimatedTimeToChargeLEV2_ = other.estimatedTimeToChargeLEV2_;
          intEstimatedTimeToChargeLEV1_ = other.intEstimatedTimeToChargeLEV1_;
          intEstimatedTimeToChargeLEV2_ = other.intEstimatedTimeToChargeLEV2_;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public ChargeLevel Clone() {
          return new ChargeLevel(this);
        }

        /// <summary>Field number for the "chargeLevel" field.</summary>
        public const int ChargeLevel_FieldNumber = 2;
        private global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.VoltageEnum chargeLevel_ = 0;
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.VoltageEnum ChargeLevel_ {
          get { return chargeLevel_; }
          set {
            chargeLevel_ = value;
          }
        }

        /// <summary>Field number for the "EstimatedTimeToCharge_LEV1" field.</summary>
        public const int EstimatedTimeToChargeLEV1FieldNumber = 3;
        private string estimatedTimeToChargeLEV1_ = "";
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public string EstimatedTimeToChargeLEV1 {
          get { return estimatedTimeToChargeLEV1_; }
          set {
            estimatedTimeToChargeLEV1_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
          }
        }

        /// <summary>Field number for the "EstimatedTimeToCharge_LEV2" field.</summary>
        public const int EstimatedTimeToChargeLEV2FieldNumber = 4;
        private string estimatedTimeToChargeLEV2_ = "";
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public string EstimatedTimeToChargeLEV2 {
          get { return estimatedTimeToChargeLEV2_; }
          set {
            estimatedTimeToChargeLEV2_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
          }
        }

        /// <summary>Field number for the "Int_EstimatedTimeToCharge_LEV1" field.</summary>
        public const int IntEstimatedTimeToChargeLEV1FieldNumber = 5;
        private int intEstimatedTimeToChargeLEV1_;
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public int IntEstimatedTimeToChargeLEV1 {
          get { return intEstimatedTimeToChargeLEV1_; }
          set {
            intEstimatedTimeToChargeLEV1_ = value;
          }
        }

        /// <summary>Field number for the "Int_EstimatedTimeToCharge_LEV2" field.</summary>
        public const int IntEstimatedTimeToChargeLEV2FieldNumber = 6;
        private int intEstimatedTimeToChargeLEV2_;
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public int IntEstimatedTimeToChargeLEV2 {
          get { return intEstimatedTimeToChargeLEV2_; }
          set {
            intEstimatedTimeToChargeLEV2_ = value;
          }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public override bool Equals(object other) {
          return Equals(other as ChargeLevel);
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public bool Equals(ChargeLevel other) {
          if (ReferenceEquals(other, null)) {
            return false;
          }
          if (ReferenceEquals(other, this)) {
            return true;
          }
          if (ChargeLevel_ != other.ChargeLevel_) return false;
          if (EstimatedTimeToChargeLEV1 != other.EstimatedTimeToChargeLEV1) return false;
          if (EstimatedTimeToChargeLEV2 != other.EstimatedTimeToChargeLEV2) return false;
          if (IntEstimatedTimeToChargeLEV1 != other.IntEstimatedTimeToChargeLEV1) return false;
          if (IntEstimatedTimeToChargeLEV2 != other.IntEstimatedTimeToChargeLEV2) return false;
          return true;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public override int GetHashCode() {
          int hash = 1;
          if (ChargeLevel_ != 0) hash ^= ChargeLevel_.GetHashCode();
          if (EstimatedTimeToChargeLEV1.Length != 0) hash ^= EstimatedTimeToChargeLEV1.GetHashCode();
          if (EstimatedTimeToChargeLEV2.Length != 0) hash ^= EstimatedTimeToChargeLEV2.GetHashCode();
          if (IntEstimatedTimeToChargeLEV1 != 0) hash ^= IntEstimatedTimeToChargeLEV1.GetHashCode();
          if (IntEstimatedTimeToChargeLEV2 != 0) hash ^= IntEstimatedTimeToChargeLEV2.GetHashCode();
          return hash;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public override string ToString() {
          return pb::JsonFormatter.ToDiagnosticString(this);
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public void WriteTo(pb::CodedOutputStream output) {
          if (ChargeLevel_ != 0) {
            output.WriteRawTag(16);
            output.WriteEnum((int) ChargeLevel_);
          }
          if (EstimatedTimeToChargeLEV1.Length != 0) {
            output.WriteRawTag(26);
            output.WriteString(EstimatedTimeToChargeLEV1);
          }
          if (EstimatedTimeToChargeLEV2.Length != 0) {
            output.WriteRawTag(34);
            output.WriteString(EstimatedTimeToChargeLEV2);
          }
          if (IntEstimatedTimeToChargeLEV1 != 0) {
            output.WriteRawTag(40);
            output.WriteInt32(IntEstimatedTimeToChargeLEV1);
          }
          if (IntEstimatedTimeToChargeLEV2 != 0) {
            output.WriteRawTag(48);
            output.WriteInt32(IntEstimatedTimeToChargeLEV2);
          }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public int CalculateSize() {
          int size = 0;
          if (ChargeLevel_ != 0) {
            size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ChargeLevel_);
          }
          if (EstimatedTimeToChargeLEV1.Length != 0) {
            size += 1 + pb::CodedOutputStream.ComputeStringSize(EstimatedTimeToChargeLEV1);
          }
          if (EstimatedTimeToChargeLEV2.Length != 0) {
            size += 1 + pb::CodedOutputStream.ComputeStringSize(EstimatedTimeToChargeLEV2);
          }
          if (IntEstimatedTimeToChargeLEV1 != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(IntEstimatedTimeToChargeLEV1);
          }
          if (IntEstimatedTimeToChargeLEV2 != 0) {
            size += 1 + pb::CodedOutputStream.ComputeInt32Size(IntEstimatedTimeToChargeLEV2);
          }
          return size;
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public void MergeFrom(ChargeLevel other) {
          if (other == null) {
            return;
          }
          if (other.ChargeLevel_ != 0) {
            ChargeLevel_ = other.ChargeLevel_;
          }
          if (other.EstimatedTimeToChargeLEV1.Length != 0) {
            EstimatedTimeToChargeLEV1 = other.EstimatedTimeToChargeLEV1;
          }
          if (other.EstimatedTimeToChargeLEV2.Length != 0) {
            EstimatedTimeToChargeLEV2 = other.EstimatedTimeToChargeLEV2;
          }
          if (other.IntEstimatedTimeToChargeLEV1 != 0) {
            IntEstimatedTimeToChargeLEV1 = other.IntEstimatedTimeToChargeLEV1;
          }
          if (other.IntEstimatedTimeToChargeLEV2 != 0) {
            IntEstimatedTimeToChargeLEV2 = other.IntEstimatedTimeToChargeLEV2;
          }
        }

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public void MergeFrom(pb::CodedInputStream input) {
          uint tag;
          while ((tag = input.ReadTag()) != 0) {
            switch(tag) {
              default:
                input.SkipLastField();
                break;
              case 16: {
                chargeLevel_ = (global::Com.Fca.Uconnect.Global.ChargeDataPublish.Types.VoltageEnum) input.ReadEnum();
                break;
              }
              case 26: {
                EstimatedTimeToChargeLEV1 = input.ReadString();
                break;
              }
              case 34: {
                EstimatedTimeToChargeLEV2 = input.ReadString();
                break;
              }
              case 40: {
                IntEstimatedTimeToChargeLEV1 = input.ReadInt32();
                break;
              }
              case 48: {
                IntEstimatedTimeToChargeLEV2 = input.ReadInt32();
                break;
              }
            }
          }
        }

      }

    }
    #endregion

  }

  public sealed partial class UpdateChargeSchedule : pb::IMessage<UpdateChargeSchedule> {
    private static readonly pb::MessageParser<UpdateChargeSchedule> _parser = new pb::MessageParser<UpdateChargeSchedule>(() => new UpdateChargeSchedule());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<UpdateChargeSchedule> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Com.Fca.Uconnect.Global.GlobalUconnectExtPHEVReflection.Descriptor.MessageTypes[4]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public UpdateChargeSchedule() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public UpdateChargeSchedule(UpdateChargeSchedule other) : this() {
      updatedChargeSchedules_ = other.updatedChargeSchedules_.Clone();
      updateChargeShedulesV2_ = other.updateChargeShedulesV2_.Clone();
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public UpdateChargeSchedule Clone() {
      return new UpdateChargeSchedule(this);
    }

    /// <summary>Field number for the "updatedChargeSchedules" field.</summary>
    public const int UpdatedChargeSchedulesFieldNumber = 1;
    private static readonly pb::FieldCodec<global::Com.Fca.Uconnect.Global.ChargeSchedule> _repeated_updatedChargeSchedules_codec
        = pb::FieldCodec.ForMessage(10, global::Com.Fca.Uconnect.Global.ChargeSchedule.Parser);
    private readonly pbc::RepeatedField<global::Com.Fca.Uconnect.Global.ChargeSchedule> updatedChargeSchedules_ = new pbc::RepeatedField<global::Com.Fca.Uconnect.Global.ChargeSchedule>();
    /// <summary>
    //// Used for the RU and K8 for 2019.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Com.Fca.Uconnect.Global.ChargeSchedule> UpdatedChargeSchedules {
      get { return updatedChargeSchedules_; }
    }

    /// <summary>Field number for the "updateChargeShedulesV2" field.</summary>
    public const int UpdateChargeShedulesV2FieldNumber = 2;
    private static readonly pb::FieldCodec<global::Com.Fca.Uconnect.Global.ChargeScheduleV2> _repeated_updateChargeShedulesV2_codec
        = pb::FieldCodec.ForMessage(18, global::Com.Fca.Uconnect.Global.ChargeScheduleV2.Parser);
    private readonly pbc::RepeatedField<global::Com.Fca.Uconnect.Global.ChargeScheduleV2> updateChargeShedulesV2_ = new pbc::RepeatedField<global::Com.Fca.Uconnect.Global.ChargeScheduleV2>();
    /// <summary>
    //// Used for Charge Schedules for 520 and after.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Com.Fca.Uconnect.Global.ChargeScheduleV2> UpdateChargeShedulesV2 {
      get { return updateChargeShedulesV2_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as UpdateChargeSchedule);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(UpdateChargeSchedule other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!updatedChargeSchedules_.Equals(other.updatedChargeSchedules_)) return false;
      if(!updateChargeShedulesV2_.Equals(other.updateChargeShedulesV2_)) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= updatedChargeSchedules_.GetHashCode();
      hash ^= updateChargeShedulesV2_.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      updatedChargeSchedules_.WriteTo(output, _repeated_updatedChargeSchedules_codec);
      updateChargeShedulesV2_.WriteTo(output, _repeated_updateChargeShedulesV2_codec);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += updatedChargeSchedules_.CalculateSize(_repeated_updatedChargeSchedules_codec);
      size += updateChargeShedulesV2_.CalculateSize(_repeated_updateChargeShedulesV2_codec);
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(UpdateChargeSchedule other) {
      if (other == null) {
        return;
      }
      updatedChargeSchedules_.Add(other.updatedChargeSchedules_);
      updateChargeShedulesV2_.Add(other.updateChargeShedulesV2_);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            updatedChargeSchedules_.AddEntriesFrom(input, _repeated_updatedChargeSchedules_codec);
            break;
          }
          case 18: {
            updateChargeShedulesV2_.AddEntriesFrom(input, _repeated_updateChargeShedulesV2_codec);
            break;
          }
        }
      }
    }

  }

  public sealed partial class ChargeScheduleV2 : pb::IMessage<ChargeScheduleV2> {
    private static readonly pb::MessageParser<ChargeScheduleV2> _parser = new pb::MessageParser<ChargeScheduleV2>(() => new ChargeScheduleV2());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ChargeScheduleV2> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Com.Fca.Uconnect.Global.GlobalUconnectExtPHEVReflection.Descriptor.MessageTypes[5]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeScheduleV2() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeScheduleV2(ChargeScheduleV2 other) : this() {
      enableScheduleType_ = other.enableScheduleType_;
      scheduleType_ = other.scheduleType_;
      startTime_ = other.startTime_;
      endTime_ = other.endTime_;
      chargeToFull_ = other.chargeToFull_;
      cabinPriority_ = other.cabinPriority_;
      ScheduledDays = other.scheduledDays_ != null ? other.ScheduledDays.Clone() : null;
      repeatSchedule_ = other.repeatSchedule_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeScheduleV2 Clone() {
      return new ChargeScheduleV2(this);
    }

    /// <summary>Field number for the "EnableScheduleType" field.</summary>
    public const int EnableScheduleTypeFieldNumber = 1;
    private bool enableScheduleType_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool EnableScheduleType {
      get { return enableScheduleType_; }
      set {
        enableScheduleType_ = value;
      }
    }

    /// <summary>Field number for the "scheduleType" field.</summary>
    public const int ScheduleTypeFieldNumber = 2;
    private global::Com.Fca.Uconnect.Global.ChargeScheduleV2.Types.ScheduleType scheduleType_ = 0;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.ChargeScheduleV2.Types.ScheduleType ScheduleType {
      get { return scheduleType_; }
      set {
        scheduleType_ = value;
      }
    }

    /// <summary>Field number for the "StartTime" field.</summary>
    public const int StartTimeFieldNumber = 3;
    private int startTime_;
    /// <summary>
    //// follows HH:MM starting at 00:00. In example integer 530 would translate to 05:30 hours.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int StartTime {
      get { return startTime_; }
      set {
        startTime_ = value;
      }
    }

    /// <summary>Field number for the "EndTime" field.</summary>
    public const int EndTimeFieldNumber = 4;
    private int endTime_;
    /// <summary>
    //// follows HH:MM starting at 00:00 - not required if ChargeToFull is True or if This is a climate schedule. In example integer 1030 would translate to 10:30 hours
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int EndTime {
      get { return endTime_; }
      set {
        endTime_ = value;
      }
    }

    /// <summary>Field number for the "ChargeToFull" field.</summary>
    public const int ChargeToFullFieldNumber = 5;
    private bool chargeToFull_;
    /// <summary>
    /// Used only for ChargeSchedules
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool ChargeToFull {
      get { return chargeToFull_; }
      set {
        chargeToFull_ = value;
      }
    }

    /// <summary>Field number for the "CabinPriority" field.</summary>
    public const int CabinPriorityFieldNumber = 6;
    private bool cabinPriority_;
    /// <summary>
    /// Used only for Climate Schedules
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool CabinPriority {
      get { return cabinPriority_; }
      set {
        cabinPriority_ = value;
      }
    }

    /// <summary>Field number for the "scheduledDays" field.</summary>
    public const int ScheduledDaysFieldNumber = 7;
    private global::Com.Fca.Uconnect.Global.Days scheduledDays_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.Days ScheduledDays {
      get { return scheduledDays_; }
      set {
        scheduledDays_ = value;
      }
    }

    /// <summary>Field number for the "RepeatSchedule" field.</summary>
    public const int RepeatScheduleFieldNumber = 8;
    private bool repeatSchedule_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool RepeatSchedule {
      get { return repeatSchedule_; }
      set {
        repeatSchedule_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ChargeScheduleV2);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ChargeScheduleV2 other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (EnableScheduleType != other.EnableScheduleType) return false;
      if (ScheduleType != other.ScheduleType) return false;
      if (StartTime != other.StartTime) return false;
      if (EndTime != other.EndTime) return false;
      if (ChargeToFull != other.ChargeToFull) return false;
      if (CabinPriority != other.CabinPriority) return false;
      if (!object.Equals(ScheduledDays, other.ScheduledDays)) return false;
      if (RepeatSchedule != other.RepeatSchedule) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (EnableScheduleType != false) hash ^= EnableScheduleType.GetHashCode();
      if (ScheduleType != 0) hash ^= ScheduleType.GetHashCode();
      if (StartTime != 0) hash ^= StartTime.GetHashCode();
      if (EndTime != 0) hash ^= EndTime.GetHashCode();
      if (ChargeToFull != false) hash ^= ChargeToFull.GetHashCode();
      if (CabinPriority != false) hash ^= CabinPriority.GetHashCode();
      if (scheduledDays_ != null) hash ^= ScheduledDays.GetHashCode();
      if (RepeatSchedule != false) hash ^= RepeatSchedule.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (EnableScheduleType != false) {
        output.WriteRawTag(8);
        output.WriteBool(EnableScheduleType);
      }
      if (ScheduleType != 0) {
        output.WriteRawTag(16);
        output.WriteEnum((int) ScheduleType);
      }
      if (StartTime != 0) {
        output.WriteRawTag(24);
        output.WriteInt32(StartTime);
      }
      if (EndTime != 0) {
        output.WriteRawTag(32);
        output.WriteInt32(EndTime);
      }
      if (ChargeToFull != false) {
        output.WriteRawTag(40);
        output.WriteBool(ChargeToFull);
      }
      if (CabinPriority != false) {
        output.WriteRawTag(48);
        output.WriteBool(CabinPriority);
      }
      if (scheduledDays_ != null) {
        output.WriteRawTag(58);
        output.WriteMessage(ScheduledDays);
      }
      if (RepeatSchedule != false) {
        output.WriteRawTag(64);
        output.WriteBool(RepeatSchedule);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (EnableScheduleType != false) {
        size += 1 + 1;
      }
      if (ScheduleType != 0) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ScheduleType);
      }
      if (StartTime != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(StartTime);
      }
      if (EndTime != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(EndTime);
      }
      if (ChargeToFull != false) {
        size += 1 + 1;
      }
      if (CabinPriority != false) {
        size += 1 + 1;
      }
      if (scheduledDays_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(ScheduledDays);
      }
      if (RepeatSchedule != false) {
        size += 1 + 1;
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ChargeScheduleV2 other) {
      if (other == null) {
        return;
      }
      if (other.EnableScheduleType != false) {
        EnableScheduleType = other.EnableScheduleType;
      }
      if (other.ScheduleType != 0) {
        ScheduleType = other.ScheduleType;
      }
      if (other.StartTime != 0) {
        StartTime = other.StartTime;
      }
      if (other.EndTime != 0) {
        EndTime = other.EndTime;
      }
      if (other.ChargeToFull != false) {
        ChargeToFull = other.ChargeToFull;
      }
      if (other.CabinPriority != false) {
        CabinPriority = other.CabinPriority;
      }
      if (other.scheduledDays_ != null) {
        if (scheduledDays_ == null) {
          scheduledDays_ = new global::Com.Fca.Uconnect.Global.Days();
        }
        ScheduledDays.MergeFrom(other.ScheduledDays);
      }
      if (other.RepeatSchedule != false) {
        RepeatSchedule = other.RepeatSchedule;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            EnableScheduleType = input.ReadBool();
            break;
          }
          case 16: {
            scheduleType_ = (global::Com.Fca.Uconnect.Global.ChargeScheduleV2.Types.ScheduleType) input.ReadEnum();
            break;
          }
          case 24: {
            StartTime = input.ReadInt32();
            break;
          }
          case 32: {
            EndTime = input.ReadInt32();
            break;
          }
          case 40: {
            ChargeToFull = input.ReadBool();
            break;
          }
          case 48: {
            CabinPriority = input.ReadBool();
            break;
          }
          case 58: {
            if (scheduledDays_ == null) {
              scheduledDays_ = new global::Com.Fca.Uconnect.Global.Days();
            }
            input.ReadMessage(scheduledDays_);
            break;
          }
          case 64: {
            RepeatSchedule = input.ReadBool();
            break;
          }
        }
      }
    }

    #region Nested types
    /// <summary>Container for nested types declared in the ChargeScheduleV2 message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static partial class Types {
      public enum ScheduleType {
        [pbr::OriginalName("NONE")] None = 0,
        [pbr::OriginalName("CHARGE")] Charge = 1,
        [pbr::OriginalName("CLIMATE")] Climate = 2,
      }

    }
    #endregion

  }

  public sealed partial class Days : pb::IMessage<Days> {
    private static readonly pb::MessageParser<Days> _parser = new pb::MessageParser<Days>(() => new Days());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<Days> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Com.Fca.Uconnect.Global.GlobalUconnectExtPHEVReflection.Descriptor.MessageTypes[6]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Days() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Days(Days other) : this() {
      isSunday_ = other.isSunday_;
      isMonday_ = other.isMonday_;
      isTuesday_ = other.isTuesday_;
      isWednesday_ = other.isWednesday_;
      isThursday_ = other.isThursday_;
      isFriday_ = other.isFriday_;
      isSaturday_ = other.isSaturday_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Days Clone() {
      return new Days(this);
    }

    /// <summary>Field number for the "isSunday" field.</summary>
    public const int IsSundayFieldNumber = 1;
    private bool isSunday_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool IsSunday {
      get { return isSunday_; }
      set {
        isSunday_ = value;
      }
    }

    /// <summary>Field number for the "isMonday" field.</summary>
    public const int IsMondayFieldNumber = 2;
    private bool isMonday_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool IsMonday {
      get { return isMonday_; }
      set {
        isMonday_ = value;
      }
    }

    /// <summary>Field number for the "isTuesday" field.</summary>
    public const int IsTuesdayFieldNumber = 3;
    private bool isTuesday_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool IsTuesday {
      get { return isTuesday_; }
      set {
        isTuesday_ = value;
      }
    }

    /// <summary>Field number for the "isWednesday" field.</summary>
    public const int IsWednesdayFieldNumber = 4;
    private bool isWednesday_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool IsWednesday {
      get { return isWednesday_; }
      set {
        isWednesday_ = value;
      }
    }

    /// <summary>Field number for the "isThursday" field.</summary>
    public const int IsThursdayFieldNumber = 5;
    private bool isThursday_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool IsThursday {
      get { return isThursday_; }
      set {
        isThursday_ = value;
      }
    }

    /// <summary>Field number for the "isFriday" field.</summary>
    public const int IsFridayFieldNumber = 6;
    private bool isFriday_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool IsFriday {
      get { return isFriday_; }
      set {
        isFriday_ = value;
      }
    }

    /// <summary>Field number for the "isSaturday" field.</summary>
    public const int IsSaturdayFieldNumber = 7;
    private bool isSaturday_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool IsSaturday {
      get { return isSaturday_; }
      set {
        isSaturday_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as Days);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(Days other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (IsSunday != other.IsSunday) return false;
      if (IsMonday != other.IsMonday) return false;
      if (IsTuesday != other.IsTuesday) return false;
      if (IsWednesday != other.IsWednesday) return false;
      if (IsThursday != other.IsThursday) return false;
      if (IsFriday != other.IsFriday) return false;
      if (IsSaturday != other.IsSaturday) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (IsSunday != false) hash ^= IsSunday.GetHashCode();
      if (IsMonday != false) hash ^= IsMonday.GetHashCode();
      if (IsTuesday != false) hash ^= IsTuesday.GetHashCode();
      if (IsWednesday != false) hash ^= IsWednesday.GetHashCode();
      if (IsThursday != false) hash ^= IsThursday.GetHashCode();
      if (IsFriday != false) hash ^= IsFriday.GetHashCode();
      if (IsSaturday != false) hash ^= IsSaturday.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (IsSunday != false) {
        output.WriteRawTag(8);
        output.WriteBool(IsSunday);
      }
      if (IsMonday != false) {
        output.WriteRawTag(16);
        output.WriteBool(IsMonday);
      }
      if (IsTuesday != false) {
        output.WriteRawTag(24);
        output.WriteBool(IsTuesday);
      }
      if (IsWednesday != false) {
        output.WriteRawTag(32);
        output.WriteBool(IsWednesday);
      }
      if (IsThursday != false) {
        output.WriteRawTag(40);
        output.WriteBool(IsThursday);
      }
      if (IsFriday != false) {
        output.WriteRawTag(48);
        output.WriteBool(IsFriday);
      }
      if (IsSaturday != false) {
        output.WriteRawTag(56);
        output.WriteBool(IsSaturday);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (IsSunday != false) {
        size += 1 + 1;
      }
      if (IsMonday != false) {
        size += 1 + 1;
      }
      if (IsTuesday != false) {
        size += 1 + 1;
      }
      if (IsWednesday != false) {
        size += 1 + 1;
      }
      if (IsThursday != false) {
        size += 1 + 1;
      }
      if (IsFriday != false) {
        size += 1 + 1;
      }
      if (IsSaturday != false) {
        size += 1 + 1;
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(Days other) {
      if (other == null) {
        return;
      }
      if (other.IsSunday != false) {
        IsSunday = other.IsSunday;
      }
      if (other.IsMonday != false) {
        IsMonday = other.IsMonday;
      }
      if (other.IsTuesday != false) {
        IsTuesday = other.IsTuesday;
      }
      if (other.IsWednesday != false) {
        IsWednesday = other.IsWednesday;
      }
      if (other.IsThursday != false) {
        IsThursday = other.IsThursday;
      }
      if (other.IsFriday != false) {
        IsFriday = other.IsFriday;
      }
      if (other.IsSaturday != false) {
        IsSaturday = other.IsSaturday;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            IsSunday = input.ReadBool();
            break;
          }
          case 16: {
            IsMonday = input.ReadBool();
            break;
          }
          case 24: {
            IsTuesday = input.ReadBool();
            break;
          }
          case 32: {
            IsWednesday = input.ReadBool();
            break;
          }
          case 40: {
            IsThursday = input.ReadBool();
            break;
          }
          case 48: {
            IsFriday = input.ReadBool();
            break;
          }
          case 56: {
            IsSaturday = input.ReadBool();
            break;
          }
        }
      }
    }

  }

  public sealed partial class ChargeSchedule : pb::IMessage<ChargeSchedule> {
    private static readonly pb::MessageParser<ChargeSchedule> _parser = new pb::MessageParser<ChargeSchedule>(() => new ChargeSchedule());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ChargeSchedule> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Com.Fca.Uconnect.Global.GlobalUconnectExtPHEVReflection.Descriptor.MessageTypes[7]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeSchedule() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeSchedule(ChargeSchedule other) : this() {
      enableChargeSchedule_ = other.enableChargeSchedule_;
      scheduleType_ = other.scheduleType_;
      chargeUntilFull_ = other.chargeUntilFull_;
      scheduleStartTime_ = other.scheduleStartTime_;
      scheduleEndTime_ = other.scheduleEndTime_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeSchedule Clone() {
      return new ChargeSchedule(this);
    }

    /// <summary>Field number for the "enableChargeSchedule" field.</summary>
    public const int EnableChargeScheduleFieldNumber = 5;
    private global::Com.Fca.Uconnect.Global.ChargeSchedule.Types.EnableChargeScheduleType enableChargeSchedule_ = 0;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.ChargeSchedule.Types.EnableChargeScheduleType EnableChargeSchedule {
      get { return enableChargeSchedule_; }
      set {
        enableChargeSchedule_ = value;
      }
    }

    /// <summary>Field number for the "scheduleType" field.</summary>
    public const int ScheduleTypeFieldNumber = 1;
    private global::Com.Fca.Uconnect.Global.ChargeSchedule.Types.ScheduleTypeEnum scheduleType_ = 0;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.ChargeSchedule.Types.ScheduleTypeEnum ScheduleType {
      get { return scheduleType_; }
      set {
        scheduleType_ = value;
      }
    }

    /// <summary>Field number for the "chargeUntilFull" field.</summary>
    public const int ChargeUntilFullFieldNumber = 2;
    private bool chargeUntilFull_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool ChargeUntilFull {
      get { return chargeUntilFull_; }
      set {
        chargeUntilFull_ = value;
      }
    }

    /// <summary>Field number for the "scheduleStartTime" field.</summary>
    public const int ScheduleStartTimeFieldNumber = 3;
    private int scheduleStartTime_;
    /// <summary>
    ////Expressed as 00:00 to 23:00. In example integer 530 would translate to 05:30 hours.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int ScheduleStartTime {
      get { return scheduleStartTime_; }
      set {
        scheduleStartTime_ = value;
      }
    }

    /// <summary>Field number for the "scheduleEndTime" field.</summary>
    public const int ScheduleEndTimeFieldNumber = 4;
    private int scheduleEndTime_;
    /// <summary>
    //// Expressed as 00:00 to 23:00. In example integer 1030 would translate to 10:30 hours
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int ScheduleEndTime {
      get { return scheduleEndTime_; }
      set {
        scheduleEndTime_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ChargeSchedule);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ChargeSchedule other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (EnableChargeSchedule != other.EnableChargeSchedule) return false;
      if (ScheduleType != other.ScheduleType) return false;
      if (ChargeUntilFull != other.ChargeUntilFull) return false;
      if (ScheduleStartTime != other.ScheduleStartTime) return false;
      if (ScheduleEndTime != other.ScheduleEndTime) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (EnableChargeSchedule != 0) hash ^= EnableChargeSchedule.GetHashCode();
      if (ScheduleType != 0) hash ^= ScheduleType.GetHashCode();
      if (ChargeUntilFull != false) hash ^= ChargeUntilFull.GetHashCode();
      if (ScheduleStartTime != 0) hash ^= ScheduleStartTime.GetHashCode();
      if (ScheduleEndTime != 0) hash ^= ScheduleEndTime.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (ScheduleType != 0) {
        output.WriteRawTag(8);
        output.WriteEnum((int) ScheduleType);
      }
      if (ChargeUntilFull != false) {
        output.WriteRawTag(16);
        output.WriteBool(ChargeUntilFull);
      }
      if (ScheduleStartTime != 0) {
        output.WriteRawTag(24);
        output.WriteInt32(ScheduleStartTime);
      }
      if (ScheduleEndTime != 0) {
        output.WriteRawTag(32);
        output.WriteInt32(ScheduleEndTime);
      }
      if (EnableChargeSchedule != 0) {
        output.WriteRawTag(40);
        output.WriteEnum((int) EnableChargeSchedule);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (EnableChargeSchedule != 0) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) EnableChargeSchedule);
      }
      if (ScheduleType != 0) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ScheduleType);
      }
      if (ChargeUntilFull != false) {
        size += 1 + 1;
      }
      if (ScheduleStartTime != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(ScheduleStartTime);
      }
      if (ScheduleEndTime != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(ScheduleEndTime);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ChargeSchedule other) {
      if (other == null) {
        return;
      }
      if (other.EnableChargeSchedule != 0) {
        EnableChargeSchedule = other.EnableChargeSchedule;
      }
      if (other.ScheduleType != 0) {
        ScheduleType = other.ScheduleType;
      }
      if (other.ChargeUntilFull != false) {
        ChargeUntilFull = other.ChargeUntilFull;
      }
      if (other.ScheduleStartTime != 0) {
        ScheduleStartTime = other.ScheduleStartTime;
      }
      if (other.ScheduleEndTime != 0) {
        ScheduleEndTime = other.ScheduleEndTime;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            scheduleType_ = (global::Com.Fca.Uconnect.Global.ChargeSchedule.Types.ScheduleTypeEnum) input.ReadEnum();
            break;
          }
          case 16: {
            ChargeUntilFull = input.ReadBool();
            break;
          }
          case 24: {
            ScheduleStartTime = input.ReadInt32();
            break;
          }
          case 32: {
            ScheduleEndTime = input.ReadInt32();
            break;
          }
          case 40: {
            enableChargeSchedule_ = (global::Com.Fca.Uconnect.Global.ChargeSchedule.Types.EnableChargeScheduleType) input.ReadEnum();
            break;
          }
        }
      }
    }

    #region Nested types
    /// <summary>Container for nested types declared in the ChargeSchedule message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static partial class Types {
      public enum ScheduleTypeEnum {
        [pbr::OriginalName("WEEKDAY")] Weekday = 0,
        [pbr::OriginalName("WEEKEND")] Weekend = 1,
      }

      public enum EnableChargeScheduleType {
        [pbr::OriginalName("DEFAULT")] Default = 0,
        [pbr::OriginalName("ENABLE_SCHEDULE")] EnableSchedule = 1,
        [pbr::OriginalName("DISABLE_SCHEDULE")] DisableSchedule = 2,
      }

    }
    #endregion

  }

  /// <summary>
  //// Expressed as percent of maximum current output for charge type
  /// </summary>
  public sealed partial class ChargePowerPreference : pb::IMessage<ChargePowerPreference> {
    private static readonly pb::MessageParser<ChargePowerPreference> _parser = new pb::MessageParser<ChargePowerPreference>(() => new ChargePowerPreference());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ChargePowerPreference> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Com.Fca.Uconnect.Global.GlobalUconnectExtPHEVReflection.Descriptor.MessageTypes[8]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargePowerPreference() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargePowerPreference(ChargePowerPreference other) : this() {
      preference_ = other.preference_;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargePowerPreference Clone() {
      return new ChargePowerPreference(this);
    }

    /// <summary>Field number for the "preference" field.</summary>
    public const int PreferenceFieldNumber = 1;
    private global::Com.Fca.Uconnect.Global.ChargePowerPreference.Types.PreferencesEnum preference_ = 0;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Com.Fca.Uconnect.Global.ChargePowerPreference.Types.PreferencesEnum Preference {
      get { return preference_; }
      set {
        preference_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ChargePowerPreference);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ChargePowerPreference other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Preference != other.Preference) return false;
      return true;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Preference != 0) hash ^= Preference.GetHashCode();
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Preference != 0) {
        output.WriteRawTag(8);
        output.WriteEnum((int) Preference);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Preference != 0) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Preference);
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ChargePowerPreference other) {
      if (other == null) {
        return;
      }
      if (other.Preference != 0) {
        Preference = other.Preference;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 8: {
            preference_ = (global::Com.Fca.Uconnect.Global.ChargePowerPreference.Types.PreferencesEnum) input.ReadEnum();
            break;
          }
        }
      }
    }

    #region Nested types
    /// <summary>Container for nested types declared in the ChargePowerPreference message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static partial class Types {
      public enum PreferencesEnum {
        [pbr::OriginalName("NOT_USED_VALUE")] NotUsedValue = 0,
        /// <summary>
        //// Low (20% max A)
        /// </summary>
        [pbr::OriginalName("LEVEL_ONE")] LevelOne = 1,
        /// <summary>
        //// Low+ (40% max A)
        /// </summary>
        [pbr::OriginalName("LEVEL_TWO")] LevelTwo = 2,
        /// <summary>
        //// Med (60% max A)
        /// </summary>
        [pbr::OriginalName("LEVEL_THREE")] LevelThree = 3,
        /// <summary>
        //// Med+ (80% max A)
        /// </summary>
        [pbr::OriginalName("LEVEL_FOUR")] LevelFour = 4,
        /// <summary>
        //// High (100% max A)
        /// </summary>
        [pbr::OriginalName("LEVEL_FIVE")] LevelFive = 5,
      }

    }
    #endregion

  }

  #endregion

}

#endregion Designer generated code
