From 29cb6ac6318b8fa3e0193f69a086090e6ff95d08 Mon Sep 17 00:00:00 2001 From: davidgamez <1192523+davidgamez@users.noreply.github.com> Date: Mon, 6 Jul 2026 08:30:05 +0000 Subject: [PATCH 1/3] chore: sync gtfs-realtime.proto and regenerate all bindings --- golang/gtfs/gtfs-realtime.pb.go | 788 +++---- gtfs-realtime.proto | 13 +- .../google/transit/realtime/GtfsRealtime.java | 1939 +++++++++++++---- nodejs/gtfs-realtime.d.ts | 12 + nodejs/gtfs-realtime.js | 92 + python/google/transit/gtfs_realtime_pb2.py | 98 +- python/google/transit/gtfs_realtime_pb2.pyi | 8 +- ruby/lib/google/transit/gtfs-realtime.pb.rb | 4 +- 8 files changed, 2132 insertions(+), 822 deletions(-) diff --git a/golang/gtfs/gtfs-realtime.pb.go b/golang/gtfs/gtfs-realtime.pb.go index 797c4ae..5caf848 100644 --- a/golang/gtfs/gtfs-realtime.pb.go +++ b/golang/gtfs/gtfs-realtime.pb.go @@ -1589,7 +1589,18 @@ type Alert struct { // Time when the alert should be shown to the user. If missing, the // alert will be shown as long as it appears in the feed. // If multiple ranges are given, the alert will be shown during all of them. + // Should not be used - for backwards-compatibility only. + // + // Deprecated: Do not use. ActivePeriod []*TimeRange `protobuf:"bytes,1,rep,name=active_period,json=activePeriod" json:"active_period,omitempty"` + // Time when the alert should be shown to the user strictly for informative reasons. + // If missing, the consuming application can decide when it's appropriate to be shown. + // If multiple ranges are given, the alert will be shown during all of them. + CommunicationPeriod []*TimeRange `protobuf:"bytes,2,rep,name=communication_period,json=communicationPeriod" json:"communication_period,omitempty"` + // Time when the services are affected by the alert. If communication_period is specified, + // every time interval in impact_period must be fully contained within at least + // one time interval of communication_period. + ImpactPeriod []*TimeRange `protobuf:"bytes,3,rep,name=impact_period,json=impactPeriod" json:"impact_period,omitempty"` // Entities whose users we should notify of this alert. InformedEntity []*EntitySelector `protobuf:"bytes,5,rep,name=informed_entity,json=informedEntity" json:"informed_entity,omitempty"` Cause *Alert_Cause `protobuf:"varint,6,opt,name=cause,enum=transit_realtime.Alert_Cause,def=1" json:"cause,omitempty"` @@ -1661,6 +1672,7 @@ func (*Alert) Descriptor() ([]byte, []int) { return file_gtfs_realtime_proto_rawDescGZIP(), []int{5} } +// Deprecated: Do not use. func (x *Alert) GetActivePeriod() []*TimeRange { if x != nil { return x.ActivePeriod @@ -1668,6 +1680,20 @@ func (x *Alert) GetActivePeriod() []*TimeRange { return nil } +func (x *Alert) GetCommunicationPeriod() []*TimeRange { + if x != nil { + return x.CommunicationPeriod + } + return nil +} + +func (x *Alert) GetImpactPeriod() []*TimeRange { + if x != nil { + return x.ImpactPeriod + } + return nil +} + func (x *Alert) GetInformedEntity() []*EntitySelector { if x != nil { return x.InformedEntity @@ -3968,349 +3994,359 @@ var file_gtfs_realtime_proto_rawDesc = []byte{ 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x07, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x08, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, - 0xb7, 0x0c, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x40, 0x0a, 0x0d, 0x61, 0x63, 0x74, + 0xcd, 0x0d, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x12, 0x44, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0c, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x49, 0x0a, 0x0f, 0x69, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, - 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0e, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, - 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x2e, 0x43, - 0x61, 0x75, 0x73, 0x65, 0x3a, 0x0d, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x41, - 0x55, 0x53, 0x45, 0x52, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x41, 0x6c, - 0x65, 0x72, 0x74, 0x2e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x3a, 0x0e, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x5f, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x52, 0x06, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x12, 0x34, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x43, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x02, 0x18, + 0x01, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, + 0x4e, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x4d, 0x0a, - 0x10, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x65, 0x78, - 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, - 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x78, 0x74, 0x12, 0x4a, 0x0a, 0x0f, - 0x74, 0x74, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, - 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, - 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0d, 0x74, 0x74, 0x73, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x54, 0x0a, 0x14, 0x74, 0x74, 0x73, 0x5f, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x65, 0x78, 0x74, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, - 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, - 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x74, 0x74, 0x73, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x78, 0x74, 0x12, 0x5e, - 0x0a, 0x0e, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, - 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x2e, - 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x10, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x52, - 0x0d, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x37, - 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x58, 0x0a, 0x16, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x5f, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x65, 0x78, - 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, - 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x14, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, 0x65, 0x78, - 0x74, 0x12, 0x45, 0x0a, 0x0c, 0x63, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, - 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x63, 0x61, 0x75, - 0x73, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x47, 0x0a, 0x0d, 0x65, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x22, 0xeb, 0x01, 0x0a, 0x05, 0x43, 0x61, 0x75, 0x73, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x41, 0x55, 0x53, 0x45, 0x10, 0x01, 0x12, 0x0f, - 0x0a, 0x0b, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x43, 0x41, 0x55, 0x53, 0x45, 0x10, 0x02, 0x12, - 0x15, 0x0a, 0x11, 0x54, 0x45, 0x43, 0x48, 0x4e, 0x49, 0x43, 0x41, 0x4c, 0x5f, 0x50, 0x52, 0x4f, - 0x42, 0x4c, 0x45, 0x4d, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4b, 0x45, - 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x4d, 0x4f, 0x4e, 0x53, 0x54, 0x52, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x43, 0x43, 0x49, 0x44, 0x45, 0x4e, - 0x54, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x4f, 0x4c, 0x49, 0x44, 0x41, 0x59, 0x10, 0x07, - 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x45, 0x41, 0x54, 0x48, 0x45, 0x52, 0x10, 0x08, 0x12, 0x0f, 0x0a, - 0x0b, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x09, 0x12, 0x10, - 0x0a, 0x0c, 0x43, 0x4f, 0x4e, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x0a, - 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, - 0x49, 0x54, 0x59, 0x10, 0x0b, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x44, 0x49, 0x43, 0x41, 0x4c, - 0x5f, 0x45, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x4e, 0x43, 0x59, 0x10, 0x0c, 0x12, 0x11, 0x0a, 0x0d, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0x0d, 0x22, - 0xdd, 0x01, 0x0a, 0x06, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x4f, - 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x45, - 0x44, 0x55, 0x43, 0x45, 0x44, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x02, 0x12, - 0x16, 0x0a, 0x12, 0x53, 0x49, 0x47, 0x4e, 0x49, 0x46, 0x49, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x44, - 0x45, 0x4c, 0x41, 0x59, 0x53, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x54, 0x4f, 0x55, - 0x52, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x44, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x41, - 0x4c, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x05, 0x12, 0x14, 0x0a, 0x10, 0x4d, - 0x4f, 0x44, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, - 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x45, 0x46, 0x46, 0x45, 0x43, - 0x54, 0x10, 0x07, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x45, - 0x46, 0x46, 0x45, 0x43, 0x54, 0x10, 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x4f, 0x50, 0x5f, - 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x09, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x5f, 0x45, 0x46, - 0x46, 0x45, 0x43, 0x54, 0x10, 0x0a, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, - 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x49, 0x53, 0x53, 0x55, 0x45, 0x10, 0x0b, 0x22, - 0x48, 0x0a, 0x0d, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x45, 0x56, 0x45, - 0x52, 0x49, 0x54, 0x59, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, - 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0a, 0x0a, - 0x06, 0x53, 0x45, 0x56, 0x45, 0x52, 0x45, 0x10, 0x04, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, - 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, 0x43, 0x0a, 0x09, 0x54, 0x69, 0x6d, - 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x2a, 0x06, - 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, 0xa0, - 0x01, 0x0a, 0x08, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, - 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x02, 0x52, 0x08, 0x6c, - 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, - 0x74, 0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x02, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, - 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x62, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x12, - 0x1a, 0x0a, 0x08, 0x6f, 0x64, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x08, 0x6f, 0x64, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x70, 0x65, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x73, 0x70, 0x65, 0x65, - 0x64, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, - 0x4e, 0x22, 0xc6, 0x05, 0x0a, 0x0e, 0x54, 0x72, 0x69, 0x70, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x70, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x72, 0x69, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x6a, 0x0a, 0x15, 0x73, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, - 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x69, 0x70, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x52, - 0x14, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x68, 0x69, 0x70, 0x12, 0x5a, 0x0a, 0x0d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x5f, 0x74, 0x72, 0x69, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x54, 0x72, 0x69, 0x70, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x4d, - 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x72, 0x69, 0x70, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x52, 0x0c, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x72, 0x69, - 0x70, 0x1a, 0xb9, 0x01, 0x0a, 0x14, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x72, - 0x69, 0x70, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x6f, - 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x5f, 0x74, 0x72, 0x69, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x72, 0x69, 0x70, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x2a, 0x06, 0x08, - 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, 0x8a, 0x01, - 0x0a, 0x14, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, - 0x4c, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x05, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x01, - 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, - 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, - 0x44, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x4d, 0x45, - 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x55, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, - 0x45, 0x44, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, - 0x07, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x45, 0x57, 0x10, 0x08, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, - 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, 0xd2, 0x02, 0x0a, 0x11, 0x56, - 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x50, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x77, 0x0a, 0x15, 0x77, - 0x68, 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x72, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x56, 0x65, - 0x68, 0x69, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, - 0x57, 0x68, 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x3a, 0x08, 0x4e, 0x4f, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x52, 0x14, - 0x77, 0x68, 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x22, 0x69, 0x0a, 0x14, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, - 0x69, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x0c, 0x0a, 0x08, - 0x4e, 0x4f, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x57, 0x48, 0x45, 0x45, 0x4c, - 0x43, 0x48, 0x41, 0x49, 0x52, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x49, 0x42, 0x4c, 0x45, - 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x57, 0x48, 0x45, 0x45, 0x4c, 0x43, 0x48, 0x41, 0x49, 0x52, - 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x03, 0x2a, - 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, - 0xe9, 0x01, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x74, 0x72, 0x69, - 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, - 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x69, 0x70, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x74, 0x72, 0x69, 0x70, 0x12, - 0x17, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x2a, 0x06, 0x08, 0xe8, 0x07, - 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, 0xc3, 0x01, 0x0a, 0x10, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x12, 0x50, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, + 0x40, 0x0a, 0x0d, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, + 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, + 0x6e, 0x67, 0x65, 0x52, 0x0c, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x12, 0x49, 0x0a, 0x0f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0e, 0x69, 0x6e, + 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x05, + 0x63, 0x61, 0x75, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x41, + 0x6c, 0x65, 0x72, 0x74, 0x2e, 0x43, 0x61, 0x75, 0x73, 0x65, 0x3a, 0x0d, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x41, 0x55, 0x53, 0x45, 0x52, 0x05, 0x63, 0x61, 0x75, 0x73, 0x65, + 0x12, 0x46, 0x0a, 0x06, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1e, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x2e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, + 0x3a, 0x0e, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, + 0x52, 0x06, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x12, 0x34, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, - 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x1a, 0x4d, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, - 0x65, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, - 0x4e, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, - 0x4e, 0x22, 0xeb, 0x01, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x64, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x52, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x1a, 0x6d, 0x0a, 0x0e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, - 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x2a, - 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x2a, - 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, - 0x5d, 0x0a, 0x05, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x70, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x68, 0x61, 0x70, - 0x65, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x70, - 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, - 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x2a, 0x06, - 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, 0xa2, - 0x06, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x6f, 0x70, 0x49, 0x64, - 0x12, 0x3f, 0x0a, 0x09, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, + 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x43, + 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, - 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, - 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, - 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x0d, 0x74, 0x74, 0x73, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x74, - 0x74, 0x73, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x73, 0x74, - 0x6f, 0x70, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x54, + 0x65, 0x78, 0x74, 0x12, 0x4d, 0x0a, 0x10, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x70, 0x44, 0x65, 0x73, 0x63, 0x12, 0x19, 0x0a, 0x08, 0x73, - 0x74, 0x6f, 0x70, 0x5f, 0x6c, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x73, - 0x74, 0x6f, 0x70, 0x4c, 0x61, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x6c, - 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x4c, 0x6f, - 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x7a, 0x6f, 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x7a, 0x6f, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x08, 0x73, 0x74, - 0x6f, 0x70, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, + 0x67, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, + 0x78, 0x74, 0x12, 0x4a, 0x0a, 0x0f, 0x74, 0x74, 0x73, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, + 0x0d, 0x74, 0x74, 0x73, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x54, + 0x0a, 0x14, 0x74, 0x74, 0x73, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x52, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x55, 0x72, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, - 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x70, 0x54, 0x69, 0x6d, - 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x63, 0x0a, 0x13, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x63, 0x68, - 0x61, 0x69, 0x72, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, - 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x2e, 0x57, 0x68, 0x65, 0x65, 0x6c, - 0x63, 0x68, 0x61, 0x69, 0x72, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x07, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x52, 0x12, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, - 0x69, 0x72, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x47, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, + 0x52, 0x12, 0x74, 0x74, 0x73, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x65, 0x78, 0x74, 0x12, 0x5e, 0x0a, 0x0e, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, + 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x43, - 0x0a, 0x12, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x72, 0x42, 0x6f, 0x61, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, - 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, - 0x45, 0x10, 0x02, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, - 0x10, 0x90, 0x4e, 0x22, 0x9e, 0x06, 0x0a, 0x11, 0x54, 0x72, 0x69, 0x70, 0x4d, 0x6f, 0x64, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x69, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x31, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x69, 0x70, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, - 0x72, 0x69, 0x70, 0x73, 0x52, 0x0d, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x72, - 0x69, 0x70, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x0d, 0x6d, 0x6f, 0x64, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x69, 0x70, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x1a, 0xa9, 0x03, 0x0a, 0x0c, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x70, - 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, - 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x12, 0x4a, 0x0a, 0x11, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x41, 0x6c, 0x65, 0x72, 0x74, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x3a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x45, 0x56, + 0x45, 0x52, 0x49, 0x54, 0x59, 0x52, 0x0d, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, + 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, + 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x58, 0x0a, + 0x16, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x52, 0x14, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x54, 0x65, 0x78, 0x74, 0x12, 0x45, 0x0a, 0x0c, 0x63, 0x61, 0x75, 0x73, 0x65, + 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x52, 0x0b, 0x63, 0x61, 0x75, 0x73, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x47, + 0x0a, 0x0d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, + 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, + 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x65, 0x66, 0x66, 0x65, 0x63, + 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0xeb, 0x01, 0x0a, 0x05, 0x43, 0x61, 0x75, 0x73, + 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x41, 0x55, + 0x53, 0x45, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x43, 0x41, + 0x55, 0x53, 0x45, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x45, 0x43, 0x48, 0x4e, 0x49, 0x43, + 0x41, 0x4c, 0x5f, 0x50, 0x52, 0x4f, 0x42, 0x4c, 0x45, 0x4d, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, + 0x53, 0x54, 0x52, 0x49, 0x4b, 0x45, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x4d, 0x4f, + 0x4e, 0x53, 0x54, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x41, + 0x43, 0x43, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x4f, 0x4c, + 0x49, 0x44, 0x41, 0x59, 0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x45, 0x41, 0x54, 0x48, 0x45, + 0x52, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, + 0x43, 0x45, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x4f, 0x4e, 0x53, 0x54, 0x52, 0x55, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x0a, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x45, + 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x59, 0x10, 0x0b, 0x12, 0x15, 0x0a, 0x11, 0x4d, + 0x45, 0x44, 0x49, 0x43, 0x41, 0x4c, 0x5f, 0x45, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x4e, 0x43, 0x59, + 0x10, 0x0c, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x5f, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x10, 0x0d, 0x22, 0xdd, 0x01, 0x0a, 0x06, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, + 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x4f, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x01, + 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x45, 0x44, 0x55, 0x43, 0x45, 0x44, 0x5f, 0x53, 0x45, 0x52, 0x56, + 0x49, 0x43, 0x45, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x49, 0x47, 0x4e, 0x49, 0x46, 0x49, + 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x53, 0x10, 0x03, 0x12, 0x0a, 0x0a, + 0x06, 0x44, 0x45, 0x54, 0x4f, 0x55, 0x52, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x44, 0x44, + 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, + 0x05, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x53, 0x45, + 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x54, 0x48, 0x45, 0x52, + 0x5f, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x10, 0x07, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x10, 0x08, 0x12, 0x0e, 0x0a, + 0x0a, 0x53, 0x54, 0x4f, 0x50, 0x5f, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x09, 0x12, 0x0d, 0x0a, + 0x09, 0x4e, 0x4f, 0x5f, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x10, 0x0a, 0x12, 0x17, 0x0a, 0x13, + 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x49, 0x53, + 0x53, 0x55, 0x45, 0x10, 0x0b, 0x22, 0x48, 0x0a, 0x0d, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, + 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x5f, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, + 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, + 0x47, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x45, 0x56, 0x45, 0x52, 0x45, 0x10, 0x04, 0x2a, + 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, + 0x43, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x03, 0x65, 0x6e, 0x64, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, + 0x46, 0x10, 0x90, 0x4e, 0x22, 0xa0, 0x01, 0x0a, 0x08, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x02, 0x28, 0x02, 0x52, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x02, + 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, + 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x62, 0x65, + 0x61, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x64, 0x6f, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6f, 0x64, 0x6f, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, + 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, 0xc6, 0x05, 0x0a, 0x0e, 0x54, 0x72, 0x69, 0x70, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x72, + 0x69, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x72, 0x69, + 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x49, 0x64, 0x12, 0x21, + 0x0a, 0x0c, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, + 0x6a, 0x0a, 0x15, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x54, 0x72, 0x69, 0x70, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, + 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x68, 0x69, 0x70, 0x52, 0x14, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x12, 0x5a, 0x0a, 0x0d, 0x6d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x69, 0x70, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x69, 0x70, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x72, 0x69, + 0x70, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0c, 0x6d, 0x6f, 0x64, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x54, 0x72, 0x69, 0x70, 0x1a, 0xb9, 0x01, 0x0a, 0x14, 0x4d, 0x6f, 0x64, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x54, 0x72, 0x69, 0x70, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x6f, 0x64, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x61, + 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x69, 0x70, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, + 0x72, 0x69, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, + 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, + 0x61, 0x74, 0x65, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, + 0x10, 0x90, 0x4e, 0x22, 0x8a, 0x01, 0x0a, 0x14, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x12, 0x0d, 0x0a, 0x09, + 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x05, 0x41, + 0x44, 0x44, 0x45, 0x44, 0x10, 0x01, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, + 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x43, + 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x45, 0x50, + 0x4c, 0x41, 0x43, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x55, + 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, + 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x07, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x45, 0x57, 0x10, 0x08, + 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, + 0x22, 0xd2, 0x02, 0x0a, 0x11, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x23, 0x0a, 0x0d, + 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x50, 0x6c, 0x61, 0x74, + 0x65, 0x12, 0x77, 0x0a, 0x15, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x72, 0x5f, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x38, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x72, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x3a, 0x08, 0x4e, 0x4f, 0x5f, 0x56, + 0x41, 0x4c, 0x55, 0x45, 0x52, 0x14, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x72, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x69, 0x0a, 0x14, 0x57, 0x68, + 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, + 0x6c, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x00, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x01, 0x12, 0x19, 0x0a, + 0x15, 0x57, 0x48, 0x45, 0x45, 0x4c, 0x43, 0x48, 0x41, 0x49, 0x52, 0x5f, 0x41, 0x43, 0x43, 0x45, + 0x53, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x57, 0x48, 0x45, 0x45, + 0x4c, 0x43, 0x48, 0x41, 0x49, 0x52, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x49, + 0x42, 0x4c, 0x45, 0x10, 0x03, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, + 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, 0xe9, 0x01, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, + 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x67, 0x65, + 0x6e, 0x63, 0x79, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x49, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x34, 0x0a, 0x04, 0x74, 0x72, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0f, 0x65, - 0x6e, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x45, - 0x0a, 0x1d, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x6f, 0x64, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x1b, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, - 0x61, 0x74, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x4e, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x6f, 0x70, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x53, 0x74, 0x6f, 0x70, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x49, 0x64, 0x12, - 0x2c, 0x0a, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x6c, 0x61, 0x73, - 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x2a, 0x06, 0x08, - 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x1a, 0x55, 0x0a, - 0x0d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x72, 0x69, 0x70, 0x73, 0x12, 0x19, - 0x0a, 0x08, 0x74, 0x72, 0x69, 0x70, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x07, 0x74, 0x72, 0x69, 0x70, 0x49, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x61, - 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x68, 0x61, - 0x70, 0x65, 0x49, 0x64, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, - 0x46, 0x10, 0x90, 0x4e, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, - 0x46, 0x10, 0x90, 0x4e, 0x22, 0x5c, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x73, 0x74, 0x6f, - 0x70, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x6f, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x6f, 0x70, - 0x49, 0x64, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, - 0x90, 0x4e, 0x22, 0x69, 0x0a, 0x0f, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x2d, 0x0a, 0x13, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x10, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x6f, - 0x53, 0x74, 0x6f, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x2a, 0x06, 0x08, - 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x42, 0x1d, 0x0a, - 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x69, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x54, 0x72, 0x69, 0x70, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, + 0x04, 0x74, 0x72, 0x69, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x12, 0x21, + 0x0a, 0x0c, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, + 0x4e, 0x22, 0xc3, 0x01, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x50, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x4d, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, + 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, + 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, + 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, + 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, + 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, 0xeb, 0x01, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, + 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, + 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x1a, 0x6d, 0x0a, 0x0e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, + 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, + 0x64, 0x69, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x09, 0x52, 0x09, + 0x6d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, + 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, + 0x67, 0x75, 0x61, 0x67, 0x65, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, + 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, + 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, 0x5d, 0x0a, 0x05, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x19, + 0x0a, 0x08, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x73, 0x68, 0x61, 0x70, 0x65, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6e, 0x63, + 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6c, 0x79, + 0x6c, 0x69, 0x6e, 0x65, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, + 0x46, 0x10, 0x90, 0x4e, 0x22, 0xa2, 0x06, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x17, 0x0a, + 0x07, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x09, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, + 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x73, 0x74, 0x6f, 0x70, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x08, + 0x73, 0x74, 0x6f, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x0d, 0x74, 0x74, 0x73, 0x5f, + 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x74, 0x74, 0x73, 0x53, 0x74, 0x6f, 0x70, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x3f, 0x0a, 0x09, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, + 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, + 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x70, 0x44, 0x65, 0x73, + 0x63, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x6c, 0x61, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x4c, 0x61, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x6c, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, + 0x73, 0x74, 0x6f, 0x70, 0x4c, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x7a, 0x6f, 0x6e, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x7a, 0x6f, 0x6e, 0x65, 0x49, 0x64, + 0x12, 0x3d, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x55, 0x72, 0x6c, 0x12, + 0x25, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, + 0x74, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x63, 0x0a, 0x13, 0x77, + 0x68, 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x72, 0x5f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, + 0x2e, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x72, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x69, 0x6e, 0x67, 0x3a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x52, 0x12, 0x77, 0x68, + 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x72, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, + 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x47, 0x0a, 0x0d, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x43, 0x6f, 0x64, 0x65, 0x22, 0x43, 0x0a, 0x12, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x63, 0x68, 0x61, + 0x69, 0x72, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x56, 0x41, 0x49, 0x4c, + 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x56, + 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, + 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, 0x9e, 0x06, 0x0a, 0x11, 0x54, 0x72, + 0x69, 0x70, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x58, 0x0a, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x72, 0x69, 0x70, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, + 0x74, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x69, 0x70, 0x4d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, 0x72, 0x69, 0x70, 0x73, 0x52, 0x0d, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x54, 0x72, 0x69, 0x70, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, + 0x56, 0x0a, 0x0d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, + 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x72, 0x69, 0x70, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x6f, 0x64, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xa9, 0x03, 0x0a, 0x0c, 0x4d, 0x6f, 0x64, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, + 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x74, 0x6f, 0x70, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x4a, 0x0a, 0x11, 0x65, 0x6e, 0x64, 0x5f, + 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x5f, 0x72, 0x65, + 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x52, 0x0f, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x12, 0x45, 0x0a, 0x1d, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x30, 0x52, 0x1b, + 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x4e, 0x0a, 0x11, 0x72, + 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, + 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x6c, + 0x65, 0x72, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, + 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, + 0x10, 0x90, 0x4e, 0x1a, 0x55, 0x0a, 0x0d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x54, + 0x72, 0x69, 0x70, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x70, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x69, 0x70, 0x49, 0x64, 0x73, 0x12, + 0x19, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x73, 0x68, 0x61, 0x70, 0x65, 0x49, 0x64, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, + 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, + 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, 0x5c, 0x0a, 0x0c, 0x53, 0x74, + 0x6f, 0x70, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, + 0x6f, 0x70, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x70, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x17, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, + 0x2a, 0x06, 0x08, 0xa8, 0x46, 0x10, 0x90, 0x4e, 0x22, 0x69, 0x0a, 0x0f, 0x52, 0x65, 0x70, 0x6c, + 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x2d, 0x0a, 0x13, 0x74, + 0x72, 0x61, 0x76, 0x65, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, + 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, + 0x54, 0x69, 0x6d, 0x65, 0x54, 0x6f, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x74, + 0x6f, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x6f, + 0x70, 0x49, 0x64, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0xd0, 0x0f, 0x2a, 0x06, 0x08, 0xa8, 0x46, + 0x10, 0x90, 0x4e, 0x42, 0x1d, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, + 0x6d, 0x65, } var ( @@ -4391,50 +4427,52 @@ var file_gtfs_realtime_proto_depIdxs = []int32{ 5, // 18: transit_realtime.VehiclePosition.occupancy_status:type_name -> transit_realtime.VehiclePosition.OccupancyStatus 34, // 19: transit_realtime.VehiclePosition.multi_carriage_details:type_name -> transit_realtime.VehiclePosition.CarriageDetails 18, // 20: transit_realtime.Alert.active_period:type_name -> transit_realtime.TimeRange - 22, // 21: transit_realtime.Alert.informed_entity:type_name -> transit_realtime.EntitySelector - 6, // 22: transit_realtime.Alert.cause:type_name -> transit_realtime.Alert.Cause - 7, // 23: transit_realtime.Alert.effect:type_name -> transit_realtime.Alert.Effect - 23, // 24: transit_realtime.Alert.url:type_name -> transit_realtime.TranslatedString - 23, // 25: transit_realtime.Alert.header_text:type_name -> transit_realtime.TranslatedString - 23, // 26: transit_realtime.Alert.description_text:type_name -> transit_realtime.TranslatedString - 23, // 27: transit_realtime.Alert.tts_header_text:type_name -> transit_realtime.TranslatedString - 23, // 28: transit_realtime.Alert.tts_description_text:type_name -> transit_realtime.TranslatedString - 8, // 29: transit_realtime.Alert.severity_level:type_name -> transit_realtime.Alert.SeverityLevel - 24, // 30: transit_realtime.Alert.image:type_name -> transit_realtime.TranslatedImage - 23, // 31: transit_realtime.Alert.image_alternative_text:type_name -> transit_realtime.TranslatedString - 23, // 32: transit_realtime.Alert.cause_detail:type_name -> transit_realtime.TranslatedString - 23, // 33: transit_realtime.Alert.effect_detail:type_name -> transit_realtime.TranslatedString - 9, // 34: transit_realtime.TripDescriptor.schedule_relationship:type_name -> transit_realtime.TripDescriptor.ScheduleRelationship - 35, // 35: transit_realtime.TripDescriptor.modified_trip:type_name -> transit_realtime.TripDescriptor.ModifiedTripSelector - 10, // 36: transit_realtime.VehicleDescriptor.wheelchair_accessible:type_name -> transit_realtime.VehicleDescriptor.WheelchairAccessible - 20, // 37: transit_realtime.EntitySelector.trip:type_name -> transit_realtime.TripDescriptor - 36, // 38: transit_realtime.TranslatedString.translation:type_name -> transit_realtime.TranslatedString.Translation - 37, // 39: transit_realtime.TranslatedImage.localized_image:type_name -> transit_realtime.TranslatedImage.LocalizedImage - 23, // 40: transit_realtime.Stop.stop_code:type_name -> transit_realtime.TranslatedString - 23, // 41: transit_realtime.Stop.stop_name:type_name -> transit_realtime.TranslatedString - 23, // 42: transit_realtime.Stop.tts_stop_name:type_name -> transit_realtime.TranslatedString - 23, // 43: transit_realtime.Stop.stop_desc:type_name -> transit_realtime.TranslatedString - 23, // 44: transit_realtime.Stop.stop_url:type_name -> transit_realtime.TranslatedString - 11, // 45: transit_realtime.Stop.wheelchair_boarding:type_name -> transit_realtime.Stop.WheelchairBoarding - 23, // 46: transit_realtime.Stop.platform_code:type_name -> transit_realtime.TranslatedString - 39, // 47: transit_realtime.TripModifications.selected_trips:type_name -> transit_realtime.TripModifications.SelectedTrips - 38, // 48: transit_realtime.TripModifications.modifications:type_name -> transit_realtime.TripModifications.Modification - 30, // 49: transit_realtime.TripUpdate.StopTimeUpdate.arrival:type_name -> transit_realtime.TripUpdate.StopTimeEvent - 30, // 50: transit_realtime.TripUpdate.StopTimeUpdate.departure:type_name -> transit_realtime.TripUpdate.StopTimeEvent - 5, // 51: transit_realtime.TripUpdate.StopTimeUpdate.departure_occupancy_status:type_name -> transit_realtime.VehiclePosition.OccupancyStatus - 1, // 52: transit_realtime.TripUpdate.StopTimeUpdate.schedule_relationship:type_name -> transit_realtime.TripUpdate.StopTimeUpdate.ScheduleRelationship - 33, // 53: transit_realtime.TripUpdate.StopTimeUpdate.stop_time_properties:type_name -> transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties - 2, // 54: transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties.pickup_type:type_name -> transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties.DropOffPickupType - 2, // 55: transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties.drop_off_type:type_name -> transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties.DropOffPickupType - 5, // 56: transit_realtime.VehiclePosition.CarriageDetails.occupancy_status:type_name -> transit_realtime.VehiclePosition.OccupancyStatus - 28, // 57: transit_realtime.TripModifications.Modification.start_stop_selector:type_name -> transit_realtime.StopSelector - 28, // 58: transit_realtime.TripModifications.Modification.end_stop_selector:type_name -> transit_realtime.StopSelector - 29, // 59: transit_realtime.TripModifications.Modification.replacement_stops:type_name -> transit_realtime.ReplacementStop - 60, // [60:60] is the sub-list for method output_type - 60, // [60:60] is the sub-list for method input_type - 60, // [60:60] is the sub-list for extension type_name - 60, // [60:60] is the sub-list for extension extendee - 0, // [0:60] is the sub-list for field type_name + 18, // 21: transit_realtime.Alert.communication_period:type_name -> transit_realtime.TimeRange + 18, // 22: transit_realtime.Alert.impact_period:type_name -> transit_realtime.TimeRange + 22, // 23: transit_realtime.Alert.informed_entity:type_name -> transit_realtime.EntitySelector + 6, // 24: transit_realtime.Alert.cause:type_name -> transit_realtime.Alert.Cause + 7, // 25: transit_realtime.Alert.effect:type_name -> transit_realtime.Alert.Effect + 23, // 26: transit_realtime.Alert.url:type_name -> transit_realtime.TranslatedString + 23, // 27: transit_realtime.Alert.header_text:type_name -> transit_realtime.TranslatedString + 23, // 28: transit_realtime.Alert.description_text:type_name -> transit_realtime.TranslatedString + 23, // 29: transit_realtime.Alert.tts_header_text:type_name -> transit_realtime.TranslatedString + 23, // 30: transit_realtime.Alert.tts_description_text:type_name -> transit_realtime.TranslatedString + 8, // 31: transit_realtime.Alert.severity_level:type_name -> transit_realtime.Alert.SeverityLevel + 24, // 32: transit_realtime.Alert.image:type_name -> transit_realtime.TranslatedImage + 23, // 33: transit_realtime.Alert.image_alternative_text:type_name -> transit_realtime.TranslatedString + 23, // 34: transit_realtime.Alert.cause_detail:type_name -> transit_realtime.TranslatedString + 23, // 35: transit_realtime.Alert.effect_detail:type_name -> transit_realtime.TranslatedString + 9, // 36: transit_realtime.TripDescriptor.schedule_relationship:type_name -> transit_realtime.TripDescriptor.ScheduleRelationship + 35, // 37: transit_realtime.TripDescriptor.modified_trip:type_name -> transit_realtime.TripDescriptor.ModifiedTripSelector + 10, // 38: transit_realtime.VehicleDescriptor.wheelchair_accessible:type_name -> transit_realtime.VehicleDescriptor.WheelchairAccessible + 20, // 39: transit_realtime.EntitySelector.trip:type_name -> transit_realtime.TripDescriptor + 36, // 40: transit_realtime.TranslatedString.translation:type_name -> transit_realtime.TranslatedString.Translation + 37, // 41: transit_realtime.TranslatedImage.localized_image:type_name -> transit_realtime.TranslatedImage.LocalizedImage + 23, // 42: transit_realtime.Stop.stop_code:type_name -> transit_realtime.TranslatedString + 23, // 43: transit_realtime.Stop.stop_name:type_name -> transit_realtime.TranslatedString + 23, // 44: transit_realtime.Stop.tts_stop_name:type_name -> transit_realtime.TranslatedString + 23, // 45: transit_realtime.Stop.stop_desc:type_name -> transit_realtime.TranslatedString + 23, // 46: transit_realtime.Stop.stop_url:type_name -> transit_realtime.TranslatedString + 11, // 47: transit_realtime.Stop.wheelchair_boarding:type_name -> transit_realtime.Stop.WheelchairBoarding + 23, // 48: transit_realtime.Stop.platform_code:type_name -> transit_realtime.TranslatedString + 39, // 49: transit_realtime.TripModifications.selected_trips:type_name -> transit_realtime.TripModifications.SelectedTrips + 38, // 50: transit_realtime.TripModifications.modifications:type_name -> transit_realtime.TripModifications.Modification + 30, // 51: transit_realtime.TripUpdate.StopTimeUpdate.arrival:type_name -> transit_realtime.TripUpdate.StopTimeEvent + 30, // 52: transit_realtime.TripUpdate.StopTimeUpdate.departure:type_name -> transit_realtime.TripUpdate.StopTimeEvent + 5, // 53: transit_realtime.TripUpdate.StopTimeUpdate.departure_occupancy_status:type_name -> transit_realtime.VehiclePosition.OccupancyStatus + 1, // 54: transit_realtime.TripUpdate.StopTimeUpdate.schedule_relationship:type_name -> transit_realtime.TripUpdate.StopTimeUpdate.ScheduleRelationship + 33, // 55: transit_realtime.TripUpdate.StopTimeUpdate.stop_time_properties:type_name -> transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties + 2, // 56: transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties.pickup_type:type_name -> transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties.DropOffPickupType + 2, // 57: transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties.drop_off_type:type_name -> transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties.DropOffPickupType + 5, // 58: transit_realtime.VehiclePosition.CarriageDetails.occupancy_status:type_name -> transit_realtime.VehiclePosition.OccupancyStatus + 28, // 59: transit_realtime.TripModifications.Modification.start_stop_selector:type_name -> transit_realtime.StopSelector + 28, // 60: transit_realtime.TripModifications.Modification.end_stop_selector:type_name -> transit_realtime.StopSelector + 29, // 61: transit_realtime.TripModifications.Modification.replacement_stops:type_name -> transit_realtime.ReplacementStop + 62, // [62:62] is the sub-list for method output_type + 62, // [62:62] is the sub-list for method input_type + 62, // [62:62] is the sub-list for extension type_name + 62, // [62:62] is the sub-list for extension extendee + 0, // [0:62] is the sub-list for field type_name } func init() { file_gtfs_realtime_proto_init() } diff --git a/gtfs-realtime.proto b/gtfs-realtime.proto index e6b4b3e..3c00ef5 100644 --- a/gtfs-realtime.proto +++ b/gtfs-realtime.proto @@ -625,7 +625,18 @@ message Alert { // Time when the alert should be shown to the user. If missing, the // alert will be shown as long as it appears in the feed. // If multiple ranges are given, the alert will be shown during all of them. - repeated TimeRange active_period = 1; + // Should not be used - for backwards-compatibility only. + repeated TimeRange active_period = 1 [deprecated = true]; + + // Time when the alert should be shown to the user strictly for informative reasons. + // If missing, the consuming application can decide when it's appropriate to be shown. + // If multiple ranges are given, the alert will be shown during all of them. + repeated TimeRange communication_period = 2; + + // Time when the services are affected by the alert. If communication_period is specified, + // every time interval in impact_period must be fully contained within at least + // one time interval of communication_period. + repeated TimeRange impact_period = 3; // Entities whose users we should notify of this alert. repeated EntitySelector informed_entity = 5; diff --git a/java/src/main/java/com/google/transit/realtime/GtfsRealtime.java b/java/src/main/java/com/google/transit/realtime/GtfsRealtime.java index 9672077..9f721e7 100644 --- a/java/src/main/java/com/google/transit/realtime/GtfsRealtime.java +++ b/java/src/main/java/com/google/transit/realtime/GtfsRealtime.java @@ -19184,53 +19184,166 @@ public interface AlertOrBuilder extends * Time when the alert should be shown to the user. If missing, the * alert will be shown as long as it appears in the feed. * If multiple ranges are given, the alert will be shown during all of them. + * Should not be used - for backwards-compatibility only. * * - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; */ - java.util.List + @java.lang.Deprecated java.util.List getActivePeriodList(); /** *
      * Time when the alert should be shown to the user. If missing, the
      * alert will be shown as long as it appears in the feed.
      * If multiple ranges are given, the alert will be shown during all of them.
+     * Should not be used - for backwards-compatibility only.
      * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; */ - com.google.transit.realtime.GtfsRealtime.TimeRange getActivePeriod(int index); + @java.lang.Deprecated com.google.transit.realtime.GtfsRealtime.TimeRange getActivePeriod(int index); /** *
      * Time when the alert should be shown to the user. If missing, the
      * alert will be shown as long as it appears in the feed.
      * If multiple ranges are given, the alert will be shown during all of them.
+     * Should not be used - for backwards-compatibility only.
      * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; */ - int getActivePeriodCount(); + @java.lang.Deprecated int getActivePeriodCount(); /** *
      * Time when the alert should be shown to the user. If missing, the
      * alert will be shown as long as it appears in the feed.
      * If multiple ranges are given, the alert will be shown during all of them.
+     * Should not be used - for backwards-compatibility only.
      * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; */ - java.util.List + @java.lang.Deprecated java.util.List getActivePeriodOrBuilderList(); /** *
      * Time when the alert should be shown to the user. If missing, the
      * alert will be shown as long as it appears in the feed.
      * If multiple ranges are given, the alert will be shown during all of them.
+     * Should not be used - for backwards-compatibility only.
+     * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder getActivePeriodOrBuilder( + int index); + + /** + *
+     * Time when the alert should be shown to the user strictly for informative reasons.
+     * If missing, the consuming application can decide when it's appropriate to be shown.
+     * If multiple ranges are given, the alert will be shown during all of them.
+     * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + java.util.List + getCommunicationPeriodList(); + /** + *
+     * Time when the alert should be shown to the user strictly for informative reasons.
+     * If missing, the consuming application can decide when it's appropriate to be shown.
+     * If multiple ranges are given, the alert will be shown during all of them.
+     * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + com.google.transit.realtime.GtfsRealtime.TimeRange getCommunicationPeriod(int index); + /** + *
+     * Time when the alert should be shown to the user strictly for informative reasons.
+     * If missing, the consuming application can decide when it's appropriate to be shown.
+     * If multiple ranges are given, the alert will be shown during all of them.
+     * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + int getCommunicationPeriodCount(); + /** + *
+     * Time when the alert should be shown to the user strictly for informative reasons.
+     * If missing, the consuming application can decide when it's appropriate to be shown.
+     * If multiple ranges are given, the alert will be shown during all of them.
+     * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + java.util.List + getCommunicationPeriodOrBuilderList(); + /** + *
+     * Time when the alert should be shown to the user strictly for informative reasons.
+     * If missing, the consuming application can decide when it's appropriate to be shown.
+     * If multiple ranges are given, the alert will be shown during all of them.
+     * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder getCommunicationPeriodOrBuilder( + int index); + + /** + *
+     * Time when the services are affected by the alert. If communication_period is specified,
+     * every time interval in impact_period must be fully contained within at least
+     * one time interval of communication_period.
+     * 
+ * + * repeated .transit_realtime.TimeRange impact_period = 3; + */ + java.util.List + getImpactPeriodList(); + /** + *
+     * Time when the services are affected by the alert. If communication_period is specified,
+     * every time interval in impact_period must be fully contained within at least
+     * one time interval of communication_period.
+     * 
+ * + * repeated .transit_realtime.TimeRange impact_period = 3; + */ + com.google.transit.realtime.GtfsRealtime.TimeRange getImpactPeriod(int index); + /** + *
+     * Time when the services are affected by the alert. If communication_period is specified,
+     * every time interval in impact_period must be fully contained within at least
+     * one time interval of communication_period.
+     * 
+ * + * repeated .transit_realtime.TimeRange impact_period = 3; + */ + int getImpactPeriodCount(); + /** + *
+     * Time when the services are affected by the alert. If communication_period is specified,
+     * every time interval in impact_period must be fully contained within at least
+     * one time interval of communication_period.
+     * 
+ * + * repeated .transit_realtime.TimeRange impact_period = 3; + */ + java.util.List + getImpactPeriodOrBuilderList(); + /** + *
+     * Time when the services are affected by the alert. If communication_period is specified,
+     * every time interval in impact_period must be fully contained within at least
+     * one time interval of communication_period.
      * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder getActivePeriodOrBuilder( + com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder getImpactPeriodOrBuilder( int index); /** @@ -19602,6 +19715,8 @@ private Alert(com.google.protobuf.GeneratedMessage.ExtendableBuilder * - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; */ @java.lang.Override - public java.util.List getActivePeriodList() { + @java.lang.Deprecated public java.util.List getActivePeriodList() { return activePeriod_; } /** @@ -20217,12 +20333,13 @@ public java.util.List getAct * Time when the alert should be shown to the user. If missing, the * alert will be shown as long as it appears in the feed. * If multiple ranges are given, the alert will be shown during all of them. + * Should not be used - for backwards-compatibility only. * * - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; */ @java.lang.Override - public java.util.List + @java.lang.Deprecated public java.util.List getActivePeriodOrBuilderList() { return activePeriod_; } @@ -20231,12 +20348,13 @@ public java.util.List getAct * Time when the alert should be shown to the user. If missing, the * alert will be shown as long as it appears in the feed. * If multiple ranges are given, the alert will be shown during all of them. + * Should not be used - for backwards-compatibility only. * * - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; */ @java.lang.Override - public int getActivePeriodCount() { + @java.lang.Deprecated public int getActivePeriodCount() { return activePeriod_.size(); } /** @@ -20244,12 +20362,13 @@ public int getActivePeriodCount() { * Time when the alert should be shown to the user. If missing, the * alert will be shown as long as it appears in the feed. * If multiple ranges are given, the alert will be shown during all of them. + * Should not be used - for backwards-compatibility only. * * - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; */ @java.lang.Override - public com.google.transit.realtime.GtfsRealtime.TimeRange getActivePeriod(int index) { + @java.lang.Deprecated public com.google.transit.realtime.GtfsRealtime.TimeRange getActivePeriod(int index) { return activePeriod_.get(index); } /** @@ -20257,16 +20376,159 @@ public com.google.transit.realtime.GtfsRealtime.TimeRange getActivePeriod(int in * Time when the alert should be shown to the user. If missing, the * alert will be shown as long as it appears in the feed. * If multiple ranges are given, the alert will be shown during all of them. + * Should not be used - for backwards-compatibility only. * * - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; */ @java.lang.Override - public com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder getActivePeriodOrBuilder( + @java.lang.Deprecated public com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder getActivePeriodOrBuilder( int index) { return activePeriod_.get(index); } + public static final int COMMUNICATION_PERIOD_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private java.util.List communicationPeriod_; + /** + *
+     * Time when the alert should be shown to the user strictly for informative reasons.
+     * If missing, the consuming application can decide when it's appropriate to be shown.
+     * If multiple ranges are given, the alert will be shown during all of them.
+     * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + @java.lang.Override + public java.util.List getCommunicationPeriodList() { + return communicationPeriod_; + } + /** + *
+     * Time when the alert should be shown to the user strictly for informative reasons.
+     * If missing, the consuming application can decide when it's appropriate to be shown.
+     * If multiple ranges are given, the alert will be shown during all of them.
+     * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + @java.lang.Override + public java.util.List + getCommunicationPeriodOrBuilderList() { + return communicationPeriod_; + } + /** + *
+     * Time when the alert should be shown to the user strictly for informative reasons.
+     * If missing, the consuming application can decide when it's appropriate to be shown.
+     * If multiple ranges are given, the alert will be shown during all of them.
+     * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + @java.lang.Override + public int getCommunicationPeriodCount() { + return communicationPeriod_.size(); + } + /** + *
+     * Time when the alert should be shown to the user strictly for informative reasons.
+     * If missing, the consuming application can decide when it's appropriate to be shown.
+     * If multiple ranges are given, the alert will be shown during all of them.
+     * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + @java.lang.Override + public com.google.transit.realtime.GtfsRealtime.TimeRange getCommunicationPeriod(int index) { + return communicationPeriod_.get(index); + } + /** + *
+     * Time when the alert should be shown to the user strictly for informative reasons.
+     * If missing, the consuming application can decide when it's appropriate to be shown.
+     * If multiple ranges are given, the alert will be shown during all of them.
+     * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + @java.lang.Override + public com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder getCommunicationPeriodOrBuilder( + int index) { + return communicationPeriod_.get(index); + } + + public static final int IMPACT_PERIOD_FIELD_NUMBER = 3; + @SuppressWarnings("serial") + private java.util.List impactPeriod_; + /** + *
+     * Time when the services are affected by the alert. If communication_period is specified,
+     * every time interval in impact_period must be fully contained within at least
+     * one time interval of communication_period.
+     * 
+ * + * repeated .transit_realtime.TimeRange impact_period = 3; + */ + @java.lang.Override + public java.util.List getImpactPeriodList() { + return impactPeriod_; + } + /** + *
+     * Time when the services are affected by the alert. If communication_period is specified,
+     * every time interval in impact_period must be fully contained within at least
+     * one time interval of communication_period.
+     * 
+ * + * repeated .transit_realtime.TimeRange impact_period = 3; + */ + @java.lang.Override + public java.util.List + getImpactPeriodOrBuilderList() { + return impactPeriod_; + } + /** + *
+     * Time when the services are affected by the alert. If communication_period is specified,
+     * every time interval in impact_period must be fully contained within at least
+     * one time interval of communication_period.
+     * 
+ * + * repeated .transit_realtime.TimeRange impact_period = 3; + */ + @java.lang.Override + public int getImpactPeriodCount() { + return impactPeriod_.size(); + } + /** + *
+     * Time when the services are affected by the alert. If communication_period is specified,
+     * every time interval in impact_period must be fully contained within at least
+     * one time interval of communication_period.
+     * 
+ * + * repeated .transit_realtime.TimeRange impact_period = 3; + */ + @java.lang.Override + public com.google.transit.realtime.GtfsRealtime.TimeRange getImpactPeriod(int index) { + return impactPeriod_.get(index); + } + /** + *
+     * Time when the services are affected by the alert. If communication_period is specified,
+     * every time interval in impact_period must be fully contained within at least
+     * one time interval of communication_period.
+     * 
+ * + * repeated .transit_realtime.TimeRange impact_period = 3; + */ + @java.lang.Override + public com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder getImpactPeriodOrBuilder( + int index) { + return impactPeriod_.get(index); + } + public static final int INFORMED_ENTITY_FIELD_NUMBER = 5; @SuppressWarnings("serial") private java.util.List informedEntity_; @@ -20758,6 +21020,18 @@ public final boolean isInitialized() { return false; } } + for (int i = 0; i < getCommunicationPeriodCount(); i++) { + if (!getCommunicationPeriod(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getImpactPeriodCount(); i++) { + if (!getImpactPeriod(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } for (int i = 0; i < getInformedEntityCount(); i++) { if (!getInformedEntity(i).isInitialized()) { memoizedIsInitialized = 0; @@ -20835,6 +21109,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) for (int i = 0; i < activePeriod_.size(); i++) { output.writeMessage(1, activePeriod_.get(i)); } + for (int i = 0; i < communicationPeriod_.size(); i++) { + output.writeMessage(2, communicationPeriod_.get(i)); + } + for (int i = 0; i < impactPeriod_.size(); i++) { + output.writeMessage(3, impactPeriod_.get(i)); + } for (int i = 0; i < informedEntity_.size(); i++) { output.writeMessage(5, informedEntity_.get(i)); } @@ -20894,6 +21174,24 @@ public int getSerializedSize() { size += 1 * count; } + { + final int count = communicationPeriod_.size(); + for (int i = 0; i < count; i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSizeNoTag(communicationPeriod_.get(i)); + } + size += 1 * count; + } + + { + final int count = impactPeriod_.size(); + for (int i = 0; i < count; i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSizeNoTag(impactPeriod_.get(i)); + } + size += 1 * count; + } + { final int count = informedEntity_.size(); for (int i = 0; i < count; i++) { @@ -20968,6 +21266,10 @@ public boolean equals(final java.lang.Object obj) { if (!getActivePeriodList() .equals(other.getActivePeriodList())) return false; + if (!getCommunicationPeriodList() + .equals(other.getCommunicationPeriodList())) return false; + if (!getImpactPeriodList() + .equals(other.getImpactPeriodList())) return false; if (!getInformedEntityList() .equals(other.getInformedEntityList())) return false; if (hasCause() != other.hasCause()) return false; @@ -21044,6 +21346,14 @@ public int hashCode() { hash = (37 * hash) + ACTIVE_PERIOD_FIELD_NUMBER; hash = (53 * hash) + getActivePeriodList().hashCode(); } + if (getCommunicationPeriodCount() > 0) { + hash = (37 * hash) + COMMUNICATION_PERIOD_FIELD_NUMBER; + hash = (53 * hash) + getCommunicationPeriodList().hashCode(); + } + if (getImpactPeriodCount() > 0) { + hash = (37 * hash) + IMPACT_PERIOD_FIELD_NUMBER; + hash = (53 * hash) + getImpactPeriodList().hashCode(); + } if (getInformedEntityCount() > 0) { hash = (37 * hash) + INFORMED_ENTITY_FIELD_NUMBER; hash = (53 * hash) + getInformedEntityList().hashCode(); @@ -21233,6 +21543,8 @@ private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessage .alwaysUseFieldBuilders) { internalGetActivePeriodFieldBuilder(); + internalGetCommunicationPeriodFieldBuilder(); + internalGetImpactPeriodFieldBuilder(); internalGetInformedEntityFieldBuilder(); internalGetUrlFieldBuilder(); internalGetHeaderTextFieldBuilder(); @@ -21256,13 +21568,27 @@ public Builder clear() { activePeriodBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000001); + if (communicationPeriodBuilder_ == null) { + communicationPeriod_ = java.util.Collections.emptyList(); + } else { + communicationPeriod_ = null; + communicationPeriodBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + if (impactPeriodBuilder_ == null) { + impactPeriod_ = java.util.Collections.emptyList(); + } else { + impactPeriod_ = null; + impactPeriodBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); if (informedEntityBuilder_ == null) { informedEntity_ = java.util.Collections.emptyList(); } else { informedEntity_ = null; informedEntityBuilder_.clear(); } - bitField0_ = (bitField0_ & ~0x00000002); + bitField0_ = (bitField0_ & ~0x00000008); cause_ = 1; effect_ = 8; url_ = null; @@ -21353,11 +21679,29 @@ private void buildPartialRepeatedFields(com.google.transit.realtime.GtfsRealtime } else { result.activePeriod_ = activePeriodBuilder_.build(); } - if (informedEntityBuilder_ == null) { + if (communicationPeriodBuilder_ == null) { if (((bitField0_ & 0x00000002) != 0)) { - informedEntity_ = java.util.Collections.unmodifiableList(informedEntity_); + communicationPeriod_ = java.util.Collections.unmodifiableList(communicationPeriod_); bitField0_ = (bitField0_ & ~0x00000002); } + result.communicationPeriod_ = communicationPeriod_; + } else { + result.communicationPeriod_ = communicationPeriodBuilder_.build(); + } + if (impactPeriodBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0)) { + impactPeriod_ = java.util.Collections.unmodifiableList(impactPeriod_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.impactPeriod_ = impactPeriod_; + } else { + result.impactPeriod_ = impactPeriodBuilder_.build(); + } + if (informedEntityBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0)) { + informedEntity_ = java.util.Collections.unmodifiableList(informedEntity_); + bitField0_ = (bitField0_ & ~0x00000008); + } result.informedEntity_ = informedEntity_; } else { result.informedEntity_ = informedEntityBuilder_.build(); @@ -21367,67 +21711,67 @@ private void buildPartialRepeatedFields(com.google.transit.realtime.GtfsRealtime private void buildPartial0(com.google.transit.realtime.GtfsRealtime.Alert result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000004) != 0)) { + if (((from_bitField0_ & 0x00000010) != 0)) { result.cause_ = cause_; to_bitField0_ |= 0x00000001; } - if (((from_bitField0_ & 0x00000008) != 0)) { + if (((from_bitField0_ & 0x00000020) != 0)) { result.effect_ = effect_; to_bitField0_ |= 0x00000002; } - if (((from_bitField0_ & 0x00000010) != 0)) { + if (((from_bitField0_ & 0x00000040) != 0)) { result.url_ = urlBuilder_ == null ? url_ : urlBuilder_.build(); to_bitField0_ |= 0x00000004; } - if (((from_bitField0_ & 0x00000020) != 0)) { + if (((from_bitField0_ & 0x00000080) != 0)) { result.headerText_ = headerTextBuilder_ == null ? headerText_ : headerTextBuilder_.build(); to_bitField0_ |= 0x00000008; } - if (((from_bitField0_ & 0x00000040) != 0)) { + if (((from_bitField0_ & 0x00000100) != 0)) { result.descriptionText_ = descriptionTextBuilder_ == null ? descriptionText_ : descriptionTextBuilder_.build(); to_bitField0_ |= 0x00000010; } - if (((from_bitField0_ & 0x00000080) != 0)) { + if (((from_bitField0_ & 0x00000200) != 0)) { result.ttsHeaderText_ = ttsHeaderTextBuilder_ == null ? ttsHeaderText_ : ttsHeaderTextBuilder_.build(); to_bitField0_ |= 0x00000020; } - if (((from_bitField0_ & 0x00000100) != 0)) { + if (((from_bitField0_ & 0x00000400) != 0)) { result.ttsDescriptionText_ = ttsDescriptionTextBuilder_ == null ? ttsDescriptionText_ : ttsDescriptionTextBuilder_.build(); to_bitField0_ |= 0x00000040; } - if (((from_bitField0_ & 0x00000200) != 0)) { + if (((from_bitField0_ & 0x00000800) != 0)) { result.severityLevel_ = severityLevel_; to_bitField0_ |= 0x00000080; } - if (((from_bitField0_ & 0x00000400) != 0)) { + if (((from_bitField0_ & 0x00001000) != 0)) { result.image_ = imageBuilder_ == null ? image_ : imageBuilder_.build(); to_bitField0_ |= 0x00000100; } - if (((from_bitField0_ & 0x00000800) != 0)) { + if (((from_bitField0_ & 0x00002000) != 0)) { result.imageAlternativeText_ = imageAlternativeTextBuilder_ == null ? imageAlternativeText_ : imageAlternativeTextBuilder_.build(); to_bitField0_ |= 0x00000200; } - if (((from_bitField0_ & 0x00001000) != 0)) { + if (((from_bitField0_ & 0x00004000) != 0)) { result.causeDetail_ = causeDetailBuilder_ == null ? causeDetail_ : causeDetailBuilder_.build(); to_bitField0_ |= 0x00000400; } - if (((from_bitField0_ & 0x00002000) != 0)) { + if (((from_bitField0_ & 0x00008000) != 0)) { result.effectDetail_ = effectDetailBuilder_ == null ? effectDetail_ : effectDetailBuilder_.build(); @@ -21497,11 +21841,63 @@ public Builder mergeFrom(com.google.transit.realtime.GtfsRealtime.Alert other) { } } } + if (communicationPeriodBuilder_ == null) { + if (!other.communicationPeriod_.isEmpty()) { + if (communicationPeriod_.isEmpty()) { + communicationPeriod_ = other.communicationPeriod_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureCommunicationPeriodIsMutable(); + communicationPeriod_.addAll(other.communicationPeriod_); + } + onChanged(); + } + } else { + if (!other.communicationPeriod_.isEmpty()) { + if (communicationPeriodBuilder_.isEmpty()) { + communicationPeriodBuilder_.dispose(); + communicationPeriodBuilder_ = null; + communicationPeriod_ = other.communicationPeriod_; + bitField0_ = (bitField0_ & ~0x00000002); + communicationPeriodBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + internalGetCommunicationPeriodFieldBuilder() : null; + } else { + communicationPeriodBuilder_.addAllMessages(other.communicationPeriod_); + } + } + } + if (impactPeriodBuilder_ == null) { + if (!other.impactPeriod_.isEmpty()) { + if (impactPeriod_.isEmpty()) { + impactPeriod_ = other.impactPeriod_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureImpactPeriodIsMutable(); + impactPeriod_.addAll(other.impactPeriod_); + } + onChanged(); + } + } else { + if (!other.impactPeriod_.isEmpty()) { + if (impactPeriodBuilder_.isEmpty()) { + impactPeriodBuilder_.dispose(); + impactPeriodBuilder_ = null; + impactPeriod_ = other.impactPeriod_; + bitField0_ = (bitField0_ & ~0x00000004); + impactPeriodBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + internalGetImpactPeriodFieldBuilder() : null; + } else { + impactPeriodBuilder_.addAllMessages(other.impactPeriod_); + } + } + } if (informedEntityBuilder_ == null) { if (!other.informedEntity_.isEmpty()) { if (informedEntity_.isEmpty()) { informedEntity_ = other.informedEntity_; - bitField0_ = (bitField0_ & ~0x00000002); + bitField0_ = (bitField0_ & ~0x00000008); } else { ensureInformedEntityIsMutable(); informedEntity_.addAll(other.informedEntity_); @@ -21514,7 +21910,7 @@ public Builder mergeFrom(com.google.transit.realtime.GtfsRealtime.Alert other) { informedEntityBuilder_.dispose(); informedEntityBuilder_ = null; informedEntity_ = other.informedEntity_; - bitField0_ = (bitField0_ & ~0x00000002); + bitField0_ = (bitField0_ & ~0x00000008); informedEntityBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? internalGetInformedEntityFieldBuilder() : null; @@ -21572,6 +21968,16 @@ public final boolean isInitialized() { return false; } } + for (int i = 0; i < getCommunicationPeriodCount(); i++) { + if (!getCommunicationPeriod(i).isInitialized()) { + return false; + } + } + for (int i = 0; i < getImpactPeriodCount(); i++) { + if (!getImpactPeriod(i).isInitialized()) { + return false; + } + } for (int i = 0; i < getInformedEntityCount(); i++) { if (!getInformedEntity(i).isInitialized()) { return false; @@ -21657,9 +22063,35 @@ public Builder mergeFrom( } break; } // case 10 - case 42: { - com.google.transit.realtime.GtfsRealtime.EntitySelector m = - input.readMessage( + case 18: { + com.google.transit.realtime.GtfsRealtime.TimeRange m = + input.readMessage( + com.google.transit.realtime.GtfsRealtime.TimeRange.parser(), + extensionRegistry); + if (communicationPeriodBuilder_ == null) { + ensureCommunicationPeriodIsMutable(); + communicationPeriod_.add(m); + } else { + communicationPeriodBuilder_.addMessage(m); + } + break; + } // case 18 + case 26: { + com.google.transit.realtime.GtfsRealtime.TimeRange m = + input.readMessage( + com.google.transit.realtime.GtfsRealtime.TimeRange.parser(), + extensionRegistry); + if (impactPeriodBuilder_ == null) { + ensureImpactPeriodIsMutable(); + impactPeriod_.add(m); + } else { + impactPeriodBuilder_.addMessage(m); + } + break; + } // case 26 + case 42: { + com.google.transit.realtime.GtfsRealtime.EntitySelector m = + input.readMessage( com.google.transit.realtime.GtfsRealtime.EntitySelector.parser(), extensionRegistry); if (informedEntityBuilder_ == null) { @@ -21678,7 +22110,7 @@ public Builder mergeFrom( mergeUnknownVarintField(6, tmpRaw); } else { cause_ = tmpRaw; - bitField0_ |= 0x00000004; + bitField0_ |= 0x00000010; } break; } // case 48 @@ -21690,7 +22122,7 @@ public Builder mergeFrom( mergeUnknownVarintField(7, tmpRaw); } else { effect_ = tmpRaw; - bitField0_ |= 0x00000008; + bitField0_ |= 0x00000020; } break; } // case 56 @@ -21698,35 +22130,35 @@ public Builder mergeFrom( input.readMessage( internalGetUrlFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000010; + bitField0_ |= 0x00000040; break; } // case 66 case 82: { input.readMessage( internalGetHeaderTextFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000020; + bitField0_ |= 0x00000080; break; } // case 82 case 90: { input.readMessage( internalGetDescriptionTextFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000100; break; } // case 90 case 98: { input.readMessage( internalGetTtsHeaderTextFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000080; + bitField0_ |= 0x00000200; break; } // case 98 case 106: { input.readMessage( internalGetTtsDescriptionTextFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000100; + bitField0_ |= 0x00000400; break; } // case 106 case 112: { @@ -21737,7 +22169,7 @@ public Builder mergeFrom( mergeUnknownVarintField(14, tmpRaw); } else { severityLevel_ = tmpRaw; - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000800; } break; } // case 112 @@ -21745,28 +22177,28 @@ public Builder mergeFrom( input.readMessage( internalGetImageFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000400; + bitField0_ |= 0x00001000; break; } // case 122 case 130: { input.readMessage( internalGetImageAlternativeTextFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000800; + bitField0_ |= 0x00002000; break; } // case 130 case 138: { input.readMessage( internalGetCauseDetailFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00001000; + bitField0_ |= 0x00004000; break; } // case 138 case 146: { input.readMessage( internalGetEffectDetailFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00002000; + bitField0_ |= 0x00008000; break; } // case 146 default: { @@ -21796,350 +22228,1064 @@ private void ensureActivePeriodIsMutable() { } private com.google.protobuf.RepeatedFieldBuilder< - com.google.transit.realtime.GtfsRealtime.TimeRange, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder, com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder> activePeriodBuilder_; + com.google.transit.realtime.GtfsRealtime.TimeRange, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder, com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder> activePeriodBuilder_; + + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public java.util.List getActivePeriodList() { + if (activePeriodBuilder_ == null) { + return java.util.Collections.unmodifiableList(activePeriod_); + } else { + return activePeriodBuilder_.getMessageList(); + } + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public int getActivePeriodCount() { + if (activePeriodBuilder_ == null) { + return activePeriod_.size(); + } else { + return activePeriodBuilder_.getCount(); + } + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public com.google.transit.realtime.GtfsRealtime.TimeRange getActivePeriod(int index) { + if (activePeriodBuilder_ == null) { + return activePeriod_.get(index); + } else { + return activePeriodBuilder_.getMessage(index); + } + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public Builder setActivePeriod( + int index, com.google.transit.realtime.GtfsRealtime.TimeRange value) { + if (activePeriodBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureActivePeriodIsMutable(); + activePeriod_.set(index, value); + onChanged(); + } else { + activePeriodBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public Builder setActivePeriod( + int index, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder builderForValue) { + if (activePeriodBuilder_ == null) { + ensureActivePeriodIsMutable(); + activePeriod_.set(index, builderForValue.build()); + onChanged(); + } else { + activePeriodBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public Builder addActivePeriod(com.google.transit.realtime.GtfsRealtime.TimeRange value) { + if (activePeriodBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureActivePeriodIsMutable(); + activePeriod_.add(value); + onChanged(); + } else { + activePeriodBuilder_.addMessage(value); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public Builder addActivePeriod( + int index, com.google.transit.realtime.GtfsRealtime.TimeRange value) { + if (activePeriodBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureActivePeriodIsMutable(); + activePeriod_.add(index, value); + onChanged(); + } else { + activePeriodBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public Builder addActivePeriod( + com.google.transit.realtime.GtfsRealtime.TimeRange.Builder builderForValue) { + if (activePeriodBuilder_ == null) { + ensureActivePeriodIsMutable(); + activePeriod_.add(builderForValue.build()); + onChanged(); + } else { + activePeriodBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public Builder addActivePeriod( + int index, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder builderForValue) { + if (activePeriodBuilder_ == null) { + ensureActivePeriodIsMutable(); + activePeriod_.add(index, builderForValue.build()); + onChanged(); + } else { + activePeriodBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public Builder addAllActivePeriod( + java.lang.Iterable values) { + if (activePeriodBuilder_ == null) { + ensureActivePeriodIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, activePeriod_); + onChanged(); + } else { + activePeriodBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public Builder clearActivePeriod() { + if (activePeriodBuilder_ == null) { + activePeriod_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + activePeriodBuilder_.clear(); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public Builder removeActivePeriod(int index) { + if (activePeriodBuilder_ == null) { + ensureActivePeriodIsMutable(); + activePeriod_.remove(index); + onChanged(); + } else { + activePeriodBuilder_.remove(index); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public com.google.transit.realtime.GtfsRealtime.TimeRange.Builder getActivePeriodBuilder( + int index) { + return internalGetActivePeriodFieldBuilder().getBuilder(index); + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder getActivePeriodOrBuilder( + int index) { + if (activePeriodBuilder_ == null) { + return activePeriod_.get(index); } else { + return activePeriodBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public java.util.List + getActivePeriodOrBuilderList() { + if (activePeriodBuilder_ != null) { + return activePeriodBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(activePeriod_); + } + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public com.google.transit.realtime.GtfsRealtime.TimeRange.Builder addActivePeriodBuilder() { + return internalGetActivePeriodFieldBuilder().addBuilder( + com.google.transit.realtime.GtfsRealtime.TimeRange.getDefaultInstance()); + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public com.google.transit.realtime.GtfsRealtime.TimeRange.Builder addActivePeriodBuilder( + int index) { + return internalGetActivePeriodFieldBuilder().addBuilder( + index, com.google.transit.realtime.GtfsRealtime.TimeRange.getDefaultInstance()); + } + /** + *
+       * Time when the alert should be shown to the user. If missing, the
+       * alert will be shown as long as it appears in the feed.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * Should not be used - for backwards-compatibility only.
+       * 
+ * + * repeated .transit_realtime.TimeRange active_period = 1 [deprecated = true]; + */ + @java.lang.Deprecated public java.util.List + getActivePeriodBuilderList() { + return internalGetActivePeriodFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + com.google.transit.realtime.GtfsRealtime.TimeRange, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder, com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder> + internalGetActivePeriodFieldBuilder() { + if (activePeriodBuilder_ == null) { + activePeriodBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + com.google.transit.realtime.GtfsRealtime.TimeRange, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder, com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder>( + activePeriod_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + activePeriod_ = null; + } + return activePeriodBuilder_; + } + + private java.util.List communicationPeriod_ = + java.util.Collections.emptyList(); + private void ensureCommunicationPeriodIsMutable() { + if (!((bitField0_ & 0x00000002) != 0)) { + communicationPeriod_ = new java.util.ArrayList(communicationPeriod_); + bitField0_ |= 0x00000002; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.transit.realtime.GtfsRealtime.TimeRange, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder, com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder> communicationPeriodBuilder_; + + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public java.util.List getCommunicationPeriodList() { + if (communicationPeriodBuilder_ == null) { + return java.util.Collections.unmodifiableList(communicationPeriod_); + } else { + return communicationPeriodBuilder_.getMessageList(); + } + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public int getCommunicationPeriodCount() { + if (communicationPeriodBuilder_ == null) { + return communicationPeriod_.size(); + } else { + return communicationPeriodBuilder_.getCount(); + } + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public com.google.transit.realtime.GtfsRealtime.TimeRange getCommunicationPeriod(int index) { + if (communicationPeriodBuilder_ == null) { + return communicationPeriod_.get(index); + } else { + return communicationPeriodBuilder_.getMessage(index); + } + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public Builder setCommunicationPeriod( + int index, com.google.transit.realtime.GtfsRealtime.TimeRange value) { + if (communicationPeriodBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCommunicationPeriodIsMutable(); + communicationPeriod_.set(index, value); + onChanged(); + } else { + communicationPeriodBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public Builder setCommunicationPeriod( + int index, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder builderForValue) { + if (communicationPeriodBuilder_ == null) { + ensureCommunicationPeriodIsMutable(); + communicationPeriod_.set(index, builderForValue.build()); + onChanged(); + } else { + communicationPeriodBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public Builder addCommunicationPeriod(com.google.transit.realtime.GtfsRealtime.TimeRange value) { + if (communicationPeriodBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCommunicationPeriodIsMutable(); + communicationPeriod_.add(value); + onChanged(); + } else { + communicationPeriodBuilder_.addMessage(value); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public Builder addCommunicationPeriod( + int index, com.google.transit.realtime.GtfsRealtime.TimeRange value) { + if (communicationPeriodBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCommunicationPeriodIsMutable(); + communicationPeriod_.add(index, value); + onChanged(); + } else { + communicationPeriodBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public Builder addCommunicationPeriod( + com.google.transit.realtime.GtfsRealtime.TimeRange.Builder builderForValue) { + if (communicationPeriodBuilder_ == null) { + ensureCommunicationPeriodIsMutable(); + communicationPeriod_.add(builderForValue.build()); + onChanged(); + } else { + communicationPeriodBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public Builder addCommunicationPeriod( + int index, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder builderForValue) { + if (communicationPeriodBuilder_ == null) { + ensureCommunicationPeriodIsMutable(); + communicationPeriod_.add(index, builderForValue.build()); + onChanged(); + } else { + communicationPeriodBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public Builder addAllCommunicationPeriod( + java.lang.Iterable values) { + if (communicationPeriodBuilder_ == null) { + ensureCommunicationPeriodIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, communicationPeriod_); + onChanged(); + } else { + communicationPeriodBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public Builder clearCommunicationPeriod() { + if (communicationPeriodBuilder_ == null) { + communicationPeriod_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + communicationPeriodBuilder_.clear(); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public Builder removeCommunicationPeriod(int index) { + if (communicationPeriodBuilder_ == null) { + ensureCommunicationPeriodIsMutable(); + communicationPeriod_.remove(index); + onChanged(); + } else { + communicationPeriodBuilder_.remove(index); + } + return this; + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public com.google.transit.realtime.GtfsRealtime.TimeRange.Builder getCommunicationPeriodBuilder( + int index) { + return internalGetCommunicationPeriodFieldBuilder().getBuilder(index); + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder getCommunicationPeriodOrBuilder( + int index) { + if (communicationPeriodBuilder_ == null) { + return communicationPeriod_.get(index); } else { + return communicationPeriodBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public java.util.List + getCommunicationPeriodOrBuilderList() { + if (communicationPeriodBuilder_ != null) { + return communicationPeriodBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(communicationPeriod_); + } + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public com.google.transit.realtime.GtfsRealtime.TimeRange.Builder addCommunicationPeriodBuilder() { + return internalGetCommunicationPeriodFieldBuilder().addBuilder( + com.google.transit.realtime.GtfsRealtime.TimeRange.getDefaultInstance()); + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public com.google.transit.realtime.GtfsRealtime.TimeRange.Builder addCommunicationPeriodBuilder( + int index) { + return internalGetCommunicationPeriodFieldBuilder().addBuilder( + index, com.google.transit.realtime.GtfsRealtime.TimeRange.getDefaultInstance()); + } + /** + *
+       * Time when the alert should be shown to the user strictly for informative reasons.
+       * If missing, the consuming application can decide when it's appropriate to be shown.
+       * If multiple ranges are given, the alert will be shown during all of them.
+       * 
+ * + * repeated .transit_realtime.TimeRange communication_period = 2; + */ + public java.util.List + getCommunicationPeriodBuilderList() { + return internalGetCommunicationPeriodFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + com.google.transit.realtime.GtfsRealtime.TimeRange, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder, com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder> + internalGetCommunicationPeriodFieldBuilder() { + if (communicationPeriodBuilder_ == null) { + communicationPeriodBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + com.google.transit.realtime.GtfsRealtime.TimeRange, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder, com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder>( + communicationPeriod_, + ((bitField0_ & 0x00000002) != 0), + getParentForChildren(), + isClean()); + communicationPeriod_ = null; + } + return communicationPeriodBuilder_; + } + + private java.util.List impactPeriod_ = + java.util.Collections.emptyList(); + private void ensureImpactPeriodIsMutable() { + if (!((bitField0_ & 0x00000004) != 0)) { + impactPeriod_ = new java.util.ArrayList(impactPeriod_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.transit.realtime.GtfsRealtime.TimeRange, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder, com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder> impactPeriodBuilder_; /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public java.util.List getActivePeriodList() { - if (activePeriodBuilder_ == null) { - return java.util.Collections.unmodifiableList(activePeriod_); + public java.util.List getImpactPeriodList() { + if (impactPeriodBuilder_ == null) { + return java.util.Collections.unmodifiableList(impactPeriod_); } else { - return activePeriodBuilder_.getMessageList(); + return impactPeriodBuilder_.getMessageList(); } } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public int getActivePeriodCount() { - if (activePeriodBuilder_ == null) { - return activePeriod_.size(); + public int getImpactPeriodCount() { + if (impactPeriodBuilder_ == null) { + return impactPeriod_.size(); } else { - return activePeriodBuilder_.getCount(); + return impactPeriodBuilder_.getCount(); } } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public com.google.transit.realtime.GtfsRealtime.TimeRange getActivePeriod(int index) { - if (activePeriodBuilder_ == null) { - return activePeriod_.get(index); + public com.google.transit.realtime.GtfsRealtime.TimeRange getImpactPeriod(int index) { + if (impactPeriodBuilder_ == null) { + return impactPeriod_.get(index); } else { - return activePeriodBuilder_.getMessage(index); + return impactPeriodBuilder_.getMessage(index); } } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public Builder setActivePeriod( + public Builder setImpactPeriod( int index, com.google.transit.realtime.GtfsRealtime.TimeRange value) { - if (activePeriodBuilder_ == null) { + if (impactPeriodBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - ensureActivePeriodIsMutable(); - activePeriod_.set(index, value); + ensureImpactPeriodIsMutable(); + impactPeriod_.set(index, value); onChanged(); } else { - activePeriodBuilder_.setMessage(index, value); + impactPeriodBuilder_.setMessage(index, value); } return this; } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public Builder setActivePeriod( + public Builder setImpactPeriod( int index, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder builderForValue) { - if (activePeriodBuilder_ == null) { - ensureActivePeriodIsMutable(); - activePeriod_.set(index, builderForValue.build()); + if (impactPeriodBuilder_ == null) { + ensureImpactPeriodIsMutable(); + impactPeriod_.set(index, builderForValue.build()); onChanged(); } else { - activePeriodBuilder_.setMessage(index, builderForValue.build()); + impactPeriodBuilder_.setMessage(index, builderForValue.build()); } return this; } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public Builder addActivePeriod(com.google.transit.realtime.GtfsRealtime.TimeRange value) { - if (activePeriodBuilder_ == null) { + public Builder addImpactPeriod(com.google.transit.realtime.GtfsRealtime.TimeRange value) { + if (impactPeriodBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - ensureActivePeriodIsMutable(); - activePeriod_.add(value); + ensureImpactPeriodIsMutable(); + impactPeriod_.add(value); onChanged(); } else { - activePeriodBuilder_.addMessage(value); + impactPeriodBuilder_.addMessage(value); } return this; } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public Builder addActivePeriod( + public Builder addImpactPeriod( int index, com.google.transit.realtime.GtfsRealtime.TimeRange value) { - if (activePeriodBuilder_ == null) { + if (impactPeriodBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - ensureActivePeriodIsMutable(); - activePeriod_.add(index, value); + ensureImpactPeriodIsMutable(); + impactPeriod_.add(index, value); onChanged(); } else { - activePeriodBuilder_.addMessage(index, value); + impactPeriodBuilder_.addMessage(index, value); } return this; } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public Builder addActivePeriod( + public Builder addImpactPeriod( com.google.transit.realtime.GtfsRealtime.TimeRange.Builder builderForValue) { - if (activePeriodBuilder_ == null) { - ensureActivePeriodIsMutable(); - activePeriod_.add(builderForValue.build()); + if (impactPeriodBuilder_ == null) { + ensureImpactPeriodIsMutable(); + impactPeriod_.add(builderForValue.build()); onChanged(); } else { - activePeriodBuilder_.addMessage(builderForValue.build()); + impactPeriodBuilder_.addMessage(builderForValue.build()); } return this; } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public Builder addActivePeriod( + public Builder addImpactPeriod( int index, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder builderForValue) { - if (activePeriodBuilder_ == null) { - ensureActivePeriodIsMutable(); - activePeriod_.add(index, builderForValue.build()); + if (impactPeriodBuilder_ == null) { + ensureImpactPeriodIsMutable(); + impactPeriod_.add(index, builderForValue.build()); onChanged(); } else { - activePeriodBuilder_.addMessage(index, builderForValue.build()); + impactPeriodBuilder_.addMessage(index, builderForValue.build()); } return this; } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public Builder addAllActivePeriod( + public Builder addAllImpactPeriod( java.lang.Iterable values) { - if (activePeriodBuilder_ == null) { - ensureActivePeriodIsMutable(); + if (impactPeriodBuilder_ == null) { + ensureImpactPeriodIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, activePeriod_); + values, impactPeriod_); onChanged(); } else { - activePeriodBuilder_.addAllMessages(values); + impactPeriodBuilder_.addAllMessages(values); } return this; } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public Builder clearActivePeriod() { - if (activePeriodBuilder_ == null) { - activePeriod_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); + public Builder clearImpactPeriod() { + if (impactPeriodBuilder_ == null) { + impactPeriod_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); onChanged(); } else { - activePeriodBuilder_.clear(); + impactPeriodBuilder_.clear(); } return this; } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public Builder removeActivePeriod(int index) { - if (activePeriodBuilder_ == null) { - ensureActivePeriodIsMutable(); - activePeriod_.remove(index); + public Builder removeImpactPeriod(int index) { + if (impactPeriodBuilder_ == null) { + ensureImpactPeriodIsMutable(); + impactPeriod_.remove(index); onChanged(); } else { - activePeriodBuilder_.remove(index); + impactPeriodBuilder_.remove(index); } return this; } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public com.google.transit.realtime.GtfsRealtime.TimeRange.Builder getActivePeriodBuilder( + public com.google.transit.realtime.GtfsRealtime.TimeRange.Builder getImpactPeriodBuilder( int index) { - return internalGetActivePeriodFieldBuilder().getBuilder(index); + return internalGetImpactPeriodFieldBuilder().getBuilder(index); } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder getActivePeriodOrBuilder( + public com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder getImpactPeriodOrBuilder( int index) { - if (activePeriodBuilder_ == null) { - return activePeriod_.get(index); } else { - return activePeriodBuilder_.getMessageOrBuilder(index); + if (impactPeriodBuilder_ == null) { + return impactPeriod_.get(index); } else { + return impactPeriodBuilder_.getMessageOrBuilder(index); } } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ public java.util.List - getActivePeriodOrBuilderList() { - if (activePeriodBuilder_ != null) { - return activePeriodBuilder_.getMessageOrBuilderList(); + getImpactPeriodOrBuilderList() { + if (impactPeriodBuilder_ != null) { + return impactPeriodBuilder_.getMessageOrBuilderList(); } else { - return java.util.Collections.unmodifiableList(activePeriod_); + return java.util.Collections.unmodifiableList(impactPeriod_); } } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public com.google.transit.realtime.GtfsRealtime.TimeRange.Builder addActivePeriodBuilder() { - return internalGetActivePeriodFieldBuilder().addBuilder( + public com.google.transit.realtime.GtfsRealtime.TimeRange.Builder addImpactPeriodBuilder() { + return internalGetImpactPeriodFieldBuilder().addBuilder( com.google.transit.realtime.GtfsRealtime.TimeRange.getDefaultInstance()); } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ - public com.google.transit.realtime.GtfsRealtime.TimeRange.Builder addActivePeriodBuilder( + public com.google.transit.realtime.GtfsRealtime.TimeRange.Builder addImpactPeriodBuilder( int index) { - return internalGetActivePeriodFieldBuilder().addBuilder( + return internalGetImpactPeriodFieldBuilder().addBuilder( index, com.google.transit.realtime.GtfsRealtime.TimeRange.getDefaultInstance()); } /** *
-       * Time when the alert should be shown to the user. If missing, the
-       * alert will be shown as long as it appears in the feed.
-       * If multiple ranges are given, the alert will be shown during all of them.
+       * Time when the services are affected by the alert. If communication_period is specified,
+       * every time interval in impact_period must be fully contained within at least
+       * one time interval of communication_period.
        * 
* - * repeated .transit_realtime.TimeRange active_period = 1; + * repeated .transit_realtime.TimeRange impact_period = 3; */ public java.util.List - getActivePeriodBuilderList() { - return internalGetActivePeriodFieldBuilder().getBuilderList(); + getImpactPeriodBuilderList() { + return internalGetImpactPeriodFieldBuilder().getBuilderList(); } private com.google.protobuf.RepeatedFieldBuilder< com.google.transit.realtime.GtfsRealtime.TimeRange, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder, com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder> - internalGetActivePeriodFieldBuilder() { - if (activePeriodBuilder_ == null) { - activePeriodBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + internalGetImpactPeriodFieldBuilder() { + if (impactPeriodBuilder_ == null) { + impactPeriodBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< com.google.transit.realtime.GtfsRealtime.TimeRange, com.google.transit.realtime.GtfsRealtime.TimeRange.Builder, com.google.transit.realtime.GtfsRealtime.TimeRangeOrBuilder>( - activePeriod_, - ((bitField0_ & 0x00000001) != 0), + impactPeriod_, + ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean()); - activePeriod_ = null; + impactPeriod_ = null; } - return activePeriodBuilder_; + return impactPeriodBuilder_; } private java.util.List informedEntity_ = java.util.Collections.emptyList(); private void ensureInformedEntityIsMutable() { - if (!((bitField0_ & 0x00000002) != 0)) { + if (!((bitField0_ & 0x00000008) != 0)) { informedEntity_ = new java.util.ArrayList(informedEntity_); - bitField0_ |= 0x00000002; + bitField0_ |= 0x00000008; } } @@ -22333,7 +23479,7 @@ public Builder addAllInformedEntity( public Builder clearInformedEntity() { if (informedEntityBuilder_ == null) { informedEntity_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); + bitField0_ = (bitField0_ & ~0x00000008); onChanged(); } else { informedEntityBuilder_.clear(); @@ -22438,7 +23584,7 @@ public com.google.transit.realtime.GtfsRealtime.EntitySelector.Builder addInform informedEntityBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< com.google.transit.realtime.GtfsRealtime.EntitySelector, com.google.transit.realtime.GtfsRealtime.EntitySelector.Builder, com.google.transit.realtime.GtfsRealtime.EntitySelectorOrBuilder>( informedEntity_, - ((bitField0_ & 0x00000002) != 0), + ((bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean()); informedEntity_ = null; @@ -22452,7 +23598,7 @@ public com.google.transit.realtime.GtfsRealtime.EntitySelector.Builder addInform * @return Whether the cause field is set. */ @java.lang.Override public boolean hasCause() { - return ((bitField0_ & 0x00000004) != 0); + return ((bitField0_ & 0x00000010) != 0); } /** * optional .transit_realtime.Alert.Cause cause = 6 [default = UNKNOWN_CAUSE]; @@ -22470,7 +23616,7 @@ public com.google.transit.realtime.GtfsRealtime.Alert.Cause getCause() { */ public Builder setCause(com.google.transit.realtime.GtfsRealtime.Alert.Cause value) { if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000004; + bitField0_ |= 0x00000010; cause_ = value.getNumber(); onChanged(); return this; @@ -22480,7 +23626,7 @@ public Builder setCause(com.google.transit.realtime.GtfsRealtime.Alert.Cause val * @return This builder for chaining. */ public Builder clearCause() { - bitField0_ = (bitField0_ & ~0x00000004); + bitField0_ = (bitField0_ & ~0x00000010); cause_ = 1; onChanged(); return this; @@ -22492,7 +23638,7 @@ public Builder clearCause() { * @return Whether the effect field is set. */ @java.lang.Override public boolean hasEffect() { - return ((bitField0_ & 0x00000008) != 0); + return ((bitField0_ & 0x00000020) != 0); } /** * optional .transit_realtime.Alert.Effect effect = 7 [default = UNKNOWN_EFFECT]; @@ -22510,7 +23656,7 @@ public com.google.transit.realtime.GtfsRealtime.Alert.Effect getEffect() { */ public Builder setEffect(com.google.transit.realtime.GtfsRealtime.Alert.Effect value) { if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000008; + bitField0_ |= 0x00000020; effect_ = value.getNumber(); onChanged(); return this; @@ -22520,7 +23666,7 @@ public Builder setEffect(com.google.transit.realtime.GtfsRealtime.Alert.Effect v * @return This builder for chaining. */ public Builder clearEffect() { - bitField0_ = (bitField0_ & ~0x00000008); + bitField0_ = (bitField0_ & ~0x00000020); effect_ = 8; onChanged(); return this; @@ -22538,7 +23684,7 @@ public Builder clearEffect() { * @return Whether the url field is set. */ public boolean hasUrl() { - return ((bitField0_ & 0x00000010) != 0); + return ((bitField0_ & 0x00000040) != 0); } /** *
@@ -22571,7 +23717,7 @@ public Builder setUrl(com.google.transit.realtime.GtfsRealtime.TranslatedString
         } else {
           urlBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000010;
+        bitField0_ |= 0x00000040;
         onChanged();
         return this;
       }
@@ -22589,7 +23735,7 @@ public Builder setUrl(
         } else {
           urlBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000010;
+        bitField0_ |= 0x00000040;
         onChanged();
         return this;
       }
@@ -22602,7 +23748,7 @@ public Builder setUrl(
        */
       public Builder mergeUrl(com.google.transit.realtime.GtfsRealtime.TranslatedString value) {
         if (urlBuilder_ == null) {
-          if (((bitField0_ & 0x00000010) != 0) &&
+          if (((bitField0_ & 0x00000040) != 0) &&
             url_ != null &&
             url_ != com.google.transit.realtime.GtfsRealtime.TranslatedString.getDefaultInstance()) {
             getUrlBuilder().mergeFrom(value);
@@ -22613,7 +23759,7 @@ public Builder mergeUrl(com.google.transit.realtime.GtfsRealtime.TranslatedStrin
           urlBuilder_.mergeFrom(value);
         }
         if (url_ != null) {
-          bitField0_ |= 0x00000010;
+          bitField0_ |= 0x00000040;
           onChanged();
         }
         return this;
@@ -22626,7 +23772,7 @@ public Builder mergeUrl(com.google.transit.realtime.GtfsRealtime.TranslatedStrin
        * optional .transit_realtime.TranslatedString url = 8;
        */
       public Builder clearUrl() {
-        bitField0_ = (bitField0_ & ~0x00000010);
+        bitField0_ = (bitField0_ & ~0x00000040);
         url_ = null;
         if (urlBuilder_ != null) {
           urlBuilder_.dispose();
@@ -22643,7 +23789,7 @@ public Builder clearUrl() {
        * optional .transit_realtime.TranslatedString url = 8;
        */
       public com.google.transit.realtime.GtfsRealtime.TranslatedString.Builder getUrlBuilder() {
-        bitField0_ |= 0x00000010;
+        bitField0_ |= 0x00000040;
         onChanged();
         return internalGetUrlFieldBuilder().getBuilder();
       }
@@ -22695,7 +23841,7 @@ public com.google.transit.realtime.GtfsRealtime.TranslatedStringOrBuilder getUrl
        * @return Whether the headerText field is set.
        */
       public boolean hasHeaderText() {
-        return ((bitField0_ & 0x00000020) != 0);
+        return ((bitField0_ & 0x00000080) != 0);
       }
       /**
        * 
@@ -22728,7 +23874,7 @@ public Builder setHeaderText(com.google.transit.realtime.GtfsRealtime.Translated
         } else {
           headerTextBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000020;
+        bitField0_ |= 0x00000080;
         onChanged();
         return this;
       }
@@ -22746,7 +23892,7 @@ public Builder setHeaderText(
         } else {
           headerTextBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000020;
+        bitField0_ |= 0x00000080;
         onChanged();
         return this;
       }
@@ -22759,7 +23905,7 @@ public Builder setHeaderText(
        */
       public Builder mergeHeaderText(com.google.transit.realtime.GtfsRealtime.TranslatedString value) {
         if (headerTextBuilder_ == null) {
-          if (((bitField0_ & 0x00000020) != 0) &&
+          if (((bitField0_ & 0x00000080) != 0) &&
             headerText_ != null &&
             headerText_ != com.google.transit.realtime.GtfsRealtime.TranslatedString.getDefaultInstance()) {
             getHeaderTextBuilder().mergeFrom(value);
@@ -22770,7 +23916,7 @@ public Builder mergeHeaderText(com.google.transit.realtime.GtfsRealtime.Translat
           headerTextBuilder_.mergeFrom(value);
         }
         if (headerText_ != null) {
-          bitField0_ |= 0x00000020;
+          bitField0_ |= 0x00000080;
           onChanged();
         }
         return this;
@@ -22783,7 +23929,7 @@ public Builder mergeHeaderText(com.google.transit.realtime.GtfsRealtime.Translat
        * optional .transit_realtime.TranslatedString header_text = 10;
        */
       public Builder clearHeaderText() {
-        bitField0_ = (bitField0_ & ~0x00000020);
+        bitField0_ = (bitField0_ & ~0x00000080);
         headerText_ = null;
         if (headerTextBuilder_ != null) {
           headerTextBuilder_.dispose();
@@ -22800,7 +23946,7 @@ public Builder clearHeaderText() {
        * optional .transit_realtime.TranslatedString header_text = 10;
        */
       public com.google.transit.realtime.GtfsRealtime.TranslatedString.Builder getHeaderTextBuilder() {
-        bitField0_ |= 0x00000020;
+        bitField0_ |= 0x00000080;
         onChanged();
         return internalGetHeaderTextFieldBuilder().getBuilder();
       }
@@ -22853,7 +23999,7 @@ public com.google.transit.realtime.GtfsRealtime.TranslatedStringOrBuilder getHea
        * @return Whether the descriptionText field is set.
        */
       public boolean hasDescriptionText() {
-        return ((bitField0_ & 0x00000040) != 0);
+        return ((bitField0_ & 0x00000100) != 0);
       }
       /**
        * 
@@ -22888,7 +24034,7 @@ public Builder setDescriptionText(com.google.transit.realtime.GtfsRealtime.Trans
         } else {
           descriptionTextBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000040;
+        bitField0_ |= 0x00000100;
         onChanged();
         return this;
       }
@@ -22907,7 +24053,7 @@ public Builder setDescriptionText(
         } else {
           descriptionTextBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000040;
+        bitField0_ |= 0x00000100;
         onChanged();
         return this;
       }
@@ -22921,7 +24067,7 @@ public Builder setDescriptionText(
        */
       public Builder mergeDescriptionText(com.google.transit.realtime.GtfsRealtime.TranslatedString value) {
         if (descriptionTextBuilder_ == null) {
-          if (((bitField0_ & 0x00000040) != 0) &&
+          if (((bitField0_ & 0x00000100) != 0) &&
             descriptionText_ != null &&
             descriptionText_ != com.google.transit.realtime.GtfsRealtime.TranslatedString.getDefaultInstance()) {
             getDescriptionTextBuilder().mergeFrom(value);
@@ -22932,7 +24078,7 @@ public Builder mergeDescriptionText(com.google.transit.realtime.GtfsRealtime.Tra
           descriptionTextBuilder_.mergeFrom(value);
         }
         if (descriptionText_ != null) {
-          bitField0_ |= 0x00000040;
+          bitField0_ |= 0x00000100;
           onChanged();
         }
         return this;
@@ -22946,7 +24092,7 @@ public Builder mergeDescriptionText(com.google.transit.realtime.GtfsRealtime.Tra
        * optional .transit_realtime.TranslatedString description_text = 11;
        */
       public Builder clearDescriptionText() {
-        bitField0_ = (bitField0_ & ~0x00000040);
+        bitField0_ = (bitField0_ & ~0x00000100);
         descriptionText_ = null;
         if (descriptionTextBuilder_ != null) {
           descriptionTextBuilder_.dispose();
@@ -22964,7 +24110,7 @@ public Builder clearDescriptionText() {
        * optional .transit_realtime.TranslatedString description_text = 11;
        */
       public com.google.transit.realtime.GtfsRealtime.TranslatedString.Builder getDescriptionTextBuilder() {
-        bitField0_ |= 0x00000040;
+        bitField0_ |= 0x00000100;
         onChanged();
         return internalGetDescriptionTextFieldBuilder().getBuilder();
       }
@@ -23018,7 +24164,7 @@ public com.google.transit.realtime.GtfsRealtime.TranslatedStringOrBuilder getDes
        * @return Whether the ttsHeaderText field is set.
        */
       public boolean hasTtsHeaderText() {
-        return ((bitField0_ & 0x00000080) != 0);
+        return ((bitField0_ & 0x00000200) != 0);
       }
       /**
        * 
@@ -23051,7 +24197,7 @@ public Builder setTtsHeaderText(com.google.transit.realtime.GtfsRealtime.Transla
         } else {
           ttsHeaderTextBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000080;
+        bitField0_ |= 0x00000200;
         onChanged();
         return this;
       }
@@ -23069,7 +24215,7 @@ public Builder setTtsHeaderText(
         } else {
           ttsHeaderTextBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000080;
+        bitField0_ |= 0x00000200;
         onChanged();
         return this;
       }
@@ -23082,7 +24228,7 @@ public Builder setTtsHeaderText(
        */
       public Builder mergeTtsHeaderText(com.google.transit.realtime.GtfsRealtime.TranslatedString value) {
         if (ttsHeaderTextBuilder_ == null) {
-          if (((bitField0_ & 0x00000080) != 0) &&
+          if (((bitField0_ & 0x00000200) != 0) &&
             ttsHeaderText_ != null &&
             ttsHeaderText_ != com.google.transit.realtime.GtfsRealtime.TranslatedString.getDefaultInstance()) {
             getTtsHeaderTextBuilder().mergeFrom(value);
@@ -23093,7 +24239,7 @@ public Builder mergeTtsHeaderText(com.google.transit.realtime.GtfsRealtime.Trans
           ttsHeaderTextBuilder_.mergeFrom(value);
         }
         if (ttsHeaderText_ != null) {
-          bitField0_ |= 0x00000080;
+          bitField0_ |= 0x00000200;
           onChanged();
         }
         return this;
@@ -23106,7 +24252,7 @@ public Builder mergeTtsHeaderText(com.google.transit.realtime.GtfsRealtime.Trans
        * optional .transit_realtime.TranslatedString tts_header_text = 12;
        */
       public Builder clearTtsHeaderText() {
-        bitField0_ = (bitField0_ & ~0x00000080);
+        bitField0_ = (bitField0_ & ~0x00000200);
         ttsHeaderText_ = null;
         if (ttsHeaderTextBuilder_ != null) {
           ttsHeaderTextBuilder_.dispose();
@@ -23123,7 +24269,7 @@ public Builder clearTtsHeaderText() {
        * optional .transit_realtime.TranslatedString tts_header_text = 12;
        */
       public com.google.transit.realtime.GtfsRealtime.TranslatedString.Builder getTtsHeaderTextBuilder() {
-        bitField0_ |= 0x00000080;
+        bitField0_ |= 0x00000200;
         onChanged();
         return internalGetTtsHeaderTextFieldBuilder().getBuilder();
       }
@@ -23175,7 +24321,7 @@ public com.google.transit.realtime.GtfsRealtime.TranslatedStringOrBuilder getTts
        * @return Whether the ttsDescriptionText field is set.
        */
       public boolean hasTtsDescriptionText() {
-        return ((bitField0_ & 0x00000100) != 0);
+        return ((bitField0_ & 0x00000400) != 0);
       }
       /**
        * 
@@ -23208,7 +24354,7 @@ public Builder setTtsDescriptionText(com.google.transit.realtime.GtfsRealtime.Tr
         } else {
           ttsDescriptionTextBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000100;
+        bitField0_ |= 0x00000400;
         onChanged();
         return this;
       }
@@ -23226,7 +24372,7 @@ public Builder setTtsDescriptionText(
         } else {
           ttsDescriptionTextBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000100;
+        bitField0_ |= 0x00000400;
         onChanged();
         return this;
       }
@@ -23239,7 +24385,7 @@ public Builder setTtsDescriptionText(
        */
       public Builder mergeTtsDescriptionText(com.google.transit.realtime.GtfsRealtime.TranslatedString value) {
         if (ttsDescriptionTextBuilder_ == null) {
-          if (((bitField0_ & 0x00000100) != 0) &&
+          if (((bitField0_ & 0x00000400) != 0) &&
             ttsDescriptionText_ != null &&
             ttsDescriptionText_ != com.google.transit.realtime.GtfsRealtime.TranslatedString.getDefaultInstance()) {
             getTtsDescriptionTextBuilder().mergeFrom(value);
@@ -23250,7 +24396,7 @@ public Builder mergeTtsDescriptionText(com.google.transit.realtime.GtfsRealtime.
           ttsDescriptionTextBuilder_.mergeFrom(value);
         }
         if (ttsDescriptionText_ != null) {
-          bitField0_ |= 0x00000100;
+          bitField0_ |= 0x00000400;
           onChanged();
         }
         return this;
@@ -23263,7 +24409,7 @@ public Builder mergeTtsDescriptionText(com.google.transit.realtime.GtfsRealtime.
        * optional .transit_realtime.TranslatedString tts_description_text = 13;
        */
       public Builder clearTtsDescriptionText() {
-        bitField0_ = (bitField0_ & ~0x00000100);
+        bitField0_ = (bitField0_ & ~0x00000400);
         ttsDescriptionText_ = null;
         if (ttsDescriptionTextBuilder_ != null) {
           ttsDescriptionTextBuilder_.dispose();
@@ -23280,7 +24426,7 @@ public Builder clearTtsDescriptionText() {
        * optional .transit_realtime.TranslatedString tts_description_text = 13;
        */
       public com.google.transit.realtime.GtfsRealtime.TranslatedString.Builder getTtsDescriptionTextBuilder() {
-        bitField0_ |= 0x00000100;
+        bitField0_ |= 0x00000400;
         onChanged();
         return internalGetTtsDescriptionTextFieldBuilder().getBuilder();
       }
@@ -23326,7 +24472,7 @@ public com.google.transit.realtime.GtfsRealtime.TranslatedStringOrBuilder getTts
        * @return Whether the severityLevel field is set.
        */
       @java.lang.Override public boolean hasSeverityLevel() {
-        return ((bitField0_ & 0x00000200) != 0);
+        return ((bitField0_ & 0x00000800) != 0);
       }
       /**
        * optional .transit_realtime.Alert.SeverityLevel severity_level = 14 [default = UNKNOWN_SEVERITY];
@@ -23344,7 +24490,7 @@ public com.google.transit.realtime.GtfsRealtime.Alert.SeverityLevel getSeverityL
        */
       public Builder setSeverityLevel(com.google.transit.realtime.GtfsRealtime.Alert.SeverityLevel value) {
         if (value == null) { throw new NullPointerException(); }
-        bitField0_ |= 0x00000200;
+        bitField0_ |= 0x00000800;
         severityLevel_ = value.getNumber();
         onChanged();
         return this;
@@ -23354,7 +24500,7 @@ public Builder setSeverityLevel(com.google.transit.realtime.GtfsRealtime.Alert.S
        * @return This builder for chaining.
        */
       public Builder clearSeverityLevel() {
-        bitField0_ = (bitField0_ & ~0x00000200);
+        bitField0_ = (bitField0_ & ~0x00000800);
         severityLevel_ = 1;
         onChanged();
         return this;
@@ -23374,7 +24520,7 @@ public Builder clearSeverityLevel() {
        * @return Whether the image field is set.
        */
       public boolean hasImage() {
-        return ((bitField0_ & 0x00000400) != 0);
+        return ((bitField0_ & 0x00001000) != 0);
       }
       /**
        * 
@@ -23411,7 +24557,7 @@ public Builder setImage(com.google.transit.realtime.GtfsRealtime.TranslatedImage
         } else {
           imageBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000400;
+        bitField0_ |= 0x00001000;
         onChanged();
         return this;
       }
@@ -23431,7 +24577,7 @@ public Builder setImage(
         } else {
           imageBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000400;
+        bitField0_ |= 0x00001000;
         onChanged();
         return this;
       }
@@ -23446,7 +24592,7 @@ public Builder setImage(
        */
       public Builder mergeImage(com.google.transit.realtime.GtfsRealtime.TranslatedImage value) {
         if (imageBuilder_ == null) {
-          if (((bitField0_ & 0x00000400) != 0) &&
+          if (((bitField0_ & 0x00001000) != 0) &&
             image_ != null &&
             image_ != com.google.transit.realtime.GtfsRealtime.TranslatedImage.getDefaultInstance()) {
             getImageBuilder().mergeFrom(value);
@@ -23457,7 +24603,7 @@ public Builder mergeImage(com.google.transit.realtime.GtfsRealtime.TranslatedIma
           imageBuilder_.mergeFrom(value);
         }
         if (image_ != null) {
-          bitField0_ |= 0x00000400;
+          bitField0_ |= 0x00001000;
           onChanged();
         }
         return this;
@@ -23472,7 +24618,7 @@ public Builder mergeImage(com.google.transit.realtime.GtfsRealtime.TranslatedIma
        * optional .transit_realtime.TranslatedImage image = 15;
        */
       public Builder clearImage() {
-        bitField0_ = (bitField0_ & ~0x00000400);
+        bitField0_ = (bitField0_ & ~0x00001000);
         image_ = null;
         if (imageBuilder_ != null) {
           imageBuilder_.dispose();
@@ -23491,7 +24637,7 @@ public Builder clearImage() {
        * optional .transit_realtime.TranslatedImage image = 15;
        */
       public com.google.transit.realtime.GtfsRealtime.TranslatedImage.Builder getImageBuilder() {
-        bitField0_ |= 0x00000400;
+        bitField0_ |= 0x00001000;
         onChanged();
         return internalGetImageFieldBuilder().getBuilder();
       }
@@ -23549,7 +24695,7 @@ public com.google.transit.realtime.GtfsRealtime.TranslatedImageOrBuilder getImag
        * @return Whether the imageAlternativeText field is set.
        */
       public boolean hasImageAlternativeText() {
-        return ((bitField0_ & 0x00000800) != 0);
+        return ((bitField0_ & 0x00002000) != 0);
       }
       /**
        * 
@@ -23586,7 +24732,7 @@ public Builder setImageAlternativeText(com.google.transit.realtime.GtfsRealtime.
         } else {
           imageAlternativeTextBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000800;
+        bitField0_ |= 0x00002000;
         onChanged();
         return this;
       }
@@ -23606,7 +24752,7 @@ public Builder setImageAlternativeText(
         } else {
           imageAlternativeTextBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000800;
+        bitField0_ |= 0x00002000;
         onChanged();
         return this;
       }
@@ -23621,7 +24767,7 @@ public Builder setImageAlternativeText(
        */
       public Builder mergeImageAlternativeText(com.google.transit.realtime.GtfsRealtime.TranslatedString value) {
         if (imageAlternativeTextBuilder_ == null) {
-          if (((bitField0_ & 0x00000800) != 0) &&
+          if (((bitField0_ & 0x00002000) != 0) &&
             imageAlternativeText_ != null &&
             imageAlternativeText_ != com.google.transit.realtime.GtfsRealtime.TranslatedString.getDefaultInstance()) {
             getImageAlternativeTextBuilder().mergeFrom(value);
@@ -23632,7 +24778,7 @@ public Builder mergeImageAlternativeText(com.google.transit.realtime.GtfsRealtim
           imageAlternativeTextBuilder_.mergeFrom(value);
         }
         if (imageAlternativeText_ != null) {
-          bitField0_ |= 0x00000800;
+          bitField0_ |= 0x00002000;
           onChanged();
         }
         return this;
@@ -23647,7 +24793,7 @@ public Builder mergeImageAlternativeText(com.google.transit.realtime.GtfsRealtim
        * optional .transit_realtime.TranslatedString image_alternative_text = 16;
        */
       public Builder clearImageAlternativeText() {
-        bitField0_ = (bitField0_ & ~0x00000800);
+        bitField0_ = (bitField0_ & ~0x00002000);
         imageAlternativeText_ = null;
         if (imageAlternativeTextBuilder_ != null) {
           imageAlternativeTextBuilder_.dispose();
@@ -23666,7 +24812,7 @@ public Builder clearImageAlternativeText() {
        * optional .transit_realtime.TranslatedString image_alternative_text = 16;
        */
       public com.google.transit.realtime.GtfsRealtime.TranslatedString.Builder getImageAlternativeTextBuilder() {
-        bitField0_ |= 0x00000800;
+        bitField0_ |= 0x00002000;
         onChanged();
         return internalGetImageAlternativeTextFieldBuilder().getBuilder();
       }
@@ -23723,7 +24869,7 @@ public com.google.transit.realtime.GtfsRealtime.TranslatedStringOrBuilder getIma
        * @return Whether the causeDetail field is set.
        */
       public boolean hasCauseDetail() {
-        return ((bitField0_ & 0x00001000) != 0);
+        return ((bitField0_ & 0x00004000) != 0);
       }
       /**
        * 
@@ -23758,7 +24904,7 @@ public Builder setCauseDetail(com.google.transit.realtime.GtfsRealtime.Translate
         } else {
           causeDetailBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00001000;
+        bitField0_ |= 0x00004000;
         onChanged();
         return this;
       }
@@ -23777,7 +24923,7 @@ public Builder setCauseDetail(
         } else {
           causeDetailBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00001000;
+        bitField0_ |= 0x00004000;
         onChanged();
         return this;
       }
@@ -23791,7 +24937,7 @@ public Builder setCauseDetail(
        */
       public Builder mergeCauseDetail(com.google.transit.realtime.GtfsRealtime.TranslatedString value) {
         if (causeDetailBuilder_ == null) {
-          if (((bitField0_ & 0x00001000) != 0) &&
+          if (((bitField0_ & 0x00004000) != 0) &&
             causeDetail_ != null &&
             causeDetail_ != com.google.transit.realtime.GtfsRealtime.TranslatedString.getDefaultInstance()) {
             getCauseDetailBuilder().mergeFrom(value);
@@ -23802,7 +24948,7 @@ public Builder mergeCauseDetail(com.google.transit.realtime.GtfsRealtime.Transla
           causeDetailBuilder_.mergeFrom(value);
         }
         if (causeDetail_ != null) {
-          bitField0_ |= 0x00001000;
+          bitField0_ |= 0x00004000;
           onChanged();
         }
         return this;
@@ -23816,7 +24962,7 @@ public Builder mergeCauseDetail(com.google.transit.realtime.GtfsRealtime.Transla
        * optional .transit_realtime.TranslatedString cause_detail = 17;
        */
       public Builder clearCauseDetail() {
-        bitField0_ = (bitField0_ & ~0x00001000);
+        bitField0_ = (bitField0_ & ~0x00004000);
         causeDetail_ = null;
         if (causeDetailBuilder_ != null) {
           causeDetailBuilder_.dispose();
@@ -23834,7 +24980,7 @@ public Builder clearCauseDetail() {
        * optional .transit_realtime.TranslatedString cause_detail = 17;
        */
       public com.google.transit.realtime.GtfsRealtime.TranslatedString.Builder getCauseDetailBuilder() {
-        bitField0_ |= 0x00001000;
+        bitField0_ |= 0x00004000;
         onChanged();
         return internalGetCauseDetailFieldBuilder().getBuilder();
       }
@@ -23889,7 +25035,7 @@ public com.google.transit.realtime.GtfsRealtime.TranslatedStringOrBuilder getCau
        * @return Whether the effectDetail field is set.
        */
       public boolean hasEffectDetail() {
-        return ((bitField0_ & 0x00002000) != 0);
+        return ((bitField0_ & 0x00008000) != 0);
       }
       /**
        * 
@@ -23924,7 +25070,7 @@ public Builder setEffectDetail(com.google.transit.realtime.GtfsRealtime.Translat
         } else {
           effectDetailBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00002000;
+        bitField0_ |= 0x00008000;
         onChanged();
         return this;
       }
@@ -23943,7 +25089,7 @@ public Builder setEffectDetail(
         } else {
           effectDetailBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00002000;
+        bitField0_ |= 0x00008000;
         onChanged();
         return this;
       }
@@ -23957,7 +25103,7 @@ public Builder setEffectDetail(
        */
       public Builder mergeEffectDetail(com.google.transit.realtime.GtfsRealtime.TranslatedString value) {
         if (effectDetailBuilder_ == null) {
-          if (((bitField0_ & 0x00002000) != 0) &&
+          if (((bitField0_ & 0x00008000) != 0) &&
             effectDetail_ != null &&
             effectDetail_ != com.google.transit.realtime.GtfsRealtime.TranslatedString.getDefaultInstance()) {
             getEffectDetailBuilder().mergeFrom(value);
@@ -23968,7 +25114,7 @@ public Builder mergeEffectDetail(com.google.transit.realtime.GtfsRealtime.Transl
           effectDetailBuilder_.mergeFrom(value);
         }
         if (effectDetail_ != null) {
-          bitField0_ |= 0x00002000;
+          bitField0_ |= 0x00008000;
           onChanged();
         }
         return this;
@@ -23982,7 +25128,7 @@ public Builder mergeEffectDetail(com.google.transit.realtime.GtfsRealtime.Transl
        * optional .transit_realtime.TranslatedString effect_detail = 18;
        */
       public Builder clearEffectDetail() {
-        bitField0_ = (bitField0_ & ~0x00002000);
+        bitField0_ = (bitField0_ & ~0x00008000);
         effectDetail_ = null;
         if (effectDetailBuilder_ != null) {
           effectDetailBuilder_.dispose();
@@ -24000,7 +25146,7 @@ public Builder clearEffectDetail() {
        * optional .transit_realtime.TranslatedString effect_detail = 18;
        */
       public com.google.transit.realtime.GtfsRealtime.TranslatedString.Builder getEffectDetailBuilder() {
-        bitField0_ |= 0x00002000;
+        bitField0_ |= 0x00008000;
         onChanged();
         return internalGetEffectDetailFieldBuilder().getBuilder();
       }
@@ -47426,119 +48572,122 @@ public com.google.transit.realtime.GtfsRealtime.ReplacementStop getDefaultInstan
       "_ONLY\020\003\022\036\n\032CRUSHED_STANDING_ROOM_ONLY\020\004\022" +
       "\010\n\004FULL\020\005\022\034\n\030NOT_ACCEPTING_PASSENGERS\020\006\022" +
       "\025\n\021NO_DATA_AVAILABLE\020\007\022\021\n\rNOT_BOARDABLE\020" +
-      "\010*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"\376\n\n\005Alert\0222\n\ractive_pe" +
-      "riod\030\001 \003(\0132\033.transit_realtime.TimeRange\022" +
-      "9\n\017informed_entity\030\005 \003(\0132 .transit_realt" +
-      "ime.EntitySelector\022;\n\005cause\030\006 \001(\0162\035.tran" +
-      "sit_realtime.Alert.Cause:\rUNKNOWN_CAUSE\022" +
-      ">\n\006effect\030\007 \001(\0162\036.transit_realtime.Alert" +
-      ".Effect:\016UNKNOWN_EFFECT\022/\n\003url\030\010 \001(\0132\".t" +
-      "ransit_realtime.TranslatedString\0227\n\013head" +
-      "er_text\030\n \001(\0132\".transit_realtime.Transla" +
-      "tedString\022<\n\020description_text\030\013 \001(\0132\".tr" +
-      "ansit_realtime.TranslatedString\022;\n\017tts_h" +
-      "eader_text\030\014 \001(\0132\".transit_realtime.Tran" +
-      "slatedString\022@\n\024tts_description_text\030\r \001" +
-      "(\0132\".transit_realtime.TranslatedString\022O" +
-      "\n\016severity_level\030\016 \001(\0162%.transit_realtim" +
-      "e.Alert.SeverityLevel:\020UNKNOWN_SEVERITY\022" +
-      "0\n\005image\030\017 \001(\0132!.transit_realtime.Transl" +
-      "atedImage\022B\n\026image_alternative_text\030\020 \001(" +
-      "\0132\".transit_realtime.TranslatedString\0228\n" +
-      "\014cause_detail\030\021 \001(\0132\".transit_realtime.T" +
-      "ranslatedString\0229\n\reffect_detail\030\022 \001(\0132\"" +
-      ".transit_realtime.TranslatedString\"\353\001\n\005C" +
-      "ause\022\021\n\rUNKNOWN_CAUSE\020\001\022\017\n\013OTHER_CAUSE\020\002" +
-      "\022\025\n\021TECHNICAL_PROBLEM\020\003\022\n\n\006STRIKE\020\004\022\021\n\rD" +
-      "EMONSTRATION\020\005\022\014\n\010ACCIDENT\020\006\022\013\n\007HOLIDAY\020" +
-      "\007\022\013\n\007WEATHER\020\010\022\017\n\013MAINTENANCE\020\t\022\020\n\014CONST" +
-      "RUCTION\020\n\022\023\n\017POLICE_ACTIVITY\020\013\022\025\n\021MEDICA" +
-      "L_EMERGENCY\020\014\022\021\n\rSPECIAL_EVENT\020\r\"\335\001\n\006Eff" +
-      "ect\022\016\n\nNO_SERVICE\020\001\022\023\n\017REDUCED_SERVICE\020\002" +
-      "\022\026\n\022SIGNIFICANT_DELAYS\020\003\022\n\n\006DETOUR\020\004\022\026\n\022" +
-      "ADDITIONAL_SERVICE\020\005\022\024\n\020MODIFIED_SERVICE" +
-      "\020\006\022\020\n\014OTHER_EFFECT\020\007\022\022\n\016UNKNOWN_EFFECT\020\010" +
-      "\022\016\n\nSTOP_MOVED\020\t\022\r\n\tNO_EFFECT\020\n\022\027\n\023ACCES" +
-      "SIBILITY_ISSUE\020\013\"H\n\rSeverityLevel\022\024\n\020UNK" +
-      "NOWN_SEVERITY\020\001\022\010\n\004INFO\020\002\022\013\n\007WARNING\020\003\022\n" +
-      "\n\006SEVERE\020\004*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"7\n\tTimeRange\022" +
-      "\r\n\005start\030\001 \001(\004\022\013\n\003end\030\002 \001(\004*\006\010\350\007\020\320\017*\006\010\250F" +
-      "\020\220N\"q\n\010Position\022\020\n\010latitude\030\001 \002(\002\022\021\n\tlon" +
-      "gitude\030\002 \002(\002\022\017\n\007bearing\030\003 \001(\002\022\020\n\010odomete" +
-      "r\030\004 \001(\001\022\r\n\005speed\030\005 \001(\002*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"\267" +
-      "\004\n\016TripDescriptor\022\017\n\007trip_id\030\001 \001(\t\022\020\n\010ro" +
-      "ute_id\030\005 \001(\t\022\024\n\014direction_id\030\006 \001(\r\022\022\n\nst" +
-      "art_time\030\002 \001(\t\022\022\n\nstart_date\030\003 \001(\t\022T\n\025sc" +
-      "hedule_relationship\030\004 \001(\01625.transit_real" +
-      "time.TripDescriptor.ScheduleRelationship" +
-      "\022L\n\rmodified_trip\030\007 \001(\01325.transit_realti" +
-      "me.TripDescriptor.ModifiedTripSelector\032\202" +
-      "\001\n\024ModifiedTripSelector\022\030\n\020modifications" +
-      "_id\030\001 \001(\t\022\030\n\020affected_trip_id\030\002 \001(\t\022\022\n\ns" +
-      "tart_time\030\003 \001(\t\022\022\n\nstart_date\030\004 \001(\t*\006\010\350\007" +
-      "\020\320\017*\006\010\250F\020\220N\"\212\001\n\024ScheduleRelationship\022\r\n\t" +
-      "SCHEDULED\020\000\022\r\n\005ADDED\020\001\032\002\010\001\022\017\n\013UNSCHEDULE" +
-      "D\020\002\022\014\n\010CANCELED\020\003\022\017\n\013REPLACEMENT\020\005\022\016\n\nDU" +
-      "PLICATED\020\006\022\013\n\007DELETED\020\007\022\007\n\003NEW\020\010*\006\010\350\007\020\320\017" +
-      "*\006\010\250F\020\220N\"\243\002\n\021VehicleDescriptor\022\n\n\002id\030\001 \001" +
-      "(\t\022\r\n\005label\030\002 \001(\t\022\025\n\rlicense_plate\030\003 \001(\t" +
-      "\022a\n\025wheelchair_accessible\030\004 \001(\01628.transi" +
-      "t_realtime.VehicleDescriptor.WheelchairA" +
-      "ccessible:\010NO_VALUE\"i\n\024WheelchairAccessi" +
-      "ble\022\014\n\010NO_VALUE\020\000\022\013\n\007UNKNOWN\020\001\022\031\n\025WHEELC" +
-      "HAIR_ACCESSIBLE\020\002\022\033\n\027WHEELCHAIR_INACCESS" +
-      "IBLE\020\003*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"\260\001\n\016EntitySelecto" +
-      "r\022\021\n\tagency_id\030\001 \001(\t\022\020\n\010route_id\030\002 \001(\t\022\022" +
-      "\n\nroute_type\030\003 \001(\005\022.\n\004trip\030\004 \001(\0132 .trans" +
-      "it_realtime.TripDescriptor\022\017\n\007stop_id\030\005 " +
-      "\001(\t\022\024\n\014direction_id\030\006 \001(\r*\006\010\350\007\020\320\017*\006\010\250F\020\220" +
-      "N\"\246\001\n\020TranslatedString\022C\n\013translation\030\001 " +
-      "\003(\0132..transit_realtime.TranslatedString." +
-      "Translation\032=\n\013Translation\022\014\n\004text\030\001 \002(\t" +
-      "\022\020\n\010language\030\002 \001(\t*\006\010\350\007\020\320\017*\006\010\250F\020\220N*\006\010\350\007\020" +
-      "\320\017*\006\010\250F\020\220N\"\301\001\n\017TranslatedImage\022I\n\017locali" +
-      "zed_image\030\001 \003(\01320.transit_realtime.Trans" +
-      "latedImage.LocalizedImage\032S\n\016LocalizedIm" +
-      "age\022\013\n\003url\030\001 \002(\t\022\022\n\nmedia_type\030\002 \002(\t\022\020\n\010" +
-      "language\030\003 \001(\t*\006\010\350\007\020\320\017*\006\010\250F\020\220N*\006\010\350\007\020\320\017*\006" +
-      "\010\250F\020\220N\"C\n\005Shape\022\020\n\010shape_id\030\001 \001(\t\022\030\n\020enc" +
-      "oded_polyline\030\002 \001(\t*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"\204\005\n\004" +
-      "Stop\022\017\n\007stop_id\030\001 \001(\t\0225\n\tstop_code\030\002 \001(\013" +
-      "2\".transit_realtime.TranslatedString\0225\n\t" +
-      "stop_name\030\003 \001(\0132\".transit_realtime.Trans" +
-      "latedString\0229\n\rtts_stop_name\030\004 \001(\0132\".tra" +
-      "nsit_realtime.TranslatedString\0225\n\tstop_d" +
-      "esc\030\005 \001(\0132\".transit_realtime.TranslatedS" +
-      "tring\022\020\n\010stop_lat\030\006 \001(\002\022\020\n\010stop_lon\030\007 \001(" +
-      "\002\022\017\n\007zone_id\030\010 \001(\t\0224\n\010stop_url\030\t \001(\0132\".t" +
-      "ransit_realtime.TranslatedString\022\026\n\016pare" +
-      "nt_station\030\013 \001(\t\022\025\n\rstop_timezone\030\014 \001(\t\022" +
-      "O\n\023wheelchair_boarding\030\r \001(\0162).transit_r" +
-      "ealtime.Stop.WheelchairBoarding:\007UNKNOWN" +
-      "\022\020\n\010level_id\030\016 \001(\t\0229\n\rplatform_code\030\017 \001(" +
-      "\0132\".transit_realtime.TranslatedString\"C\n" +
-      "\022WheelchairBoarding\022\013\n\007UNKNOWN\020\000\022\r\n\tAVAI" +
-      "LABLE\020\001\022\021\n\rNOT_AVAILABLE\020\002*\006\010\350\007\020\320\017*\006\010\250F\020" +
-      "\220N\"\337\004\n\021TripModifications\022I\n\016selected_tri" +
-      "ps\030\001 \003(\01321.transit_realtime.TripModifica" +
-      "tions.SelectedTrips\022\023\n\013start_times\030\002 \003(\t" +
-      "\022\025\n\rservice_dates\030\003 \003(\t\022G\n\rmodifications" +
-      "\030\004 \003(\01320.transit_realtime.TripModificati" +
-      "ons.Modification\032\264\002\n\014Modification\022;\n\023sta" +
-      "rt_stop_selector\030\001 \001(\0132\036.transit_realtim" +
-      "e.StopSelector\0229\n\021end_stop_selector\030\002 \001(" +
-      "\0132\036.transit_realtime.StopSelector\022(\n\035pro" +
-      "pagated_modification_delay\030\003 \001(\005:\0010\022<\n\021r" +
-      "eplacement_stops\030\004 \003(\0132!.transit_realtim" +
-      "e.ReplacementStop\022\030\n\020service_alert_id\030\005 " +
-      "\001(\t\022\032\n\022last_modified_time\030\006 \001(\004*\006\010\350\007\020\320\017*" +
-      "\006\010\250F\020\220N\032C\n\rSelectedTrips\022\020\n\010trip_ids\030\001 \003" +
-      "(\t\022\020\n\010shape_id\030\002 \001(\t*\006\010\350\007\020\320\017*\006\010\250F\020\220N*\006\010\350" +
-      "\007\020\320\017*\006\010\250F\020\220N\"F\n\014StopSelector\022\025\n\rstop_seq" +
-      "uence\030\001 \001(\r\022\017\n\007stop_id\030\002 \001(\t*\006\010\350\007\020\320\017*\006\010\250" +
-      "F\020\220N\"O\n\017ReplacementStop\022\033\n\023travel_time_t" +
-      "o_stop\030\001 \001(\005\022\017\n\007stop_id\030\002 \001(\t*\006\010\350\007\020\320\017*\006\010" +
-      "\250F\020\220NB\035\n\033com.google.transit.realtime"
+      "\010*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"\361\013\n\005Alert\0226\n\ractive_pe" +
+      "riod\030\001 \003(\0132\033.transit_realtime.TimeRangeB" +
+      "\002\030\001\0229\n\024communication_period\030\002 \003(\0132\033.tran" +
+      "sit_realtime.TimeRange\0222\n\rimpact_period\030" +
+      "\003 \003(\0132\033.transit_realtime.TimeRange\0229\n\017in" +
+      "formed_entity\030\005 \003(\0132 .transit_realtime.E" +
+      "ntitySelector\022;\n\005cause\030\006 \001(\0162\035.transit_r" +
+      "ealtime.Alert.Cause:\rUNKNOWN_CAUSE\022>\n\006ef" +
+      "fect\030\007 \001(\0162\036.transit_realtime.Alert.Effe" +
+      "ct:\016UNKNOWN_EFFECT\022/\n\003url\030\010 \001(\0132\".transi" +
+      "t_realtime.TranslatedString\0227\n\013header_te" +
+      "xt\030\n \001(\0132\".transit_realtime.TranslatedSt" +
+      "ring\022<\n\020description_text\030\013 \001(\0132\".transit" +
+      "_realtime.TranslatedString\022;\n\017tts_header" +
+      "_text\030\014 \001(\0132\".transit_realtime.Translate" +
+      "dString\022@\n\024tts_description_text\030\r \001(\0132\"." +
+      "transit_realtime.TranslatedString\022O\n\016sev" +
+      "erity_level\030\016 \001(\0162%.transit_realtime.Ale" +
+      "rt.SeverityLevel:\020UNKNOWN_SEVERITY\0220\n\005im" +
+      "age\030\017 \001(\0132!.transit_realtime.TranslatedI" +
+      "mage\022B\n\026image_alternative_text\030\020 \001(\0132\".t" +
+      "ransit_realtime.TranslatedString\0228\n\014caus" +
+      "e_detail\030\021 \001(\0132\".transit_realtime.Transl" +
+      "atedString\0229\n\reffect_detail\030\022 \001(\0132\".tran" +
+      "sit_realtime.TranslatedString\"\353\001\n\005Cause\022" +
+      "\021\n\rUNKNOWN_CAUSE\020\001\022\017\n\013OTHER_CAUSE\020\002\022\025\n\021T" +
+      "ECHNICAL_PROBLEM\020\003\022\n\n\006STRIKE\020\004\022\021\n\rDEMONS" +
+      "TRATION\020\005\022\014\n\010ACCIDENT\020\006\022\013\n\007HOLIDAY\020\007\022\013\n\007" +
+      "WEATHER\020\010\022\017\n\013MAINTENANCE\020\t\022\020\n\014CONSTRUCTI" +
+      "ON\020\n\022\023\n\017POLICE_ACTIVITY\020\013\022\025\n\021MEDICAL_EME" +
+      "RGENCY\020\014\022\021\n\rSPECIAL_EVENT\020\r\"\335\001\n\006Effect\022\016" +
+      "\n\nNO_SERVICE\020\001\022\023\n\017REDUCED_SERVICE\020\002\022\026\n\022S" +
+      "IGNIFICANT_DELAYS\020\003\022\n\n\006DETOUR\020\004\022\026\n\022ADDIT" +
+      "IONAL_SERVICE\020\005\022\024\n\020MODIFIED_SERVICE\020\006\022\020\n" +
+      "\014OTHER_EFFECT\020\007\022\022\n\016UNKNOWN_EFFECT\020\010\022\016\n\nS" +
+      "TOP_MOVED\020\t\022\r\n\tNO_EFFECT\020\n\022\027\n\023ACCESSIBIL" +
+      "ITY_ISSUE\020\013\"H\n\rSeverityLevel\022\024\n\020UNKNOWN_" +
+      "SEVERITY\020\001\022\010\n\004INFO\020\002\022\013\n\007WARNING\020\003\022\n\n\006SEV" +
+      "ERE\020\004*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"7\n\tTimeRange\022\r\n\005st" +
+      "art\030\001 \001(\004\022\013\n\003end\030\002 \001(\004*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"q" +
+      "\n\010Position\022\020\n\010latitude\030\001 \002(\002\022\021\n\tlongitud" +
+      "e\030\002 \002(\002\022\017\n\007bearing\030\003 \001(\002\022\020\n\010odometer\030\004 \001" +
+      "(\001\022\r\n\005speed\030\005 \001(\002*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"\267\004\n\016Tr" +
+      "ipDescriptor\022\017\n\007trip_id\030\001 \001(\t\022\020\n\010route_i" +
+      "d\030\005 \001(\t\022\024\n\014direction_id\030\006 \001(\r\022\022\n\nstart_t" +
+      "ime\030\002 \001(\t\022\022\n\nstart_date\030\003 \001(\t\022T\n\025schedul" +
+      "e_relationship\030\004 \001(\01625.transit_realtime." +
+      "TripDescriptor.ScheduleRelationship\022L\n\rm" +
+      "odified_trip\030\007 \001(\01325.transit_realtime.Tr" +
+      "ipDescriptor.ModifiedTripSelector\032\202\001\n\024Mo" +
+      "difiedTripSelector\022\030\n\020modifications_id\030\001" +
+      " \001(\t\022\030\n\020affected_trip_id\030\002 \001(\t\022\022\n\nstart_" +
+      "time\030\003 \001(\t\022\022\n\nstart_date\030\004 \001(\t*\006\010\350\007\020\320\017*\006" +
+      "\010\250F\020\220N\"\212\001\n\024ScheduleRelationship\022\r\n\tSCHED" +
+      "ULED\020\000\022\r\n\005ADDED\020\001\032\002\010\001\022\017\n\013UNSCHEDULED\020\002\022\014" +
+      "\n\010CANCELED\020\003\022\017\n\013REPLACEMENT\020\005\022\016\n\nDUPLICA" +
+      "TED\020\006\022\013\n\007DELETED\020\007\022\007\n\003NEW\020\010*\006\010\350\007\020\320\017*\006\010\250F" +
+      "\020\220N\"\243\002\n\021VehicleDescriptor\022\n\n\002id\030\001 \001(\t\022\r\n" +
+      "\005label\030\002 \001(\t\022\025\n\rlicense_plate\030\003 \001(\t\022a\n\025w" +
+      "heelchair_accessible\030\004 \001(\01628.transit_rea" +
+      "ltime.VehicleDescriptor.WheelchairAccess" +
+      "ible:\010NO_VALUE\"i\n\024WheelchairAccessible\022\014" +
+      "\n\010NO_VALUE\020\000\022\013\n\007UNKNOWN\020\001\022\031\n\025WHEELCHAIR_" +
+      "ACCESSIBLE\020\002\022\033\n\027WHEELCHAIR_INACCESSIBLE\020" +
+      "\003*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"\260\001\n\016EntitySelector\022\021\n\t" +
+      "agency_id\030\001 \001(\t\022\020\n\010route_id\030\002 \001(\t\022\022\n\nrou" +
+      "te_type\030\003 \001(\005\022.\n\004trip\030\004 \001(\0132 .transit_re" +
+      "altime.TripDescriptor\022\017\n\007stop_id\030\005 \001(\t\022\024" +
+      "\n\014direction_id\030\006 \001(\r*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"\246\001\n" +
+      "\020TranslatedString\022C\n\013translation\030\001 \003(\0132." +
+      ".transit_realtime.TranslatedString.Trans" +
+      "lation\032=\n\013Translation\022\014\n\004text\030\001 \002(\t\022\020\n\010l" +
+      "anguage\030\002 \001(\t*\006\010\350\007\020\320\017*\006\010\250F\020\220N*\006\010\350\007\020\320\017*\006\010" +
+      "\250F\020\220N\"\301\001\n\017TranslatedImage\022I\n\017localized_i" +
+      "mage\030\001 \003(\01320.transit_realtime.Translated" +
+      "Image.LocalizedImage\032S\n\016LocalizedImage\022\013" +
+      "\n\003url\030\001 \002(\t\022\022\n\nmedia_type\030\002 \002(\t\022\020\n\010langu" +
+      "age\030\003 \001(\t*\006\010\350\007\020\320\017*\006\010\250F\020\220N*\006\010\350\007\020\320\017*\006\010\250F\020\220" +
+      "N\"C\n\005Shape\022\020\n\010shape_id\030\001 \001(\t\022\030\n\020encoded_" +
+      "polyline\030\002 \001(\t*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"\204\005\n\004Stop\022" +
+      "\017\n\007stop_id\030\001 \001(\t\0225\n\tstop_code\030\002 \001(\0132\".tr" +
+      "ansit_realtime.TranslatedString\0225\n\tstop_" +
+      "name\030\003 \001(\0132\".transit_realtime.Translated" +
+      "String\0229\n\rtts_stop_name\030\004 \001(\0132\".transit_" +
+      "realtime.TranslatedString\0225\n\tstop_desc\030\005" +
+      " \001(\0132\".transit_realtime.TranslatedString" +
+      "\022\020\n\010stop_lat\030\006 \001(\002\022\020\n\010stop_lon\030\007 \001(\002\022\017\n\007" +
+      "zone_id\030\010 \001(\t\0224\n\010stop_url\030\t \001(\0132\".transi" +
+      "t_realtime.TranslatedString\022\026\n\016parent_st" +
+      "ation\030\013 \001(\t\022\025\n\rstop_timezone\030\014 \001(\t\022O\n\023wh" +
+      "eelchair_boarding\030\r \001(\0162).transit_realti" +
+      "me.Stop.WheelchairBoarding:\007UNKNOWN\022\020\n\010l" +
+      "evel_id\030\016 \001(\t\0229\n\rplatform_code\030\017 \001(\0132\".t" +
+      "ransit_realtime.TranslatedString\"C\n\022Whee" +
+      "lchairBoarding\022\013\n\007UNKNOWN\020\000\022\r\n\tAVAILABLE" +
+      "\020\001\022\021\n\rNOT_AVAILABLE\020\002*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"\337\004" +
+      "\n\021TripModifications\022I\n\016selected_trips\030\001 " +
+      "\003(\01321.transit_realtime.TripModifications" +
+      ".SelectedTrips\022\023\n\013start_times\030\002 \003(\t\022\025\n\rs" +
+      "ervice_dates\030\003 \003(\t\022G\n\rmodifications\030\004 \003(" +
+      "\01320.transit_realtime.TripModifications.M" +
+      "odification\032\264\002\n\014Modification\022;\n\023start_st" +
+      "op_selector\030\001 \001(\0132\036.transit_realtime.Sto" +
+      "pSelector\0229\n\021end_stop_selector\030\002 \001(\0132\036.t" +
+      "ransit_realtime.StopSelector\022(\n\035propagat" +
+      "ed_modification_delay\030\003 \001(\005:\0010\022<\n\021replac" +
+      "ement_stops\030\004 \003(\0132!.transit_realtime.Rep" +
+      "lacementStop\022\030\n\020service_alert_id\030\005 \001(\t\022\032" +
+      "\n\022last_modified_time\030\006 \001(\004*\006\010\350\007\020\320\017*\006\010\250F\020" +
+      "\220N\032C\n\rSelectedTrips\022\020\n\010trip_ids\030\001 \003(\t\022\020\n" +
+      "\010shape_id\030\002 \001(\t*\006\010\350\007\020\320\017*\006\010\250F\020\220N*\006\010\350\007\020\320\017*" +
+      "\006\010\250F\020\220N\"F\n\014StopSelector\022\025\n\rstop_sequence" +
+      "\030\001 \001(\r\022\017\n\007stop_id\030\002 \001(\t*\006\010\350\007\020\320\017*\006\010\250F\020\220N\"" +
+      "O\n\017ReplacementStop\022\033\n\023travel_time_to_sto" +
+      "p\030\001 \001(\005\022\017\n\007stop_id\030\002 \001(\t*\006\010\350\007\020\320\017*\006\010\250F\020\220N" +
+      "B\035\n\033com.google.transit.realtime"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -47609,7 +48758,7 @@ public com.google.transit.realtime.GtfsRealtime.ReplacementStop getDefaultInstan
     internal_static_transit_realtime_Alert_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessage.FieldAccessorTable(
         internal_static_transit_realtime_Alert_descriptor,
-        new java.lang.String[] { "ActivePeriod", "InformedEntity", "Cause", "Effect", "Url", "HeaderText", "DescriptionText", "TtsHeaderText", "TtsDescriptionText", "SeverityLevel", "Image", "ImageAlternativeText", "CauseDetail", "EffectDetail", });
+        new java.lang.String[] { "ActivePeriod", "CommunicationPeriod", "ImpactPeriod", "InformedEntity", "Cause", "Effect", "Url", "HeaderText", "DescriptionText", "TtsHeaderText", "TtsDescriptionText", "SeverityLevel", "Image", "ImageAlternativeText", "CauseDetail", "EffectDetail", });
     internal_static_transit_realtime_TimeRange_descriptor =
       getDescriptor().getMessageType(6);
     internal_static_transit_realtime_TimeRange_fieldAccessorTable = new
diff --git a/nodejs/gtfs-realtime.d.ts b/nodejs/gtfs-realtime.d.ts
index 9c5df82..1adfd00 100644
--- a/nodejs/gtfs-realtime.d.ts
+++ b/nodejs/gtfs-realtime.d.ts
@@ -1387,6 +1387,12 @@ export namespace transit_realtime {
         /** Alert activePeriod */
         activePeriod?: (transit_realtime.ITimeRange[]|null);
 
+        /** Alert communicationPeriod */
+        communicationPeriod?: (transit_realtime.ITimeRange[]|null);
+
+        /** Alert impactPeriod */
+        impactPeriod?: (transit_realtime.ITimeRange[]|null);
+
         /** Alert informedEntity */
         informedEntity?: (transit_realtime.IEntitySelector[]|null);
 
@@ -1445,6 +1451,12 @@ export namespace transit_realtime {
         /** Alert activePeriod. */
         public activePeriod: transit_realtime.ITimeRange[];
 
+        /** Alert communicationPeriod. */
+        public communicationPeriod: transit_realtime.ITimeRange[];
+
+        /** Alert impactPeriod. */
+        public impactPeriod: transit_realtime.ITimeRange[];
+
         /** Alert informedEntity. */
         public informedEntity: transit_realtime.IEntitySelector[];
 
diff --git a/nodejs/gtfs-realtime.js b/nodejs/gtfs-realtime.js
index 7341324..3ec4a4b 100644
--- a/nodejs/gtfs-realtime.js
+++ b/nodejs/gtfs-realtime.js
@@ -4157,6 +4157,8 @@ $root.transit_realtime = (function() {
          * @memberof transit_realtime
          * @interface IAlert
          * @property {Array.|null} [activePeriod] Alert activePeriod
+         * @property {Array.|null} [communicationPeriod] Alert communicationPeriod
+         * @property {Array.|null} [impactPeriod] Alert impactPeriod
          * @property {Array.|null} [informedEntity] Alert informedEntity
          * @property {transit_realtime.Alert.Cause|null} [cause] Alert cause
          * @property {transit_realtime.Alert.Effect|null} [effect] Alert effect
@@ -4184,6 +4186,8 @@ $root.transit_realtime = (function() {
          */
         function Alert(properties) {
             this.activePeriod = [];
+            this.communicationPeriod = [];
+            this.impactPeriod = [];
             this.informedEntity = [];
             if (properties)
                 for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
@@ -4199,6 +4203,22 @@ $root.transit_realtime = (function() {
          */
         Alert.prototype.activePeriod = $util.emptyArray;
 
+        /**
+         * Alert communicationPeriod.
+         * @member {Array.} communicationPeriod
+         * @memberof transit_realtime.Alert
+         * @instance
+         */
+        Alert.prototype.communicationPeriod = $util.emptyArray;
+
+        /**
+         * Alert impactPeriod.
+         * @member {Array.} impactPeriod
+         * @memberof transit_realtime.Alert
+         * @instance
+         */
+        Alert.prototype.impactPeriod = $util.emptyArray;
+
         /**
          * Alert informedEntity.
          * @member {Array.} informedEntity
@@ -4330,6 +4350,12 @@ $root.transit_realtime = (function() {
             if (message.activePeriod != null && message.activePeriod.length)
                 for (var i = 0; i < message.activePeriod.length; ++i)
                     $root.transit_realtime.TimeRange.encode(message.activePeriod[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+            if (message.communicationPeriod != null && message.communicationPeriod.length)
+                for (var i = 0; i < message.communicationPeriod.length; ++i)
+                    $root.transit_realtime.TimeRange.encode(message.communicationPeriod[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+            if (message.impactPeriod != null && message.impactPeriod.length)
+                for (var i = 0; i < message.impactPeriod.length; ++i)
+                    $root.transit_realtime.TimeRange.encode(message.impactPeriod[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
             if (message.informedEntity != null && message.informedEntity.length)
                 for (var i = 0; i < message.informedEntity.length; ++i)
                     $root.transit_realtime.EntitySelector.encode(message.informedEntity[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
@@ -4412,6 +4438,22 @@ $root.transit_realtime = (function() {
                         message.activePeriod.push($root.transit_realtime.TimeRange.decode(reader, reader.uint32(), undefined, _depth + 1));
                         continue;
                     }
+                case 2: {
+                        if (wireType !== 2)
+                            break;
+                        if (!(message.communicationPeriod && message.communicationPeriod.length))
+                            message.communicationPeriod = [];
+                        message.communicationPeriod.push($root.transit_realtime.TimeRange.decode(reader, reader.uint32(), undefined, _depth + 1));
+                        continue;
+                    }
+                case 3: {
+                        if (wireType !== 2)
+                            break;
+                        if (!(message.impactPeriod && message.impactPeriod.length))
+                            message.impactPeriod = [];
+                        message.impactPeriod.push($root.transit_realtime.TimeRange.decode(reader, reader.uint32(), undefined, _depth + 1));
+                        continue;
+                    }
                 case 5: {
                         if (wireType !== 2)
                             break;
@@ -4542,6 +4584,24 @@ $root.transit_realtime = (function() {
                         return "activePeriod." + error;
                 }
             }
+            if (message.communicationPeriod != null && message.hasOwnProperty("communicationPeriod")) {
+                if (!Array.isArray(message.communicationPeriod))
+                    return "communicationPeriod: array expected";
+                for (var i = 0; i < message.communicationPeriod.length; ++i) {
+                    var error = $root.transit_realtime.TimeRange.verify(message.communicationPeriod[i], _depth + 1);
+                    if (error)
+                        return "communicationPeriod." + error;
+                }
+            }
+            if (message.impactPeriod != null && message.hasOwnProperty("impactPeriod")) {
+                if (!Array.isArray(message.impactPeriod))
+                    return "impactPeriod: array expected";
+                for (var i = 0; i < message.impactPeriod.length; ++i) {
+                    var error = $root.transit_realtime.TimeRange.verify(message.impactPeriod[i], _depth + 1);
+                    if (error)
+                        return "impactPeriod." + error;
+                }
+            }
             if (message.informedEntity != null && message.hasOwnProperty("informedEntity")) {
                 if (!Array.isArray(message.informedEntity))
                     return "informedEntity: array expected";
@@ -4671,6 +4731,26 @@ $root.transit_realtime = (function() {
                     message.activePeriod[i] = $root.transit_realtime.TimeRange.fromObject(object.activePeriod[i], _depth + 1);
                 }
             }
+            if (object.communicationPeriod) {
+                if (!Array.isArray(object.communicationPeriod))
+                    throw TypeError(".transit_realtime.Alert.communicationPeriod: array expected");
+                message.communicationPeriod = Array(object.communicationPeriod.length);
+                for (var i = 0; i < object.communicationPeriod.length; ++i) {
+                    if (typeof object.communicationPeriod[i] !== "object")
+                        throw TypeError(".transit_realtime.Alert.communicationPeriod: object expected");
+                    message.communicationPeriod[i] = $root.transit_realtime.TimeRange.fromObject(object.communicationPeriod[i], _depth + 1);
+                }
+            }
+            if (object.impactPeriod) {
+                if (!Array.isArray(object.impactPeriod))
+                    throw TypeError(".transit_realtime.Alert.impactPeriod: array expected");
+                message.impactPeriod = Array(object.impactPeriod.length);
+                for (var i = 0; i < object.impactPeriod.length; ++i) {
+                    if (typeof object.impactPeriod[i] !== "object")
+                        throw TypeError(".transit_realtime.Alert.impactPeriod: object expected");
+                    message.impactPeriod[i] = $root.transit_realtime.TimeRange.fromObject(object.impactPeriod[i], _depth + 1);
+                }
+            }
             if (object.informedEntity) {
                 if (!Array.isArray(object.informedEntity))
                     throw TypeError(".transit_realtime.Alert.informedEntity: array expected");
@@ -4880,6 +4960,8 @@ $root.transit_realtime = (function() {
             var object = {};
             if (options.arrays || options.defaults) {
                 object.activePeriod = [];
+                object.communicationPeriod = [];
+                object.impactPeriod = [];
                 object.informedEntity = [];
             }
             if (options.defaults) {
@@ -4901,6 +4983,16 @@ $root.transit_realtime = (function() {
                 for (var j = 0; j < message.activePeriod.length; ++j)
                     object.activePeriod[j] = $root.transit_realtime.TimeRange.toObject(message.activePeriod[j], options);
             }
+            if (message.communicationPeriod && message.communicationPeriod.length) {
+                object.communicationPeriod = Array(message.communicationPeriod.length);
+                for (var j = 0; j < message.communicationPeriod.length; ++j)
+                    object.communicationPeriod[j] = $root.transit_realtime.TimeRange.toObject(message.communicationPeriod[j], options);
+            }
+            if (message.impactPeriod && message.impactPeriod.length) {
+                object.impactPeriod = Array(message.impactPeriod.length);
+                for (var j = 0; j < message.impactPeriod.length; ++j)
+                    object.impactPeriod[j] = $root.transit_realtime.TimeRange.toObject(message.impactPeriod[j], options);
+            }
             if (message.informedEntity && message.informedEntity.length) {
                 object.informedEntity = Array(message.informedEntity.length);
                 for (var j = 0; j < message.informedEntity.length; ++j)
diff --git a/python/google/transit/gtfs_realtime_pb2.py b/python/google/transit/gtfs_realtime_pb2.py
index 7392655..2a89b3f 100644
--- a/python/google/transit/gtfs_realtime_pb2.py
+++ b/python/google/transit/gtfs_realtime_pb2.py
@@ -13,7 +13,7 @@
 
 
 
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13gtfs-realtime.proto\x12\x10transit_realtime\"y\n\x0b\x46\x65\x65\x64Message\x12,\n\x06header\x18\x01 \x02(\x0b\x32\x1c.transit_realtime.FeedHeader\x12,\n\x06\x65ntity\x18\x02 \x03(\x0b\x32\x1c.transit_realtime.FeedEntity*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xed\x01\n\nFeedHeader\x12\x1d\n\x15gtfs_realtime_version\x18\x01 \x02(\t\x12Q\n\x0eincrementality\x18\x02 \x01(\x0e\x32+.transit_realtime.FeedHeader.Incrementality:\x0c\x46ULL_DATASET\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\x12\x14\n\x0c\x66\x65\x65\x64_version\x18\x04 \x01(\t\"4\n\x0eIncrementality\x12\x10\n\x0c\x46ULL_DATASET\x10\x00\x12\x10\n\x0c\x44IFFERENTIAL\x10\x01*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xe1\x02\n\nFeedEntity\x12\n\n\x02id\x18\x01 \x02(\t\x12\x19\n\nis_deleted\x18\x02 \x01(\x08:\x05\x66\x61lse\x12\x31\n\x0btrip_update\x18\x03 \x01(\x0b\x32\x1c.transit_realtime.TripUpdate\x12\x32\n\x07vehicle\x18\x04 \x01(\x0b\x32!.transit_realtime.VehiclePosition\x12&\n\x05\x61lert\x18\x05 \x01(\x0b\x32\x17.transit_realtime.Alert\x12&\n\x05shape\x18\x06 \x01(\x0b\x32\x17.transit_realtime.Shape\x12$\n\x04stop\x18\x07 \x01(\x0b\x32\x16.transit_realtime.Stop\x12?\n\x12trip_modifications\x18\x08 \x01(\x0b\x32#.transit_realtime.TripModifications*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xf6\x0b\n\nTripUpdate\x12.\n\x04trip\x18\x01 \x02(\x0b\x32 .transit_realtime.TripDescriptor\x12\x34\n\x07vehicle\x18\x03 \x01(\x0b\x32#.transit_realtime.VehicleDescriptor\x12\x45\n\x10stop_time_update\x18\x02 \x03(\x0b\x32+.transit_realtime.TripUpdate.StopTimeUpdate\x12\x11\n\ttimestamp\x18\x04 \x01(\x04\x12\r\n\x05\x64\x65lay\x18\x05 \x01(\x05\x12\x44\n\x0ftrip_properties\x18\x06 \x01(\x0b\x32+.transit_realtime.TripUpdate.TripProperties\x1ai\n\rStopTimeEvent\x12\r\n\x05\x64\x65lay\x18\x01 \x01(\x05\x12\x0c\n\x04time\x18\x02 \x01(\x03\x12\x13\n\x0buncertainty\x18\x03 \x01(\x05\x12\x16\n\x0escheduled_time\x18\x04 \x01(\x03*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\x1a\xb9\x07\n\x0eStopTimeUpdate\x12\x15\n\rstop_sequence\x18\x01 \x01(\r\x12\x0f\n\x07stop_id\x18\x04 \x01(\t\x12;\n\x07\x61rrival\x18\x02 \x01(\x0b\x32*.transit_realtime.TripUpdate.StopTimeEvent\x12=\n\tdeparture\x18\x03 \x01(\x0b\x32*.transit_realtime.TripUpdate.StopTimeEvent\x12U\n\x1a\x64\x65parture_occupancy_status\x18\x07 \x01(\x0e\x32\x31.transit_realtime.VehiclePosition.OccupancyStatus\x12j\n\x15schedule_relationship\x18\x05 \x01(\x0e\x32@.transit_realtime.TripUpdate.StopTimeUpdate.ScheduleRelationship:\tSCHEDULED\x12\\\n\x14stop_time_properties\x18\x06 \x01(\x0b\x32>.transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties\x1a\xff\x02\n\x12StopTimeProperties\x12\x18\n\x10\x61ssigned_stop_id\x18\x01 \x01(\t\x12\x15\n\rstop_headsign\x18\x02 \x01(\t\x12\x65\n\x0bpickup_type\x18\x03 \x01(\x0e\x32P.transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties.DropOffPickupType\x12g\n\rdrop_off_type\x18\x04 \x01(\x0e\x32P.transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties.DropOffPickupType\"X\n\x11\x44ropOffPickupType\x12\x0b\n\x07REGULAR\x10\x00\x12\x08\n\x04NONE\x10\x01\x12\x10\n\x0cPHONE_AGENCY\x10\x02\x12\x1a\n\x16\x43OORDINATE_WITH_DRIVER\x10\x03*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"P\n\x14ScheduleRelationship\x12\r\n\tSCHEDULED\x10\x00\x12\x0b\n\x07SKIPPED\x10\x01\x12\x0b\n\x07NO_DATA\x10\x02\x12\x0f\n\x0bUNSCHEDULED\x10\x03*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\x1a\x9b\x01\n\x0eTripProperties\x12\x0f\n\x07trip_id\x18\x01 \x01(\t\x12\x12\n\nstart_date\x18\x02 \x01(\t\x12\x12\n\nstart_time\x18\x03 \x01(\t\x12\x10\n\x08shape_id\x18\x04 \x01(\t\x12\x15\n\rtrip_headsign\x18\x05 \x01(\t\x12\x17\n\x0ftrip_short_name\x18\x06 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xdf\t\n\x0fVehiclePosition\x12.\n\x04trip\x18\x01 \x01(\x0b\x32 .transit_realtime.TripDescriptor\x12\x34\n\x07vehicle\x18\x08 \x01(\x0b\x32#.transit_realtime.VehicleDescriptor\x12,\n\x08position\x18\x02 \x01(\x0b\x32\x1a.transit_realtime.Position\x12\x1d\n\x15\x63urrent_stop_sequence\x18\x03 \x01(\r\x12\x0f\n\x07stop_id\x18\x07 \x01(\t\x12Z\n\x0e\x63urrent_status\x18\x04 \x01(\x0e\x32\x33.transit_realtime.VehiclePosition.VehicleStopStatus:\rIN_TRANSIT_TO\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12K\n\x10\x63ongestion_level\x18\x06 \x01(\x0e\x32\x31.transit_realtime.VehiclePosition.CongestionLevel\x12K\n\x10occupancy_status\x18\t \x01(\x0e\x32\x31.transit_realtime.VehiclePosition.OccupancyStatus\x12\x1c\n\x14occupancy_percentage\x18\n \x01(\r\x12Q\n\x16multi_carriage_details\x18\x0b \x03(\x0b\x32\x31.transit_realtime.VehiclePosition.CarriageDetails\x1a\xd9\x01\n\x0f\x43\x61rriageDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12^\n\x10occupancy_status\x18\x03 \x01(\x0e\x32\x31.transit_realtime.VehiclePosition.OccupancyStatus:\x11NO_DATA_AVAILABLE\x12 \n\x14occupancy_percentage\x18\x04 \x01(\x05:\x02-1\x12\x19\n\x11\x63\x61rriage_sequence\x18\x05 \x01(\r*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"G\n\x11VehicleStopStatus\x12\x0f\n\x0bINCOMING_AT\x10\x00\x12\x0e\n\nSTOPPED_AT\x10\x01\x12\x11\n\rIN_TRANSIT_TO\x10\x02\"}\n\x0f\x43ongestionLevel\x12\x1c\n\x18UNKNOWN_CONGESTION_LEVEL\x10\x00\x12\x14\n\x10RUNNING_SMOOTHLY\x10\x01\x12\x0f\n\x0bSTOP_AND_GO\x10\x02\x12\x0e\n\nCONGESTION\x10\x03\x12\x15\n\x11SEVERE_CONGESTION\x10\x04\"\xd9\x01\n\x0fOccupancyStatus\x12\t\n\x05\x45MPTY\x10\x00\x12\x18\n\x14MANY_SEATS_AVAILABLE\x10\x01\x12\x17\n\x13\x46\x45W_SEATS_AVAILABLE\x10\x02\x12\x16\n\x12STANDING_ROOM_ONLY\x10\x03\x12\x1e\n\x1a\x43RUSHED_STANDING_ROOM_ONLY\x10\x04\x12\x08\n\x04\x46ULL\x10\x05\x12\x1c\n\x18NOT_ACCEPTING_PASSENGERS\x10\x06\x12\x15\n\x11NO_DATA_AVAILABLE\x10\x07\x12\x11\n\rNOT_BOARDABLE\x10\x08*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xfe\n\n\x05\x41lert\x12\x32\n\ractive_period\x18\x01 \x03(\x0b\x32\x1b.transit_realtime.TimeRange\x12\x39\n\x0finformed_entity\x18\x05 \x03(\x0b\x32 .transit_realtime.EntitySelector\x12;\n\x05\x63\x61use\x18\x06 \x01(\x0e\x32\x1d.transit_realtime.Alert.Cause:\rUNKNOWN_CAUSE\x12>\n\x06\x65\x66\x66\x65\x63t\x18\x07 \x01(\x0e\x32\x1e.transit_realtime.Alert.Effect:\x0eUNKNOWN_EFFECT\x12/\n\x03url\x18\x08 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x37\n\x0bheader_text\x18\n \x01(\x0b\x32\".transit_realtime.TranslatedString\x12<\n\x10\x64\x65scription_text\x18\x0b \x01(\x0b\x32\".transit_realtime.TranslatedString\x12;\n\x0ftts_header_text\x18\x0c \x01(\x0b\x32\".transit_realtime.TranslatedString\x12@\n\x14tts_description_text\x18\r \x01(\x0b\x32\".transit_realtime.TranslatedString\x12O\n\x0eseverity_level\x18\x0e \x01(\x0e\x32%.transit_realtime.Alert.SeverityLevel:\x10UNKNOWN_SEVERITY\x12\x30\n\x05image\x18\x0f \x01(\x0b\x32!.transit_realtime.TranslatedImage\x12\x42\n\x16image_alternative_text\x18\x10 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x38\n\x0c\x63\x61use_detail\x18\x11 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x39\n\reffect_detail\x18\x12 \x01(\x0b\x32\".transit_realtime.TranslatedString\"\xeb\x01\n\x05\x43\x61use\x12\x11\n\rUNKNOWN_CAUSE\x10\x01\x12\x0f\n\x0bOTHER_CAUSE\x10\x02\x12\x15\n\x11TECHNICAL_PROBLEM\x10\x03\x12\n\n\x06STRIKE\x10\x04\x12\x11\n\rDEMONSTRATION\x10\x05\x12\x0c\n\x08\x41\x43\x43IDENT\x10\x06\x12\x0b\n\x07HOLIDAY\x10\x07\x12\x0b\n\x07WEATHER\x10\x08\x12\x0f\n\x0bMAINTENANCE\x10\t\x12\x10\n\x0c\x43ONSTRUCTION\x10\n\x12\x13\n\x0fPOLICE_ACTIVITY\x10\x0b\x12\x15\n\x11MEDICAL_EMERGENCY\x10\x0c\x12\x11\n\rSPECIAL_EVENT\x10\r\"\xdd\x01\n\x06\x45\x66\x66\x65\x63t\x12\x0e\n\nNO_SERVICE\x10\x01\x12\x13\n\x0fREDUCED_SERVICE\x10\x02\x12\x16\n\x12SIGNIFICANT_DELAYS\x10\x03\x12\n\n\x06\x44\x45TOUR\x10\x04\x12\x16\n\x12\x41\x44\x44ITIONAL_SERVICE\x10\x05\x12\x14\n\x10MODIFIED_SERVICE\x10\x06\x12\x10\n\x0cOTHER_EFFECT\x10\x07\x12\x12\n\x0eUNKNOWN_EFFECT\x10\x08\x12\x0e\n\nSTOP_MOVED\x10\t\x12\r\n\tNO_EFFECT\x10\n\x12\x17\n\x13\x41\x43\x43\x45SSIBILITY_ISSUE\x10\x0b\"H\n\rSeverityLevel\x12\x14\n\x10UNKNOWN_SEVERITY\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x0b\n\x07WARNING\x10\x03\x12\n\n\x06SEVERE\x10\x04*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"7\n\tTimeRange\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x04*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"q\n\x08Position\x12\x10\n\x08latitude\x18\x01 \x02(\x02\x12\x11\n\tlongitude\x18\x02 \x02(\x02\x12\x0f\n\x07\x62\x65\x61ring\x18\x03 \x01(\x02\x12\x10\n\x08odometer\x18\x04 \x01(\x01\x12\r\n\x05speed\x18\x05 \x01(\x02*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xb7\x04\n\x0eTripDescriptor\x12\x0f\n\x07trip_id\x18\x01 \x01(\t\x12\x10\n\x08route_id\x18\x05 \x01(\t\x12\x14\n\x0c\x64irection_id\x18\x06 \x01(\r\x12\x12\n\nstart_time\x18\x02 \x01(\t\x12\x12\n\nstart_date\x18\x03 \x01(\t\x12T\n\x15schedule_relationship\x18\x04 \x01(\x0e\x32\x35.transit_realtime.TripDescriptor.ScheduleRelationship\x12L\n\rmodified_trip\x18\x07 \x01(\x0b\x32\x35.transit_realtime.TripDescriptor.ModifiedTripSelector\x1a\x82\x01\n\x14ModifiedTripSelector\x12\x18\n\x10modifications_id\x18\x01 \x01(\t\x12\x18\n\x10\x61\x66\x66\x65\x63ted_trip_id\x18\x02 \x01(\t\x12\x12\n\nstart_time\x18\x03 \x01(\t\x12\x12\n\nstart_date\x18\x04 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\x8a\x01\n\x14ScheduleRelationship\x12\r\n\tSCHEDULED\x10\x00\x12\r\n\x05\x41\x44\x44\x45\x44\x10\x01\x1a\x02\x08\x01\x12\x0f\n\x0bUNSCHEDULED\x10\x02\x12\x0c\n\x08\x43\x41NCELED\x10\x03\x12\x0f\n\x0bREPLACEMENT\x10\x05\x12\x0e\n\nDUPLICATED\x10\x06\x12\x0b\n\x07\x44\x45LETED\x10\x07\x12\x07\n\x03NEW\x10\x08*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xa3\x02\n\x11VehicleDescriptor\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x15\n\rlicense_plate\x18\x03 \x01(\t\x12\x61\n\x15wheelchair_accessible\x18\x04 \x01(\x0e\x32\x38.transit_realtime.VehicleDescriptor.WheelchairAccessible:\x08NO_VALUE\"i\n\x14WheelchairAccessible\x12\x0c\n\x08NO_VALUE\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x19\n\x15WHEELCHAIR_ACCESSIBLE\x10\x02\x12\x1b\n\x17WHEELCHAIR_INACCESSIBLE\x10\x03*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xb0\x01\n\x0e\x45ntitySelector\x12\x11\n\tagency_id\x18\x01 \x01(\t\x12\x10\n\x08route_id\x18\x02 \x01(\t\x12\x12\n\nroute_type\x18\x03 \x01(\x05\x12.\n\x04trip\x18\x04 \x01(\x0b\x32 .transit_realtime.TripDescriptor\x12\x0f\n\x07stop_id\x18\x05 \x01(\t\x12\x14\n\x0c\x64irection_id\x18\x06 \x01(\r*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xa6\x01\n\x10TranslatedString\x12\x43\n\x0btranslation\x18\x01 \x03(\x0b\x32..transit_realtime.TranslatedString.Translation\x1a=\n\x0bTranslation\x12\x0c\n\x04text\x18\x01 \x02(\t\x12\x10\n\x08language\x18\x02 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xc1\x01\n\x0fTranslatedImage\x12I\n\x0flocalized_image\x18\x01 \x03(\x0b\x32\x30.transit_realtime.TranslatedImage.LocalizedImage\x1aS\n\x0eLocalizedImage\x12\x0b\n\x03url\x18\x01 \x02(\t\x12\x12\n\nmedia_type\x18\x02 \x02(\t\x12\x10\n\x08language\x18\x03 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"C\n\x05Shape\x12\x10\n\x08shape_id\x18\x01 \x01(\t\x12\x18\n\x10\x65ncoded_polyline\x18\x02 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\x84\x05\n\x04Stop\x12\x0f\n\x07stop_id\x18\x01 \x01(\t\x12\x35\n\tstop_code\x18\x02 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x35\n\tstop_name\x18\x03 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x39\n\rtts_stop_name\x18\x04 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x35\n\tstop_desc\x18\x05 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x10\n\x08stop_lat\x18\x06 \x01(\x02\x12\x10\n\x08stop_lon\x18\x07 \x01(\x02\x12\x0f\n\x07zone_id\x18\x08 \x01(\t\x12\x34\n\x08stop_url\x18\t \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x16\n\x0eparent_station\x18\x0b \x01(\t\x12\x15\n\rstop_timezone\x18\x0c \x01(\t\x12O\n\x13wheelchair_boarding\x18\r \x01(\x0e\x32).transit_realtime.Stop.WheelchairBoarding:\x07UNKNOWN\x12\x10\n\x08level_id\x18\x0e \x01(\t\x12\x39\n\rplatform_code\x18\x0f \x01(\x0b\x32\".transit_realtime.TranslatedString\"C\n\x12WheelchairBoarding\x12\x0b\n\x07UNKNOWN\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\x11\n\rNOT_AVAILABLE\x10\x02*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xdf\x04\n\x11TripModifications\x12I\n\x0eselected_trips\x18\x01 \x03(\x0b\x32\x31.transit_realtime.TripModifications.SelectedTrips\x12\x13\n\x0bstart_times\x18\x02 \x03(\t\x12\x15\n\rservice_dates\x18\x03 \x03(\t\x12G\n\rmodifications\x18\x04 \x03(\x0b\x32\x30.transit_realtime.TripModifications.Modification\x1a\xb4\x02\n\x0cModification\x12;\n\x13start_stop_selector\x18\x01 \x01(\x0b\x32\x1e.transit_realtime.StopSelector\x12\x39\n\x11\x65nd_stop_selector\x18\x02 \x01(\x0b\x32\x1e.transit_realtime.StopSelector\x12(\n\x1dpropagated_modification_delay\x18\x03 \x01(\x05:\x01\x30\x12<\n\x11replacement_stops\x18\x04 \x03(\x0b\x32!.transit_realtime.ReplacementStop\x12\x18\n\x10service_alert_id\x18\x05 \x01(\t\x12\x1a\n\x12last_modified_time\x18\x06 \x01(\x04*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\x1a\x43\n\rSelectedTrips\x12\x10\n\x08trip_ids\x18\x01 \x03(\t\x12\x10\n\x08shape_id\x18\x02 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"F\n\x0cStopSelector\x12\x15\n\rstop_sequence\x18\x01 \x01(\r\x12\x0f\n\x07stop_id\x18\x02 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"O\n\x0fReplacementStop\x12\x1b\n\x13travel_time_to_stop\x18\x01 \x01(\x05\x12\x0f\n\x07stop_id\x18\x02 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90NB\x1d\n\x1b\x63om.google.transit.realtime')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13gtfs-realtime.proto\x12\x10transit_realtime\"y\n\x0b\x46\x65\x65\x64Message\x12,\n\x06header\x18\x01 \x02(\x0b\x32\x1c.transit_realtime.FeedHeader\x12,\n\x06\x65ntity\x18\x02 \x03(\x0b\x32\x1c.transit_realtime.FeedEntity*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xed\x01\n\nFeedHeader\x12\x1d\n\x15gtfs_realtime_version\x18\x01 \x02(\t\x12Q\n\x0eincrementality\x18\x02 \x01(\x0e\x32+.transit_realtime.FeedHeader.Incrementality:\x0c\x46ULL_DATASET\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\x12\x14\n\x0c\x66\x65\x65\x64_version\x18\x04 \x01(\t\"4\n\x0eIncrementality\x12\x10\n\x0c\x46ULL_DATASET\x10\x00\x12\x10\n\x0c\x44IFFERENTIAL\x10\x01*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xe1\x02\n\nFeedEntity\x12\n\n\x02id\x18\x01 \x02(\t\x12\x19\n\nis_deleted\x18\x02 \x01(\x08:\x05\x66\x61lse\x12\x31\n\x0btrip_update\x18\x03 \x01(\x0b\x32\x1c.transit_realtime.TripUpdate\x12\x32\n\x07vehicle\x18\x04 \x01(\x0b\x32!.transit_realtime.VehiclePosition\x12&\n\x05\x61lert\x18\x05 \x01(\x0b\x32\x17.transit_realtime.Alert\x12&\n\x05shape\x18\x06 \x01(\x0b\x32\x17.transit_realtime.Shape\x12$\n\x04stop\x18\x07 \x01(\x0b\x32\x16.transit_realtime.Stop\x12?\n\x12trip_modifications\x18\x08 \x01(\x0b\x32#.transit_realtime.TripModifications*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xf6\x0b\n\nTripUpdate\x12.\n\x04trip\x18\x01 \x02(\x0b\x32 .transit_realtime.TripDescriptor\x12\x34\n\x07vehicle\x18\x03 \x01(\x0b\x32#.transit_realtime.VehicleDescriptor\x12\x45\n\x10stop_time_update\x18\x02 \x03(\x0b\x32+.transit_realtime.TripUpdate.StopTimeUpdate\x12\x11\n\ttimestamp\x18\x04 \x01(\x04\x12\r\n\x05\x64\x65lay\x18\x05 \x01(\x05\x12\x44\n\x0ftrip_properties\x18\x06 \x01(\x0b\x32+.transit_realtime.TripUpdate.TripProperties\x1ai\n\rStopTimeEvent\x12\r\n\x05\x64\x65lay\x18\x01 \x01(\x05\x12\x0c\n\x04time\x18\x02 \x01(\x03\x12\x13\n\x0buncertainty\x18\x03 \x01(\x05\x12\x16\n\x0escheduled_time\x18\x04 \x01(\x03*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\x1a\xb9\x07\n\x0eStopTimeUpdate\x12\x15\n\rstop_sequence\x18\x01 \x01(\r\x12\x0f\n\x07stop_id\x18\x04 \x01(\t\x12;\n\x07\x61rrival\x18\x02 \x01(\x0b\x32*.transit_realtime.TripUpdate.StopTimeEvent\x12=\n\tdeparture\x18\x03 \x01(\x0b\x32*.transit_realtime.TripUpdate.StopTimeEvent\x12U\n\x1a\x64\x65parture_occupancy_status\x18\x07 \x01(\x0e\x32\x31.transit_realtime.VehiclePosition.OccupancyStatus\x12j\n\x15schedule_relationship\x18\x05 \x01(\x0e\x32@.transit_realtime.TripUpdate.StopTimeUpdate.ScheduleRelationship:\tSCHEDULED\x12\\\n\x14stop_time_properties\x18\x06 \x01(\x0b\x32>.transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties\x1a\xff\x02\n\x12StopTimeProperties\x12\x18\n\x10\x61ssigned_stop_id\x18\x01 \x01(\t\x12\x15\n\rstop_headsign\x18\x02 \x01(\t\x12\x65\n\x0bpickup_type\x18\x03 \x01(\x0e\x32P.transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties.DropOffPickupType\x12g\n\rdrop_off_type\x18\x04 \x01(\x0e\x32P.transit_realtime.TripUpdate.StopTimeUpdate.StopTimeProperties.DropOffPickupType\"X\n\x11\x44ropOffPickupType\x12\x0b\n\x07REGULAR\x10\x00\x12\x08\n\x04NONE\x10\x01\x12\x10\n\x0cPHONE_AGENCY\x10\x02\x12\x1a\n\x16\x43OORDINATE_WITH_DRIVER\x10\x03*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"P\n\x14ScheduleRelationship\x12\r\n\tSCHEDULED\x10\x00\x12\x0b\n\x07SKIPPED\x10\x01\x12\x0b\n\x07NO_DATA\x10\x02\x12\x0f\n\x0bUNSCHEDULED\x10\x03*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\x1a\x9b\x01\n\x0eTripProperties\x12\x0f\n\x07trip_id\x18\x01 \x01(\t\x12\x12\n\nstart_date\x18\x02 \x01(\t\x12\x12\n\nstart_time\x18\x03 \x01(\t\x12\x10\n\x08shape_id\x18\x04 \x01(\t\x12\x15\n\rtrip_headsign\x18\x05 \x01(\t\x12\x17\n\x0ftrip_short_name\x18\x06 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xdf\t\n\x0fVehiclePosition\x12.\n\x04trip\x18\x01 \x01(\x0b\x32 .transit_realtime.TripDescriptor\x12\x34\n\x07vehicle\x18\x08 \x01(\x0b\x32#.transit_realtime.VehicleDescriptor\x12,\n\x08position\x18\x02 \x01(\x0b\x32\x1a.transit_realtime.Position\x12\x1d\n\x15\x63urrent_stop_sequence\x18\x03 \x01(\r\x12\x0f\n\x07stop_id\x18\x07 \x01(\t\x12Z\n\x0e\x63urrent_status\x18\x04 \x01(\x0e\x32\x33.transit_realtime.VehiclePosition.VehicleStopStatus:\rIN_TRANSIT_TO\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12K\n\x10\x63ongestion_level\x18\x06 \x01(\x0e\x32\x31.transit_realtime.VehiclePosition.CongestionLevel\x12K\n\x10occupancy_status\x18\t \x01(\x0e\x32\x31.transit_realtime.VehiclePosition.OccupancyStatus\x12\x1c\n\x14occupancy_percentage\x18\n \x01(\r\x12Q\n\x16multi_carriage_details\x18\x0b \x03(\x0b\x32\x31.transit_realtime.VehiclePosition.CarriageDetails\x1a\xd9\x01\n\x0f\x43\x61rriageDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12^\n\x10occupancy_status\x18\x03 \x01(\x0e\x32\x31.transit_realtime.VehiclePosition.OccupancyStatus:\x11NO_DATA_AVAILABLE\x12 \n\x14occupancy_percentage\x18\x04 \x01(\x05:\x02-1\x12\x19\n\x11\x63\x61rriage_sequence\x18\x05 \x01(\r*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"G\n\x11VehicleStopStatus\x12\x0f\n\x0bINCOMING_AT\x10\x00\x12\x0e\n\nSTOPPED_AT\x10\x01\x12\x11\n\rIN_TRANSIT_TO\x10\x02\"}\n\x0f\x43ongestionLevel\x12\x1c\n\x18UNKNOWN_CONGESTION_LEVEL\x10\x00\x12\x14\n\x10RUNNING_SMOOTHLY\x10\x01\x12\x0f\n\x0bSTOP_AND_GO\x10\x02\x12\x0e\n\nCONGESTION\x10\x03\x12\x15\n\x11SEVERE_CONGESTION\x10\x04\"\xd9\x01\n\x0fOccupancyStatus\x12\t\n\x05\x45MPTY\x10\x00\x12\x18\n\x14MANY_SEATS_AVAILABLE\x10\x01\x12\x17\n\x13\x46\x45W_SEATS_AVAILABLE\x10\x02\x12\x16\n\x12STANDING_ROOM_ONLY\x10\x03\x12\x1e\n\x1a\x43RUSHED_STANDING_ROOM_ONLY\x10\x04\x12\x08\n\x04\x46ULL\x10\x05\x12\x1c\n\x18NOT_ACCEPTING_PASSENGERS\x10\x06\x12\x15\n\x11NO_DATA_AVAILABLE\x10\x07\x12\x11\n\rNOT_BOARDABLE\x10\x08*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xf1\x0b\n\x05\x41lert\x12\x36\n\ractive_period\x18\x01 \x03(\x0b\x32\x1b.transit_realtime.TimeRangeB\x02\x18\x01\x12\x39\n\x14\x63ommunication_period\x18\x02 \x03(\x0b\x32\x1b.transit_realtime.TimeRange\x12\x32\n\rimpact_period\x18\x03 \x03(\x0b\x32\x1b.transit_realtime.TimeRange\x12\x39\n\x0finformed_entity\x18\x05 \x03(\x0b\x32 .transit_realtime.EntitySelector\x12;\n\x05\x63\x61use\x18\x06 \x01(\x0e\x32\x1d.transit_realtime.Alert.Cause:\rUNKNOWN_CAUSE\x12>\n\x06\x65\x66\x66\x65\x63t\x18\x07 \x01(\x0e\x32\x1e.transit_realtime.Alert.Effect:\x0eUNKNOWN_EFFECT\x12/\n\x03url\x18\x08 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x37\n\x0bheader_text\x18\n \x01(\x0b\x32\".transit_realtime.TranslatedString\x12<\n\x10\x64\x65scription_text\x18\x0b \x01(\x0b\x32\".transit_realtime.TranslatedString\x12;\n\x0ftts_header_text\x18\x0c \x01(\x0b\x32\".transit_realtime.TranslatedString\x12@\n\x14tts_description_text\x18\r \x01(\x0b\x32\".transit_realtime.TranslatedString\x12O\n\x0eseverity_level\x18\x0e \x01(\x0e\x32%.transit_realtime.Alert.SeverityLevel:\x10UNKNOWN_SEVERITY\x12\x30\n\x05image\x18\x0f \x01(\x0b\x32!.transit_realtime.TranslatedImage\x12\x42\n\x16image_alternative_text\x18\x10 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x38\n\x0c\x63\x61use_detail\x18\x11 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x39\n\reffect_detail\x18\x12 \x01(\x0b\x32\".transit_realtime.TranslatedString\"\xeb\x01\n\x05\x43\x61use\x12\x11\n\rUNKNOWN_CAUSE\x10\x01\x12\x0f\n\x0bOTHER_CAUSE\x10\x02\x12\x15\n\x11TECHNICAL_PROBLEM\x10\x03\x12\n\n\x06STRIKE\x10\x04\x12\x11\n\rDEMONSTRATION\x10\x05\x12\x0c\n\x08\x41\x43\x43IDENT\x10\x06\x12\x0b\n\x07HOLIDAY\x10\x07\x12\x0b\n\x07WEATHER\x10\x08\x12\x0f\n\x0bMAINTENANCE\x10\t\x12\x10\n\x0c\x43ONSTRUCTION\x10\n\x12\x13\n\x0fPOLICE_ACTIVITY\x10\x0b\x12\x15\n\x11MEDICAL_EMERGENCY\x10\x0c\x12\x11\n\rSPECIAL_EVENT\x10\r\"\xdd\x01\n\x06\x45\x66\x66\x65\x63t\x12\x0e\n\nNO_SERVICE\x10\x01\x12\x13\n\x0fREDUCED_SERVICE\x10\x02\x12\x16\n\x12SIGNIFICANT_DELAYS\x10\x03\x12\n\n\x06\x44\x45TOUR\x10\x04\x12\x16\n\x12\x41\x44\x44ITIONAL_SERVICE\x10\x05\x12\x14\n\x10MODIFIED_SERVICE\x10\x06\x12\x10\n\x0cOTHER_EFFECT\x10\x07\x12\x12\n\x0eUNKNOWN_EFFECT\x10\x08\x12\x0e\n\nSTOP_MOVED\x10\t\x12\r\n\tNO_EFFECT\x10\n\x12\x17\n\x13\x41\x43\x43\x45SSIBILITY_ISSUE\x10\x0b\"H\n\rSeverityLevel\x12\x14\n\x10UNKNOWN_SEVERITY\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x0b\n\x07WARNING\x10\x03\x12\n\n\x06SEVERE\x10\x04*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"7\n\tTimeRange\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x04*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"q\n\x08Position\x12\x10\n\x08latitude\x18\x01 \x02(\x02\x12\x11\n\tlongitude\x18\x02 \x02(\x02\x12\x0f\n\x07\x62\x65\x61ring\x18\x03 \x01(\x02\x12\x10\n\x08odometer\x18\x04 \x01(\x01\x12\r\n\x05speed\x18\x05 \x01(\x02*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xb7\x04\n\x0eTripDescriptor\x12\x0f\n\x07trip_id\x18\x01 \x01(\t\x12\x10\n\x08route_id\x18\x05 \x01(\t\x12\x14\n\x0c\x64irection_id\x18\x06 \x01(\r\x12\x12\n\nstart_time\x18\x02 \x01(\t\x12\x12\n\nstart_date\x18\x03 \x01(\t\x12T\n\x15schedule_relationship\x18\x04 \x01(\x0e\x32\x35.transit_realtime.TripDescriptor.ScheduleRelationship\x12L\n\rmodified_trip\x18\x07 \x01(\x0b\x32\x35.transit_realtime.TripDescriptor.ModifiedTripSelector\x1a\x82\x01\n\x14ModifiedTripSelector\x12\x18\n\x10modifications_id\x18\x01 \x01(\t\x12\x18\n\x10\x61\x66\x66\x65\x63ted_trip_id\x18\x02 \x01(\t\x12\x12\n\nstart_time\x18\x03 \x01(\t\x12\x12\n\nstart_date\x18\x04 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\x8a\x01\n\x14ScheduleRelationship\x12\r\n\tSCHEDULED\x10\x00\x12\r\n\x05\x41\x44\x44\x45\x44\x10\x01\x1a\x02\x08\x01\x12\x0f\n\x0bUNSCHEDULED\x10\x02\x12\x0c\n\x08\x43\x41NCELED\x10\x03\x12\x0f\n\x0bREPLACEMENT\x10\x05\x12\x0e\n\nDUPLICATED\x10\x06\x12\x0b\n\x07\x44\x45LETED\x10\x07\x12\x07\n\x03NEW\x10\x08*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xa3\x02\n\x11VehicleDescriptor\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x15\n\rlicense_plate\x18\x03 \x01(\t\x12\x61\n\x15wheelchair_accessible\x18\x04 \x01(\x0e\x32\x38.transit_realtime.VehicleDescriptor.WheelchairAccessible:\x08NO_VALUE\"i\n\x14WheelchairAccessible\x12\x0c\n\x08NO_VALUE\x10\x00\x12\x0b\n\x07UNKNOWN\x10\x01\x12\x19\n\x15WHEELCHAIR_ACCESSIBLE\x10\x02\x12\x1b\n\x17WHEELCHAIR_INACCESSIBLE\x10\x03*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xb0\x01\n\x0e\x45ntitySelector\x12\x11\n\tagency_id\x18\x01 \x01(\t\x12\x10\n\x08route_id\x18\x02 \x01(\t\x12\x12\n\nroute_type\x18\x03 \x01(\x05\x12.\n\x04trip\x18\x04 \x01(\x0b\x32 .transit_realtime.TripDescriptor\x12\x0f\n\x07stop_id\x18\x05 \x01(\t\x12\x14\n\x0c\x64irection_id\x18\x06 \x01(\r*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xa6\x01\n\x10TranslatedString\x12\x43\n\x0btranslation\x18\x01 \x03(\x0b\x32..transit_realtime.TranslatedString.Translation\x1a=\n\x0bTranslation\x12\x0c\n\x04text\x18\x01 \x02(\t\x12\x10\n\x08language\x18\x02 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xc1\x01\n\x0fTranslatedImage\x12I\n\x0flocalized_image\x18\x01 \x03(\x0b\x32\x30.transit_realtime.TranslatedImage.LocalizedImage\x1aS\n\x0eLocalizedImage\x12\x0b\n\x03url\x18\x01 \x02(\t\x12\x12\n\nmedia_type\x18\x02 \x02(\t\x12\x10\n\x08language\x18\x03 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"C\n\x05Shape\x12\x10\n\x08shape_id\x18\x01 \x01(\t\x12\x18\n\x10\x65ncoded_polyline\x18\x02 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\x84\x05\n\x04Stop\x12\x0f\n\x07stop_id\x18\x01 \x01(\t\x12\x35\n\tstop_code\x18\x02 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x35\n\tstop_name\x18\x03 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x39\n\rtts_stop_name\x18\x04 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x35\n\tstop_desc\x18\x05 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x10\n\x08stop_lat\x18\x06 \x01(\x02\x12\x10\n\x08stop_lon\x18\x07 \x01(\x02\x12\x0f\n\x07zone_id\x18\x08 \x01(\t\x12\x34\n\x08stop_url\x18\t \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x16\n\x0eparent_station\x18\x0b \x01(\t\x12\x15\n\rstop_timezone\x18\x0c \x01(\t\x12O\n\x13wheelchair_boarding\x18\r \x01(\x0e\x32).transit_realtime.Stop.WheelchairBoarding:\x07UNKNOWN\x12\x10\n\x08level_id\x18\x0e \x01(\t\x12\x39\n\rplatform_code\x18\x0f \x01(\x0b\x32\".transit_realtime.TranslatedString\"C\n\x12WheelchairBoarding\x12\x0b\n\x07UNKNOWN\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\x11\n\rNOT_AVAILABLE\x10\x02*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"\xdf\x04\n\x11TripModifications\x12I\n\x0eselected_trips\x18\x01 \x03(\x0b\x32\x31.transit_realtime.TripModifications.SelectedTrips\x12\x13\n\x0bstart_times\x18\x02 \x03(\t\x12\x15\n\rservice_dates\x18\x03 \x03(\t\x12G\n\rmodifications\x18\x04 \x03(\x0b\x32\x30.transit_realtime.TripModifications.Modification\x1a\xb4\x02\n\x0cModification\x12;\n\x13start_stop_selector\x18\x01 \x01(\x0b\x32\x1e.transit_realtime.StopSelector\x12\x39\n\x11\x65nd_stop_selector\x18\x02 \x01(\x0b\x32\x1e.transit_realtime.StopSelector\x12(\n\x1dpropagated_modification_delay\x18\x03 \x01(\x05:\x01\x30\x12<\n\x11replacement_stops\x18\x04 \x03(\x0b\x32!.transit_realtime.ReplacementStop\x12\x18\n\x10service_alert_id\x18\x05 \x01(\t\x12\x1a\n\x12last_modified_time\x18\x06 \x01(\x04*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\x1a\x43\n\rSelectedTrips\x12\x10\n\x08trip_ids\x18\x01 \x03(\t\x12\x10\n\x08shape_id\x18\x02 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"F\n\x0cStopSelector\x12\x15\n\rstop_sequence\x18\x01 \x01(\r\x12\x0f\n\x07stop_id\x18\x02 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90N\"O\n\x0fReplacementStop\x12\x1b\n\x13travel_time_to_stop\x18\x01 \x01(\x05\x12\x0f\n\x07stop_id\x18\x02 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xa8\x46\x10\x90NB\x1d\n\x1b\x63om.google.transit.realtime')
 
 _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
 _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'gtfs_realtime_pb2', globals())
@@ -21,6 +21,8 @@
 
   DESCRIPTOR._options = None
   DESCRIPTOR._serialized_options = b'\n\033com.google.transit.realtime'
+  _ALERT.fields_by_name['active_period']._options = None
+  _ALERT.fields_by_name['active_period']._serialized_options = b'\030\001'
   _TRIPDESCRIPTOR_SCHEDULERELATIONSHIP.values_by_name["ADDED"]._options = None
   _TRIPDESCRIPTOR_SCHEDULERELATIONSHIP.values_by_name["ADDED"]._serialized_options = b'\010\001'
   _FEEDMESSAGE._serialized_start=41
@@ -56,51 +58,51 @@
   _VEHICLEPOSITION_OCCUPANCYSTATUS._serialized_start=3304
   _VEHICLEPOSITION_OCCUPANCYSTATUS._serialized_end=3521
   _ALERT._serialized_start=3540
-  _ALERT._serialized_end=4946
-  _ALERT_CAUSE._serialized_start=4397
-  _ALERT_CAUSE._serialized_end=4632
-  _ALERT_EFFECT._serialized_start=4635
-  _ALERT_EFFECT._serialized_end=4856
-  _ALERT_SEVERITYLEVEL._serialized_start=4858
-  _ALERT_SEVERITYLEVEL._serialized_end=4930
-  _TIMERANGE._serialized_start=4948
-  _TIMERANGE._serialized_end=5003
-  _POSITION._serialized_start=5005
-  _POSITION._serialized_end=5118
-  _TRIPDESCRIPTOR._serialized_start=5121
-  _TRIPDESCRIPTOR._serialized_end=5688
-  _TRIPDESCRIPTOR_MODIFIEDTRIPSELECTOR._serialized_start=5401
-  _TRIPDESCRIPTOR_MODIFIEDTRIPSELECTOR._serialized_end=5531
-  _TRIPDESCRIPTOR_SCHEDULERELATIONSHIP._serialized_start=5534
-  _TRIPDESCRIPTOR_SCHEDULERELATIONSHIP._serialized_end=5672
-  _VEHICLEDESCRIPTOR._serialized_start=5691
-  _VEHICLEDESCRIPTOR._serialized_end=5982
-  _VEHICLEDESCRIPTOR_WHEELCHAIRACCESSIBLE._serialized_start=5861
-  _VEHICLEDESCRIPTOR_WHEELCHAIRACCESSIBLE._serialized_end=5966
-  _ENTITYSELECTOR._serialized_start=5985
-  _ENTITYSELECTOR._serialized_end=6161
-  _TRANSLATEDSTRING._serialized_start=6164
-  _TRANSLATEDSTRING._serialized_end=6330
-  _TRANSLATEDSTRING_TRANSLATION._serialized_start=6253
-  _TRANSLATEDSTRING_TRANSLATION._serialized_end=6314
-  _TRANSLATEDIMAGE._serialized_start=6333
-  _TRANSLATEDIMAGE._serialized_end=6526
-  _TRANSLATEDIMAGE_LOCALIZEDIMAGE._serialized_start=6427
-  _TRANSLATEDIMAGE_LOCALIZEDIMAGE._serialized_end=6510
-  _SHAPE._serialized_start=6528
-  _SHAPE._serialized_end=6595
-  _STOP._serialized_start=6598
-  _STOP._serialized_end=7242
-  _STOP_WHEELCHAIRBOARDING._serialized_start=7159
-  _STOP_WHEELCHAIRBOARDING._serialized_end=7226
-  _TRIPMODIFICATIONS._serialized_start=7245
-  _TRIPMODIFICATIONS._serialized_end=7852
-  _TRIPMODIFICATIONS_MODIFICATION._serialized_start=7459
-  _TRIPMODIFICATIONS_MODIFICATION._serialized_end=7767
-  _TRIPMODIFICATIONS_SELECTEDTRIPS._serialized_start=7769
-  _TRIPMODIFICATIONS_SELECTEDTRIPS._serialized_end=7836
-  _STOPSELECTOR._serialized_start=7854
-  _STOPSELECTOR._serialized_end=7924
-  _REPLACEMENTSTOP._serialized_start=7926
-  _REPLACEMENTSTOP._serialized_end=8005
+  _ALERT._serialized_end=5061
+  _ALERT_CAUSE._serialized_start=4512
+  _ALERT_CAUSE._serialized_end=4747
+  _ALERT_EFFECT._serialized_start=4750
+  _ALERT_EFFECT._serialized_end=4971
+  _ALERT_SEVERITYLEVEL._serialized_start=4973
+  _ALERT_SEVERITYLEVEL._serialized_end=5045
+  _TIMERANGE._serialized_start=5063
+  _TIMERANGE._serialized_end=5118
+  _POSITION._serialized_start=5120
+  _POSITION._serialized_end=5233
+  _TRIPDESCRIPTOR._serialized_start=5236
+  _TRIPDESCRIPTOR._serialized_end=5803
+  _TRIPDESCRIPTOR_MODIFIEDTRIPSELECTOR._serialized_start=5516
+  _TRIPDESCRIPTOR_MODIFIEDTRIPSELECTOR._serialized_end=5646
+  _TRIPDESCRIPTOR_SCHEDULERELATIONSHIP._serialized_start=5649
+  _TRIPDESCRIPTOR_SCHEDULERELATIONSHIP._serialized_end=5787
+  _VEHICLEDESCRIPTOR._serialized_start=5806
+  _VEHICLEDESCRIPTOR._serialized_end=6097
+  _VEHICLEDESCRIPTOR_WHEELCHAIRACCESSIBLE._serialized_start=5976
+  _VEHICLEDESCRIPTOR_WHEELCHAIRACCESSIBLE._serialized_end=6081
+  _ENTITYSELECTOR._serialized_start=6100
+  _ENTITYSELECTOR._serialized_end=6276
+  _TRANSLATEDSTRING._serialized_start=6279
+  _TRANSLATEDSTRING._serialized_end=6445
+  _TRANSLATEDSTRING_TRANSLATION._serialized_start=6368
+  _TRANSLATEDSTRING_TRANSLATION._serialized_end=6429
+  _TRANSLATEDIMAGE._serialized_start=6448
+  _TRANSLATEDIMAGE._serialized_end=6641
+  _TRANSLATEDIMAGE_LOCALIZEDIMAGE._serialized_start=6542
+  _TRANSLATEDIMAGE_LOCALIZEDIMAGE._serialized_end=6625
+  _SHAPE._serialized_start=6643
+  _SHAPE._serialized_end=6710
+  _STOP._serialized_start=6713
+  _STOP._serialized_end=7357
+  _STOP_WHEELCHAIRBOARDING._serialized_start=7274
+  _STOP_WHEELCHAIRBOARDING._serialized_end=7341
+  _TRIPMODIFICATIONS._serialized_start=7360
+  _TRIPMODIFICATIONS._serialized_end=7967
+  _TRIPMODIFICATIONS_MODIFICATION._serialized_start=7574
+  _TRIPMODIFICATIONS_MODIFICATION._serialized_end=7882
+  _TRIPMODIFICATIONS_SELECTEDTRIPS._serialized_start=7884
+  _TRIPMODIFICATIONS_SELECTEDTRIPS._serialized_end=7951
+  _STOPSELECTOR._serialized_start=7969
+  _STOPSELECTOR._serialized_end=8039
+  _REPLACEMENTSTOP._serialized_start=8041
+  _REPLACEMENTSTOP._serialized_end=8120
 # @@protoc_insertion_point(module_scope)
diff --git a/python/google/transit/gtfs_realtime_pb2.pyi b/python/google/transit/gtfs_realtime_pb2.pyi
index b6acaf1..da00d2e 100644
--- a/python/google/transit/gtfs_realtime_pb2.pyi
+++ b/python/google/transit/gtfs_realtime_pb2.pyi
@@ -8,7 +8,7 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
 DESCRIPTOR: _descriptor.FileDescriptor
 
 class Alert(_message.Message):
-    __slots__ = ["active_period", "cause", "cause_detail", "description_text", "effect", "effect_detail", "header_text", "image", "image_alternative_text", "informed_entity", "severity_level", "tts_description_text", "tts_header_text", "url"]
+    __slots__ = ["active_period", "cause", "cause_detail", "communication_period", "description_text", "effect", "effect_detail", "header_text", "image", "image_alternative_text", "impact_period", "informed_entity", "severity_level", "tts_description_text", "tts_header_text", "url"]
     class Cause(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
         __slots__ = []
     class Effect(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
@@ -21,6 +21,7 @@ class Alert(_message.Message):
     ADDITIONAL_SERVICE: Alert.Effect
     CAUSE_DETAIL_FIELD_NUMBER: _ClassVar[int]
     CAUSE_FIELD_NUMBER: _ClassVar[int]
+    COMMUNICATION_PERIOD_FIELD_NUMBER: _ClassVar[int]
     CONSTRUCTION: Alert.Cause
     DEMONSTRATION: Alert.Cause
     DESCRIPTION_TEXT_FIELD_NUMBER: _ClassVar[int]
@@ -32,6 +33,7 @@ class Alert(_message.Message):
     HOLIDAY: Alert.Cause
     IMAGE_ALTERNATIVE_TEXT_FIELD_NUMBER: _ClassVar[int]
     IMAGE_FIELD_NUMBER: _ClassVar[int]
+    IMPACT_PERIOD_FIELD_NUMBER: _ClassVar[int]
     INFO: Alert.SeverityLevel
     INFORMED_ENTITY_FIELD_NUMBER: _ClassVar[int]
     MAINTENANCE: Alert.Cause
@@ -61,18 +63,20 @@ class Alert(_message.Message):
     active_period: _containers.RepeatedCompositeFieldContainer[TimeRange]
     cause: Alert.Cause
     cause_detail: TranslatedString
+    communication_period: _containers.RepeatedCompositeFieldContainer[TimeRange]
     description_text: TranslatedString
     effect: Alert.Effect
     effect_detail: TranslatedString
     header_text: TranslatedString
     image: TranslatedImage
     image_alternative_text: TranslatedString
+    impact_period: _containers.RepeatedCompositeFieldContainer[TimeRange]
     informed_entity: _containers.RepeatedCompositeFieldContainer[EntitySelector]
     severity_level: Alert.SeverityLevel
     tts_description_text: TranslatedString
     tts_header_text: TranslatedString
     url: TranslatedString
-    def __init__(self, active_period: _Optional[_Iterable[_Union[TimeRange, _Mapping]]] = ..., informed_entity: _Optional[_Iterable[_Union[EntitySelector, _Mapping]]] = ..., cause: _Optional[_Union[Alert.Cause, str]] = ..., effect: _Optional[_Union[Alert.Effect, str]] = ..., url: _Optional[_Union[TranslatedString, _Mapping]] = ..., header_text: _Optional[_Union[TranslatedString, _Mapping]] = ..., description_text: _Optional[_Union[TranslatedString, _Mapping]] = ..., tts_header_text: _Optional[_Union[TranslatedString, _Mapping]] = ..., tts_description_text: _Optional[_Union[TranslatedString, _Mapping]] = ..., severity_level: _Optional[_Union[Alert.SeverityLevel, str]] = ..., image: _Optional[_Union[TranslatedImage, _Mapping]] = ..., image_alternative_text: _Optional[_Union[TranslatedString, _Mapping]] = ..., cause_detail: _Optional[_Union[TranslatedString, _Mapping]] = ..., effect_detail: _Optional[_Union[TranslatedString, _Mapping]] = ...) -> None: ...
+    def __init__(self, active_period: _Optional[_Iterable[_Union[TimeRange, _Mapping]]] = ..., communication_period: _Optional[_Iterable[_Union[TimeRange, _Mapping]]] = ..., impact_period: _Optional[_Iterable[_Union[TimeRange, _Mapping]]] = ..., informed_entity: _Optional[_Iterable[_Union[EntitySelector, _Mapping]]] = ..., cause: _Optional[_Union[Alert.Cause, str]] = ..., effect: _Optional[_Union[Alert.Effect, str]] = ..., url: _Optional[_Union[TranslatedString, _Mapping]] = ..., header_text: _Optional[_Union[TranslatedString, _Mapping]] = ..., description_text: _Optional[_Union[TranslatedString, _Mapping]] = ..., tts_header_text: _Optional[_Union[TranslatedString, _Mapping]] = ..., tts_description_text: _Optional[_Union[TranslatedString, _Mapping]] = ..., severity_level: _Optional[_Union[Alert.SeverityLevel, str]] = ..., image: _Optional[_Union[TranslatedImage, _Mapping]] = ..., image_alternative_text: _Optional[_Union[TranslatedString, _Mapping]] = ..., cause_detail: _Optional[_Union[TranslatedString, _Mapping]] = ..., effect_detail: _Optional[_Union[TranslatedString, _Mapping]] = ...) -> None: ...
 
 class EntitySelector(_message.Message):
     __slots__ = ["agency_id", "direction_id", "route_id", "route_type", "stop_id", "trip"]
diff --git a/ruby/lib/google/transit/gtfs-realtime.pb.rb b/ruby/lib/google/transit/gtfs-realtime.pb.rb
index f28af2c..ca739eb 100644
--- a/ruby/lib/google/transit/gtfs-realtime.pb.rb
+++ b/ruby/lib/google/transit/gtfs-realtime.pb.rb
@@ -321,7 +321,9 @@ class CarriageDetails
   end
 
   class Alert
-    repeated ::Transit_realtime::TimeRange, :active_period, 1
+    repeated ::Transit_realtime::TimeRange, :active_period, 1, :deprecated => true
+    repeated ::Transit_realtime::TimeRange, :communication_period, 2
+    repeated ::Transit_realtime::TimeRange, :impact_period, 3
     repeated ::Transit_realtime::EntitySelector, :informed_entity, 5
     optional ::Transit_realtime::Alert::Cause, :cause, 6, :default => ::Transit_realtime::Alert::Cause::UNKNOWN_CAUSE
     optional ::Transit_realtime::Alert::Effect, :effect, 7, :default => ::Transit_realtime::Alert::Effect::UNKNOWN_EFFECT

From 2659525546ebdc755de2cc63e2a08bc6c113ec9a Mon Sep 17 00:00:00 2001
From: jcpitre 
Date: Wed, 29 Jul 2026 14:01:31 -0400
Subject: [PATCH 2/3] Bumped nodejs version.

---
 nodejs/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/nodejs/package.json b/nodejs/package.json
index cea0fae..97b03de 100644
--- a/nodejs/package.json
+++ b/nodejs/package.json
@@ -8,7 +8,7 @@
     "tags": [
         "gtfs-realtime"
     ],
-    "version": "2.1.0",
+    "version": "2.2.0",
     "repository": {
         "type": "git",
         "url": "https://github.com/MobilityData/gtfs-realtime-bindings.git"

From ad6f3392de485803f67f705250cc3338ce01f986 Mon Sep 17 00:00:00 2001
From: jcpitre 
Date: Wed, 29 Jul 2026 14:44:48 -0400
Subject: [PATCH 3/3] Bumped other languages versions.

---
 java/pom.xml                        | 2 +-
 python/pyproject.toml               | 2 +-
 ruby/gtfs-realtime-bindings.gemspec | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/java/pom.xml b/java/pom.xml
index 75308e5..0a1cc45 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -19,7 +19,7 @@
 
     org.mobilitydata
     gtfs-realtime-bindings
-    0.1.1-SNAPSHOT
+    0.2.0
 
     gtfs-realtime-bindings
     Java classes generated from the GTFS-realtime protocol buffer specification.
diff --git a/python/pyproject.toml b/python/pyproject.toml
index 0a8b50f..a7f6118 100644
--- a/python/pyproject.toml
+++ b/python/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
 
 [project]
 name = "gtfs-realtime-bindings"
-version = "2.1.0"
+version = "2.2.0"
 description = "Python classes generated from the GTFS-realtime protocol buffer specification."
 license = { text = "Apache License, Version 2.0" }
 requires-python = ">=3.8"
diff --git a/ruby/gtfs-realtime-bindings.gemspec b/ruby/gtfs-realtime-bindings.gemspec
index 77c2fb6..6699850 100644
--- a/ruby/gtfs-realtime-bindings.gemspec
+++ b/ruby/gtfs-realtime-bindings.gemspec
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
 
 Gem::Specification.new do |spec|
   spec.name          = "gtfs-realtime-bindings"
-  spec.version       = "0.1.0"
+  spec.version       = "0.2.0"
   spec.authors       = ["MobilityData"]
   spec.email         = ["gtfs-realtime@googlegroups.com"]
   spec.homepage      = "https://github.com/MobilityData/gtfs-realtime-bindings"