// Copyright 2021 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.25.0-devel
// 	protoc        v3.6.1
// source: chromiumos/chromiumdash.proto

package chromiumos

import (
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// A single milestone according to chromium dash.
//
// Example message:
// {
//   final_beta_cut: "2021-01-12T00:00:00",
//   final_beta: "2021-01-13T00:00:00",
//   feature_freeze: "2020-10-30T00:00:00",
//   earliest_beta: "2020-12-03T00:00:00",
//   stable_refresh_first: "2021-02-02T00:00:00",
//   latest_beta: "2020-12-10T00:00:00",
//   owners: {
//     clank: "Krishna Govind",
//     bling: "Bindu Suvarna",
//     cros: "Marina Kazatcker",
//     desktop: "Srinivas Sista"
//   },
//   stable_cut: "2021-01-12T00:00:00",
//   stable_refresh_second: "2021-02-16T00:00:00",
//   mstone: 88,
//   late_stable_date: "2021-01-26T00:00:00",
//   stable_date: "2021-01-19T00:00:00",
//   ldaps: {
//     clank: "govind",
//     bling: "bindusuvarna",
//     cros: "marinakz",
//     desktop: "srinivassista "
//   },
//   earliest_beta_ios: "2020-11-17T00:00:00",
//   branch_point: "2020-11-12T00:00:00"
// }
type Milestone struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	FinalBetaCut       *timestamp.Timestamp `protobuf:"bytes,1,opt,name=final_beta_cut,json=finalBetaCut,proto3" json:"final_beta_cut,omitempty"`
	FinalBeta          *timestamp.Timestamp `protobuf:"bytes,2,opt,name=final_beta,json=finalBeta,proto3" json:"final_beta,omitempty"`
	FeatureFreeze      *timestamp.Timestamp `protobuf:"bytes,3,opt,name=feature_freeze,json=featureFreeze,proto3" json:"feature_freeze,omitempty"`
	EarliestBeta       *timestamp.Timestamp `protobuf:"bytes,4,opt,name=earliest_beta,json=earliestBeta,proto3" json:"earliest_beta,omitempty"`
	StableRefreshFirst *timestamp.Timestamp `protobuf:"bytes,5,opt,name=stable_refresh_first,json=stableRefreshFirst,proto3" json:"stable_refresh_first,omitempty"`
	LatestBeta         *timestamp.Timestamp `protobuf:"bytes,6,opt,name=latest_beta,json=latestBeta,proto3" json:"latest_beta,omitempty"`
	// This maps product portion to the owners real _name_, not 'ldap'.
	Owners              map[string]string    `protobuf:"bytes,7,rep,name=owners,proto3" json:"owners,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	StableCut           *timestamp.Timestamp `protobuf:"bytes,8,opt,name=stable_cut,json=stableCut,proto3" json:"stable_cut,omitempty"`
	StableRefreshSecond *timestamp.Timestamp `protobuf:"bytes,9,opt,name=stable_refresh_second,json=stableRefreshSecond,proto3" json:"stable_refresh_second,omitempty"`
	Mstone              int32                `protobuf:"varint,10,opt,name=mstone,proto3" json:"mstone,omitempty"`
	LateStableDate      *timestamp.Timestamp `protobuf:"bytes,11,opt,name=late_stable_date,json=lateStableDate,proto3" json:"late_stable_date,omitempty"`
	StableDate          *timestamp.Timestamp `protobuf:"bytes,12,opt,name=stable_date,json=stableDate,proto3" json:"stable_date,omitempty"`
	Ldaps               map[string]string    `protobuf:"bytes,13,rep,name=ldaps,proto3" json:"ldaps,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	EarliestBetaIos     *timestamp.Timestamp `protobuf:"bytes,14,opt,name=earliest_beta_ios,json=earliestBetaIos,proto3" json:"earliest_beta_ios,omitempty"`
	BranchPoint         *timestamp.Timestamp `protobuf:"bytes,15,opt,name=branch_point,json=branchPoint,proto3" json:"branch_point,omitempty"`
}

func (x *Milestone) Reset() {
	*x = Milestone{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_chromiumdash_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Milestone) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Milestone) ProtoMessage() {}

func (x *Milestone) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_chromiumdash_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Milestone.ProtoReflect.Descriptor instead.
func (*Milestone) Descriptor() ([]byte, []int) {
	return file_chromiumos_chromiumdash_proto_rawDescGZIP(), []int{0}
}

func (x *Milestone) GetFinalBetaCut() *timestamp.Timestamp {
	if x != nil {
		return x.FinalBetaCut
	}
	return nil
}

func (x *Milestone) GetFinalBeta() *timestamp.Timestamp {
	if x != nil {
		return x.FinalBeta
	}
	return nil
}

func (x *Milestone) GetFeatureFreeze() *timestamp.Timestamp {
	if x != nil {
		return x.FeatureFreeze
	}
	return nil
}

func (x *Milestone) GetEarliestBeta() *timestamp.Timestamp {
	if x != nil {
		return x.EarliestBeta
	}
	return nil
}

