| // Code generated by protoc-gen-go. DO NOT EDIT. |
| // source: availability_feed.proto |
| |
| /* |
| Package maps_booking_feeds is a generated protocol buffer package. |
| |
| It is generated from these files: |
| availability_feed.proto |
| |
| It has these top-level messages: |
| FeedMetadata |
| AvailabilityFeed |
| ServiceAvailability |
| Availability |
| Resources |
| TimeRange |
| */ |
| package maps_booking_feeds |
| |
| import proto "github.com/golang/protobuf/proto" |
| import fmt "fmt" |
| import math "math" |
| |
| // Reference imports to suppress errors if they are not otherwise used. |
| var _ = proto.Marshal |
| var _ = fmt.Errorf |
| var _ = math.Inf |
| |
| // This is a compile-time assertion to ensure that this generated file |
| // is compatible with the proto package it is being compiled against. |
| // A compilation error at this line likely means your copy of the |
| // proto package needs to be updated. |
| const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package |
| |
| type FeedMetadata_ProcessingInstruction int32 |
| |
| const ( |
| // By default we will assume that this feed is an incremental feed. |
| FeedMetadata_PROCESS_UNKNOWN FeedMetadata_ProcessingInstruction = 0 |
| // This Feed message is one shard of a complete feed. Anything previously |
| // supplied by this partner will be deleted; the contents of this feed |
| // represent the entire state of the world. |
| FeedMetadata_PROCESS_AS_COMPLETE FeedMetadata_ProcessingInstruction = 1 |
| // This Feed message is one shard of an incremental feed. Existing entities |
| // will be left untouched except as modified in this feed. |
| FeedMetadata_PROCESS_AS_INCREMENTAL FeedMetadata_ProcessingInstruction = 2 |
| ) |
| |
| var FeedMetadata_ProcessingInstruction_name = map[int32]string{ |
| 0: "PROCESS_UNKNOWN", |
| 1: "PROCESS_AS_COMPLETE", |
| 2: "PROCESS_AS_INCREMENTAL", |
| } |
| var FeedMetadata_ProcessingInstruction_value = map[string]int32{ |
| "PROCESS_UNKNOWN": 0, |
| "PROCESS_AS_COMPLETE": 1, |
| "PROCESS_AS_INCREMENTAL": 2, |
| } |
| |
| func (x FeedMetadata_ProcessingInstruction) String() string { |
| return proto.EnumName(FeedMetadata_ProcessingInstruction_name, int32(x)) |
| } |
| func (FeedMetadata_ProcessingInstruction) EnumDescriptor() ([]byte, []int) { |
| return fileDescriptor0, []int{0, 0} |
| } |
| |
| type FeedMetadata struct { |
| // Instructs us how to process the feed: either as a shard of a complete feed, |
| // or as a shard of an incremental update. |
| ProcessingInstruction FeedMetadata_ProcessingInstruction `protobuf:"varint,1,opt,name=processing_instruction,json=processingInstruction,enum=maps.booking.feeds.FeedMetadata_ProcessingInstruction" json:"processing_instruction,omitempty"` |
| // The current shard and total number of shards for this feed. |
| // |
| // Shard number is assumed to be zero-based. |
| // |
| // There does not need to be any relationship to the file name. |
| // |
| // Shards do not need to be transferred in order, and they may not be |
| // processed in order. |
| ShardNumber int32 `protobuf:"varint,2,opt,name=shard_number,json=shardNumber" json:"shard_number,omitempty"` |
| TotalShards int32 `protobuf:"varint,3,opt,name=total_shards,json=totalShards" json:"total_shards,omitempty"` |
| // An identifier that must be consistent across all shards in a feed. |
| // This value must be globally unique across each feed type. |
| // |
| // This value ensures that complete feeds spanning multiple shards are |
| // processed together correctly. |
| // |
| // Clients only need to set this value when the processing_instruction is set |
| // to PROCESS_AS_COMPLETE and the feed spans multiple shards (defined by |
| // total_shards). |
| // |
| // Feeds that span multiple shards must set this nonce to the same value. |
| Nonce uint64 `protobuf:"varint,5,opt,name=nonce" json:"nonce,omitempty"` |
| // The timestamp at which this feed shard was generated. |
| // |
| // In Unix time format (seconds since the epoch). |
| GenerationTimestamp int64 `protobuf:"varint,4,opt,name=generation_timestamp,json=generationTimestamp" json:"generation_timestamp,omitempty"` |
| } |
| |
| func (m *FeedMetadata) Reset() { *m = FeedMetadata{} } |
| func (m *FeedMetadata) String() string { return proto.CompactTextString(m) } |
| func (*FeedMetadata) ProtoMessage() {} |
| func (*FeedMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } |
| |
| func (m *FeedMetadata) GetProcessingInstruction() FeedMetadata_ProcessingInstruction { |
| if m != nil { |
| return m.ProcessingInstruction |
| } |
| return FeedMetadata_PROCESS_UNKNOWN |
| } |
| |
| func (m *FeedMetadata) GetShardNumber() int32 { |
| if m != nil { |
| return m.ShardNumber |
| } |
| return 0 |
| } |
| |
| func (m *FeedMetadata) GetTotalShards() int32 { |
| if m != nil { |
| return m.TotalShards |
| } |
| return 0 |
| } |
| |
| func (m *FeedMetadata) GetNonce() uint64 { |
| if m != nil { |
| return m.Nonce |
| } |
| return 0 |
| } |
| |
| func (m *FeedMetadata) GetGenerationTimestamp() int64 { |
| if m != nil { |
| return m.GenerationTimestamp |
| } |
| return 0 |
| } |
| |
| type AvailabilityFeed struct { |
| Metadata *FeedMetadata `protobuf:"bytes,1,opt,name=metadata" json:"metadata,omitempty"` |
| ServiceAvailability []*ServiceAvailability `protobuf:"bytes,2,rep,name=service_availability,json=serviceAvailability" json:"service_availability,omitempty"` |
| } |
| |
| func (m *AvailabilityFeed) Reset() { *m = AvailabilityFeed{} } |
| func (m *AvailabilityFeed) String() string { return proto.CompactTextString(m) } |
| func (*AvailabilityFeed) ProtoMessage() {} |
| func (*AvailabilityFeed) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } |
| |
| func (m *AvailabilityFeed) GetMetadata() *FeedMetadata { |
| if m != nil { |
| return m.Metadata |
| } |
| return nil |
| } |
| |
| func (m *AvailabilityFeed) GetServiceAvailability() []*ServiceAvailability { |
| if m != nil { |
| return m.ServiceAvailability |
| } |
| return nil |
| } |
| |
| type ServiceAvailability struct { |
| // If provided, we will consider the Availability entities provided to be a |
| // complete snapshot from [start_timestamp_restrict, end_timestamp_restrict). |
| // That is, all existing availability will be deleted if the following |
| // condition holds true: |
| // |
| // start_timestamp_restrict <= Availability.start_sec && |
| // Availability.start_sec < end_timestamp_restrict |
| // |
| // If a resource_restrict message is set, the condition is further restricted: |
| // |
| // Availability.resource.staff_id == resource_restrict.staff_id && |
| // Availability.resource.room_id == resource_restrict.room_id |
| // |
| // These fields are typically used to provide a complete update of |
| // availability in a given time range. |
| // |
| // Setting start_timestamp_restrict while leaving end_timestamp_restrict unset |
| // is interpreted to mean all time beginning at start_timestamp_restrict. |
| // |
| // Setting end_timestamp_restrict while leaving start_timestamp_restrict unset |
| // is interpreted to mean all time up to the end_timestamp_restrict. |
| // |
| // In Unix time format (seconds since the epoch). |
| StartTimestampRestrict int64 `protobuf:"varint,1,opt,name=start_timestamp_restrict,json=startTimestampRestrict" json:"start_timestamp_restrict,omitempty"` |
| EndTimestampRestrict int64 `protobuf:"varint,2,opt,name=end_timestamp_restrict,json=endTimestampRestrict" json:"end_timestamp_restrict,omitempty"` |
| // If provided, the timestamp restricts will be applied only to the given |
| // merchant or service. |
| // |
| // These fields are typically used to provide complete snapshot of |
| // availability in a given range (defined above) for a specific merchant or |
| // service. |
| // |
| // Leaving these fields unset, or setting these to the empty string or null, |
| // is interpreted to mean that no restrict is intended. |
| MerchantIdRestrict string `protobuf:"bytes,3,opt,name=merchant_id_restrict,json=merchantIdRestrict" json:"merchant_id_restrict,omitempty"` |
| ServiceIdRestrict string `protobuf:"bytes,4,opt,name=service_id_restrict,json=serviceIdRestrict" json:"service_id_restrict,omitempty"` |
| // Setting resources_restrict further restricts the scope of the update to |
| // just this set of resources. All id fields of the resources must match |
| // exactly. |
| ResourcesRestrict *Resources `protobuf:"bytes,6,opt,name=resources_restrict,json=resourcesRestrict" json:"resources_restrict,omitempty"` |
| Availability []*Availability `protobuf:"bytes,5,rep,name=availability" json:"availability,omitempty"` |
| } |
| |
| func (m *ServiceAvailability) Reset() { *m = ServiceAvailability{} } |
| func (m *ServiceAvailability) String() string { return proto.CompactTextString(m) } |
| func (*ServiceAvailability) ProtoMessage() {} |
| func (*ServiceAvailability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } |
| |
| func (m *ServiceAvailability) GetStartTimestampRestrict() int64 { |
| if m != nil { |
| return m.StartTimestampRestrict |
| } |
| return 0 |
| } |
| |
| func (m *ServiceAvailability) GetEndTimestampRestrict() int64 { |
| if m != nil { |
| return m.EndTimestampRestrict |
| } |
| return 0 |
| } |
| |
| func (m *ServiceAvailability) GetMerchantIdRestrict() string { |
| if m != nil { |
| return m.MerchantIdRestrict |
| } |
| return "" |
| } |
| |
| func (m *ServiceAvailability) GetServiceIdRestrict() string { |
| if m != nil { |
| return m.ServiceIdRestrict |
| } |
| return "" |
| } |
| |
| func (m *ServiceAvailability) GetResourcesRestrict() *Resources { |
| if m != nil { |
| return m.ResourcesRestrict |
| } |
| return nil |
| } |
| |
| func (m *ServiceAvailability) GetAvailability() []*Availability { |
| if m != nil { |
| return m.Availability |
| } |
| return nil |
| } |
| |
| // An availability of the merchant's service, indicating time and number |
| // of spots. |
| // The availability feed should be a list of this message. |
| // Please note that it's up to the partner to call out all the possible |
| // availabilities. |
| // If a massage therapist is available 9am-12pm, and they provide |
| // one-hour massage sessions, the aggregator should provide the feed as |
| // availability {start_sec: 9am, duration: 60 minutes, ...} |
| // availability {start_sec: 10am, duration: 60 minutes, ...} |
| // availability {start_sec: 11am, duration: 60 minutes, ...} |
| // instead of |
| // availability {start_sec: 9am, duration: 180 minutes, ...} |
| // |
| type Availability struct { |
| // An opaque string from an aggregator to identify a merchant. |
| MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"` |
| // An opaque string from aggregator to identify a service of the |
| // merchant. |
| ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId" json:"service_id,omitempty"` |
| // Start time of this availability, using epoch time in seconds. |
| StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec" json:"start_sec,omitempty"` |
| // Duration of the service in seconds, e.g. 30 minutes for a chair massage. |
| DurationSec int64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"` |
| // Number of total spots and open spots of this availability. |
| // E.g. a Yoga class of 10 spots with 3 booked. |
| // availability {spots_total: 10, spots_open: 7 ...} |
| // E.g. a chair massage session which was already booked. |
| // availability {spots_total: 1, spots_open: 0 ...} |
| // |
| // Note: If sending requests using the availability compression format defined |
| // below, these two fields will be inferred. A Recurrence |
| // implies spots_total=1 and spots_open=1. A ScheduleException implies |
| // spots_total=1 and spots_open=0. |
| SpotsTotal int64 `protobuf:"varint,5,opt,name=spots_total,json=spotsTotal" json:"spots_total,omitempty"` |
| SpotsOpen int64 `protobuf:"varint,6,opt,name=spots_open,json=spotsOpen" json:"spots_open,omitempty"` |
| // An optional opaque string to identify this availability slot. If set, it |
| // will be included in the requests that book/update/cancel appointments. |
| AvailabilityTag string `protobuf:"bytes,7,opt,name=availability_tag,json=availabilityTag" json:"availability_tag,omitempty"` |
| // Optional resources used to disambiguate this availability slot from |
| // others when different staff, room, or party_size values are part |
| // of the service. |
| // |
| // E.g. the same Yoga class with two 2 instructors. |
| // availability { resources { staff_id: "1" staff_name: "Amy" } |
| // spots_total: 10 spots_open: 7 } |
| // availability { resources { staff_id: "2" staff_name: "John" } |
| // spots_total: 5 spots_open: 2 } |
| Resources *Resources `protobuf:"bytes,8,opt,name=resources" json:"resources,omitempty"` |
| // A list of ids referencing the payment options which can be used to pay |
| // for this slot. The actual payment options are defined at the Merchant |
| // level, and can also be shared among multiple Merchants. |
| // |
| // This field overrides any payment_option_ids specified in the service |
| // message. Similarly payment_option_ids specified here do NOT have to be |
| // present in the service message, though must be defined at the |
| // Merchant level. |
| PaymentOptionId []string `protobuf:"bytes,9,rep,name=payment_option_id,json=paymentOptionId" json:"payment_option_id,omitempty"` |
| // The recurrence information for the availability, representing more than one |
| // start time. A recurrence should contain appointments for one working day. |
| Recurrence *Availability_Recurrence `protobuf:"bytes,10,opt,name=recurrence" json:"recurrence,omitempty"` |
| // When this service cannot be scheduled. To limit the number of |
| // schedule_exception messages consider joining adjacent exceptions. |
| ScheduleException []*Availability_ScheduleException `protobuf:"bytes,11,rep,name=schedule_exception,json=scheduleException" json:"schedule_exception,omitempty"` |
| } |
| |
| func (m *Availability) Reset() { *m = Availability{} } |
| func (m *Availability) String() string { return proto.CompactTextString(m) } |
| func (*Availability) ProtoMessage() {} |
| func (*Availability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } |
| |
| func (m *Availability) GetMerchantId() string { |
| if m != nil { |
| return m.MerchantId |
| } |
| return "" |
| } |
| |
| func (m *Availability) GetServiceId() string { |
| if m != nil { |
| return m.ServiceId |
| } |
| return "" |
| } |
| |
| func (m *Availability) GetStartSec() int64 { |
| if m != nil { |
| return m.StartSec |
| } |
| return 0 |
| } |
| |
| func (m *Availability) GetDurationSec() int64 { |
| if m != nil { |
| return m.DurationSec |
| } |
| return 0 |
| } |
| |
| func (m *Availability) GetSpotsTotal() int64 { |
| if m != nil { |
| return m.SpotsTotal |
| } |
| return 0 |
| } |
| |
| func (m *Availability) GetSpotsOpen() int64 { |
| if m != nil { |
| return m.SpotsOpen |
| } |
| return 0 |
| } |
| |
| func (m *Availability) GetAvailabilityTag() string { |
| if m != nil { |
| return m.AvailabilityTag |
| } |
| return "" |
| } |
| |
| func (m *Availability) GetResources() *Resources { |
| if m != nil { |
| return m.Resources |
| } |
| return nil |
| } |
| |
| func (m *Availability) GetPaymentOptionId() []string { |
| if m != nil { |
| return m.PaymentOptionId |
| } |
| return nil |
| } |
| |
| func (m *Availability) GetRecurrence() *Availability_Recurrence { |
| if m != nil { |
| return m.Recurrence |
| } |
| return nil |
| } |
| |
| func (m *Availability) GetScheduleException() []*Availability_ScheduleException { |
| if m != nil { |
| return m.ScheduleException |
| } |
| return nil |
| } |
| |
| // Recurrence messages are optional, but allow for a more compact |
| // representation of consistently repeating availability slots. They typically |
| // represent a day's working schedule. |
| // ScheduleException messages are then used to represent booked/unavailable |
| // time ranges within the work day. |
| // |
| // Requirements: |
| // 1. The expansion of availability slots or recurrences must NOT create |
| // identical slots. If the ids, start_sec, duration_sec, and resources |
| // match, slots are considered identical. |
| // 2. Do NOT mix the standard availability format and recurrence within the |
| // slots of a single service. Recurrence benefits merchants/services that |
| // offer appointments. The standard format is geared towards |
| // merchants/services with regularly scheduled classes. |
| type Availability_Recurrence struct { |
| // The inclusive maximum UTC timestamp the availability repeats until. |
| RepeatUntilSec int64 `protobuf:"varint,1,opt,name=repeat_until_sec,json=repeatUntilSec" json:"repeat_until_sec,omitempty"` |
| // Defines the time between successive availability slots. |
| // |
| // E.g. An availability with a duration of 20 min, a repeat_every_sec of |
| // 30 min, a start_sec of 9:00am, and a repeat_until_sec of 11:00am will |
| // yield slots at 9-9:20am, 9:30-9:50am, 10-10:20am, 10:30-10:50am, |
| // 11-11:20am. |
| RepeatEverySec int32 `protobuf:"varint,2,opt,name=repeat_every_sec,json=repeatEverySec" json:"repeat_every_sec,omitempty"` |
| } |
| |
| func (m *Availability_Recurrence) Reset() { *m = Availability_Recurrence{} } |
| func (m *Availability_Recurrence) String() string { return proto.CompactTextString(m) } |
| func (*Availability_Recurrence) ProtoMessage() {} |
| func (*Availability_Recurrence) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} } |
| |
| func (m *Availability_Recurrence) GetRepeatUntilSec() int64 { |
| if m != nil { |
| return m.RepeatUntilSec |
| } |
| return 0 |
| } |
| |
| func (m *Availability_Recurrence) GetRepeatEverySec() int32 { |
| if m != nil { |
| return m.RepeatEverySec |
| } |
| return 0 |
| } |
| |
| // ScheduleException messages are used to represent booked/unavailable time |
| // ranges within the work day. As time slots are booked, the list of |
| // exceptions should grow to reflect the newly unavailable time ranges. |
| // The recurrence itself shouldn't be modified. |
| type Availability_ScheduleException struct { |
| // The time range of the exception. |
| TimeRange *TimeRange `protobuf:"bytes,1,opt,name=time_range,json=timeRange" json:"time_range,omitempty"` |
| } |
| |
| func (m *Availability_ScheduleException) Reset() { *m = Availability_ScheduleException{} } |
| func (m *Availability_ScheduleException) String() string { return proto.CompactTextString(m) } |
| func (*Availability_ScheduleException) ProtoMessage() {} |
| func (*Availability_ScheduleException) Descriptor() ([]byte, []int) { |
| return fileDescriptor0, []int{3, 1} |
| } |
| |
| func (m *Availability_ScheduleException) GetTimeRange() *TimeRange { |
| if m != nil { |
| return m.TimeRange |
| } |
| return nil |
| } |
| |
| // A resource is used to disambiguate availability slots from one another when |
| // different staff, room or party_size values are part of the service. |
| // Multiple slots for the same service and time interval can co-exist when they |
| // have different resources. |
| type Resources struct { |
| // Optional id for a staff member providing the service. This field identifies |
| // the staff member across all merchants, services, and availability records. |
| // It also needs to be stable over time to allow correlation with past |
| // bookings. |
| // This field must be present if staff_name is present. |
| StaffId string `protobuf:"bytes,1,opt,name=staff_id,json=staffId" json:"staff_id,omitempty"` |
| // Optional name of a staff member providing the service. This field will be |
| // displayed to users making a booking, and should be human readable, as |
| // opposed to an opaque identifier. |
| // This field must be present if staff_id is present. |
| StaffName string `protobuf:"bytes,2,opt,name=staff_name,json=staffName" json:"staff_name,omitempty"` |
| // An optional id for the room the service is located in. This field |
| // identifies the room across all merchants, services, and availability |
| // records. It also needs to be stable over time to allow correlation with |
| // past bookings. |
| // This field must be present if room_name is present. |
| RoomId string `protobuf:"bytes,3,opt,name=room_id,json=roomId" json:"room_id,omitempty"` |
| // An optional name for the room the service is located in. This |
| // field will be displayed to users making a booking, and should be human |
| // readable, as opposed to an opaque identifier. |
| // This field must be present if room_id is present. |
| RoomName string `protobuf:"bytes,4,opt,name=room_name,json=roomName" json:"room_name,omitempty"` |
| // Applicable only for Dining: The party size which can be accommodated |
| // during this time slot. A restaurant can be associated with multiple Slots |
| // for the same time, each specifying a different party_size, if for instance |
| // 2, 3, or 4 people can be seated with a reservation. |
| PartySize int32 `protobuf:"varint,5,opt,name=party_size,json=partySize" json:"party_size,omitempty"` |
| } |
| |
| func (m *Resources) Reset() { *m = Resources{} } |
| func (m *Resources) String() string { return proto.CompactTextString(m) } |
| func (*Resources) ProtoMessage() {} |
| func (*Resources) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } |
| |
| func (m *Resources) GetStaffId() string { |
| if m != nil { |
| return m.StaffId |
| } |
| return "" |
| } |
| |
| func (m *Resources) GetStaffName() string { |
| if m != nil { |
| return m.StaffName |
| } |
| return "" |
| } |
| |
| func (m *Resources) GetRoomId() string { |
| if m != nil { |
| return m.RoomId |
| } |
| return "" |
| } |
| |
| func (m *Resources) GetRoomName() string { |
| if m != nil { |
| return m.RoomName |
| } |
| return "" |
| } |
| |
| func (m *Resources) GetPartySize() int32 { |
| if m != nil { |
| return m.PartySize |
| } |
| return 0 |
| } |
| |
| type TimeRange struct { |
| BeginSec int64 `protobuf:"varint,1,opt,name=begin_sec,json=beginSec" json:"begin_sec,omitempty"` |
| EndSec int64 `protobuf:"varint,2,opt,name=end_sec,json=endSec" json:"end_sec,omitempty"` |
| } |
| |
| func (m *TimeRange) Reset() { *m = TimeRange{} } |
| func (m *TimeRange) String() string { return proto.CompactTextString(m) } |
| func (*TimeRange) ProtoMessage() {} |
| func (*TimeRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } |
| |
| func (m *TimeRange) GetBeginSec() int64 { |
| if m != nil { |
| return m.BeginSec |
| } |
| return 0 |
| } |
| |
| func (m *TimeRange) GetEndSec() int64 { |
| if m != nil { |
| return m.EndSec |
| } |
| return 0 |
| } |
| |
| func init() { |
| proto.RegisterType((*FeedMetadata)(nil), "maps.booking.feeds.FeedMetadata") |
| proto.RegisterType((*AvailabilityFeed)(nil), "maps.booking.feeds.AvailabilityFeed") |
| proto.RegisterType((*ServiceAvailability)(nil), "maps.booking.feeds.ServiceAvailability") |
| proto.RegisterType((*Availability)(nil), "maps.booking.feeds.Availability") |
| proto.RegisterType((*Availability_Recurrence)(nil), "maps.booking.feeds.Availability.Recurrence") |
| proto.RegisterType((*Availability_ScheduleException)(nil), "maps.booking.feeds.Availability.ScheduleException") |
| proto.RegisterType((*Resources)(nil), "maps.booking.feeds.Resources") |
| proto.RegisterType((*TimeRange)(nil), "maps.booking.feeds.TimeRange") |
| proto.RegisterEnum("maps.booking.feeds.FeedMetadata_ProcessingInstruction", FeedMetadata_ProcessingInstruction_name, FeedMetadata_ProcessingInstruction_value) |
| } |
| |
| func init() { proto.RegisterFile("availability_feed.proto", fileDescriptor0) } |
| |
| var fileDescriptor0 = []byte{ |
| // 859 bytes of a gzipped FileDescriptorProto |
| 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xdb, 0x6e, 0x23, 0x45, |
| 0x10, 0xc5, 0x76, 0x9c, 0x64, 0xca, 0xd1, 0xae, 0xdd, 0xf6, 0x26, 0x43, 0x50, 0xb4, 0xc6, 0x2f, |
| 0x18, 0x90, 0x2c, 0x08, 0x08, 0x21, 0xb1, 0x2f, 0x51, 0x30, 0x52, 0xb4, 0x89, 0x1d, 0x7a, 0xbc, |
| 0x42, 0xe2, 0x65, 0x68, 0xcf, 0x54, 0x9c, 0x11, 0x9e, 0x9e, 0x51, 0x77, 0x3b, 0x22, 0xfb, 0x29, |
| 0x7c, 0x03, 0xff, 0xc1, 0xe7, 0xf0, 0x01, 0xbc, 0xa0, 0xae, 0xb9, 0x9a, 0x58, 0xca, 0xbe, 0x79, |
| 0x4e, 0x9d, 0xd3, 0x97, 0x73, 0xaa, 0xda, 0x70, 0x22, 0x1e, 0x44, 0xb4, 0x16, 0xcb, 0x68, 0x1d, |
| 0x99, 0x47, 0xff, 0x0e, 0x31, 0x9c, 0xa4, 0x2a, 0x31, 0x09, 0x63, 0xb1, 0x48, 0xf5, 0x64, 0x99, |
| 0x24, 0xbf, 0x47, 0x72, 0x35, 0xb1, 0x05, 0x3d, 0xfa, 0xa7, 0x09, 0x47, 0x3f, 0x21, 0x86, 0x37, |
| 0x68, 0x44, 0x28, 0x8c, 0x60, 0x31, 0x1c, 0xa7, 0x2a, 0x09, 0x50, 0xeb, 0x48, 0xae, 0xfc, 0x48, |
| 0x6a, 0xa3, 0x36, 0x81, 0x89, 0x12, 0xe9, 0x36, 0x86, 0x8d, 0xf1, 0x8b, 0xf3, 0xef, 0x26, 0x4f, |
| 0x57, 0x99, 0xd4, 0x57, 0x98, 0xdc, 0x96, 0xf2, 0xab, 0x4a, 0xcd, 0x5f, 0xa5, 0xbb, 0x60, 0xf6, |
| 0x29, 0x1c, 0xe9, 0x7b, 0xa1, 0x42, 0x5f, 0x6e, 0xe2, 0x25, 0x2a, 0xb7, 0x39, 0x6c, 0x8c, 0xdb, |
| 0xbc, 0x43, 0xd8, 0x8c, 0x20, 0x4b, 0x31, 0x89, 0x11, 0x6b, 0x9f, 0x40, 0xed, 0xb6, 0x32, 0x0a, |
| 0x61, 0x1e, 0x41, 0x6c, 0x00, 0x6d, 0x99, 0xc8, 0x00, 0xdd, 0xf6, 0xb0, 0x31, 0xde, 0xe3, 0xd9, |
| 0x07, 0xfb, 0x1a, 0x06, 0x2b, 0x94, 0xa8, 0x84, 0xdd, 0xc9, 0x37, 0x51, 0x8c, 0xda, 0x88, 0x38, |
| 0x75, 0xf7, 0x86, 0x8d, 0x71, 0x8b, 0xf7, 0xab, 0xda, 0xa2, 0x28, 0x8d, 0x04, 0xbc, 0xda, 0x79, |
| 0x7c, 0xd6, 0x87, 0x97, 0xb7, 0x7c, 0x7e, 0x39, 0xf5, 0x3c, 0xff, 0xdd, 0xec, 0xed, 0x6c, 0xfe, |
| 0xcb, 0xac, 0xfb, 0x11, 0x3b, 0x81, 0x7e, 0x01, 0x5e, 0x78, 0xfe, 0xe5, 0xfc, 0xe6, 0xf6, 0x7a, |
| 0xba, 0x98, 0x76, 0x1b, 0xec, 0x14, 0x8e, 0x6b, 0x85, 0xab, 0xd9, 0x25, 0x9f, 0xde, 0x4c, 0x67, |
| 0x8b, 0x8b, 0xeb, 0x6e, 0x73, 0xf4, 0x57, 0x03, 0xba, 0x17, 0xb5, 0x84, 0xac, 0x77, 0xec, 0x0d, |
| 0x1c, 0xc6, 0xb9, 0x7f, 0xe4, 0x73, 0xe7, 0x7c, 0xf8, 0x9c, 0xcf, 0xbc, 0x54, 0xb0, 0x5f, 0x61, |
| 0xa0, 0x51, 0x3d, 0x44, 0x01, 0xfa, 0xf5, 0xec, 0xdd, 0xe6, 0xb0, 0x35, 0xee, 0x9c, 0x7f, 0xb6, |
| 0x6b, 0x25, 0x2f, 0xe3, 0xd7, 0x0f, 0xc2, 0xfb, 0xfa, 0x29, 0x38, 0xfa, 0xb7, 0x09, 0xfd, 0x1d, |
| 0x64, 0xf6, 0x3d, 0xb8, 0xda, 0x08, 0x65, 0x2a, 0x5f, 0x7d, 0x85, 0xda, 0xa8, 0x28, 0x30, 0x74, |
| 0x83, 0x16, 0x3f, 0xa6, 0x7a, 0xe9, 0x2d, 0xcf, 0xab, 0xec, 0x5b, 0x38, 0x46, 0x19, 0xee, 0xd2, |
| 0x35, 0x49, 0x37, 0x40, 0x19, 0x3e, 0x55, 0x7d, 0x05, 0x83, 0x18, 0x55, 0x70, 0x2f, 0xa4, 0xf1, |
| 0xa3, 0xb0, 0xd2, 0xd8, 0x6e, 0x70, 0x38, 0x2b, 0x6a, 0x57, 0x61, 0xa9, 0x98, 0x40, 0x71, 0xa1, |
| 0x2d, 0xc1, 0x1e, 0x09, 0x7a, 0x79, 0xa9, 0xc6, 0xbf, 0x06, 0xa6, 0x50, 0x27, 0x1b, 0x15, 0xa0, |
| 0xae, 0xe8, 0xfb, 0x94, 0xc6, 0xd9, 0x2e, 0x0f, 0x79, 0xc1, 0xe6, 0xbd, 0x52, 0x58, 0xae, 0xf6, |
| 0x23, 0x1c, 0x6d, 0x65, 0xd1, 0xa6, 0x2c, 0x76, 0xa6, 0xba, 0x15, 0xc2, 0x96, 0x6a, 0xf4, 0x77, |
| 0x1b, 0x8e, 0xb6, 0x6c, 0x7f, 0x0d, 0x9d, 0x9a, 0x0d, 0xe4, 0xb4, 0xc3, 0xa1, 0xba, 0x3d, 0x3b, |
| 0x03, 0xa8, 0x6e, 0x4d, 0x8e, 0x3a, 0xdc, 0x29, 0x2f, 0xcb, 0x3e, 0x01, 0x27, 0x8b, 0x4d, 0x63, |
| 0x40, 0xde, 0xb5, 0xf8, 0x21, 0x01, 0x1e, 0x06, 0x76, 0xd2, 0xc2, 0x4d, 0x3e, 0x2e, 0xb6, 0x9e, |
| 0x0d, 0x4a, 0xa7, 0xc0, 0x2c, 0xe5, 0x35, 0x74, 0x74, 0x9a, 0x18, 0xed, 0xd3, 0xf8, 0xd1, 0xbc, |
| 0xb5, 0x38, 0x10, 0xb4, 0xb0, 0x08, 0xed, 0x4f, 0x84, 0x24, 0x45, 0x49, 0xee, 0xb5, 0xb8, 0x43, |
| 0xc8, 0x3c, 0x45, 0xc9, 0x3e, 0x87, 0xee, 0xd6, 0xf3, 0x64, 0xc4, 0xca, 0x3d, 0xa0, 0x43, 0xbe, |
| 0xac, 0xe3, 0x0b, 0xb1, 0x62, 0x3f, 0x80, 0x53, 0xda, 0xea, 0x1e, 0x7e, 0x48, 0x0c, 0x15, 0x9f, |
| 0x7d, 0x01, 0xbd, 0x54, 0x3c, 0xc6, 0x28, 0x8d, 0x9f, 0xa4, 0x74, 0xa1, 0x28, 0x74, 0x9d, 0x61, |
| 0xcb, 0x6e, 0x94, 0x17, 0xe6, 0x84, 0x5f, 0x85, 0xec, 0x2d, 0x80, 0xc2, 0x60, 0xa3, 0x14, 0xda, |
| 0x27, 0x04, 0x68, 0xa7, 0x2f, 0x9f, 0x0b, 0x6a, 0xc2, 0x4b, 0x09, 0xaf, 0xc9, 0x99, 0x00, 0xa6, |
| 0x83, 0x7b, 0x0c, 0x37, 0x6b, 0xf4, 0xf1, 0x8f, 0x00, 0x69, 0x13, 0xb7, 0x43, 0xe9, 0x9f, 0x3f, |
| 0xbb, 0xa8, 0x97, 0x4b, 0xa7, 0x85, 0x92, 0xf7, 0xf4, 0xff, 0xa1, 0xd3, 0xdf, 0x00, 0xaa, 0xcd, |
| 0xd9, 0x18, 0xba, 0x0a, 0x53, 0x14, 0xc6, 0xdf, 0x48, 0x13, 0xad, 0x29, 0xb8, 0x6c, 0x00, 0x5f, |
| 0x64, 0xf8, 0x3b, 0x0b, 0xdb, 0xec, 0x2a, 0x26, 0x3e, 0xa0, 0x7a, 0x24, 0x66, 0xf6, 0xde, 0xe6, |
| 0xcc, 0xa9, 0x85, 0x3d, 0x0c, 0x4e, 0x7f, 0x86, 0xde, 0x93, 0x93, 0xb0, 0x37, 0x00, 0x76, 0x66, |
| 0x7d, 0x25, 0xe4, 0x0a, 0xf3, 0x57, 0x6a, 0x67, 0x20, 0x76, 0x78, 0xb9, 0x25, 0x71, 0xc7, 0x14, |
| 0x3f, 0x47, 0x7f, 0x36, 0xc0, 0x29, 0x93, 0x62, 0x1f, 0x83, 0xed, 0xba, 0xbb, 0xbb, 0xaa, 0x87, |
| 0x0f, 0xe8, 0x3b, 0x6f, 0x60, 0x2a, 0x49, 0x11, 0x63, 0xd9, 0xc0, 0x16, 0x99, 0x89, 0x18, 0xd9, |
| 0x09, 0x1c, 0xa8, 0x24, 0x89, 0xad, 0x30, 0x1b, 0xfd, 0x7d, 0xfb, 0x99, 0x75, 0x36, 0x15, 0x48, |
| 0x96, 0x0d, 0xf9, 0xa1, 0x05, 0x48, 0x75, 0x06, 0x90, 0x0a, 0x65, 0x1e, 0x7d, 0x1d, 0xbd, 0xcf, |
| 0xfe, 0x25, 0xda, 0xdc, 0x21, 0xc4, 0x8b, 0xde, 0xe3, 0xe8, 0x02, 0x9c, 0xf2, 0xd0, 0x76, 0xa1, |
| 0x25, 0xae, 0x22, 0x59, 0x73, 0xf2, 0x90, 0x00, 0xeb, 0xe1, 0x09, 0x1c, 0xd8, 0xc7, 0xab, 0xb0, |
| 0xae, 0xc5, 0xf7, 0x51, 0x86, 0x1e, 0x06, 0xcb, 0x7d, 0xfa, 0x8f, 0xfd, 0xe6, 0xbf, 0x00, 0x00, |
| 0x00, 0xff, 0xff, 0x08, 0xf3, 0x9e, 0x1d, 0x7e, 0x07, 0x00, 0x00, |
| } |