func (x *Milestone) GetStableRefreshFirst() *timestamp.Timestamp {
	if x != nil {
		return x.StableRefreshFirst
	}
	return nil
}

func (x *Milestone) GetLatestBeta() *timestamp.Timestamp {
	if x != nil {
		return x.LatestBeta
	}
	return nil
}

func (x *Milestone) GetOwners() map[string]string {
	if x != nil {
		return x.Owners
	}
	return nil
}

func (x *Milestone) GetStableCut() *timestamp.Timestamp {
	if x != nil {
		return x.StableCut
	}
	return nil
}

func (x *Milestone) GetStableRefreshSecond() *timestamp.Timestamp {
	if x != nil {
		return x.StableRefreshSecond
	}
	return nil
}

func (x *Milestone) GetMstone() int32 {
	if x != nil {
		return x.Mstone
	}
	return 0
}

func (x *Milestone) GetLateStableDate() *timestamp.Timestamp {
	if x != nil {
		return x.LateStableDate
	}
	return nil
}

func (x *Milestone) GetStableDate() *timestamp.Timestamp {
	if x != nil {
		return x.StableDate
	}
	return nil
}

func (x *Milestone) GetLdaps() map[string]string {
	if x != nil {
		return x.Ldaps
	}
	return nil
}

func (x *Milestone) GetEarliestBetaIos() *timestamp.Timestamp {
	if x != nil {
		return x.EarliestBetaIos
	}
	return nil
}

func (x *Milestone) GetBranchPoint() *timestamp.Timestamp {
	if x != nil {
		return x.BranchPoint
	}
	return nil
}

// A response to fetch_milestone_schedule.
// e.g. https://chromiumdash.appspot.com/fetch_milestone_schedule?mstone=78&n=10
//
// Example message:
// {
//   mstones: [
//      {
//        final_beta_cut:...
//        ..
//      },
//      {
//        ...
//      }
//   ]
// }
type FetchMilestoneScheduleResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Mstones []*Milestone `protobuf:"bytes,1,rep,name=mstones,proto3" json:"mstones,omitempty"`
}

func (x *FetchMilestoneScheduleResponse) Reset() {
	*x = FetchMilestoneScheduleResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_chromiumdash_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *FetchMilestoneScheduleResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*FetchMilestoneScheduleResponse) ProtoMessage() {}

func (x *FetchMilestoneScheduleResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_chromiumdash_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use FetchMilestoneScheduleResponse.ProtoReflect.Descriptor instead.
func (*FetchMilestoneScheduleResponse) Descriptor() ([]byte, []int) {
	return file_chromiumos_chromiumdash_proto_rawDescGZIP(), []int{1}
}

func (x *FetchMilestoneScheduleResponse) GetMstones() []*Milestone {
	if x != nil {
		return x.Mstones
	}
	return nil
}

var File_chromiumos_chromiumdash_proto protoreflect.FileDescriptor

var file_chromiumos_chromiumdash_proto_rawDesc = []byte{
	0x0a, 0x1d, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x64, 0x61, 0x73, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
	0x0a, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x1a, 0x1f, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d,
	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xac, 0x08, 0x0a,
	0x09, 0x4d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x66, 0x69,
	0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x65, 0x74, 0x61, 0x5f, 0x63, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c,
	0x66, 0x69, 0x6e, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x61, 0x43, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x0a,
	0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
	0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x66, 0x69,
	0x6e, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75,
	0x72, 0x65, 0x5f, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
	0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x66, 0x65, 0x61,
	0x74, 0x75, 0x72, 0x65, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x65, 0x61,
	0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x65,
	0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x42, 0x65, 0x74, 0x61, 0x12, 0x4c, 0x0a, 0x14, 0x73,
	0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x66, 0x69,
	0x72, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
	0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x12, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66,
	0x72, 0x65, 0x73, 0x68, 0x46, 0x69, 0x72, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x6c, 0x61, 0x74,
	0x65, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
	0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x6c, 0x61, 0x74, 0x65,
	0x73, 0x74, 0x42, 0x65, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73,
	0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2e, 0x4d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x2e, 0x4f, 0x77,
	0x6e, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72,
	0x73, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x74, 0x18,
	0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
	0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x74, 0x12, 0x4e, 0x0a, 0x15,
	0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x73,
	0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x13, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52,
	0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06,
	0x6d, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x73,
	0x74, 0x6f, 0x6e, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61,
	0x62, 0x6c, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
	0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x6c, 0x61, 0x74, 0x65,
	0x53, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x73, 0x74,
	0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
	0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x73, 0x74, 0x61,
	0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x05, 0x6c, 0x64, 0x61, 0x70, 0x73,
	0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2e, 0x4d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x2e, 0x4c, 0x64,
	0x61, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6c, 0x64, 0x61, 0x70, 0x73, 0x12,
	0x46, 0x0a, 0x11, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x74, 0x61,
	0x5f, 0x69, 0x6f, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74,
	0x42, 0x65, 0x74, 0x61, 0x49, 0x6f, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x62, 0x72, 0x61, 0x6e, 0x63,
	0x68, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
	0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x62, 0x72, 0x61, 0x6e, 0x63,
	0x68, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73,
	0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
	0x01, 0x1a, 0x38, 0x0a, 0x0a, 0x4c, 0x64, 0x61, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
	0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
	0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x51, 0x0a, 0x1e, 0x46,
	0x65, 0x74, 0x63, 0x68, 0x4d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x53, 0x63, 0x68,
	0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a,
	0x07, 0x6d, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x4d, 0x69, 0x6c, 0x65,
	0x73, 0x74, 0x6f, 0x6e, 0x65, 0x52, 0x07, 0x6d, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x73, 0x42, 0x36,
	0x5a, 0x34, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72,
	0x67, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x69, 0x6e, 0x66,
	0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_chromiumos_chromiumdash_proto_rawDescOnce sync.Once
	file_chromiumos_chromiumdash_proto_rawDescData = file_chromiumos_chromiumdash_proto_rawDesc
)

func file_chromiumos_chromiumdash_proto_rawDescGZIP() []byte {
	file_chromiumos_chromiumdash_proto_rawDescOnce.Do(func() {
		file_chromiumos_chromiumdash_proto_rawDescData = protoimpl.X.CompressGZIP(file_chromiumos_chromiumdash_proto_rawDescData)
	})
	return file_chromiumos_chromiumdash_proto_rawDescData
}

var file_chromiumos_chromiumdash_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_chromiumos_chromiumdash_proto_goTypes = []interface{}{
	(*Milestone)(nil),                      // 0: chromiumos.Milestone
	(*FetchMilestoneScheduleResponse)(nil), // 1: chromiumos.FetchMilestoneScheduleResponse
	nil,                                    // 2: chromiumos.Milestone.OwnersEntry
	nil,                                    // 3: chromiumos.Milestone.LdapsEntry
	(*timestamp.Timestamp)(nil),            // 4: google.protobuf.Timestamp
}
var file_chromiumos_chromiumdash_proto_depIdxs = []int32{
	4,  // 0: chromiumos.Milestone.final_beta_cut:type_name -> google.protobuf.Timestamp
	4,  // 1: chromiumos.Milestone.final_beta:type_name -> google.protobuf.Timestamp
	4,  // 2: chromiumos.Milestone.feature_freeze:type_name -> google.protobuf.Timestamp
	4,  // 3: chromiumos.Milestone.earliest_beta:type_name -> google.protobuf.Timestamp
	4,  // 4: chromiumos.Milestone.stable_refresh_first:type_name -> google.protobuf.Timestamp
	4,  // 5: chromiumos.Milestone.latest_beta:type_name -> google.protobuf.Timestamp
	2,  // 6: chromiumos.Milestone.owners:type_name -> chromiumos.Milestone.OwnersEntry
	4,  // 7: chromiumos.Milestone.stable_cut:type_name -> google.protobuf.Timestamp
	4,  // 8: chromiumos.Milestone.stable_refresh_second:type_name -> google.protobuf.Timestamp
	4,  // 9: chromiumos.Milestone.late_stable_date:type_name -> google.protobuf.Timestamp
	4,  // 10: chromiumos.Milestone.stable_date:type_name -> google.protobuf.Timestamp
	3,  // 11: chromiumos.Milestone.ldaps:type_name -> chromiumos.Milestone.LdapsEntry
	4,  // 12: chromiumos.Milestone.earliest_beta_ios:type_name -> google.protobuf.Timestamp
	4,  // 13: chromiumos.Milestone.branch_point:type_name -> google.protobuf.Timestamp
	0,  // 14: chromiumos.FetchMilestoneScheduleResponse.mstones:type_name -> chromiumos.Milestone
	15, // [15:15] is the sub-list for method output_type
	15, // [15:15] is the sub-list for method input_type
	15, // [15:15] is the sub-list for extension type_name
	15, // [15:15] is the sub-list for extension extendee
	0,  // [0:15] is the sub-list for field type_name
}

func init() { file_chromiumos_chromiumdash_proto_init() }
func file_chromiumos_chromiumdash_proto_init() {
	if File_chromiumos_chromiumdash_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_chromiumos_chromiumdash_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Milestone); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_chromiumdash_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FetchMilestoneScheduleResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_chromiumos_chromiumdash_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   4,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_chromiumos_chromiumdash_proto_goTypes,
		DependencyIndexes: file_chromiumos_chromiumdash_proto_depIdxs,
		MessageInfos:      file_chromiumos_chromiumdash_proto_msgTypes,
	}.Build()
	File_chromiumos_chromiumdash_proto = out.File
	file_chromiumos_chromiumdash_proto_rawDesc = nil
	file_chromiumos_chromiumdash_proto_goTypes = nil
	file_chromiumos_chromiumdash_proto_depIdxs = nil
}
