diff --git a/README.md b/README.md
index d35cf2e..e348a0a 100644
--- a/README.md
+++ b/README.md
@@ -5,9 +5,9 @@
 
 ## Testing Client
 
-Before using either the order based or booking based test utilites, the Go
-programming language must be installed on your workstation. A precompiled Go
-binary for your operating system can be [found here](https://golang.org/dl/)
+Before using the test utilites, the Go programming language must be installed on
+your workstation. A precompiled Go binary for your operating system can be
+[found here](https://golang.org/dl/)
 
 This guide will assume you're using the default GOPATH and subsequent GOBIN.
 For a comprehensive explanation of the GOPATH env variable please see
@@ -52,6 +52,10 @@
 
     go install $HOME/go/src/github.com/maps-booking-v3/testclient/bookingClient.go
 
+Or the waitlist based test client, run
+
+    go install $HOME/go/src/github.com/maps-booking-v3/testclient/waitlistClient.go
+
 ### Installing the utilities with Windows Powershell
 
 First, build your Go directory structure. A comprehensive guide on the intended
@@ -90,6 +94,10 @@
 
     go install $env:HOME\go\src\github.com\maps-booking-v3\testclient\bookingClient.go
 
+Or the waitlist based test client, run
+
+    go install $env:HOME\go\src\github.com\maps-booking-v3\testclient\waitlistClient.go
+
 ### Using the utilities
 
 After following the install steps above an executable should now live under the
@@ -175,6 +183,36 @@
     -output_to_terminal bool
         Output to terminal rather than a file.
 
+    waitlistClient.go
+    -server_addr string
+        Your http server's address in the format of host:port (default "example.com:80")
+    -service_feed string
+        Absolute path to service feed required for all tests except health. Feeds can be in either json or pb3 format.
+    -all_tests
+        Whether to test all endpoints syncronously.
+    -health_check_test
+        Whether to test the Health endpoint.
+    -batch_get_wait_estimates_test
+        Whether to test the BatchGetWaitEstimates endpoint.
+    -create_waitlist_entry_test
+        Whether to test the CreateWaitlistEntry endpoint.
+    -get_waitlist_entry_test
+        Whether to test the GetWaitlistEntry endpoint.
+    -delete_waitlist_entry_test
+        Whether to test the DeleteWaitlistEntry endpoint.
+    -ca_file string
+        Absolute path to your server's Certificate Authority root cert. Downloading all roots currently recommended by the Google Internet Authority is a suitable alternative https://pki.google.com/roots.pem. Leave blank to connect using http rather than https.
+    -credentials_file string
+        File containing credentials for your server. Leave blank to bypass authentication. File should have exactly one line of the form 'username:password'.
+    -full_server_name string
+        Fully qualified domain name. Same name used to sign CN. Only necessary if ca_file is specified and the base URL differs from the server address.
+    -num_test_services int
+        Maximum number of services to test from service_feed. Services will be selected randomly (default 10)
+    -output_dir string
+        Absolute path of dir to dump log file.
+    -output_to_terminal bool
+        Output to terminal rather than a file.
+
 Plese note that this testing tool makes reservations as a test user with
 **user_id = 0**. Therefore, if you are running the tool many times, or before
 final tests, you might want cancel all previous bookings for that user to make
@@ -188,18 +226,20 @@
 
     bin/orderClient -server_addr="external-dns:443" -all_tests=true -output_dir="/tmp" -availability_feed="/tmp/test.json" -service_feed="/tmp/service.json"
 
+    bin/waitlistClient -server_addr="external-dns:443" -all_tests=true -output_dir="/tmp" service_feed="/tmp/service.json"
+
 ### Testing
 
-It is important that as part of testing you verify all aspects of booking server
+It is important that as part of testing you verify all aspects of the server
 invocation - authentication, availability, cancellation, and rescheduling tests.
 As the final step, you must be able to execute the designated utility with the
 flag -all_tests=true and it should successfully pass the entire series of tests.
 
 ### Parsing the output
 
-Both test utilities will output a file with the prefix 'http_test_client_log_'
-followed by a timestamp in RFC3339 format. The output file contains a
-complete log of all Requests and Responses sent/received by the testing tool as
-well as diffs of the expected response in the event of errors.
-Similar to a compiler, an overview of the entire run can be found at the end
-of the file for user friendly digestion.
+The test utilities will output a file with the prefix 'http_test_client_log_'
+followed by a timestamp in RFC3339 format. The output file contains a complete
+log of all Requests and Responses sent/received by the testing tool as well as
+diffs of the expected response in the event of errors. Similar to a compiler, an
+overview of the entire run can be found at the end of the file for user friendly
+digestion.
diff --git a/api/api.go b/api/api.go
index 7b0a202..3d487fa 100644
--- a/api/api.go
+++ b/api/api.go
@@ -40,6 +40,7 @@
 
 	fpb "github.com/maps-booking-v3/feeds"
 	mpb "github.com/maps-booking-v3/v3"
+	wpb "github.com/maps-booking-v3/waitlist"
 )
 
 const (
@@ -589,3 +590,160 @@
 
 	return nil
 }
+
+// BatchGetWaitEstimates calls the partners API and verifies the returned WaitEstimates.
+func BatchGetWaitEstimates(s *fpb.Service, conn *HTTPConnection) error {
+	rules := s.GetWaitlistRules()
+
+	ps := make([]int32, rules.GetMaxPartySize()-rules.GetMinPartySize())
+	for i := range ps {
+		ps[i] = rules.GetMinPartySize() + int32(i)
+	}
+	reqPB := &wpb.BatchGetWaitEstimatesRequest{
+		MerchantId: s.GetMerchantId(),
+		ServiceId:  s.GetServiceId(),
+		PartySize:  ps,
+	}
+	req, err := conn.marshaler.MarshalToString(reqPB)
+	if err != nil {
+		return fmt.Errorf("Could not convert pb3 to json: %v", reqPB)
+	}
+	httpResp, err := sendRequest("BatchGetWaitEstimates", req, conn)
+	if err != nil {
+		return fmt.Errorf("invalid response. BatchGetWaitEstimates yielded error: %v", err)
+	}
+	var resp wpb.BatchGetWaitEstimatesResponse
+	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
+		return fmt.Errorf("BatchGetWaitEstimates: Could not parse HTTP response to pb3: %v", err)
+	}
+
+	if resp.GetWaitlistStatus() == wpb.WaitlistStatus_WAITLIST_STATUS_UNSPECIFIED {
+		return errors.New("BatchGetWaitEstimates: waitlist status was not specified in response")
+	} else if resp.GetWaitlistStatus() != wpb.WaitlistStatus_OPEN {
+		// Waitlist is closed. No further validation necessary.
+		return nil
+	}
+
+	// Waitlist status is OPEN
+	for _, we := range resp.GetWaitEstimate() {
+		if err := utils.ValidateWaitEstimate(we); err != nil {
+			return fmt.Errorf("BatchGetWaitEstimates invalid, %s, service id: %s",
+				err.Error(), s.GetServiceId())
+		} else if we.GetPartySize() > rules.GetMaxPartySize() ||
+			we.GetPartySize() < rules.GetMinPartySize() {
+			return fmt.Errorf("batchGetWaitEstimates: Party size outside of min/max for service id: %s."+
+				"returned party size: %d, min party size: %d, max party size: %d",
+				s.GetServiceId(), we.GetPartySize(), rules.GetMinPartySize(), rules.GetMaxPartySize())
+		}
+	}
+	return nil
+}
+
+// CreateWaitlistEntry attempts to create waitlist entries from a service.
+// The max party size listed for the service's waitlist rules is used for
+// the waitlist entry's party size.
+func CreateWaitlistEntry(s *fpb.Service, conn *HTTPConnection) (string, error) {
+	gen := rand.New(rand.NewSource(time.Now().UnixNano()))
+
+	reqPB := &wpb.CreateWaitlistEntryRequest{
+		MerchantId: s.GetMerchantId(),
+		ServiceId:  s.GetServiceId(),
+		PartySize:  s.GetWaitlistRules().GetMaxPartySize(),
+		UserInformation: &wpb.UserInformation{
+			UserId:     userID,
+			GivenName:  firstName,
+			FamilyName: lastName,
+			Telephone:  telephone,
+			Email:      email,
+		},
+		IdempotencyToken: strconv.Itoa(gen.Intn(1000000)),
+	}
+	if s.GetWaitlistRules().GetSupportsAdditionalRequest() {
+		reqPB.AdditionalRequest = "test additional request"
+	}
+	req, err := conn.marshaler.MarshalToString(reqPB)
+	if err != nil {
+		return "", fmt.Errorf("Could not convert pb3 to json: %v", reqPB)
+	}
+
+	httpResp, err := sendRequest("CreateWaitlistEntry", req, conn)
+	if err != nil {
+		return "", fmt.Errorf("invalid response. CreateWaitlistEntry  yielded error: %v", err)
+	}
+	var resp wpb.CreateWaitlistEntryResponse
+	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
+		return "", fmt.Errorf("CreateWaitlistEntry: Could not parse HTTP response to pb3: %v", err)
+	}
+
+	if resp.GetWaitlistBusinessLogicFailure() != nil {
+		return "", fmt.Errorf("invalid response. CreateWaitlistEntry failed with business logic failure %v",
+			resp.GetWaitlistBusinessLogicFailure())
+	}
+
+	if resp.GetWaitlistEntryId() == "" {
+		return "", fmt.Errorf("invalid response. CreateWaitlistEntry missing waitlist entry id for service: %s",
+			s.GetServiceId())
+	}
+
+	// Perform idempotency test.
+	log.Printf("Idempotency check -- CreateWaitlistEntry Request. Sent(unix): %s, Request %s", time.Now().UTC().Format(time.RFC850), reqPB.String())
+	idemHTTPResp, err := sendRequest("CreateWaitlistEntry", req, conn)
+	if err != nil {
+		return "", fmt.Errorf("invalid response. Idempotency check yielded error: %v", err)
+	}
+	var idemResp wpb.CreateWaitlistEntryResponse
+	if err := jsonpb.UnmarshalString(idemHTTPResp, &idemResp); err != nil {
+		return "", fmt.Errorf("CreateWaitlistEntry idem: Could not parse HTTP response to pb3: %v", err)
+	}
+
+	if diff := cmp.Diff(idemResp, resp); diff != "" {
+		return "", fmt.Errorf("Idempotency check invalid (-got +want)\n%s for service: %s", diff, s.GetServiceId())
+	}
+
+	return resp.GetWaitlistEntryId(), nil
+}
+
+// GetWaitlistEntry retrieves and validates the booking for the specified
+// waitlist entry id.
+func GetWaitlistEntry(id string, conn *HTTPConnection) (*wpb.WaitlistEntry, error) {
+	reqPB := &wpb.GetWaitlistEntryRequest{
+		WaitlistEntryId: id,
+	}
+
+	req, err := conn.marshaler.MarshalToString(reqPB)
+	if err != nil {
+		return nil, fmt.Errorf("Could not convert pb3 to json: %v", reqPB)
+	}
+	httpResp, err := sendRequest("GetWaitlistEntry", req, conn)
+	if err != nil {
+		return nil, fmt.Errorf("invalid response. GetWaitlistEntry yielded error: %v", err)
+	}
+	var resp wpb.GetWaitlistEntryResponse
+	if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
+		return nil, fmt.Errorf("GetWaitlistEntry: Could not parse HTTP response to pb3: %v", err)
+	}
+
+	if iE := utils.ValidateWaitlistEntry(resp.GetWaitlistEntry()); iE != nil {
+		return nil, fmt.Errorf("invalid response. GetWaitlistEntry: %s", iE.Error())
+	}
+
+	return resp.GetWaitlistEntry(), nil
+}
+
+// DeleteWaitlistEntry makes a request to delete the waitlist entry.
+func DeleteWaitlistEntry(id string, conn *HTTPConnection) error {
+	reqPB := &wpb.DeleteWaitlistEntryRequest{
+		WaitlistEntryId: id,
+	}
+
+	req, err := conn.marshaler.MarshalToString(reqPB)
+	if err != nil {
+		return fmt.Errorf("Could not convert pb3 to json: %v", reqPB)
+	}
+
+	if _, err = sendRequest("DeleteWaitlistEntry", req, conn); err != nil {
+		return fmt.Errorf("invalid response. DeleteWaitlistEntry yielded error: %v", err)
+	}
+
+	return nil
+}
diff --git a/feeds/feeds.pb.go b/feeds/feeds.pb.go
index e9fa181..3766f8b 100644
--- a/feeds/feeds.pb.go
+++ b/feeds/feeds.pb.go
@@ -1,42 +1,13 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: feeds.proto
 
-/*
-Package maps_booking_feeds is a generated protocol buffer package.
-
-It is generated from these files:
-	feeds.proto
-
-It has these top-level messages:
-	FeedMetadata
-	AvailabilityFeed
-	ServiceAvailability
-	Availability
-	Resources
-	TimeRange
-	ServiceFeed
-	Service
-	Price
-	SchedulingRules
-	TaxRate
-	ServiceIntakeFormField
-	ServiceIntakeForm
-	Deposit
-	NoShowFee
-	PriceType
-	RequireCreditCard
-	ActionLink
-	ActionPlatform
-	TicketType
-	RelatedMedia
-	ServiceAttributeValueId
-*/
-
 package maps_booking_feeds
 
-import proto "github.com/golang/protobuf/proto"
-import fmt "fmt"
-import math "math"
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	math "math"
+)
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ = proto.Marshal
@@ -68,6 +39,7 @@
 	0: "FIXED_RATE_DEFAULT",
 	1: "PER_PERSON",
 }
+
 var PriceType_value = map[string]int32{
 	"FIXED_RATE_DEFAULT": 0,
 	"PER_PERSON":         1,
@@ -76,8 +48,9 @@
 func (x PriceType) String() string {
 	return proto.EnumName(PriceType_name, int32(x))
 }
+
 func (PriceType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{0}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{0}
 }
 
 // Defines whether a credit card is required in order to book an appointment.
@@ -103,6 +76,7 @@
 	1: "REQUIRE_CREDIT_CARD_CONDITIONAL",
 	2: "REQUIRE_CREDIT_CARD_ALWAYS",
 }
+
 var RequireCreditCard_value = map[string]int32{
 	"REQUIRE_CREDIT_CARD_UNSPECIFIED": 0,
 	"REQUIRE_CREDIT_CARD_CONDITIONAL": 1,
@@ -112,8 +86,9 @@
 func (x RequireCreditCard) String() string {
 	return proto.EnumName(RequireCreditCard_name, int32(x))
 }
+
 func (RequireCreditCard) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{1}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{1}
 }
 
 // The platform that the action is performed on. Web application is the general
@@ -142,6 +117,7 @@
 	3: "ACTION_PLATFORM_ANDROID",
 	4: "ACTION_PLATFORM_IOS",
 }
+
 var ActionPlatform_value = map[string]int32{
 	"ACTION_PLATFORM_UNSPECIFIED":     0,
 	"ACTION_PLATFORM_WEB_APPLICATION": 1,
@@ -153,8 +129,9 @@
 func (x ActionPlatform) String() string {
 	return proto.EnumName(ActionPlatform_name, int32(x))
 }
+
 func (ActionPlatform) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{2}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{2}
 }
 
 type FeedMetadata_ProcessingInstruction int32
@@ -176,6 +153,7 @@
 	1: "PROCESS_AS_COMPLETE",
 	2: "PROCESS_AS_INCREMENTAL",
 }
+
 var FeedMetadata_ProcessingInstruction_value = map[string]int32{
 	"PROCESS_UNKNOWN":        0,
 	"PROCESS_AS_COMPLETE":    1,
@@ -185,8 +163,9 @@
 func (x FeedMetadata_ProcessingInstruction) String() string {
 	return proto.EnumName(FeedMetadata_ProcessingInstruction_name, int32(x))
 }
+
 func (FeedMetadata_ProcessingInstruction) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{0, 0}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{0, 0}
 }
 
 // Enum to indicate the prepayment type.
@@ -210,6 +189,7 @@
 	2: "OPTIONAL",
 	3: "NOT_SUPPORTED",
 }
+
 var Service_PrepaymentType_value = map[string]int32{
 	"PREPAYMENT_TYPE_UNSPECIFIED": 0,
 	"REQUIRED":                    1,
@@ -220,8 +200,9 @@
 func (x Service_PrepaymentType) String() string {
 	return proto.EnumName(Service_PrepaymentType_name, int32(x))
 }
+
 func (Service_PrepaymentType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{7, 0}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{7, 0}
 }
 
 type Service_ServiceType int32
@@ -241,6 +222,7 @@
 	3: "SERVICE_TYPE_EVENT_TICKET",
 	4: "SERVICE_TYPE_TRIP_TOUR",
 }
+
 var Service_ServiceType_value = map[string]int32{
 	"SERVICE_TYPE_UNSPECIFIED":        0,
 	"SERVICE_TYPE_DINING_RESERVATION": 1,
@@ -252,8 +234,9 @@
 func (x Service_ServiceType) String() string {
 	return proto.EnumName(Service_ServiceType_name, int32(x))
 }
+
 func (Service_ServiceType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{7, 1}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{7, 1}
 }
 
 // Enum to indicate the type of field.
@@ -285,6 +268,7 @@
 	5: "DROPDOWN",
 	6: "BOOLEAN",
 }
+
 var ServiceIntakeFormField_FieldType_value = map[string]int32{
 	"FIELD_TYPE_UNSPECIFIED": 0,
 	"SHORT_ANSWER":           1,
@@ -298,8 +282,9 @@
 func (x ServiceIntakeFormField_FieldType) String() string {
 	return proto.EnumName(ServiceIntakeFormField_FieldType_name, int32(x))
 }
+
 func (ServiceIntakeFormField_FieldType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{11, 0}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{11, 0}
 }
 
 // Enum to indicate the type of this media source. Only photos are supported.
@@ -318,6 +303,7 @@
 	0: "TYPE_UNSPECIFIED",
 	1: "PHOTO",
 }
+
 var RelatedMedia_MediaType_value = map[string]int32{
 	"TYPE_UNSPECIFIED": 0,
 	"PHOTO":            1,
@@ -326,8 +312,9 @@
 func (x RelatedMedia_MediaType) String() string {
 	return proto.EnumName(RelatedMedia_MediaType_name, int32(x))
 }
+
 func (RelatedMedia_MediaType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{17, 0}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{17, 0}
 }
 
 type FeedMetadata struct {
@@ -369,16 +356,17 @@
 func (m *FeedMetadata) String() string { return proto.CompactTextString(m) }
 func (*FeedMetadata) ProtoMessage()    {}
 func (*FeedMetadata) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{0}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{0}
 }
+
 func (m *FeedMetadata) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FeedMetadata.Unmarshal(m, b)
 }
 func (m *FeedMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_FeedMetadata.Marshal(b, m, deterministic)
 }
-func (dst *FeedMetadata) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_FeedMetadata.Merge(dst, src)
+func (m *FeedMetadata) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FeedMetadata.Merge(m, src)
 }
 func (m *FeedMetadata) XXX_Size() int {
 	return xxx_messageInfo_FeedMetadata.Size(m)
@@ -436,16 +424,17 @@
 func (m *AvailabilityFeed) String() string { return proto.CompactTextString(m) }
 func (*AvailabilityFeed) ProtoMessage()    {}
 func (*AvailabilityFeed) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{1}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{1}
 }
+
 func (m *AvailabilityFeed) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_AvailabilityFeed.Unmarshal(m, b)
 }
 func (m *AvailabilityFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_AvailabilityFeed.Marshal(b, m, deterministic)
 }
-func (dst *AvailabilityFeed) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_AvailabilityFeed.Merge(dst, src)
+func (m *AvailabilityFeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AvailabilityFeed.Merge(m, src)
 }
 func (m *AvailabilityFeed) XXX_Size() int {
 	return xxx_messageInfo_AvailabilityFeed.Size(m)
@@ -521,16 +510,17 @@
 func (m *ServiceAvailability) String() string { return proto.CompactTextString(m) }
 func (*ServiceAvailability) ProtoMessage()    {}
 func (*ServiceAvailability) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{2}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{2}
 }
+
 func (m *ServiceAvailability) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ServiceAvailability.Unmarshal(m, b)
 }
 func (m *ServiceAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_ServiceAvailability.Marshal(b, m, deterministic)
 }
-func (dst *ServiceAvailability) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ServiceAvailability.Merge(dst, src)
+func (m *ServiceAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServiceAvailability.Merge(m, src)
 }
 func (m *ServiceAvailability) XXX_Size() int {
 	return xxx_messageInfo_ServiceAvailability.Size(m)
@@ -709,16 +699,17 @@
 func (m *Availability) String() string { return proto.CompactTextString(m) }
 func (*Availability) ProtoMessage()    {}
 func (*Availability) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{3}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{3}
 }
+
 func (m *Availability) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Availability.Unmarshal(m, b)
 }
 func (m *Availability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Availability.Marshal(b, m, deterministic)
 }
-func (dst *Availability) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Availability.Merge(dst, src)
+func (m *Availability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Availability.Merge(m, src)
 }
 func (m *Availability) XXX_Size() int {
 	return xxx_messageInfo_Availability.Size(m)
@@ -868,16 +859,17 @@
 func (m *Availability_Recurrence) String() string { return proto.CompactTextString(m) }
 func (*Availability_Recurrence) ProtoMessage()    {}
 func (*Availability_Recurrence) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{3, 0}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{3, 0}
 }
+
 func (m *Availability_Recurrence) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Availability_Recurrence.Unmarshal(m, b)
 }
 func (m *Availability_Recurrence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Availability_Recurrence.Marshal(b, m, deterministic)
 }
-func (dst *Availability_Recurrence) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Availability_Recurrence.Merge(dst, src)
+func (m *Availability_Recurrence) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Availability_Recurrence.Merge(m, src)
 }
 func (m *Availability_Recurrence) XXX_Size() int {
 	return xxx_messageInfo_Availability_Recurrence.Size(m)
@@ -929,16 +921,17 @@
 func (m *Availability_ScheduleException) String() string { return proto.CompactTextString(m) }
 func (*Availability_ScheduleException) ProtoMessage()    {}
 func (*Availability_ScheduleException) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{3, 1}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{3, 1}
 }
+
 func (m *Availability_ScheduleException) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Availability_ScheduleException.Unmarshal(m, b)
 }
 func (m *Availability_ScheduleException) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Availability_ScheduleException.Marshal(b, m, deterministic)
 }
-func (dst *Availability_ScheduleException) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Availability_ScheduleException.Merge(dst, src)
+func (m *Availability_ScheduleException) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Availability_ScheduleException.Merge(m, src)
 }
 func (m *Availability_ScheduleException) XXX_Size() int {
 	return xxx_messageInfo_Availability_ScheduleException.Size(m)
@@ -997,16 +990,17 @@
 func (m *Resources) String() string { return proto.CompactTextString(m) }
 func (*Resources) ProtoMessage()    {}
 func (*Resources) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{4}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{4}
 }
+
 func (m *Resources) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Resources.Unmarshal(m, b)
 }
 func (m *Resources) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Resources.Marshal(b, m, deterministic)
 }
-func (dst *Resources) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Resources.Merge(dst, src)
+func (m *Resources) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Resources.Merge(m, src)
 }
 func (m *Resources) XXX_Size() int {
 	return xxx_messageInfo_Resources.Size(m)
@@ -1064,16 +1058,17 @@
 func (m *TimeRange) String() string { return proto.CompactTextString(m) }
 func (*TimeRange) ProtoMessage()    {}
 func (*TimeRange) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{5}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{5}
 }
+
 func (m *TimeRange) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TimeRange.Unmarshal(m, b)
 }
 func (m *TimeRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_TimeRange.Marshal(b, m, deterministic)
 }
-func (dst *TimeRange) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_TimeRange.Merge(dst, src)
+func (m *TimeRange) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TimeRange.Merge(m, src)
 }
 func (m *TimeRange) XXX_Size() int {
 	return xxx_messageInfo_TimeRange.Size(m)
@@ -1110,16 +1105,17 @@
 func (m *ServiceFeed) String() string { return proto.CompactTextString(m) }
 func (*ServiceFeed) ProtoMessage()    {}
 func (*ServiceFeed) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{6}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{6}
 }
+
 func (m *ServiceFeed) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ServiceFeed.Unmarshal(m, b)
 }
 func (m *ServiceFeed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_ServiceFeed.Marshal(b, m, deterministic)
 }
-func (dst *ServiceFeed) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ServiceFeed.Merge(dst, src)
+func (m *ServiceFeed) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServiceFeed.Merge(m, src)
 }
 func (m *ServiceFeed) XXX_Size() int {
 	return xxx_messageInfo_ServiceFeed.Size(m)
@@ -1230,7 +1226,16 @@
 	// Rules to book/cancel an appointment. (optional)
 	Rules *SchedulingRules `protobuf:"bytes,6,opt,name=rules,proto3" json:"rules,omitempty"`
 	// Intake forms to customize the service. (optional)
-	Form []*ServiceIntakeForm `protobuf:"bytes,7,rep,name=form,proto3" json:"form,omitempty"`
+	//
+	// Deprecated. Please see intake_form and per_ticket_intake_form.
+	Form []*ServiceIntakeForm `protobuf:"bytes,7,rep,name=form,proto3" json:"form,omitempty"` // Deprecated: Do not use.
+	// A form requesting additional information from the user when they book this
+	// service. (optional)
+	IntakeForm *ServiceIntakeForm `protobuf:"bytes,20,opt,name=intake_form,json=intakeForm,proto3" json:"intake_form,omitempty"`
+	// A form requesting additional information from the user when they book this
+	// service. This form must be filled out once for each ticket the user is
+	// booking. (optional)
+	PerTicketIntakeForm *ServiceIntakeForm `protobuf:"bytes,21,opt,name=per_ticket_intake_form,json=perTicketIntakeForm,proto3" json:"per_ticket_intake_form,omitempty"`
 	// Whether a prepayment is required, optional or not supported. (optional)
 	PrepaymentType Service_PrepaymentType `protobuf:"varint,8,opt,name=prepayment_type,json=prepaymentType,proto3,enum=maps.booking.feeds.Service_PrepaymentType" json:"prepayment_type,omitempty"`
 	// The service's tax rate. If present this field overrides any tax_rate set at
@@ -1266,25 +1271,30 @@
 	// Each Service may have zero or more values for each service attribute
 	// defined in the corresponding Merchant.
 	ServiceAttributeValueId []*ServiceAttributeValueId `protobuf:"bytes,18,rep,name=service_attribute_value_id,json=serviceAttributeValueId,proto3" json:"service_attribute_value_id,omitempty"`
-	XXX_NoUnkeyedLiteral    struct{}                   `json:"-"`
-	XXX_unrecognized        []byte                     `json:"-"`
-	XXX_sizecache           int32                      `json:"-"`
+	// Rules related to joining the waitlist. Should be populated if the service
+	// and merchant support waitlist functionality. Should not be populated
+	// otherwise.
+	WaitlistRules        *WaitlistRules `protobuf:"bytes,19,opt,name=waitlist_rules,json=waitlistRules,proto3" json:"waitlist_rules,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
 }
 
 func (m *Service) Reset()         { *m = Service{} }
 func (m *Service) String() string { return proto.CompactTextString(m) }
 func (*Service) ProtoMessage()    {}
 func (*Service) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{7}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{7}
 }
+
 func (m *Service) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Service.Unmarshal(m, b)
 }
 func (m *Service) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Service.Marshal(b, m, deterministic)
 }
-func (dst *Service) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Service.Merge(dst, src)
+func (m *Service) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Service.Merge(m, src)
 }
 func (m *Service) XXX_Size() int {
 	return xxx_messageInfo_Service.Size(m)
@@ -1337,6 +1347,7 @@
 	return nil
 }
 
+// Deprecated: Do not use.
 func (m *Service) GetForm() []*ServiceIntakeForm {
 	if m != nil {
 		return m.Form
@@ -1344,6 +1355,20 @@
 	return nil
 }
 
+func (m *Service) GetIntakeForm() *ServiceIntakeForm {
+	if m != nil {
+		return m.IntakeForm
+	}
+	return nil
+}
+
+func (m *Service) GetPerTicketIntakeForm() *ServiceIntakeForm {
+	if m != nil {
+		return m.PerTicketIntakeForm
+	}
+	return nil
+}
+
 func (m *Service) GetPrepaymentType() Service_PrepaymentType {
 	if m != nil {
 		return m.PrepaymentType
@@ -1421,6 +1446,13 @@
 	return nil
 }
 
+func (m *Service) GetWaitlistRules() *WaitlistRules {
+	if m != nil {
+		return m.WaitlistRules
+	}
+	return nil
+}
+
 // The price of a service or a fee.
 type Price struct {
 	// The price in micro-units of the currency.
@@ -1443,16 +1475,17 @@
 func (m *Price) String() string { return proto.CompactTextString(m) }
 func (*Price) ProtoMessage()    {}
 func (*Price) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{8}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{8}
 }
+
 func (m *Price) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Price.Unmarshal(m, b)
 }
 func (m *Price) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Price.Marshal(b, m, deterministic)
 }
-func (dst *Price) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Price.Merge(dst, src)
+func (m *Price) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Price.Merge(m, src)
 }
 func (m *Price) XXX_Size() int {
 	return xxx_messageInfo_Price.Size(m)
@@ -1505,16 +1538,17 @@
 func (m *SchedulingRules) String() string { return proto.CompactTextString(m) }
 func (*SchedulingRules) ProtoMessage()    {}
 func (*SchedulingRules) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{9}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{9}
 }
+
 func (m *SchedulingRules) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SchedulingRules.Unmarshal(m, b)
 }
 func (m *SchedulingRules) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_SchedulingRules.Marshal(b, m, deterministic)
 }
-func (dst *SchedulingRules) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_SchedulingRules.Merge(dst, src)
+func (m *SchedulingRules) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SchedulingRules.Merge(m, src)
 }
 func (m *SchedulingRules) XXX_Size() int {
 	return xxx_messageInfo_SchedulingRules.Size(m)
@@ -1584,16 +1618,17 @@
 func (m *TaxRate) String() string { return proto.CompactTextString(m) }
 func (*TaxRate) ProtoMessage()    {}
 func (*TaxRate) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{10}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{10}
 }
+
 func (m *TaxRate) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TaxRate.Unmarshal(m, b)
 }
 func (m *TaxRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_TaxRate.Marshal(b, m, deterministic)
 }
-func (dst *TaxRate) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_TaxRate.Merge(dst, src)
+func (m *TaxRate) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TaxRate.Merge(m, src)
 }
 func (m *TaxRate) XXX_Size() int {
 	return xxx_messageInfo_TaxRate.Size(m)
@@ -1613,6 +1648,10 @@
 
 // Defines a field that is included in a ServiceIntakeForm.
 type ServiceIntakeFormField struct {
+	// A string from an aggregator partner which uniquely identifies a form field.
+	// This id should be the same as the id in the corresponding form field
+	// answer. (required)
+	Id string `protobuf:"bytes,5,opt,name=id,proto3" json:"id,omitempty"`
 	// The type of this field. (required)
 	Type ServiceIntakeFormField_FieldType `protobuf:"varint,1,opt,name=type,proto3,enum=maps.booking.feeds.ServiceIntakeFormField_FieldType" json:"type,omitempty"`
 	// The text shown to the user for this field. (required)
@@ -1631,16 +1670,17 @@
 func (m *ServiceIntakeFormField) String() string { return proto.CompactTextString(m) }
 func (*ServiceIntakeFormField) ProtoMessage()    {}
 func (*ServiceIntakeFormField) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{11}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{11}
 }
+
 func (m *ServiceIntakeFormField) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ServiceIntakeFormField.Unmarshal(m, b)
 }
 func (m *ServiceIntakeFormField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_ServiceIntakeFormField.Marshal(b, m, deterministic)
 }
-func (dst *ServiceIntakeFormField) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ServiceIntakeFormField.Merge(dst, src)
+func (m *ServiceIntakeFormField) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServiceIntakeFormField.Merge(m, src)
 }
 func (m *ServiceIntakeFormField) XXX_Size() int {
 	return xxx_messageInfo_ServiceIntakeFormField.Size(m)
@@ -1651,6 +1691,13 @@
 
 var xxx_messageInfo_ServiceIntakeFormField proto.InternalMessageInfo
 
+func (m *ServiceIntakeFormField) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
 func (m *ServiceIntakeFormField) GetType() ServiceIntakeFormField_FieldType {
 	if m != nil {
 		return m.Type
@@ -1684,11 +1731,11 @@
 	// Fields that will be displayed to the user. (required)
 	Field []*ServiceIntakeFormField `protobuf:"bytes,1,rep,name=field,proto3" json:"field,omitempty"`
 	// If true, this form will be shown to first time customers.
-	// (one of first_time_customers or returning_customers required)
-	FirstTimeCustomers bool `protobuf:"varint,2,opt,name=first_time_customers,json=firstTimeCustomers,proto3" json:"first_time_customers,omitempty"`
+	// Deprecated. This functionality is not supported for intake forms.
+	FirstTimeCustomers bool `protobuf:"varint,2,opt,name=first_time_customers,json=firstTimeCustomers,proto3" json:"first_time_customers,omitempty"` // Deprecated: Do not use.
 	// If true, this form will be shown to repeat customers.
-	// (one of first_time_customers or returning_customers required)
-	ReturningCustomers   bool     `protobuf:"varint,3,opt,name=returning_customers,json=returningCustomers,proto3" json:"returning_customers,omitempty"`
+	// Deprecated. This functionality is not supported for intake forms.
+	ReturningCustomers   bool     `protobuf:"varint,3,opt,name=returning_customers,json=returningCustomers,proto3" json:"returning_customers,omitempty"` // Deprecated: Do not use.
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
@@ -1698,16 +1745,17 @@
 func (m *ServiceIntakeForm) String() string { return proto.CompactTextString(m) }
 func (*ServiceIntakeForm) ProtoMessage()    {}
 func (*ServiceIntakeForm) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{12}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{12}
 }
+
 func (m *ServiceIntakeForm) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ServiceIntakeForm.Unmarshal(m, b)
 }
 func (m *ServiceIntakeForm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_ServiceIntakeForm.Marshal(b, m, deterministic)
 }
-func (dst *ServiceIntakeForm) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ServiceIntakeForm.Merge(dst, src)
+func (m *ServiceIntakeForm) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServiceIntakeForm.Merge(m, src)
 }
 func (m *ServiceIntakeForm) XXX_Size() int {
 	return xxx_messageInfo_ServiceIntakeForm.Size(m)
@@ -1725,6 +1773,7 @@
 	return nil
 }
 
+// Deprecated: Do not use.
 func (m *ServiceIntakeForm) GetFirstTimeCustomers() bool {
 	if m != nil {
 		return m.FirstTimeCustomers
@@ -1732,6 +1781,7 @@
 	return false
 }
 
+// Deprecated: Do not use.
 func (m *ServiceIntakeForm) GetReturningCustomers() bool {
 	if m != nil {
 		return m.ReturningCustomers
@@ -1757,16 +1807,17 @@
 func (m *Deposit) String() string { return proto.CompactTextString(m) }
 func (*Deposit) ProtoMessage()    {}
 func (*Deposit) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{13}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{13}
 }
+
 func (m *Deposit) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Deposit.Unmarshal(m, b)
 }
 func (m *Deposit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Deposit.Marshal(b, m, deterministic)
 }
-func (dst *Deposit) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Deposit.Merge(dst, src)
+func (m *Deposit) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Deposit.Merge(m, src)
 }
 func (m *Deposit) XXX_Size() int {
 	return xxx_messageInfo_Deposit.Size(m)
@@ -1815,16 +1866,17 @@
 func (m *NoShowFee) String() string { return proto.CompactTextString(m) }
 func (*NoShowFee) ProtoMessage()    {}
 func (*NoShowFee) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{14}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{14}
 }
+
 func (m *NoShowFee) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_NoShowFee.Unmarshal(m, b)
 }
 func (m *NoShowFee) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_NoShowFee.Marshal(b, m, deterministic)
 }
-func (dst *NoShowFee) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_NoShowFee.Merge(dst, src)
+func (m *NoShowFee) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NoShowFee.Merge(m, src)
 }
 func (m *NoShowFee) XXX_Size() int {
 	return xxx_messageInfo_NoShowFee.Size(m)
@@ -1872,16 +1924,17 @@
 func (m *ActionLink) String() string { return proto.CompactTextString(m) }
 func (*ActionLink) ProtoMessage()    {}
 func (*ActionLink) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{15}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{15}
 }
+
 func (m *ActionLink) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ActionLink.Unmarshal(m, b)
 }
 func (m *ActionLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_ActionLink.Marshal(b, m, deterministic)
 }
-func (dst *ActionLink) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ActionLink.Merge(dst, src)
+func (m *ActionLink) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ActionLink.Merge(m, src)
 }
 func (m *ActionLink) XXX_Size() int {
 	return xxx_messageInfo_ActionLink.Size(m)
@@ -1942,16 +1995,17 @@
 func (m *TicketType) String() string { return proto.CompactTextString(m) }
 func (*TicketType) ProtoMessage()    {}
 func (*TicketType) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{16}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{16}
 }
+
 func (m *TicketType) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TicketType.Unmarshal(m, b)
 }
 func (m *TicketType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_TicketType.Marshal(b, m, deterministic)
 }
-func (dst *TicketType) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_TicketType.Merge(dst, src)
+func (m *TicketType) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TicketType.Merge(m, src)
 }
 func (m *TicketType) XXX_Size() int {
 	return xxx_messageInfo_TicketType.Size(m)
@@ -2002,16 +2056,17 @@
 func (m *RelatedMedia) String() string { return proto.CompactTextString(m) }
 func (*RelatedMedia) ProtoMessage()    {}
 func (*RelatedMedia) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{17}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{17}
 }
+
 func (m *RelatedMedia) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_RelatedMedia.Unmarshal(m, b)
 }
 func (m *RelatedMedia) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_RelatedMedia.Marshal(b, m, deterministic)
 }
-func (dst *RelatedMedia) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_RelatedMedia.Merge(dst, src)
+func (m *RelatedMedia) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RelatedMedia.Merge(m, src)
 }
 func (m *RelatedMedia) XXX_Size() int {
 	return xxx_messageInfo_RelatedMedia.Size(m)
@@ -2061,16 +2116,17 @@
 func (m *ServiceAttributeValueId) String() string { return proto.CompactTextString(m) }
 func (*ServiceAttributeValueId) ProtoMessage()    {}
 func (*ServiceAttributeValueId) Descriptor() ([]byte, []int) {
-	return fileDescriptor_feeds_fc30b4ddff65807e, []int{18}
+	return fileDescriptor_7aa923a38d4cd9d3, []int{18}
 }
+
 func (m *ServiceAttributeValueId) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ServiceAttributeValueId.Unmarshal(m, b)
 }
 func (m *ServiceAttributeValueId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_ServiceAttributeValueId.Marshal(b, m, deterministic)
 }
-func (dst *ServiceAttributeValueId) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ServiceAttributeValueId.Merge(dst, src)
+func (m *ServiceAttributeValueId) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServiceAttributeValueId.Merge(m, src)
 }
 func (m *ServiceAttributeValueId) XXX_Size() int {
 	return xxx_messageInfo_ServiceAttributeValueId.Size(m)
@@ -2095,6 +2151,70 @@
 	return ""
 }
 
+// Rules related to joining the waitlist.
+type WaitlistRules struct {
+	// Required. Must be a positive integer for services providing waitlist
+	// functionality. If the service or merchant does not provide waitlist
+	// functionality, this must not be populated.
+	MinPartySize int32 `protobuf:"varint,1,opt,name=min_party_size,json=minPartySize,proto3" json:"min_party_size,omitempty"`
+	// Required. Must be a positive integer for services providing waitlist
+	// functionality. If the service or merchant does not provide waitlist
+	// functionality, this must not be populated.
+	MaxPartySize int32 `protobuf:"varint,2,opt,name=max_party_size,json=maxPartySize,proto3" json:"max_party_size,omitempty"`
+	// If true, the user will be able to send a free-form additional text request
+	// when joining the waitlist for this service.
+	SupportsAdditionalRequest bool     `protobuf:"varint,3,opt,name=supports_additional_request,json=supportsAdditionalRequest,proto3" json:"supports_additional_request,omitempty"`
+	XXX_NoUnkeyedLiteral      struct{} `json:"-"`
+	XXX_unrecognized          []byte   `json:"-"`
+	XXX_sizecache             int32    `json:"-"`
+}
+
+func (m *WaitlistRules) Reset()         { *m = WaitlistRules{} }
+func (m *WaitlistRules) String() string { return proto.CompactTextString(m) }
+func (*WaitlistRules) ProtoMessage()    {}
+func (*WaitlistRules) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7aa923a38d4cd9d3, []int{19}
+}
+
+func (m *WaitlistRules) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_WaitlistRules.Unmarshal(m, b)
+}
+func (m *WaitlistRules) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_WaitlistRules.Marshal(b, m, deterministic)
+}
+func (m *WaitlistRules) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_WaitlistRules.Merge(m, src)
+}
+func (m *WaitlistRules) XXX_Size() int {
+	return xxx_messageInfo_WaitlistRules.Size(m)
+}
+func (m *WaitlistRules) XXX_DiscardUnknown() {
+	xxx_messageInfo_WaitlistRules.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WaitlistRules proto.InternalMessageInfo
+
+func (m *WaitlistRules) GetMinPartySize() int32 {
+	if m != nil {
+		return m.MinPartySize
+	}
+	return 0
+}
+
+func (m *WaitlistRules) GetMaxPartySize() int32 {
+	if m != nil {
+		return m.MaxPartySize
+	}
+	return 0
+}
+
+func (m *WaitlistRules) GetSupportsAdditionalRequest() bool {
+	if m != nil {
+		return m.SupportsAdditionalRequest
+	}
+	return false
+}
+
 func init() {
 	proto.RegisterType((*FeedMetadata)(nil), "maps.booking.feeds.FeedMetadata")
 	proto.RegisterType((*AvailabilityFeed)(nil), "maps.booking.feeds.AvailabilityFeed")
@@ -2117,6 +2237,7 @@
 	proto.RegisterType((*TicketType)(nil), "maps.booking.feeds.TicketType")
 	proto.RegisterType((*RelatedMedia)(nil), "maps.booking.feeds.RelatedMedia")
 	proto.RegisterType((*ServiceAttributeValueId)(nil), "maps.booking.feeds.ServiceAttributeValueId")
+	proto.RegisterType((*WaitlistRules)(nil), "maps.booking.feeds.WaitlistRules")
 	proto.RegisterEnum("maps.booking.feeds.PriceType", PriceType_name, PriceType_value)
 	proto.RegisterEnum("maps.booking.feeds.RequireCreditCard", RequireCreditCard_name, RequireCreditCard_value)
 	proto.RegisterEnum("maps.booking.feeds.ActionPlatform", ActionPlatform_name, ActionPlatform_value)
@@ -2127,151 +2248,161 @@
 	proto.RegisterEnum("maps.booking.feeds.RelatedMedia_MediaType", RelatedMedia_MediaType_name, RelatedMedia_MediaType_value)
 }
 
-func init() { proto.RegisterFile("feeds.proto", fileDescriptor_feeds_fc30b4ddff65807e) }
+func init() { proto.RegisterFile("feeds.proto", fileDescriptor_7aa923a38d4cd9d3) }
 
-var fileDescriptor_feeds_fc30b4ddff65807e = []byte{
-	// 2281 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xdf, 0x72, 0xdb, 0xc6,
-	0xd5, 0x0f, 0x48, 0xd1, 0x24, 0x0f, 0x29, 0x09, 0x5c, 0x29, 0x12, 0x2c, 0xc7, 0xb1, 0x3e, 0xf8,
-	0xcb, 0x54, 0x95, 0x53, 0xa6, 0x95, 0x93, 0x4c, 0x32, 0x71, 0x93, 0x50, 0x20, 0x64, 0x61, 0x4c,
-	0x11, 0xf0, 0x12, 0xb2, 0xe3, 0xde, 0x6c, 0x20, 0x60, 0x45, 0x61, 0x4c, 0x02, 0xec, 0x02, 0x54,
-	0xac, 0xcc, 0xe4, 0xa6, 0x57, 0xbd, 0xec, 0x4c, 0xef, 0xfa, 0x04, 0xed, 0xd4, 0x0f, 0xd0, 0xc9,
-	0x5d, 0x9f, 0xa8, 0x0f, 0xd0, 0x9b, 0xce, 0x2e, 0x40, 0x10, 0x94, 0x20, 0xcb, 0x6d, 0x72, 0x23,
-	0x61, 0xcf, 0x39, 0xbf, 0xfd, 0x73, 0xce, 0x9e, 0xdf, 0x39, 0x4b, 0x68, 0x9c, 0x52, 0xea, 0x45,
-	0xed, 0x09, 0x0b, 0xe3, 0x10, 0xa1, 0xb1, 0x33, 0x89, 0xda, 0x27, 0x61, 0xf8, 0xd2, 0x0f, 0x86,
-	0x6d, 0xa1, 0x51, 0xff, 0x55, 0x82, 0xe6, 0x01, 0xa5, 0xde, 0x11, 0x8d, 0x1d, 0xcf, 0x89, 0x1d,
-	0x34, 0x86, 0x8d, 0x09, 0x0b, 0x5d, 0x1a, 0x45, 0x7e, 0x30, 0x24, 0x7e, 0x10, 0xc5, 0x6c, 0xea,
-	0xc6, 0x7e, 0x18, 0x28, 0xd2, 0xb6, 0xb4, 0xb3, 0xb2, 0xf7, 0x69, 0xfb, 0xea, 0x2c, 0xed, 0xfc,
-	0x0c, 0x6d, 0x2b, 0x83, 0x1b, 0x73, 0x34, 0x7e, 0x77, 0x52, 0x24, 0x46, 0xff, 0x07, 0xcd, 0xe8,
-	0xcc, 0x61, 0x1e, 0x09, 0xa6, 0xe3, 0x13, 0xca, 0x94, 0xd2, 0xb6, 0xb4, 0x53, 0xc1, 0x0d, 0x21,
-	0xeb, 0x0b, 0x11, 0x37, 0x89, 0xc3, 0xd8, 0x19, 0x11, 0x21, 0x8c, 0x94, 0x72, 0x62, 0x22, 0x64,
-	0x03, 0x21, 0x42, 0xeb, 0x50, 0x09, 0xc2, 0xc0, 0xa5, 0x4a, 0x65, 0x5b, 0xda, 0x59, 0xc2, 0xc9,
-	0x00, 0xfd, 0x06, 0xd6, 0x87, 0x34, 0xa0, 0xcc, 0xe1, 0x2b, 0x91, 0xd8, 0x1f, 0xd3, 0x28, 0x76,
-	0xc6, 0x13, 0x65, 0x69, 0x5b, 0xda, 0x29, 0xe3, 0xb5, 0xb9, 0xce, 0x9e, 0xa9, 0x54, 0x07, 0xde,
-	0x2d, 0xdc, 0x3e, 0x5a, 0x83, 0x55, 0x0b, 0x9b, 0x9a, 0x3e, 0x18, 0x90, 0xe3, 0xfe, 0x93, 0xbe,
-	0xf9, 0xbc, 0x2f, 0xbf, 0x83, 0x36, 0x61, 0x6d, 0x26, 0xec, 0x0c, 0x88, 0x66, 0x1e, 0x59, 0x3d,
-	0xdd, 0xd6, 0x65, 0x09, 0x6d, 0xc1, 0x46, 0x4e, 0x61, 0xf4, 0x35, 0xac, 0x1f, 0xe9, 0x7d, 0xbb,
-	0xd3, 0x93, 0x4b, 0xea, 0x6b, 0x09, 0xe4, 0xce, 0xb9, 0xe3, 0x8f, 0x9c, 0x13, 0x7f, 0xe4, 0xc7,
-	0x17, 0xdc, 0x77, 0xe8, 0x11, 0xd4, 0xc6, 0xa9, 0xff, 0x84, 0x9f, 0x1b, 0x7b, 0xdb, 0x37, 0xf9,
-	0x19, 0x67, 0x08, 0xf4, 0x3b, 0x58, 0x8f, 0x28, 0x3b, 0xf7, 0x5d, 0x4a, 0x9c, 0xdc, 0xcc, 0x4a,
-	0x69, 0xbb, 0xbc, 0xd3, 0xd8, 0xfb, 0x45, 0xd1, 0x4c, 0x83, 0xc4, 0x3e, 0xbf, 0x11, 0xbc, 0x16,
-	0x5d, 0x15, 0xaa, 0xff, 0x2e, 0xc1, 0x5a, 0x81, 0x31, 0xfa, 0x0c, 0x94, 0x28, 0x76, 0x58, 0x3c,
-	0xf7, 0x2b, 0x61, 0x34, 0x8a, 0x99, 0xef, 0xc6, 0xe2, 0x04, 0x65, 0xbc, 0x21, 0xf4, 0x99, 0x6f,
-	0x71, 0xaa, 0x45, 0x1f, 0xc3, 0x06, 0x0d, 0xbc, 0x22, 0x5c, 0x49, 0xe0, 0xd6, 0x69, 0xe0, 0x5d,
-	0x45, 0xfd, 0x1a, 0xd6, 0xc7, 0x94, 0xb9, 0x67, 0x4e, 0x10, 0x13, 0xdf, 0x9b, 0x63, 0xf8, 0x6d,
-	0xa8, 0x63, 0x34, 0xd3, 0x19, 0x5e, 0x86, 0x68, 0xc3, 0xec, 0x40, 0x0b, 0x80, 0x25, 0x01, 0x68,
-	0xa5, 0xaa, 0x9c, 0x7d, 0x0f, 0x10, 0xa3, 0x51, 0x38, 0x65, 0x2e, 0x8d, 0xe6, 0xe6, 0xb7, 0x44,
-	0x34, 0xee, 0x16, 0xf9, 0x10, 0xcf, 0xac, 0x71, 0x2b, 0x03, 0x66, 0xb3, 0x75, 0xa1, 0xb9, 0x10,
-	0x8b, 0x8a, 0x88, 0x45, 0x61, 0x54, 0x17, 0x82, 0xb0, 0x80, 0x52, 0x7f, 0xac, 0x42, 0x73, 0xc1,
-	0xed, 0xf7, 0xa0, 0x91, 0x73, 0x83, 0xf0, 0x74, 0x1d, 0xc3, 0xfc, 0xf4, 0xe8, 0x2e, 0xc0, 0xfc,
-	0xd4, 0xc2, 0xa3, 0x75, 0x5c, 0xcf, 0x0e, 0x8b, 0xee, 0x40, 0x3d, 0x09, 0x5b, 0x44, 0x5d, 0xe1,
-	0xbb, 0x32, 0xae, 0x09, 0xc1, 0x80, 0xba, 0x3c, 0xd3, 0xbc, 0x69, 0x9a, 0x2e, 0x5c, 0x9f, 0x24,
-	0x4a, 0x63, 0x26, 0xe3, 0x26, 0xf7, 0xa0, 0x11, 0x4d, 0xc2, 0x38, 0x22, 0x22, 0xfd, 0x44, 0xbe,
-	0x95, 0x31, 0x08, 0x91, 0xcd, 0x25, 0x62, 0x7d, 0x61, 0x10, 0x4e, 0x68, 0x20, 0xbc, 0x57, 0xc6,
-	0x75, 0x21, 0x31, 0x27, 0x34, 0x40, 0xbf, 0x04, 0x39, 0x7f, 0x40, 0x12, 0x3b, 0x43, 0xa5, 0x2a,
-	0x36, 0xb9, 0x9a, 0x97, 0xdb, 0xce, 0x10, 0x7d, 0x01, 0xf5, 0xcc, 0xad, 0x4a, 0xed, 0x6d, 0xc2,
-	0x30, 0xb7, 0x47, 0xbb, 0xd0, 0x9a, 0x38, 0x17, 0x63, 0x1a, 0xc4, 0x24, 0x9c, 0x88, 0x03, 0xf9,
-	0x9e, 0x52, 0xdf, 0x2e, 0xf3, 0x85, 0x52, 0x85, 0x29, 0xe4, 0x86, 0x87, 0x9e, 0x00, 0x30, 0xea,
-	0x4e, 0x19, 0xa3, 0x9c, 0x42, 0x40, 0xac, 0xf4, 0xe0, 0xa6, 0x40, 0xb5, 0x71, 0x06, 0xc1, 0x39,
-	0x38, 0x72, 0x00, 0x45, 0xee, 0x19, 0xf5, 0xa6, 0x23, 0x4a, 0xe8, 0x2b, 0x97, 0x8a, 0x45, 0x94,
-	0x86, 0x88, 0xfe, 0xde, 0x8d, 0x93, 0x0e, 0x52, 0xa8, 0x3e, 0x43, 0xe2, 0x56, 0x74, 0x59, 0x84,
-	0x3e, 0x81, 0xaa, 0x47, 0x27, 0x61, 0xe4, 0xc7, 0x4a, 0x53, 0x6c, 0xf6, 0x4e, 0xd1, 0xbc, 0xdd,
-	0xc4, 0x04, 0xcf, 0x6c, 0xd1, 0x6f, 0xa1, 0x11, 0x84, 0x24, 0x3a, 0x0b, 0xbf, 0x23, 0xa7, 0x94,
-	0x2a, 0xcb, 0xd7, 0x7b, 0xb4, 0x1f, 0x0e, 0xce, 0xc2, 0xef, 0x0e, 0x28, 0xc5, 0xf5, 0x60, 0xf6,
-	0x89, 0x8e, 0x61, 0x8d, 0xd1, 0xdf, 0x4f, 0x7d, 0x46, 0x89, 0xcb, 0xa8, 0xe7, 0xc7, 0xc4, 0x75,
-	0x98, 0xa7, 0xac, 0x88, 0xaa, 0xf0, 0x41, 0x71, 0x60, 0x84, 0xb9, 0x26, 0xac, 0x35, 0x87, 0x79,
-	0x3c, 0x4f, 0x2e, 0x89, 0xd0, 0xff, 0xc3, 0x4a, 0xec, 0xbb, 0x2f, 0x69, 0x4c, 0xe2, 0x8b, 0x89,
-	0xb8, 0xb3, 0xab, 0x22, 0x4a, 0xcd, 0x44, 0x6a, 0x5f, 0x4c, 0xa8, 0xe1, 0x6d, 0x7d, 0x0b, 0x30,
-	0xf7, 0x37, 0xda, 0x01, 0x99, 0xd1, 0x09, 0x75, 0x62, 0x32, 0x0d, 0x62, 0x7f, 0x24, 0xee, 0x6a,
-	0xc2, 0x39, 0x2b, 0x89, 0xfc, 0x98, 0x8b, 0xf9, 0x75, 0x9d, 0x5b, 0xd2, 0x73, 0xca, 0x2e, 0x84,
-	0x65, 0x52, 0x62, 0x52, 0x4b, 0x9d, 0x8b, 0x07, 0xd4, 0xdd, 0x7a, 0x0a, 0xad, 0x2b, 0xce, 0x47,
-	0x8f, 0x00, 0x38, 0x4d, 0x11, 0xe6, 0x04, 0x43, 0x9a, 0x12, 0x73, 0xa1, 0xc7, 0x38, 0x5f, 0x61,
-	0x6e, 0x84, 0xeb, 0xf1, 0xec, 0x53, 0xfd, 0x8b, 0x04, 0xf5, 0xec, 0x72, 0xa2, 0xdb, 0xc0, 0x13,
-	0xed, 0xf4, 0x74, 0x9e, 0xb6, 0x55, 0x31, 0x4e, 0x73, 0x56, 0xa8, 0x02, 0x67, 0x4c, 0xb3, 0x9c,
-	0xe5, 0x92, 0xbe, 0x33, 0xa6, 0x68, 0x13, 0xaa, 0x2c, 0x0c, 0xc7, 0x1c, 0x98, 0xb0, 0xdd, 0x2d,
-	0x3e, 0x4c, 0x92, 0x59, 0x28, 0x04, 0x2c, 0xe1, 0xb5, 0x1a, 0x17, 0x08, 0xd4, 0x5d, 0x80, 0x89,
-	0xc3, 0xe2, 0x0b, 0x12, 0xf9, 0xdf, 0x27, 0x85, 0xb1, 0x82, 0xeb, 0x42, 0x32, 0xf0, 0xbf, 0xa7,
-	0x6a, 0x07, 0xea, 0xd9, 0xa6, 0xf9, 0x44, 0x27, 0x74, 0xe8, 0x07, 0x39, 0x4f, 0xd6, 0x84, 0x80,
-	0xfb, 0x70, 0x13, 0xaa, 0x9c, 0xaf, 0x67, 0xae, 0x2b, 0xe3, 0x5b, 0x34, 0xf0, 0x06, 0xd4, 0x55,
-	0xff, 0x20, 0x41, 0x23, 0x2d, 0x0d, 0x3f, 0x43, 0x11, 0xfb, 0x04, 0xaa, 0x29, 0x4d, 0xa5, 0x75,
-	0xeb, 0xce, 0x1b, 0xea, 0x16, 0x9e, 0xd9, 0xaa, 0xaf, 0x01, 0xaa, 0xa9, 0xf0, 0x27, 0x93, 0x23,
-	0x82, 0x25, 0xe1, 0xca, 0xc4, 0xcb, 0xe2, 0x1b, 0x6d, 0x43, 0xc3, 0xa3, 0x91, 0xcb, 0xfc, 0x24,
-	0x91, 0x13, 0x2f, 0xe7, 0x45, 0xe8, 0x23, 0xa8, 0x4c, 0x98, 0x9f, 0x36, 0x1f, 0x8d, 0xbd, 0xdb,
-	0x45, 0xdb, 0xb6, 0xb8, 0x01, 0x4e, 0xec, 0xd0, 0xe7, 0x50, 0x61, 0xd3, 0x11, 0x8d, 0xd2, 0xda,
-	0x72, 0xbf, 0xf0, 0x9c, 0xc9, 0x5d, 0xf4, 0x83, 0x21, 0xe6, 0xa6, 0x38, 0x41, 0xa0, 0xcf, 0x61,
-	0xe9, 0x34, 0x64, 0x63, 0xa5, 0x2a, 0x3c, 0xf4, 0xc1, 0x1b, 0x3c, 0x64, 0x04, 0xb1, 0xf3, 0x92,
-	0x1e, 0x84, 0x6c, 0x8c, 0x05, 0x04, 0x0d, 0x60, 0x75, 0xc2, 0xe8, 0x8c, 0x14, 0x79, 0xb2, 0x09,
-	0x52, 0x5d, 0xd9, 0xdb, 0x7d, 0xc3, 0x2c, 0x6d, 0x2b, 0x83, 0xf0, 0x4c, 0xc4, 0x2b, 0x93, 0x85,
-	0x31, 0xfa, 0x14, 0x6a, 0xb1, 0xf3, 0x8a, 0x30, 0x27, 0xa6, 0x4a, 0xfd, 0x7a, 0x2e, 0xb2, 0x9d,
-	0x57, 0xd8, 0x89, 0x29, 0xae, 0xc6, 0xc9, 0x47, 0x31, 0x3d, 0x43, 0x31, 0x3d, 0xe7, 0xe8, 0xae,
-	0xf1, 0xbf, 0xd3, 0x5d, 0xf3, 0xe7, 0xa1, 0xbb, 0xe5, 0x9f, 0x48, 0x77, 0x5f, 0x41, 0xc3, 0x11,
-	0x1d, 0x25, 0x19, 0xf9, 0xc1, 0x4b, 0x65, 0x45, 0xc4, 0xf1, 0xfd, 0xc2, 0xba, 0x20, 0xcc, 0x7a,
-	0x7e, 0xf0, 0x12, 0x83, 0x93, 0x7d, 0xa3, 0x2f, 0x60, 0x49, 0xc4, 0x6e, 0x55, 0x6c, 0xe4, 0x4d,
-	0xbd, 0xdd, 0xec, 0xbf, 0x08, 0x9c, 0x00, 0xf1, 0xd5, 0x73, 0x64, 0xab, 0xc8, 0xd7, 0xaf, 0x6e,
-	0x67, 0xec, 0x8b, 0x61, 0xce, 0xc4, 0x48, 0x87, 0x65, 0x46, 0x47, 0x4e, 0x4c, 0x3d, 0x32, 0xa6,
-	0x9e, 0xef, 0x28, 0xad, 0xeb, 0xdb, 0x1a, 0x9c, 0x18, 0x1e, 0x71, 0x3b, 0xdc, 0x64, 0xb9, 0x11,
-	0x3a, 0x83, 0xad, 0xac, 0x61, 0x8d, 0x63, 0xe6, 0x9f, 0x4c, 0x63, 0x4a, 0xce, 0x9d, 0xd1, 0x54,
-	0xe4, 0x25, 0x12, 0x73, 0x3e, 0x78, 0x53, 0xdb, 0x3a, 0x03, 0x3d, 0xe3, 0x18, 0xc3, 0xc3, 0x9b,
-	0x51, 0xb1, 0x42, 0xfd, 0x16, 0x56, 0x16, 0xaf, 0x30, 0xba, 0x07, 0x77, 0x2c, 0xac, 0x5b, 0x9d,
-	0x17, 0xbc, 0x23, 0x27, 0xf6, 0x0b, 0x4b, 0x27, 0xc7, 0xfd, 0x81, 0xa5, 0x6b, 0xc6, 0x81, 0xa1,
-	0x77, 0xe5, 0x77, 0x50, 0x13, 0x6a, 0x58, 0x7f, 0x7a, 0x6c, 0x60, 0xbd, 0x2b, 0x4b, 0x7c, 0x64,
-	0x5a, 0xb6, 0x61, 0xf6, 0x79, 0xf3, 0x8e, 0x5a, 0xb0, 0xdc, 0x37, 0x6d, 0x32, 0x38, 0xb6, 0x2c,
-	0x13, 0xdb, 0x7a, 0x57, 0x2e, 0xab, 0x7f, 0x9f, 0xb3, 0xa0, 0x98, 0xff, 0x3d, 0x50, 0x06, 0x3a,
-	0x7e, 0x66, 0x68, 0x7a, 0xd1, 0xe4, 0xf7, 0xe1, 0xde, 0x82, 0xb6, 0x6b, 0xf4, 0x8d, 0xfe, 0x63,
-	0x82, 0x75, 0x2e, 0xed, 0xf0, 0x75, 0x64, 0x09, 0xbd, 0x0f, 0x5b, 0x0b, 0x46, 0x07, 0xa6, 0xd9,
-	0x25, 0x26, 0xee, 0xea, 0xd8, 0xe8, 0x3f, 0x96, 0x4b, 0xe8, 0x2e, 0xdc, 0x5e, 0xd0, 0xeb, 0xcf,
-	0xc4, 0x51, 0x0c, 0xed, 0x89, 0x6e, 0xcb, 0x65, 0xfe, 0xfa, 0x58, 0x50, 0xdb, 0xd8, 0xb0, 0x88,
-	0x6d, 0x1e, 0x63, 0x79, 0x49, 0xfd, 0x01, 0x2a, 0x82, 0x8b, 0x78, 0xaf, 0x27, 0xd8, 0x88, 0x8c,
-	0x7d, 0x97, 0x85, 0x51, 0xca, 0xfa, 0x0d, 0x21, 0x3b, 0x12, 0x22, 0x74, 0x1f, 0x96, 0xd3, 0x92,
-	0x7b, 0x41, 0xdc, 0xd0, 0x9b, 0x55, 0xa6, 0xe6, 0x4c, 0xa8, 0x85, 0x1e, 0x45, 0x1f, 0x02, 0xe2,
-	0x18, 0xfe, 0x58, 0x4c, 0x33, 0x99, 0xb7, 0x74, 0x09, 0x83, 0xca, 0xa9, 0x26, 0x49, 0x65, 0xdb,
-	0x19, 0xaa, 0x7f, 0x2e, 0xc1, 0xea, 0x25, 0x6a, 0xe3, 0x7d, 0xfa, 0xd8, 0x0f, 0x88, 0xe3, 0x9d,
-	0x3b, 0x81, 0x4b, 0x49, 0x1a, 0xf0, 0x74, 0x43, 0xad, 0xb1, 0x1f, 0x74, 0x12, 0xcd, 0x7e, 0xa2,
-	0x40, 0x5f, 0xc1, 0x7b, 0x79, 0xfb, 0x30, 0x18, 0xf9, 0x01, 0x25, 0x2e, 0x1f, 0xf0, 0x49, 0xd3,
-	0x22, 0x75, 0x7b, 0x0e, 0x34, 0x85, 0x85, 0x36, 0x33, 0x40, 0x4f, 0xe1, 0x5d, 0x7e, 0x17, 0x53,
-	0xc8, 0x28, 0xe9, 0x77, 0x39, 0x47, 0x94, 0x6f, 0x20, 0xf0, 0xfd, 0x92, 0x22, 0xe1, 0x35, 0x8e,
-	0xd5, 0x72, 0x50, 0xce, 0x16, 0x8f, 0x00, 0x82, 0x30, 0xe3, 0x9a, 0xa5, 0xb7, 0x99, 0xa7, 0x9e,
-	0x00, 0x0e, 0x28, 0x55, 0xdb, 0x50, 0x4d, 0x19, 0x92, 0xfb, 0x5c, 0x04, 0x84, 0x4c, 0x28, 0x73,
-	0x69, 0x90, 0xbc, 0xa5, 0x2a, 0xb8, 0x29, 0x84, 0x56, 0x22, 0x53, 0x7f, 0x2c, 0xc1, 0xc6, 0x15,
-	0x9a, 0x3f, 0xf0, 0xe9, 0xc8, 0x43, 0x87, 0x29, 0x3d, 0x24, 0x8f, 0xf5, 0x8f, 0xdf, 0xaa, 0x40,
-	0x08, 0x64, 0x5b, 0xfc, 0xcd, 0x71, 0xc5, 0x3a, 0x54, 0x46, 0xce, 0x09, 0x1d, 0xa5, 0x51, 0x4f,
-	0x06, 0x5c, 0x2a, 0xf2, 0x54, 0x29, 0x0b, 0xb2, 0x4e, 0x06, 0xbc, 0xf0, 0xfa, 0xfc, 0xcd, 0x24,
-	0xd8, 0xce, 0x13, 0xe7, 0xaf, 0x61, 0xf0, 0xa3, 0x94, 0x12, 0x3d, 0xf5, 0x8f, 0x12, 0xd4, 0xb3,
-	0x05, 0xf8, 0x05, 0x3d, 0x30, 0xf4, 0x5e, 0xb7, 0x28, 0x41, 0x64, 0x68, 0x0e, 0x0e, 0x4d, 0x6c,
-	0x93, 0x4e, 0x7f, 0xf0, 0x5c, 0xc7, 0xb2, 0x84, 0x96, 0xa1, 0x6e, 0x75, 0x70, 0xe7, 0x31, 0xee,
-	0x58, 0x87, 0x72, 0x89, 0xbf, 0xc4, 0x8f, 0x8e, 0x7b, 0xb6, 0x61, 0xf5, 0x74, 0xa2, 0x1d, 0x9a,
-	0x86, 0xa6, 0xcb, 0x65, 0xb4, 0x02, 0xa0, 0x1d, 0xea, 0xda, 0x93, 0x7d, 0xf3, 0x1b, 0x7d, 0x20,
-	0x2f, 0xf1, 0xac, 0xed, 0x62, 0xd3, 0xea, 0xf2, 0x77, 0x7a, 0x05, 0x35, 0xa0, 0xba, 0x6f, 0x9a,
-	0x3d, 0xbd, 0xd3, 0x97, 0x6f, 0xa9, 0xff, 0x90, 0xa0, 0x75, 0xc5, 0x05, 0xe8, 0x6b, 0xa8, 0x9c,
-	0xf2, 0xfd, 0x29, 0x92, 0x20, 0x9f, 0xdd, 0xb7, 0x77, 0x1c, 0x4e, 0x80, 0xfc, 0x81, 0x7a, 0xea,
-	0xb3, 0x28, 0x79, 0x10, 0x13, 0x77, 0x1a, 0xc5, 0xe1, 0x98, 0xb2, 0x48, 0xb8, 0xaf, 0x86, 0x91,
-	0xd0, 0xf1, 0x8e, 0x4b, 0x9b, 0x69, 0xd0, 0x47, 0xbc, 0xc4, 0xc4, 0x53, 0x16, 0xf0, 0xe4, 0x99,
-	0x03, 0xca, 0x09, 0x20, 0x53, 0x65, 0x00, 0xf5, 0x9f, 0x12, 0x54, 0xd3, 0x3a, 0x87, 0x1e, 0xce,
-	0xab, 0xa2, 0x74, 0x53, 0xdf, 0x91, 0xd5, 0xc4, 0x4b, 0xa9, 0xb3, 0x90, 0x00, 0xf3, 0xfe, 0x2e,
-	0x97, 0x3a, 0xf9, 0x7b, 0xce, 0x7b, 0xc1, 0xaf, 0xa1, 0x99, 0xce, 0x95, 0x54, 0x90, 0xb2, 0xb8,
-	0x66, 0x77, 0xaf, 0x5d, 0x5a, 0xdc, 0xa7, 0x46, 0x0a, 0xe1, 0x03, 0x95, 0x41, 0x3d, 0xab, 0xb7,
-	0xe8, 0x01, 0x94, 0x79, 0xbe, 0xdc, 0x78, 0x00, 0x6e, 0x85, 0x3e, 0x83, 0xda, 0x29, 0xa5, 0xff,
-	0xc5, 0xba, 0xd5, 0x53, 0x2a, 0x3e, 0xd4, 0xbf, 0x49, 0x00, 0xf3, 0x72, 0x8a, 0x64, 0x28, 0x4f,
-	0xd9, 0x28, 0x6d, 0x0f, 0xf9, 0x27, 0xda, 0x82, 0xda, 0xc8, 0x09, 0x86, 0x53, 0x67, 0x38, 0x23,
-	0xb9, 0x6c, 0x8c, 0x7e, 0x25, 0x7e, 0x16, 0x10, 0x8f, 0x7a, 0xea, 0x11, 0x37, 0x9c, 0x06, 0x31,
-	0xbb, 0x48, 0xaf, 0x7f, 0x6b, 0xae, 0xd1, 0x12, 0x05, 0xfa, 0x12, 0x6a, 0x93, 0x91, 0x13, 0x8b,
-	0x2e, 0x6d, 0x49, 0xec, 0x52, 0xbd, 0xbe, 0xba, 0x5b, 0xa9, 0x25, 0xce, 0x30, 0xea, 0x9f, 0x24,
-	0x80, 0x79, 0xf1, 0x2d, 0x78, 0x1e, 0x25, 0xdb, 0x5e, 0x78, 0x1e, 0xa1, 0x07, 0xd0, 0x8a, 0xce,
-	0x42, 0x16, 0x93, 0x7c, 0xab, 0x9a, 0x1c, 0x44, 0x16, 0x8a, 0x6e, 0x51, 0xbf, 0x5a, 0x7e, 0xbb,
-	0x7e, 0x55, 0xfd, 0xab, 0x04, 0xcd, 0x7c, 0x31, 0x2f, 0x70, 0xe0, 0x97, 0x29, 0xed, 0x94, 0xae,
-	0xef, 0x28, 0xf3, 0x33, 0xb4, 0xc5, 0xdf, 0x1c, 0xd9, 0x28, 0x50, 0x75, 0x9d, 0x64, 0xdb, 0x49,
-	0xe9, 0x98, 0x0d, 0xd5, 0x0f, 0xa1, 0x9e, 0x19, 0xa3, 0x75, 0x90, 0x0b, 0x28, 0xa3, 0x0e, 0x15,
-	0xeb, 0xd0, 0xb4, 0x4d, 0x59, 0x52, 0x9f, 0xc3, 0xe6, 0x35, 0x2d, 0x02, 0x2f, 0x78, 0xf3, 0x5e,
-	0x23, 0xf3, 0x63, 0x23, 0x93, 0x19, 0x1e, 0x7f, 0xa2, 0x65, 0x4d, 0x48, 0xe2, 0xbd, 0xea, 0x79,
-	0x82, 0xde, 0x7d, 0x08, 0xf5, 0xec, 0x62, 0xa1, 0x0d, 0x40, 0x07, 0xc6, 0x37, 0x7a, 0x97, 0xe0,
-	0x8e, 0xad, 0x93, 0xae, 0x7e, 0xd0, 0x39, 0xee, 0xd9, 0xf2, 0x3b, 0x9c, 0x85, 0x2c, 0x1d, 0x13,
-	0x4b, 0xc7, 0x03, 0x5e, 0xc7, 0x77, 0x7f, 0x80, 0xd6, 0x95, 0xa6, 0x90, 0x77, 0x00, 0x69, 0x7b,
-	0x41, 0x34, 0xac, 0x77, 0x0d, 0x9b, 0x68, 0x1d, 0xdc, 0xbd, 0xda, 0x26, 0x14, 0x19, 0x69, 0x66,
-	0xbf, 0x6b, 0xa4, 0xcd, 0x88, 0x68, 0x13, 0x8a, 0x8c, 0x3a, 0xbd, 0xe7, 0x9d, 0x17, 0x03, 0xb9,
-	0xb4, 0xfb, 0x5a, 0x82, 0x95, 0xc5, 0x7b, 0xc6, 0x9b, 0x9f, 0x8e, 0xc6, 0x27, 0x20, 0x56, 0xaf,
-	0x63, 0x1f, 0x98, 0xf8, 0xe8, 0xea, 0xc2, 0x97, 0x0d, 0x9e, 0xeb, 0xfb, 0xa4, 0x63, 0x59, 0x3d,
-	0x43, 0xcb, 0xf5, 0x27, 0x97, 0x8d, 0x8e, 0xcc, 0x7d, 0xa3, 0xa7, 0x73, 0x5b, 0xb9, 0x84, 0xee,
-	0xc0, 0xe6, 0x65, 0x7d, 0xa7, 0xdf, 0xc5, 0xa6, 0xd1, 0x95, 0xcb, 0x68, 0x13, 0xd6, 0x2e, 0x2b,
-	0x0d, 0x73, 0x20, 0x2f, 0x9d, 0xdc, 0x12, 0xbf, 0x52, 0x3f, 0xfc, 0x4f, 0x00, 0x00, 0x00, 0xff,
-	0xff, 0x1b, 0x9f, 0x88, 0x50, 0xb4, 0x16, 0x00, 0x00,
+var fileDescriptor_7aa923a38d4cd9d3 = []byte{
+	// 2434 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0xcf, 0x73, 0xdb, 0xc6,
+	0xf5, 0x0f, 0x49, 0xd1, 0x24, 0x1f, 0x29, 0x09, 0x5a, 0xc9, 0x12, 0x6d, 0xc7, 0xb1, 0x82, 0x7c,
+	0x33, 0x5f, 0xd7, 0x4e, 0xd5, 0xd6, 0x4e, 0x32, 0xe9, 0xe4, 0x27, 0x4d, 0x82, 0x31, 0xc6, 0x14,
+	0x81, 0x2c, 0xa9, 0x28, 0xce, 0x65, 0x03, 0x01, 0x2b, 0x09, 0x63, 0x12, 0x60, 0x17, 0xa0, 0x6d,
+	0x65, 0x26, 0x97, 0x9e, 0x7a, 0xec, 0x4c, 0x6f, 0xed, 0x4c, 0xcf, 0xed, 0x34, 0x7f, 0x41, 0x4f,
+	0xed, 0xb5, 0xff, 0x4c, 0xff, 0x80, 0x5e, 0x3a, 0xfb, 0x16, 0x04, 0x40, 0x09, 0xb2, 0x9d, 0x26,
+	0x17, 0x19, 0xfb, 0xde, 0xe7, 0xbd, 0xdd, 0x7d, 0xbb, 0xef, 0xf3, 0xde, 0xd2, 0xd0, 0x3c, 0xe6,
+	0xdc, 0x8b, 0xf6, 0x66, 0x22, 0x8c, 0x43, 0x42, 0xa6, 0xce, 0x2c, 0xda, 0x3b, 0x0a, 0xc3, 0x27,
+	0x7e, 0x70, 0xb2, 0x87, 0x1a, 0xfd, 0xdf, 0x65, 0x68, 0xf5, 0x39, 0xf7, 0xf6, 0x79, 0xec, 0x78,
+	0x4e, 0xec, 0x90, 0x29, 0x6c, 0xcf, 0x44, 0xe8, 0xf2, 0x28, 0xf2, 0x83, 0x13, 0xe6, 0x07, 0x51,
+	0x2c, 0xe6, 0x6e, 0xec, 0x87, 0x41, 0xbb, 0xb4, 0x5b, 0xba, 0xbd, 0x76, 0xef, 0xfd, 0xbd, 0x8b,
+	0x5e, 0xf6, 0xf2, 0x1e, 0xf6, 0xec, 0xd4, 0xdc, 0xcc, 0xac, 0xe9, 0xd5, 0x59, 0x91, 0x98, 0xbc,
+	0x09, 0xad, 0xe8, 0xd4, 0x11, 0x1e, 0x0b, 0xe6, 0xd3, 0x23, 0x2e, 0xda, 0xe5, 0xdd, 0xd2, 0xed,
+	0x2a, 0x6d, 0xa2, 0x6c, 0x88, 0x22, 0x09, 0x89, 0xc3, 0xd8, 0x99, 0x30, 0x14, 0x46, 0xed, 0x8a,
+	0x82, 0xa0, 0x6c, 0x84, 0x22, 0xb2, 0x05, 0xd5, 0x20, 0x0c, 0x5c, 0xde, 0xae, 0xee, 0x96, 0x6e,
+	0xaf, 0x50, 0x35, 0x20, 0xbf, 0x82, 0xad, 0x13, 0x1e, 0x70, 0xe1, 0xc8, 0x99, 0x58, 0xec, 0x4f,
+	0x79, 0x14, 0x3b, 0xd3, 0x59, 0x7b, 0x65, 0xb7, 0x74, 0xbb, 0x42, 0x37, 0x33, 0xdd, 0x78, 0xa1,
+	0xd2, 0x1d, 0xb8, 0x5a, 0xb8, 0x7c, 0xb2, 0x09, 0xeb, 0x36, 0xb5, 0xba, 0xc6, 0x68, 0xc4, 0x0e,
+	0x86, 0x8f, 0x86, 0xd6, 0xe1, 0x50, 0x7b, 0x8d, 0xec, 0xc0, 0xe6, 0x42, 0xd8, 0x19, 0xb1, 0xae,
+	0xb5, 0x6f, 0x0f, 0x8c, 0xb1, 0xa1, 0x95, 0xc8, 0x75, 0xd8, 0xce, 0x29, 0xcc, 0x61, 0x97, 0x1a,
+	0xfb, 0xc6, 0x70, 0xdc, 0x19, 0x68, 0x65, 0xfd, 0xfb, 0x12, 0x68, 0x9d, 0xa7, 0x8e, 0x3f, 0x71,
+	0x8e, 0xfc, 0x89, 0x1f, 0x9f, 0xc9, 0xd8, 0x91, 0x8f, 0xa0, 0x3e, 0x4d, 0xe2, 0x87, 0x71, 0x6e,
+	0xde, 0xdb, 0x7d, 0x59, 0x9c, 0x69, 0x6a, 0x41, 0xbe, 0x86, 0xad, 0x88, 0x8b, 0xa7, 0xbe, 0xcb,
+	0x99, 0x93, 0xf3, 0xdc, 0x2e, 0xef, 0x56, 0x6e, 0x37, 0xef, 0xfd, 0x7f, 0x91, 0xa7, 0x91, 0xc2,
+	0xe7, 0x17, 0x42, 0x37, 0xa3, 0x8b, 0x42, 0xfd, 0x3f, 0x65, 0xd8, 0x2c, 0x00, 0x93, 0x0f, 0xa0,
+	0x1d, 0xc5, 0x8e, 0x88, 0xb3, 0xb8, 0x32, 0xc1, 0xa3, 0x58, 0xf8, 0x6e, 0x8c, 0x3b, 0xa8, 0xd0,
+	0x6d, 0xd4, 0xa7, 0xb1, 0xa5, 0x89, 0x96, 0xbc, 0x0b, 0xdb, 0x3c, 0xf0, 0x8a, 0xec, 0xca, 0x68,
+	0xb7, 0xc5, 0x03, 0xef, 0xa2, 0xd5, 0x2f, 0x61, 0x6b, 0xca, 0x85, 0x7b, 0xea, 0x04, 0x31, 0xf3,
+	0xbd, 0xcc, 0x46, 0xde, 0x86, 0x06, 0x25, 0x0b, 0x9d, 0xe9, 0xa5, 0x16, 0x7b, 0xb0, 0xd8, 0xd0,
+	0x92, 0xc1, 0x0a, 0x1a, 0x6c, 0x24, 0xaa, 0x1c, 0x7e, 0x00, 0x44, 0xf0, 0x28, 0x9c, 0x0b, 0x97,
+	0x47, 0x19, 0xfc, 0x0a, 0x9e, 0xc6, 0xcd, 0xa2, 0x18, 0xd2, 0x05, 0x9a, 0x6e, 0xa4, 0x86, 0xa9,
+	0xb7, 0x1e, 0xb4, 0x96, 0xce, 0xa2, 0x8a, 0x67, 0x51, 0x78, 0xaa, 0x4b, 0x87, 0xb0, 0x64, 0xa5,
+	0xff, 0xbd, 0x06, 0xad, 0xa5, 0xb0, 0xdf, 0x82, 0x66, 0x2e, 0x0c, 0x18, 0xe9, 0x06, 0x85, 0x6c,
+	0xf7, 0xe4, 0x26, 0x40, 0xb6, 0x6b, 0x8c, 0x68, 0x83, 0x36, 0xd2, 0xcd, 0x92, 0x1b, 0xd0, 0x50,
+	0xc7, 0x16, 0x71, 0x17, 0x63, 0x57, 0xa1, 0x75, 0x14, 0x8c, 0xb8, 0x2b, 0x33, 0xcd, 0x9b, 0x27,
+	0xe9, 0x22, 0xf5, 0x2a, 0x51, 0x9a, 0x0b, 0x99, 0x84, 0xdc, 0x82, 0x66, 0x34, 0x0b, 0xe3, 0x88,
+	0x61, 0xfa, 0x61, 0xbe, 0x55, 0x28, 0xa0, 0x68, 0x2c, 0x25, 0x38, 0x3f, 0x02, 0xc2, 0x19, 0x0f,
+	0x30, 0x7a, 0x15, 0xda, 0x40, 0x89, 0x35, 0xe3, 0x01, 0xf9, 0x19, 0x68, 0xf9, 0x0d, 0xb2, 0xd8,
+	0x39, 0x69, 0xd7, 0x70, 0x91, 0xeb, 0x79, 0xf9, 0xd8, 0x39, 0x21, 0x1f, 0x42, 0x23, 0x0d, 0x6b,
+	0xbb, 0xfe, 0x2a, 0xc7, 0x90, 0xe1, 0xc9, 0x1d, 0xd8, 0x98, 0x39, 0x67, 0x53, 0x1e, 0xc4, 0x2c,
+	0x9c, 0xe1, 0x86, 0x7c, 0xaf, 0xdd, 0xd8, 0xad, 0xc8, 0x89, 0x12, 0x85, 0x85, 0x72, 0xd3, 0x23,
+	0x8f, 0x00, 0x04, 0x77, 0xe7, 0x42, 0x70, 0x49, 0x21, 0x80, 0x33, 0xdd, 0x7d, 0xd9, 0x41, 0xed,
+	0xd1, 0xd4, 0x84, 0xe6, 0xcc, 0x89, 0x03, 0x24, 0x72, 0x4f, 0xb9, 0x37, 0x9f, 0x70, 0xc6, 0x9f,
+	0xbb, 0x1c, 0x27, 0x69, 0x37, 0xf1, 0xf4, 0xef, 0xbd, 0xd4, 0xe9, 0x28, 0x31, 0x35, 0x16, 0x96,
+	0x74, 0x23, 0x3a, 0x2f, 0x22, 0xef, 0x41, 0xcd, 0xe3, 0xb3, 0x30, 0xf2, 0xe3, 0x76, 0x0b, 0x17,
+	0x7b, 0xa3, 0xc8, 0x6f, 0x4f, 0x41, 0xe8, 0x02, 0x4b, 0x3e, 0x86, 0x66, 0x10, 0xb2, 0xe8, 0x34,
+	0x7c, 0xc6, 0x8e, 0x39, 0x6f, 0xaf, 0x5e, 0x1e, 0xd1, 0x61, 0x38, 0x3a, 0x0d, 0x9f, 0xf5, 0x39,
+	0xa7, 0x8d, 0x60, 0xf1, 0x49, 0x0e, 0x60, 0x53, 0xf0, 0xdf, 0xcc, 0x7d, 0xc1, 0x99, 0x2b, 0xb8,
+	0xe7, 0xc7, 0xcc, 0x75, 0x84, 0xd7, 0x5e, 0xc3, 0xaa, 0xf0, 0x76, 0xf1, 0xc1, 0x20, 0xbc, 0x8b,
+	0xe8, 0xae, 0x23, 0x3c, 0x99, 0x27, 0xe7, 0x44, 0xe4, 0xff, 0x60, 0x2d, 0xf6, 0xdd, 0x27, 0x3c,
+	0x66, 0xf1, 0xd9, 0x0c, 0xef, 0xec, 0x3a, 0x9e, 0x52, 0x4b, 0x49, 0xc7, 0x67, 0x33, 0x6e, 0x7a,
+	0xd7, 0xbf, 0x01, 0xc8, 0xe2, 0x4d, 0x6e, 0x83, 0x26, 0xf8, 0x8c, 0x3b, 0x31, 0x9b, 0x07, 0xb1,
+	0x3f, 0xc1, 0xbb, 0xaa, 0x38, 0x67, 0x4d, 0xc9, 0x0f, 0xa4, 0x58, 0x5e, 0xd7, 0x0c, 0xc9, 0x9f,
+	0x72, 0x71, 0x86, 0x48, 0x55, 0x62, 0x12, 0xa4, 0x21, 0xc5, 0x23, 0xee, 0x5e, 0xff, 0x02, 0x36,
+	0x2e, 0x04, 0x9f, 0x7c, 0x04, 0x20, 0x69, 0x8a, 0x09, 0x27, 0x38, 0xe1, 0x09, 0x31, 0x17, 0x46,
+	0x4c, 0xf2, 0x15, 0x95, 0x20, 0xda, 0x88, 0x17, 0x9f, 0xfa, 0x1f, 0x4b, 0xd0, 0x48, 0x2f, 0x27,
+	0xb9, 0x06, 0x32, 0xd1, 0x8e, 0x8f, 0xb3, 0xb4, 0xad, 0xe1, 0x38, 0xc9, 0x59, 0x54, 0x05, 0xce,
+	0x94, 0xa7, 0x39, 0x2b, 0x25, 0x43, 0x67, 0xca, 0xc9, 0x0e, 0xd4, 0x44, 0x18, 0x4e, 0xa5, 0xa1,
+	0x62, 0xbb, 0x2b, 0x72, 0xa8, 0x92, 0x19, 0x15, 0x68, 0xa6, 0x78, 0xad, 0x2e, 0x05, 0x68, 0x75,
+	0x13, 0x60, 0xe6, 0x88, 0xf8, 0x8c, 0x45, 0xfe, 0xb7, 0xaa, 0x30, 0x56, 0x69, 0x03, 0x25, 0x23,
+	0xff, 0x5b, 0xae, 0x77, 0xa0, 0x91, 0x2e, 0x5a, 0x3a, 0x3a, 0xe2, 0x27, 0x7e, 0x90, 0x8b, 0x64,
+	0x1d, 0x05, 0x32, 0x86, 0x3b, 0x50, 0x93, 0x7c, 0xbd, 0x08, 0x5d, 0x85, 0x5e, 0xe1, 0x81, 0x37,
+	0xe2, 0xae, 0xfe, 0xdb, 0x12, 0x34, 0x93, 0xd2, 0xf0, 0x13, 0x14, 0xb1, 0xf7, 0xa0, 0x96, 0xd0,
+	0x54, 0x52, 0xb7, 0x6e, 0xbc, 0xa0, 0x6e, 0xd1, 0x05, 0x56, 0xff, 0x73, 0x0b, 0x6a, 0x89, 0xf0,
+	0x47, 0x93, 0x23, 0x81, 0x15, 0x0c, 0xa5, 0x8a, 0x32, 0x7e, 0x93, 0x5d, 0x68, 0x7a, 0x3c, 0x72,
+	0x85, 0xaf, 0x12, 0x59, 0x45, 0x39, 0x2f, 0x22, 0xbf, 0x80, 0xea, 0x4c, 0xf8, 0x49, 0xf3, 0xd1,
+	0xbc, 0x77, 0xad, 0x68, 0xd9, 0xb6, 0x04, 0x50, 0x85, 0x23, 0xbf, 0x86, 0xaa, 0x98, 0x4f, 0x78,
+	0x94, 0xd4, 0x96, 0xb7, 0x0a, 0xf7, 0xa9, 0xee, 0xa2, 0x1f, 0x9c, 0x50, 0x09, 0xa5, 0xca, 0x82,
+	0x7c, 0x0c, 0x2b, 0xc7, 0xa1, 0x98, 0xb6, 0x6b, 0x18, 0xa1, 0xb7, 0x5f, 0x10, 0x21, 0x33, 0x88,
+	0x9d, 0x27, 0xbc, 0x1f, 0x8a, 0xe9, 0x83, 0x72, 0xbb, 0x44, 0xd1, 0x8c, 0xf4, 0xa1, 0xe9, 0xa3,
+	0x9c, 0xa1, 0x97, 0x2d, 0x9c, 0xff, 0xd5, 0xbc, 0x50, 0xf0, 0xd3, 0x6f, 0xf2, 0x35, 0x6c, 0xcf,
+	0xb8, 0x60, 0x49, 0xe2, 0xe6, 0x5d, 0x5e, 0xfd, 0x21, 0x2e, 0x37, 0x67, 0x5c, 0x8c, 0xd1, 0x47,
+	0x26, 0x24, 0x23, 0x58, 0x9f, 0x09, 0xbe, 0x20, 0x6f, 0x49, 0x0a, 0x48, 0xfe, 0x6b, 0xf7, 0xee,
+	0xbc, 0xc0, 0xe9, 0x9e, 0x9d, 0x9a, 0x48, 0xc6, 0xa0, 0x6b, 0xb3, 0xa5, 0x31, 0x79, 0x1f, 0xea,
+	0xb1, 0xf3, 0x9c, 0x09, 0x27, 0xe6, 0xed, 0xc6, 0xe5, 0x9c, 0x39, 0x76, 0x9e, 0x53, 0x27, 0xe6,
+	0xb4, 0x16, 0xab, 0x8f, 0xe2, 0x32, 0x02, 0xc5, 0x65, 0x24, 0x47, 0xcb, 0xcd, 0xff, 0x9d, 0x96,
+	0x5b, 0x3f, 0x0d, 0x2d, 0xaf, 0xfe, 0x48, 0x5a, 0xfe, 0x14, 0x9a, 0x0e, 0x76, 0xbe, 0x6c, 0xe2,
+	0x07, 0x4f, 0xda, 0x6b, 0x78, 0xdf, 0xde, 0x28, 0xac, 0x5f, 0x08, 0x1b, 0xf8, 0xc1, 0x13, 0x0a,
+	0x4e, 0xfa, 0x4d, 0x3e, 0x84, 0x15, 0x3c, 0xbb, 0x75, 0x5c, 0xc8, 0x8b, 0x7a, 0xd0, 0xc5, 0xbf,
+	0x78, 0x70, 0x68, 0x24, 0x67, 0xcf, 0x15, 0x85, 0xb6, 0x76, 0xf9, 0xec, 0xe3, 0xb4, 0x4a, 0x50,
+	0xc8, 0x2a, 0x06, 0x31, 0x60, 0x55, 0xf0, 0x89, 0x13, 0x73, 0x8f, 0x4d, 0xb9, 0xe7, 0x3b, 0xed,
+	0x8d, 0xcb, 0xdb, 0x2f, 0xaa, 0x80, 0xfb, 0x12, 0x47, 0x5b, 0x22, 0x37, 0x22, 0xa7, 0x70, 0x3d,
+	0x6d, 0xac, 0xe3, 0x58, 0xf8, 0x47, 0xf3, 0x98, 0xb3, 0xa7, 0xce, 0x64, 0x8e, 0xfc, 0x41, 0xd0,
+	0xe7, 0xdd, 0x17, 0xb5, 0xd7, 0x0b, 0xa3, 0x2f, 0xa5, 0x8d, 0xe9, 0xd1, 0x9d, 0xa8, 0x58, 0x41,
+	0x1e, 0xc2, 0xda, 0x33, 0xc7, 0x8f, 0x27, 0x7e, 0x14, 0x33, 0x45, 0x0e, 0x9b, 0x78, 0x11, 0xde,
+	0x2c, 0xf2, 0x7e, 0x98, 0x20, 0x15, 0x35, 0xac, 0x3e, 0xcb, 0x0f, 0xf5, 0x6f, 0x60, 0x6d, 0x39,
+	0x19, 0xc8, 0x2d, 0xb8, 0x61, 0x53, 0xc3, 0xee, 0x3c, 0x96, 0x6f, 0x10, 0x36, 0x7e, 0x6c, 0x1b,
+	0xec, 0x60, 0x38, 0xb2, 0x8d, 0xae, 0xd9, 0x37, 0x8d, 0x9e, 0xf6, 0x1a, 0x69, 0x41, 0x9d, 0x1a,
+	0x5f, 0x1c, 0x98, 0xd4, 0xe8, 0x69, 0x25, 0x39, 0xb2, 0xec, 0xb1, 0x69, 0x0d, 0xe5, 0x73, 0x85,
+	0x6c, 0xc0, 0xea, 0xd0, 0x1a, 0xb3, 0xd1, 0x81, 0x6d, 0x5b, 0x74, 0x6c, 0xf4, 0xb4, 0x8a, 0xfe,
+	0xb7, 0x8c, 0xf7, 0xd1, 0xff, 0xeb, 0xd0, 0x1e, 0x19, 0xf4, 0x4b, 0xb3, 0x6b, 0x14, 0x39, 0x7f,
+	0x0b, 0x6e, 0x2d, 0x69, 0x7b, 0xe6, 0xd0, 0x1c, 0x7e, 0xce, 0xa8, 0x21, 0xa5, 0x1d, 0x39, 0x8f,
+	0x56, 0x22, 0x6f, 0xc0, 0xf5, 0x25, 0x50, 0xdf, 0xb2, 0x7a, 0xcc, 0xa2, 0x3d, 0x83, 0x9a, 0xc3,
+	0xcf, 0xb5, 0x32, 0xb9, 0x09, 0xd7, 0x96, 0xf4, 0xc6, 0x97, 0xb8, 0x15, 0xb3, 0xfb, 0xc8, 0x18,
+	0x6b, 0x15, 0xf9, 0xde, 0x5a, 0x52, 0x8f, 0xa9, 0x69, 0xb3, 0xb1, 0x75, 0x40, 0xb5, 0x15, 0xfd,
+	0x3b, 0xa8, 0x22, 0xfb, 0xca, 0xee, 0x16, 0xf9, 0x97, 0x4d, 0x7d, 0x57, 0x84, 0x51, 0x52, 0xe7,
+	0x9a, 0x28, 0xdb, 0x47, 0x11, 0x79, 0x0b, 0x56, 0x93, 0x26, 0xe3, 0x8c, 0xb9, 0xa1, 0xb7, 0xa8,
+	0xc5, 0xad, 0x85, 0xb0, 0x1b, 0x7a, 0x9c, 0xbc, 0x03, 0x44, 0xda, 0xc8, 0xe7, 0x71, 0xc2, 0x09,
+	0xb2, 0x89, 0x55, 0x35, 0x43, 0x4b, 0x34, 0x8a, 0x14, 0xc6, 0xce, 0x89, 0xfe, 0x87, 0x32, 0xac,
+	0x9f, 0x23, 0x73, 0xf9, 0x32, 0x99, 0xfa, 0x01, 0x73, 0xbc, 0xa7, 0x4e, 0xe0, 0x72, 0x96, 0x1c,
+	0x6e, 0xb2, 0xa0, 0x8d, 0xa9, 0x1f, 0x74, 0x94, 0xe6, 0x81, 0x52, 0x90, 0x4f, 0xe1, 0xf5, 0x3c,
+	0x3e, 0x0c, 0x26, 0x7e, 0xc0, 0x99, 0x2b, 0x07, 0xd2, 0x69, 0x52, 0x96, 0xaf, 0x65, 0x86, 0x16,
+	0x22, 0xba, 0x0b, 0x00, 0xf9, 0x02, 0xae, 0xca, 0x5b, 0x9d, 0x98, 0x4c, 0x54, 0x87, 0x2f, 0xd9,
+	0xa6, 0xf2, 0x92, 0x92, 0x85, 0xb5, 0x63, 0x53, 0xda, 0x76, 0x73, 0xa6, 0x92, 0x77, 0x3e, 0x02,
+	0x08, 0xc2, 0x94, 0xb5, 0x56, 0x5e, 0xc5, 0x4f, 0x43, 0x19, 0xf4, 0x39, 0xd7, 0xf7, 0xa0, 0x96,
+	0x70, 0xad, 0x8c, 0x39, 0x1e, 0x08, 0x9b, 0x71, 0xe1, 0xf2, 0x40, 0xbd, 0x1e, 0xab, 0xb4, 0x85,
+	0x42, 0x5b, 0xc9, 0xf4, 0x7f, 0x95, 0x61, 0xfb, 0x42, 0xfd, 0xe8, 0xfb, 0x7c, 0xe2, 0x91, 0x35,
+	0x28, 0xfb, 0x1e, 0xd6, 0xde, 0x06, 0x2d, 0xfb, 0x32, 0x93, 0x14, 0xf1, 0xa8, 0x9f, 0x2b, 0xde,
+	0x7d, 0xa5, 0x4a, 0x84, 0x9e, 0xf6, 0xf0, 0x6f, 0x8e, 0x85, 0xb6, 0xa0, 0x3a, 0x71, 0x8e, 0xf8,
+	0x24, 0xb9, 0x05, 0x6a, 0x20, 0xa5, 0xc8, 0x00, 0xed, 0x0a, 0x96, 0x01, 0x35, 0x90, 0xad, 0x87,
+	0x2f, 0x5f, 0x8d, 0xc8, 0xa3, 0x1e, 0xc6, 0xa3, 0x4e, 0xc1, 0x8f, 0x12, 0xb2, 0xf5, 0xf4, 0xdf,
+	0x95, 0xa0, 0x91, 0x4e, 0x20, 0x2f, 0x6c, 0xdf, 0x34, 0x06, 0xbd, 0xa2, 0x84, 0xd1, 0xa0, 0x35,
+	0x7a, 0x68, 0xd1, 0x31, 0xeb, 0x0c, 0x47, 0x87, 0x06, 0xd5, 0x4a, 0x64, 0x15, 0x1a, 0x76, 0x87,
+	0x76, 0x3e, 0xa7, 0x1d, 0xfb, 0xa1, 0x56, 0x26, 0x9b, 0xb0, 0xbe, 0x7f, 0x30, 0x18, 0x9b, 0xf6,
+	0xc0, 0x60, 0xdd, 0x87, 0x96, 0xd9, 0x35, 0xb4, 0x0a, 0x59, 0x03, 0xe8, 0x3e, 0x34, 0xba, 0x8f,
+	0x1e, 0x58, 0x5f, 0x19, 0x23, 0x6d, 0x45, 0x66, 0x71, 0x8f, 0x5a, 0x76, 0xcf, 0x3a, 0x1c, 0x6a,
+	0x55, 0xd2, 0x84, 0xda, 0x03, 0xcb, 0x1a, 0x18, 0x9d, 0xa1, 0x76, 0x45, 0xff, 0x47, 0x09, 0x36,
+	0x2e, 0x84, 0x80, 0x7c, 0x06, 0xd5, 0x63, 0xb9, 0xbe, 0x76, 0x09, 0x69, 0xed, 0xce, 0xab, 0x07,
+	0x8e, 0x2a, 0x43, 0xf2, 0x2e, 0x6c, 0x1d, 0xfb, 0x22, 0x52, 0x3f, 0x09, 0x30, 0x77, 0x1e, 0xc5,
+	0xe1, 0x94, 0x8b, 0x08, 0xc3, 0x57, 0xc7, 0x1b, 0x40, 0x50, 0x2f, 0xfb, 0xce, 0xee, 0x42, 0x4b,
+	0xee, 0xcb, 0x02, 0x16, 0xcf, 0x45, 0x20, 0x13, 0x2a, 0x33, 0xaa, 0x64, 0x46, 0xa9, 0x3a, 0x35,
+	0xd2, 0xff, 0x59, 0x82, 0x5a, 0x52, 0x49, 0xc9, 0xfd, 0xac, 0xee, 0x96, 0x5e, 0xd6, 0x81, 0xa5,
+	0x55, 0xf7, 0x5c, 0x4a, 0x2d, 0x25, 0x46, 0xd6, 0xe9, 0xe6, 0x52, 0x2a, 0x7f, 0xff, 0x65, 0x57,
+	0xfc, 0x19, 0xb4, 0x12, 0x5f, 0xaa, 0x46, 0x55, 0xf0, 0xba, 0xdd, 0xbc, 0x74, 0x6a, 0xbc, 0x57,
+	0xcd, 0xc4, 0x44, 0x0e, 0x74, 0x01, 0x8d, 0xb4, 0xa2, 0x93, 0xbb, 0x50, 0x91, 0x79, 0xf4, 0xd2,
+	0x0d, 0x48, 0x14, 0xf9, 0x00, 0xea, 0xc7, 0x9c, 0xff, 0x80, 0x79, 0x6b, 0xc7, 0x1c, 0x3f, 0xf4,
+	0xbf, 0x96, 0x00, 0xb2, 0x82, 0x4d, 0x34, 0xa8, 0xcc, 0xc5, 0x24, 0x69, 0x94, 0xe5, 0x27, 0xb9,
+	0x0e, 0xf5, 0x89, 0x13, 0x9c, 0xcc, 0x9d, 0x93, 0x05, 0xf9, 0xa5, 0x63, 0xf2, 0x73, 0xfc, 0x81,
+	0x04, 0x7f, 0xde, 0xe0, 0x1e, 0x73, 0xc3, 0x79, 0x10, 0x8b, 0xb3, 0x24, 0x0d, 0x36, 0x32, 0x4d,
+	0x57, 0x29, 0xc8, 0x27, 0x50, 0x9f, 0x4d, 0x9c, 0x18, 0xdb, 0xc2, 0x15, 0x5c, 0xa5, 0x7e, 0x79,
+	0xff, 0x60, 0x27, 0x48, 0x9a, 0xda, 0xe8, 0xbf, 0x2f, 0x01, 0x64, 0xe5, 0xbd, 0xe0, 0xa1, 0xa8,
+	0x96, 0xbd, 0xf4, 0x50, 0x24, 0x77, 0x61, 0x23, 0x3a, 0x0d, 0x45, 0xcc, 0xf2, 0x4d, 0xbb, 0xda,
+	0x88, 0x86, 0x8a, 0x5e, 0x51, 0xe7, 0x5e, 0x79, 0xb5, 0xce, 0x5d, 0xff, 0x4b, 0x09, 0x5a, 0xf9,
+	0x76, 0xa1, 0x20, 0x80, 0x9f, 0x24, 0xf4, 0x53, 0xbe, 0xbc, 0x67, 0xcd, 0x7b, 0xd8, 0xc3, 0xbf,
+	0x39, 0xd2, 0x69, 0x43, 0xcd, 0x75, 0xd4, 0xb2, 0x55, 0x49, 0x59, 0x0c, 0xf5, 0x77, 0xa0, 0x91,
+	0x82, 0xc9, 0x16, 0x68, 0x05, 0xd4, 0xd1, 0x80, 0xaa, 0xfd, 0xd0, 0x1a, 0x5b, 0x5a, 0x49, 0x3f,
+	0x84, 0x9d, 0x4b, 0x9a, 0x10, 0x59, 0x08, 0xb3, 0x6e, 0x26, 0x8d, 0x63, 0x33, 0x95, 0x99, 0x9e,
+	0x7c, 0xac, 0xa6, 0x6d, 0x8e, 0x8a, 0x5e, 0xed, 0xa9, 0xb2, 0xd6, 0xff, 0x54, 0x82, 0xd5, 0xa5,
+	0x06, 0x44, 0x9e, 0x8c, 0xcc, 0xa5, 0xdc, 0x6b, 0x33, 0xa5, 0xf0, 0xc0, 0x5e, 0x3c, 0x38, 0x11,
+	0xe5, 0x3c, 0xcf, 0xa3, 0xca, 0x09, 0xca, 0x79, 0x9e, 0xa1, 0x3e, 0x81, 0x1b, 0xd1, 0x7c, 0x36,
+	0x0b, 0x45, 0x1c, 0x31, 0xc7, 0xf3, 0x7c, 0xb9, 0x73, 0x67, 0x82, 0xc4, 0xca, 0x23, 0xf5, 0x6b,
+	0x5f, 0x9d, 0x5e, 0x5b, 0x40, 0x3a, 0x29, 0x82, 0x2a, 0xc0, 0x9d, 0xfb, 0xd0, 0x48, 0xaf, 0x3d,
+	0xd9, 0x06, 0xd2, 0x37, 0xbf, 0x32, 0x7a, 0x8c, 0x76, 0xc6, 0x06, 0xeb, 0x19, 0xfd, 0xce, 0xc1,
+	0x60, 0xac, 0xbd, 0x26, 0xb9, 0xd2, 0x36, 0x28, 0xb3, 0x0d, 0x3a, 0x92, 0xdd, 0xc7, 0x9d, 0xef,
+	0x60, 0xe3, 0x42, 0x53, 0x2c, 0xfb, 0x96, 0xa4, 0x29, 0x62, 0x5d, 0x6a, 0xf4, 0xcc, 0x31, 0xeb,
+	0x76, 0x68, 0xef, 0x62, 0x73, 0x53, 0x04, 0xea, 0x5a, 0xc3, 0x9e, 0x99, 0xb4, 0x50, 0xd8, 0xdc,
+	0x14, 0x81, 0x3a, 0x83, 0xc3, 0xce, 0xe3, 0x91, 0x56, 0xbe, 0xf3, 0x7d, 0x09, 0xd6, 0x96, 0xb3,
+	0x40, 0xb6, 0x6c, 0x9d, 0xae, 0x74, 0xc0, 0xec, 0x41, 0x67, 0xdc, 0xb7, 0xe8, 0xfe, 0xc5, 0x89,
+	0xcf, 0x03, 0x0e, 0x8d, 0x07, 0xac, 0x63, 0xdb, 0x03, 0xb3, 0x9b, 0xeb, 0xaa, 0xce, 0x83, 0xf6,
+	0xad, 0x07, 0xe6, 0xc0, 0x90, 0x58, 0xad, 0x4c, 0x6e, 0xc0, 0xce, 0x79, 0x7d, 0x67, 0xd8, 0xa3,
+	0x96, 0xd9, 0xd3, 0x2a, 0x64, 0x07, 0x36, 0xcf, 0x2b, 0x4d, 0x6b, 0xa4, 0xad, 0x1c, 0x5d, 0xc1,
+	0xff, 0x4d, 0xb8, 0xff, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x3f, 0x56, 0x84, 0x5c, 0x18,
+	0x00, 0x00,
 }
diff --git a/feeds/feeds.proto b/feeds/feeds.proto
index d714f46..f3c863d 100644
--- a/feeds/feeds.proto
+++ b/feeds/feeds.proto
@@ -409,7 +409,18 @@
   // Rules to book/cancel an appointment. (optional)
   SchedulingRules rules = 6;
   // Intake forms to customize the service. (optional)
-  repeated ServiceIntakeForm form = 7;
+  //
+  // Deprecated. Please see intake_form and per_ticket_intake_form.
+  repeated ServiceIntakeForm form = 7 [deprecated = true];
+
+  // A form requesting additional information from the user when they book this
+  // service. (optional)
+  ServiceIntakeForm intake_form = 20;
+
+  // A form requesting additional information from the user when they book this
+  // service. This form must be filled out once for each ticket the user is
+  // booking. (optional)
+  ServiceIntakeForm per_ticket_intake_form = 21;
 
   // Enum to indicate the prepayment type.
   enum PrepaymentType {
@@ -476,6 +487,11 @@
   // Each Service may have zero or more values for each service attribute
   // defined in the corresponding Merchant.
   repeated ServiceAttributeValueId service_attribute_value_id = 18;
+
+  // Rules related to joining the waitlist. Should be populated if the service
+  // and merchant support waitlist functionality. Should not be populated
+  // otherwise.
+  WaitlistRules waitlist_rules = 19;
 }
 
 // The price of a service or a fee.
@@ -533,6 +549,11 @@
 
 // Defines a field that is included in a ServiceIntakeForm.
 message ServiceIntakeFormField {
+  // A string from an aggregator partner which uniquely identifies a form field.
+  // This id should be the same as the id in the corresponding form field
+  // answer. (required)
+  string id = 5;
+
   // Enum to indicate the type of field.
   enum FieldType {
     // Fields of unspecified or unknown type will be ignored.
@@ -571,12 +592,12 @@
   repeated ServiceIntakeFormField field = 1;
 
   // If true, this form will be shown to first time customers.
-  // (one of first_time_customers or returning_customers required)
-  bool first_time_customers = 2;
+  // Deprecated. This functionality is not supported for intake forms.
+  bool first_time_customers = 2 [deprecated = true];
 
   // If true, this form will be shown to repeat customers.
-  // (one of first_time_customers or returning_customers required)
-  bool returning_customers = 3;
+  // Deprecated. This functionality is not supported for intake forms.
+  bool returning_customers = 3 [deprecated = true];
 }
 
 // A deposit that the user may be charged or have a hold on their credit card
@@ -726,3 +747,18 @@
   // in the service attribute definition.
   string value_id = 2;
 }
+
+// Rules related to joining the waitlist.
+message WaitlistRules {
+  // Required. Must be a positive integer for services providing waitlist
+  // functionality. If the service or merchant does not provide waitlist
+  // functionality, this must not be populated.
+  int32 min_party_size = 1;
+  // Required. Must be a positive integer for services providing waitlist
+  // functionality. If the service or merchant does not provide waitlist
+  // functionality, this must not be populated.
+  int32 max_party_size = 2;
+  // If true, the user will be able to send a free-form additional text request
+  // when joining the waitlist for this service.
+  bool supports_additional_request = 3;
+}
diff --git a/proto/v3.proto b/proto/v3.proto
index c443878..7775478 100644
--- a/proto/v3.proto
+++ b/proto/v3.proto
@@ -161,8 +161,7 @@
   // The parameters to be used if the payment is processed by the partner
   // (i.e. payment_information.payment_processed_by is equal to
   // PROCESSED_BY_PARTNER). (optional)
-  PaymentProcessingParameters payment_processing_parameters =
-      5;
+  PaymentProcessingParameters payment_processing_parameters = 5;
 
   // Idempotency token for CreateBooking requests. (required)
   string idempotency_token = 6;
@@ -577,6 +576,8 @@
     CAN_FULFILL = 1;
     // No adequate availability for the slot requested.
     SLOT_UNAVAILABLE = 2;
+    // Child tickets cannot be booked without an adult ticket.
+    CHILD_TICKETS_WITHOUT_ADULT = 6;
     // The combination of ticket types requested cannot be fulfilled.
     UNFULFILLABLE_TICKET_COMBINATION = 3;
     // The total price of this line item is not correct.
diff --git a/proto/waitlist.proto b/proto/waitlist.proto
new file mode 100644
index 0000000..5784284
--- /dev/null
+++ b/proto/waitlist.proto
@@ -0,0 +1,323 @@
+// API v3 waitlist public interface declaration
+syntax = "proto3";
+
+// Waitlist partner API protos
+package ext.maps.booking.partner.v3.waitlist;
+
+// +------+------------------------------+----------------------------------+
+// | Verb |          HTTP Path           |      Request/Response Body       |
+// +------+------------------------------+----------------------------------+
+// | GET  | /v3/HealthCheck              | -                                |
+// |      |                              | -                                |
+// +------+------------------------------+----------------------------------+
+// | POST | /v3/BatchGetWaitlistEstimates| BatchGetWaitlistEstimatesRequest |
+// |      |                              | BatchGetWaitlistEstimatesResponse|
+// +------+------------------------------+----------------------------------+
+// | POST | /v3/CreateWaitlistEntry      | CreateWaitlistEntryRequest       |
+// |      |                              | CreateWaitlistEntryResponse      |
+// +------+------------------------------+----------------------------------+
+// | POST | /v3/GetWaitlistEntry         | GetWaitlistEntryRequest          |
+// |      |                              | GetWaitlistEntryResponse         |
+// +------+------------------------------+----------------------------------+
+// | POST | /v3/DeleteWaitlistEntry      | DeleteWaitlistEntryRequest       |
+// |      |                              | google.protobuf.Empty            |
+// +------+------------------------------+----------------------------------+
+
+// BatchGetWaitEstimates method
+
+// Batch request for the wait estimates for the specified merchant, service and
+// party sizes.
+message BatchGetWaitEstimatesRequest {
+  // Required. Partner-provided ID for the merchant.
+  string merchant_id = 1;
+
+  // Required. Partner-provided ID for the service.
+  string service_id = 2;
+
+  // Required. The different party sizes WaitEstimates are requested for.
+  // WaitEstimates may differ with the number of people in the party.
+  repeated int32 party_size = 3;
+}
+
+// Response for the BatchGetWaitEstimates RPC with the wait estimates of the
+// specified merchant, service and party sizes.
+message BatchGetWaitEstimatesResponse {
+  // Required. A status for the waitlist that indicates whether new users can
+  // join and what the reason is if they can’t join. If the waitlist is not
+  // open, all other fields in the BatchGetWaitEstimatesResponse are expected to
+  // be unset.
+  WaitlistStatus waitlist_status = 1;
+
+  // The wait estimates for each party size requested. The response should
+  // contain exactly one wait estimate for each party size sent in the request.
+  // If a party size is not available for some reason, prefer ommitting it
+  // instead of returning an error so that the user will have some options to
+  // choose from.
+  repeated WaitEstimate wait_estimate = 2;
+}
+
+// A status for the waitlist that determines if new users can join and what
+// the reason is if they can’t join.
+enum WaitlistStatus {
+  WAITLIST_STATUS_UNSPECIFIED = 0;
+  // The waitlist is open and is accepting new users.
+  OPEN = 1;
+  // There is currently no wait and users should arrive at the merchant
+  // without joining the waitlist.
+  CLOSED_NO_WAIT = 2;
+  // The waitlist is not currently accepting new users because it is full
+  // or closed for other reasons.
+  CLOSED_OTHER = 3;
+}
+
+// The range of time for the current estimated seat time for the user. Estimated
+// seat time range must change over time when the merchant or partner updates
+// their estimates.
+message EstimatedSeatTimeRange {
+  // Required. The lower bound for the range. Expressed as the number of seconds
+  // since the Unix epoch.
+  int64 start_seconds = 1;
+
+  // Required. The upper bound for the range. Expressed as the number of seconds
+  // since the Unix epoch.
+  int64 end_seconds = 2;
+}
+
+// Contains fields measuring how long (in time or # of people) until the
+// user is ready to leave the waitlist and be seated.
+message WaitLength {
+  // The count of how many other parties are ahead of the user in the waitlist.
+  // parties_ahead_count must change over time as parties ahead
+  // in the waitlist are seated or leave the waitlist. Either
+  // parties_ahead_count or estimated_seat_time_range must be populated. Both
+  // should be populated.
+  int32 parties_ahead_count = 1;
+
+  // The range of time that the user is estimated to be seated in. Either
+  // parties_ahead_count or estimated_seat_time_range must be populated. Both
+  // should be populated.
+  EstimatedSeatTimeRange estimated_seat_time_range = 2;
+}
+
+// The wait estimate for a particular party size, merchant and service.
+message WaitEstimate {
+  // Required. The party size this wait estimate applies to.
+  int32 party_size = 1;
+
+  // Required. Contains fields measuring how long (in time or # of people) until
+  // the user is ready to leave the waitlist and be seated.
+  WaitLength wait_length = 2;
+}
+
+// CreateWaitlistEntry method
+
+// Request for a user to join the waitlist.
+//
+// Reserve with Google may retry REST HTTP requests if no response is
+// received. If the exact same CreateWaitlistEntry is received a second time,
+// then the same CreateWaitlistResponse must be returned. A second waitlist
+// entry must not be created.
+message CreateWaitlistEntryRequest {
+  // Required. Partner-provided ID for the merchant.
+  string merchant_id = 1;
+
+  // Required. Partner-provided ID for the service.
+  string service_id = 2;
+
+  // Required. The party size requested for the waitlist entry.
+  int32 party_size = 3;
+
+  // Required. Personal information of the user joining the waitlist.
+  UserInformation user_information = 4;
+
+  // A string from the user which contains any special requests or additional
+  // information that they would like to notify the merchant about.
+  // This will be populated when the user submits an additional request to
+  // Reserve with Google. The partner can disable this functionality at the
+  // service level by setting supports_additional_request to false in the
+  // service feed.
+  string additional_request = 5;
+
+  // Required. Used to differentiate retries from separate requests. If the
+  // exact same CreateWaitlistEntry is received a second time, (including
+  // idempotency_token) then the same CreateWaitlistResponse must be returned.
+  string idempotency_token = 6;
+}
+
+// Response for the CreateWaitlistEntry RPC with the waitlist entry ID or any
+// failing business logic information.
+message CreateWaitlistEntryResponse {
+  // Unique partner-provided ID for the newly created entry in the waitlist.
+  // Required if the waitlist entry was created successfully. Unique for all
+  // time.
+  string waitlist_entry_id = 1;
+
+  WaitlistBusinessLogicFailure waitlist_business_logic_failure = 2;
+}
+
+// GetWaitlistEntry method
+
+// Get the waitlist entry corresponding to the provided waitlist entry ID.
+message GetWaitlistEntryRequest {
+  // Required. The partner-provided waitlist entry ID to request info for.
+  string waitlist_entry_id = 1;
+}
+
+// Response with the waitlist entry corresponding to the provided
+// waitlist entry ID.
+message GetWaitlistEntryResponse {
+  // Required. The partner-provided information about a user’s waitlist entry.
+  WaitlistEntry waitlist_entry = 1;
+}
+
+// DeleteWaitlistEntry method
+
+// Cancel the user's entry in the waitlist.
+message DeleteWaitlistEntryRequest {
+  // Required. The partner-provided ID for the waitlist entry to be deleted.
+  string waitlist_entry_id = 1;
+}
+
+// WaitlistEntry specification
+
+enum WaitlistEntryState {
+  WAITLIST_ENTRY_STATE_UNSPECIFIED = 0;
+  // The waitlist entry was created and the user is currently waiting in the
+  // waitlist.
+  WAITING = 1;
+  // The waitlist entry has been canceled. Cancellation for no-shows should use
+  // the NO_SHOW state.
+  CANCELED = 2;
+  // The merchant is ready to serve the user.
+  SERVICE_READY = 3;
+  // The user has checked in with the host and is waiting to be seated.
+  CHECKED_IN = 4;
+  // The user has arrived and been seated by the merchant.
+  SEATED = 5;
+  // The user did not arrive at the merchant in time and lost their space.
+  NO_SHOW = 6;
+}
+
+// The times at which the waitlist entry changed state.
+message WaitlistEntryStateTimes {
+  // Required. The time at which the waitlist entry was created.
+  // In seconds since Unix epoch.
+  int64 created_time_seconds = 1;
+
+  // The time that the waitlist entry was cancelled. Must be populated
+  // when the waitlist entry has been canceled but not before.
+  // In seconds since Unix epoch.
+  int64 canceled_time_seconds = 2;
+
+  // The time the merchant was ready to serve the user.
+  // service_readied_time_seconds must be populated after the merchant is
+  // ready to serve the user but not before.
+  // In seconds since Unix epoch.
+  int64 service_readied_time_seconds = 3;
+
+  // The actual time the user checked in with the host. checked_in_time must be
+  // populated after the user has checked in with the merchant but not before.
+  // In seconds since Unix epoch.
+  int64 checked_in_time_seconds = 4;
+
+  // The seated time for the user. seated_time_seconds must be populated
+  // when the user has been seated but not before.
+  // In seconds since Unix epoch.
+  int64 seated_time_seconds = 5;
+
+  // The time that the user was marked as a no-show. marked_no_show_time_seconds
+  // must be populated when the user has been marked a no-show but not before.
+  // In seconds since Unix epoch.
+  int64 marked_no_show_time_seconds = 6;
+}
+
+// An entry in the waitlist.
+message WaitlistEntry {
+  // Required.
+  WaitlistEntryState waitlist_entry_state = 1;
+
+  // Required. The times at which the waitlist entry changed state.
+  WaitlistEntryStateTimes waitlist_entry_state_times = 2;
+
+  // Required. Contains fields measuring how long (in time or # of people) until
+  // the user is ready to leave the waitlist and be seated.
+  WaitEstimate wait_estimate = 3;
+}
+
+// WaitlistBusinessLogicFailure specification
+
+// Status data that conveys why creating a waitlist entry fails.
+// If there is a business logic error that is not captured here, please
+// reach out to the Reserve with Google team to add it to this list. Other
+// errors should be returned using standard HTTP error codes.
+message WaitlistBusinessLogicFailure {
+  enum Cause {
+    // Default value: Don't use; amounts to an "unknown error"
+    // Unexpected errors must be returned using standard HTTP error codes.
+    CAUSE_UNSPECIFIED = 0;
+
+    // The user has already booked a waitlist entry with the partner.
+    EXISTING_WAITLIST_ENTRY = 1;
+
+    // The requested party size is below the merchant’s minimum.
+    BELOW_MIN_PARTY_SIZE = 2;
+
+    // The requested party size is above the merchant’s maximum.
+    ABOVE_MAX_PARTY_SIZE = 3;
+
+    // The requested merchant is currently closed.
+    MERCHANT_CLOSED = 4;
+
+    // There is currently no wait and the user should walk in without joining
+    // the waitlist.
+    NO_WAIT = 5;
+
+    // The waitlist is at capacity and new users are not being accepted at this
+    // time.
+    WAITLIST_FULL = 6;
+  }
+  // Required. The reason why the booking failed.
+  Cause cause = 1;
+
+  // This optional field is used for the partner to include additional
+  // information for debugging purposes only.
+  string description = 2;
+}
+
+// User specification
+
+// Personal information about the person making a booking
+message UserInformation {
+  // Unique ID of the user to the partner, chosen by Reserve with Google.
+  // (required)
+  string user_id = 1;
+
+  // Given name of the user (maximum 40 characters) (required)
+  string given_name = 2;
+
+  // Family name of the user (maximum 40 characters) (required)
+  string family_name = 3;
+
+  // Address of the user (optional)
+  PostalAddress address = 4;
+
+  // Phone number of the user (required)
+  string telephone = 5;
+
+  // Email address of the user (required)
+  string email = 6;
+}
+
+// The postal address for a merchant.
+message PostalAddress {
+  // The country, e.g. "USA". (required)
+  string country = 1;
+  // The locality/city, e.g. "Mountain View". (required)
+  string locality = 2;
+  // The region/state/province, e.g. "CA". (required)
+  string region = 3;
+  // The postal code, e.g. "94043". (required)
+  string postal_code = 4;
+  // The street address, e.g. "1600 Amphitheatre Pkwy". (required)
+  string street_address = 5;
+}
diff --git a/testclient/waitlistClient.go b/testclient/waitlistClient.go
new file mode 100644
index 0000000..92098bf
--- /dev/null
+++ b/testclient/waitlistClient.go
@@ -0,0 +1,253 @@
+/*
+Copyright 2017 Google Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+package main
+
+import (
+	"flag"
+	"fmt"
+	"log"
+	"os"
+	"path/filepath"
+	"time"
+
+	"github.com/maps-booking-v3/api"
+	"github.com/maps-booking-v3/utils"
+
+	fpb "github.com/maps-booking-v3/feeds"
+)
+
+const logFile = "http_test_client_log_"
+
+var (
+	serverAddr                = flag.String("server_addr", "example.com:80", "Your http server's address in the format of host:port")
+	credentialsFile           = flag.String("credentials_file", "", "File containing credentials for your server. Leave blank to bypass authentication. File should have exactly one line of the form 'username:password'.")
+	numTestServices           = flag.Int("num_test_services", 10, "Maximum number of services to test from service_feed. Services will be selected randomly")
+	allFlows                  = flag.Bool("all_tests", false, "Whether to test all endpoints.")
+	healthFlow                = flag.Bool("health_check_test", false, "Whether to test the Health endpoint.")
+	batchGetWaitEstimatesFlow = flag.Bool("batch_get_wait_estimates_test", false, "Whether to test the BatchGetWaitEstimates endpoint.")
+	createWaitlistEntryFlow   = flag.Bool("create_waitlist_entry_test", false, "Whether to test the CreateWaitlistEntry endpoint.")
+	getWaitlistEntryFlow      = flag.Bool("get_waitlist_entry_test", false, "Whether to test the GetWaitlistEntry endpoint. CreateWaitlistEntry will also be called to create the entries.")
+	deleteWaitlistEntryFlow   = flag.Bool("delete_waitlist_entry_test", false, "Whether to test the DeleteWaitlistEntry endpoint. CreateWaitlistEntry will also be called to create the entries.")
+	serviceFeed               = flag.String("service_feed", "", "Absolute path to service feed required for all tests except health. Feeds can be in either json or pb3 format.")
+	outputDir                 = flag.String("output_dir", "", "Absolute path of dir to dump log file.")
+	caFile                    = flag.String("ca_file", "", "Absolute path to your server's Certificate Authority root cert. Downloading all roots currently recommended by the Google Internet Authority is a suitable alternative https://pki.google.com/roots.pem. Leave blank to connect using http rather than https.")
+	fullServerName            = flag.String("full_server_name", "", "Fully qualified domain name. Same name used to sign CN. Only necessary if ca_file is specified and the base URL differs from the server address.")
+	outputToTerminal          = flag.Bool("output_to_terminal", false, "Output to terminal rather than a file.")
+)
+
+type counters struct {
+	TotalServicesProcessed       int
+	HealthCheckSuccess           bool
+	BatchGetWaitEstimatesSuccess int
+	BatchGetWaitEstimatesErrors  int
+	CreateWaitlistEntrySuccess   int
+	CreateWaitlistEntryErrors    int
+	GetWaitlistEntrySuccess      int
+	GetWaitlistEntryErrors       int
+	DeleteWaitlistEntrySuccess   int
+	DeleteWaitlistEntryErrors    int
+}
+
+// GenerateWaitlistEntries creates a waitlist entry for each provided service.
+func GenerateWaitlistEntries(services []*fpb.Service, stats *counters, conn *api.HTTPConnection) []string {
+	log.Println("no previous waitlist entries to use, acquiring new inventory")
+	utils.LogFlow("Generate Fresh Entries", "Start")
+	defer utils.LogFlow("Generate Fresh Entries", "End")
+
+	var out []string
+	totalServices := len(services)
+	for i, s := range services {
+		id, err := api.CreateWaitlistEntry(s, conn)
+		if err != nil {
+			log.Printf("%s. skipping waitlistEntry %d/%d, serviceID: %s",
+				err.Error(), i, totalServices, s.GetServiceId())
+			stats.CreateWaitlistEntryErrors++
+			continue
+		}
+		out = append(out, id)
+		stats.CreateWaitlistEntrySuccess++
+	}
+	return out
+}
+
+func createLogFile() (*os.File, error) {
+	var err error
+	outPath := *outputDir
+	if outPath == "" {
+		outPath, err = os.Getwd()
+		if err != nil {
+			return nil, err
+		}
+	}
+
+	now := time.Now().UTC()
+	nowString := fmt.Sprintf("%d-%02d-%02d_%02d-%02d-%02d", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
+	outFile := filepath.Join(outPath, fmt.Sprintf("%s%s", logFile, nowString))
+
+	return os.Create(outFile)
+}
+
+func logStats(stats counters) {
+	log.Println("\n************* Begin Stats *************\n")
+	var totalErrors int
+	if *healthFlow || *allFlows {
+		if stats.HealthCheckSuccess {
+			log.Println("HealthCheck Succeeded")
+		} else {
+			totalErrors++
+			log.Println("HealthCheck Failed")
+		}
+	}
+	if *batchGetWaitEstimatesFlow || *allFlows {
+		totalErrors += stats.BatchGetWaitEstimatesErrors
+		log.Printf("BatchGetWaitEstimates Errors: %d/%d", stats.BatchGetWaitEstimatesErrors, stats.BatchGetWaitEstimatesErrors+stats.BatchGetWaitEstimatesSuccess)
+	}
+	if *createWaitlistEntryFlow || *allFlows {
+		totalErrors += stats.CreateWaitlistEntryErrors
+		log.Printf("CreateWaitlistEntry Errors: %d/%d", stats.CreateWaitlistEntryErrors, stats.CreateWaitlistEntryErrors+stats.CreateWaitlistEntrySuccess)
+	}
+	if *getWaitlistEntryFlow || *allFlows {
+		totalErrors += stats.GetWaitlistEntryErrors
+		log.Printf("GetWaitlistEntry Errors: %d/%d", stats.GetWaitlistEntryErrors, stats.GetWaitlistEntryErrors+stats.GetWaitlistEntrySuccess)
+	}
+	if *deleteWaitlistEntryFlow || *allFlows {
+		totalErrors += stats.DeleteWaitlistEntryErrors
+		log.Printf("DeleteWaitlistEntry Errors: %d/%d", stats.DeleteWaitlistEntryErrors, stats.DeleteWaitlistEntryErrors+stats.DeleteWaitlistEntrySuccess)
+	}
+
+	log.Println("\n\n\n")
+	if totalErrors == 0 {
+		log.Println("All Tests Pass!")
+	} else {
+		log.Printf("Found %d Errors", totalErrors)
+	}
+
+	log.Println("\n************* End Stats *************\n")
+	os.Exit(totalErrors)
+}
+
+func main() {
+	flag.Parse()
+	var stats counters
+
+	if !*outputToTerminal {
+		// Set up logging before continuing with flows
+		f, err := createLogFile()
+		if err != nil {
+			log.Fatalf("Failed to create log file %v", err)
+		}
+		defer f.Close()
+		log.SetOutput(f)
+	}
+
+	conn, err := api.InitHTTPConnection(*serverAddr, *credentialsFile, *caFile, *fullServerName)
+	if err != nil {
+		log.Fatalf("Failed to init http connection %v", err)
+	}
+
+	// HealthCheck Flow
+	if *healthFlow || *allFlows {
+		stats.HealthCheckSuccess = true
+		if err := api.HealthCheck(conn); err != nil {
+			stats.HealthCheckSuccess = false
+			log.Println(err.Error())
+		}
+		if !*allFlows && !*batchGetWaitEstimatesFlow && !*createWaitlistEntryFlow &&
+			!*getWaitlistEntryFlow && !*deleteWaitlistEntryFlow {
+			logStats(stats)
+		}
+	}
+
+	// Build services.
+	if *serviceFeed == "" {
+		log.Fatal("please set service_feed flag if you wish to test additional flows")
+	}
+
+	var services []*fpb.Service
+	services, err = utils.ParseServiceFeed(*serviceFeed)
+	if err != nil {
+		log.Fatalf("Failed to get services: %v", err.Error())
+	}
+	// Remove services without waitlist rules.
+	waitlistServices := services[:0]
+	for _, s := range services {
+		if s.GetWaitlistRules() != nil {
+			waitlistServices = append(waitlistServices, s)
+		}
+	}
+
+	if len(services) == 0 {
+		log.Fatal("no services have waitlist rules")
+	}
+	reducedServices := utils.ReduceServices(waitlistServices, *numTestServices)
+	stats.TotalServicesProcessed += len(reducedServices)
+
+	// BatchGetWaitEstimates Flow
+	if *batchGetWaitEstimatesFlow || *allFlows {
+		utils.LogFlow("BatchGetWaitEstimates", "Start")
+
+		for i, s := range reducedServices {
+			if err = api.BatchGetWaitEstimates(s, conn); err != nil {
+				log.Printf("%s. BatchGerWaitEstimates failed for service %d/%d. Service_id:",
+					err.Error(), i, stats.TotalServicesProcessed, s.GetServiceId())
+				stats.BatchGetWaitEstimatesErrors++
+				continue
+			}
+			stats.BatchGetWaitEstimatesSuccess++
+		}
+		utils.LogFlow("BatchGetWaitEstimates", "End")
+	}
+	// CreateWaitlistEntry Flow.
+	var ids []string
+	if *createWaitlistEntryFlow || *getWaitlistEntryFlow ||
+		*deleteWaitlistEntryFlow || *allFlows {
+		utils.LogFlow("CreateWaitlistEntry", "Start")
+		ids = GenerateWaitlistEntries(reducedServices, &stats, conn)
+		utils.LogFlow("CreateWaitlistEntry", "End")
+	}
+	// GetWaitlistEntry Flow
+	if *getWaitlistEntryFlow || *allFlows {
+		utils.LogFlow("GetWaitlistEntry", "Start")
+		for _, id := range ids {
+			if _, err = api.GetWaitlistEntry(id, conn); err != nil {
+				log.Printf("%s. get waitlist entry failed for waitlist entry id: %s",
+					err.Error(), id)
+				stats.GetWaitlistEntryErrors++
+				continue
+			}
+			stats.GetWaitlistEntrySuccess++
+		}
+		utils.LogFlow("GetWaitlistEntry", "End")
+	}
+
+	// DeleteWaitlistentry Flow
+	if *deleteWaitlistEntryFlow || *allFlows {
+		utils.LogFlow("DeleteWaitlistEntry", "Start")
+
+		for _, id := range ids {
+			if err = api.DeleteWaitlistEntry(id, conn); err != nil {
+				log.Printf("%s. Delete waitlist entry failed for waitlist entry id: %s",
+					err.Error(), id)
+				stats.DeleteWaitlistEntryErrors++
+				continue
+			}
+			stats.DeleteWaitlistEntrySuccess++
+		}
+		utils.LogFlow("DeleteWaitlistEntry", "End")
+	}
+
+	logStats(stats)
+}
diff --git a/utils/utils.go b/utils/utils.go
index fa87aa6..f23c4a8 100644
--- a/utils/utils.go
+++ b/utils/utils.go
@@ -34,6 +34,7 @@
 
 	fpb "github.com/maps-booking-v3/feeds"
 	mpb "github.com/maps-booking-v3/v3"
+	wpb "github.com/maps-booking-v3/waitlist"
 )
 
 // SlotKey is a struct representing a unique service.
@@ -49,7 +50,23 @@
 	log.Println(strings.Join([]string{"\n##########\n", status, f, "Flow", "\n##########"}, " "))
 }
 
-func parseServiceFeed(serviceFeed string) ([]*fpb.Service, error) {
+// ReduceServices randomly selects and returns numTestServices from the provided services.
+func ReduceServices(allServices []*fpb.Service, numTestServices int) []*fpb.Service {
+	reducedServices := make([]*fpb.Service, 0, numTestServices)
+
+	if len(allServices) <= numTestServices {
+		reducedServices = allServices
+	} else {
+		for _, n := range rand.Perm(len(allServices))[0:numTestServices] {
+			reducedServices = append(reducedServices, allServices[n])
+		}
+	}
+	log.Printf("Selected %d services out of a possible %d", len(reducedServices), len(allServices))
+	return reducedServices
+}
+
+// ParseServiceFeed returns a slice of services for each service in the feed.
+func ParseServiceFeed(serviceFeed string) ([]*fpb.Service, error) {
 	var feed fpb.ServiceFeed
 	content, err := ioutil.ReadFile(serviceFeed)
 	if err != nil {
@@ -137,7 +154,7 @@
 
 // MerchantLineItemMapFrom attempts to build a collection of LineItems from a service and availability feed.
 func MerchantLineItemMapFrom(serviceFeed, availabilityFeed string, testSlots int) (map[string][]*mpb.LineItem, error) {
-	services, err := parseServiceFeed(serviceFeed)
+	services, err := ParseServiceFeed(serviceFeed)
 	if err != nil {
 		return nil, err
 	}
@@ -422,3 +439,47 @@
 	}
 	return m
 }
+
+// ValidateWaitEstimate validates all the fields are populated for the wait estimate.
+func ValidateWaitEstimate(waitEstimate *wpb.WaitEstimate) error {
+	if waitEstimate.GetPartySize() <= 0 {
+		return errors.New("party size <= 0")
+	}
+	waitLength := waitEstimate.GetWaitLength()
+	if waitLength == nil {
+		return errors.New("wait estimate not specified")
+	}
+	if waitLength.GetPartiesAheadCount() < 0 {
+		return errors.New("parties ahead count < 0")
+	}
+	estimatedSeatTimeRange := waitLength.GetEstimatedSeatTimeRange()
+	if estimatedSeatTimeRange == nil {
+		return errors.New("estimated seat time range not specified")
+	}
+	if estimatedSeatTimeRange.GetStartSeconds() <= 0 {
+		return errors.New("start seconds <= 0")
+	}
+	if estimatedSeatTimeRange.GetEndSeconds() <= 0 {
+		return errors.New("end seconds <= 0")
+	}
+	return nil
+}
+
+// ValidateWaitlistEntry validates all the fields are populated for the waitlist entry.
+func ValidateWaitlistEntry(waitlistEntry *wpb.WaitlistEntry) error {
+	if waitlistEntry.GetWaitlistEntryState() == wpb.WaitlistEntryState_WAITLIST_ENTRY_STATE_UNSPECIFIED {
+		return errors.New("waitlist entry state not specified")
+	}
+	stateTimes := waitlistEntry.GetWaitlistEntryStateTimes()
+	if stateTimes == nil {
+		return errors.New("WaitlistEntryStateTimes not specified")
+	}
+	if stateTimes.GetCreatedTimeSeconds() <= 0 {
+		return errors.New("created time seconds <= 0")
+	}
+	waitEstimate := waitlistEntry.GetWaitEstimate()
+	if waitEstimate == nil {
+		return errors.New("wait estimate not specified")
+	}
+	return ValidateWaitEstimate(waitEstimate)
+}
diff --git a/v3/v3.pb.go b/v3/v3.pb.go
index 3db0270..20c140b 100644
--- a/v3/v3.pb.go
+++ b/v3/v3.pb.go
@@ -1,11 +1,15 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: v3.proto
 
+// Booking partner API protos
 package ext_maps_booking_partner_v3
 
-import proto "github.com/golang/protobuf/proto"
-import fmt "fmt"
-import math "math"
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+)
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ = proto.Marshal
@@ -52,6 +56,7 @@
 	4: "NO_SHOW",
 	5: "NO_SHOW_PENALIZED",
 }
+
 var BookingStatus_value = map[string]int32{
 	"BOOKING_STATUS_UNSPECIFIED":    0,
 	"CONFIRMED":                     1,
@@ -64,8 +69,9 @@
 func (x BookingStatus) String() string {
 	return proto.EnumName(BookingStatus_name, int32(x))
 }
+
 func (BookingStatus) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{0}
+	return fileDescriptor_1820d8e1a9fad753, []int{0}
 }
 
 // Used when booking/order failure cause is PAYMENT_ERROR_CARD_TYPE_REJECTED to
@@ -88,19 +94,21 @@
 	3: "AMERICAN_EXPRESS",
 	4: "DISCOVER",
 }
+
 var CreditCardType_value = map[string]int32{
 	"CREDIT_CARD_TYPE_UNSPECIFIED": 0,
-	"VISA":             1,
-	"MASTERCARD":       2,
-	"AMERICAN_EXPRESS": 3,
-	"DISCOVER":         4,
+	"VISA":                         1,
+	"MASTERCARD":                   2,
+	"AMERICAN_EXPRESS":             3,
+	"DISCOVER":                     4,
 }
 
 func (x CreditCardType) String() string {
 	return proto.EnumName(CreditCardType_name, int32(x))
 }
+
 func (CreditCardType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{1}
+	return fileDescriptor_1820d8e1a9fad753, []int{1}
 }
 
 type PaymentOptionType int32
@@ -118,6 +126,7 @@
 	2: "PAYMENT_OPTION_MULTI_USE",
 	3: "PAYMENT_OPTION_UNLIMITED_USE",
 }
+
 var PaymentOptionType_value = map[string]int32{
 	"PAYMENT_OPTION_TYPE_UNSPECIFIED": 0,
 	"PAYMENT_OPTION_SINGLE_USE":       1,
@@ -128,8 +137,9 @@
 func (x PaymentOptionType) String() string {
 	return proto.EnumName(PaymentOptionType_name, int32(x))
 }
+
 func (PaymentOptionType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{2}
+	return fileDescriptor_1820d8e1a9fad753, []int{2}
 }
 
 // Prepayment status of a booking.
@@ -163,6 +173,7 @@
 	3: "PREPAYMENT_REFUNDED",
 	4: "PREPAYMENT_CREDITED",
 }
+
 var PrepaymentStatus_value = map[string]int32{
 	"PREPAYMENT_STATUS_UNSPECIFIED": 0,
 	"PREPAYMENT_PROVIDED":           1,
@@ -174,8 +185,9 @@
 func (x PrepaymentStatus) String() string {
 	return proto.EnumName(PrepaymentStatus_name, int32(x))
 }
+
 func (PrepaymentStatus) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{3}
+	return fileDescriptor_1820d8e1a9fad753, []int{3}
 }
 
 // Defines how a total price is determined from an availability.
@@ -197,6 +209,7 @@
 	0: "FIXED_RATE_DEFAULT",
 	1: "PER_PERSON",
 }
+
 var PriceType_value = map[string]int32{
 	"FIXED_RATE_DEFAULT": 0,
 	"PER_PERSON":         1,
@@ -205,8 +218,9 @@
 func (x PriceType) String() string {
 	return proto.EnumName(PriceType_name, int32(x))
 }
+
 func (PriceType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{4}
+	return fileDescriptor_1820d8e1a9fad753, []int{4}
 }
 
 // This enum indicates what requirements exist for the user to acknowledge or
@@ -228,6 +242,7 @@
 	1: "DO_NOT_SHOW_DURATION",
 	2: "MUST_SHOW_DURATION",
 }
+
 var CheckAvailabilityResponse_DurationRequirement_value = map[string]int32{
 	"DURATION_REQUIREMENT_UNSPECIFIED": 0,
 	"DO_NOT_SHOW_DURATION":             1,
@@ -237,8 +252,9 @@
 func (x CheckAvailabilityResponse_DurationRequirement) String() string {
 	return proto.EnumName(CheckAvailabilityResponse_DurationRequirement_name, int32(x))
 }
+
 func (CheckAvailabilityResponse_DurationRequirement) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{1, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{1, 0}
 }
 
 type BookingFailure_Cause int32
@@ -297,6 +313,7 @@
 	11: "BOOKING_NOT_CANCELLABLE",
 	12: "OVERLAPPING_RESERVATION",
 }
+
 var BookingFailure_Cause_value = map[string]int32{
 	"CAUSE_UNSPECIFIED":                0,
 	"SLOT_UNAVAILABLE":                 1,
@@ -316,8 +333,9 @@
 func (x BookingFailure_Cause) String() string {
 	return proto.EnumName(BookingFailure_Cause_name, int32(x))
 }
+
 func (BookingFailure_Cause) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{23, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{23, 0}
 }
 
 type OrderFailure_Cause int32
@@ -347,6 +365,7 @@
 	3: "PAYMENT_ERROR_CARD_DECLINED",
 	4: "PAYMENT_ERROR",
 }
+
 var OrderFailure_Cause_value = map[string]int32{
 	"CAUSE_UNSPECIFIED":                0,
 	"ORDER_UNFULFILLABLE":              1,
@@ -358,8 +377,9 @@
 func (x OrderFailure_Cause) String() string {
 	return proto.EnumName(OrderFailure_Cause_name, int32(x))
 }
+
 func (OrderFailure_Cause) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{26, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{26, 0}
 }
 
 // The result of an order fulfillability check.
@@ -387,19 +407,21 @@
 	3: "UNFULFILLABLE_SERVICE_COMBINATION",
 	4: "ORDER_UNFULFILLABLE_OTHER_REASON",
 }
+
 var OrderFulfillability_OrderFulfillabilityResult_value = map[string]int32{
 	"ORDER_FULFILLABILITY_RESULT_UNSPECIFIED": 0,
-	"CAN_FULFILL":                             1,
-	"UNFULFILLABLE_LINE_ITEM":                 2,
-	"UNFULFILLABLE_SERVICE_COMBINATION":       3,
-	"ORDER_UNFULFILLABLE_OTHER_REASON":        4,
+	"CAN_FULFILL":                       1,
+	"UNFULFILLABLE_LINE_ITEM":           2,
+	"UNFULFILLABLE_SERVICE_COMBINATION": 3,
+	"ORDER_UNFULFILLABLE_OTHER_REASON":  4,
 }
 
 func (x OrderFulfillability_OrderFulfillabilityResult) String() string {
 	return proto.EnumName(OrderFulfillability_OrderFulfillabilityResult_name, int32(x))
 }
+
 func (OrderFulfillability_OrderFulfillabilityResult) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{27, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{27, 0}
 }
 
 // The result of a line item fulfillability check.
@@ -412,6 +434,8 @@
 	LineItemFulfillability_CAN_FULFILL LineItemFulfillability_ItemFulfillabilityResult = 1
 	// No adequate availability for the slot requested.
 	LineItemFulfillability_SLOT_UNAVAILABLE LineItemFulfillability_ItemFulfillabilityResult = 2
+	// Child tickets cannot be booked without an adult ticket.
+	LineItemFulfillability_CHILD_TICKETS_WITHOUT_ADULT LineItemFulfillability_ItemFulfillabilityResult = 6
 	// The combination of ticket types requested cannot be fulfilled.
 	LineItemFulfillability_UNFULFILLABLE_TICKET_COMBINATION LineItemFulfillability_ItemFulfillabilityResult = 3
 	// The total price of this line item is not correct.
@@ -425,14 +449,17 @@
 	0: "ITEM_FULFILLABILITY_RESULT_UNSPECIFIED",
 	1: "CAN_FULFILL",
 	2: "SLOT_UNAVAILABLE",
+	6: "CHILD_TICKETS_WITHOUT_ADULT",
 	3: "UNFULFILLABLE_TICKET_COMBINATION",
 	4: "INCORRECT_PRICE",
 	5: "ITEM_UNFULFILLABLE_OTHER_REASON",
 }
+
 var LineItemFulfillability_ItemFulfillabilityResult_value = map[string]int32{
 	"ITEM_FULFILLABILITY_RESULT_UNSPECIFIED": 0,
 	"CAN_FULFILL":                            1,
 	"SLOT_UNAVAILABLE":                       2,
+	"CHILD_TICKETS_WITHOUT_ADULT":            6,
 	"UNFULFILLABLE_TICKET_COMBINATION":       3,
 	"INCORRECT_PRICE":                        4,
 	"ITEM_UNFULFILLABLE_OTHER_REASON":        5,
@@ -441,8 +468,9 @@
 func (x LineItemFulfillability_ItemFulfillabilityResult) String() string {
 	return proto.EnumName(LineItemFulfillability_ItemFulfillabilityResult_name, int32(x))
 }
+
 func (LineItemFulfillability_ItemFulfillabilityResult) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{28, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{28, 0}
 }
 
 type PaymentProcessingParameters_PaymentProcessor int32
@@ -458,6 +486,7 @@
 	1: "PROCESSOR_STRIPE",
 	2: "PROCESSOR_BRAINTREE",
 }
+
 var PaymentProcessingParameters_PaymentProcessor_value = map[string]int32{
 	"PAYMENT_PROCESSOR_UNSPECIFIED": 0,
 	"PROCESSOR_STRIPE":              1,
@@ -467,8 +496,9 @@
 func (x PaymentProcessingParameters_PaymentProcessor) String() string {
 	return proto.EnumName(PaymentProcessingParameters_PaymentProcessor_name, int32(x))
 }
+
 func (PaymentProcessingParameters_PaymentProcessor) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{31, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{31, 0}
 }
 
 // Who handles payment processing?
@@ -488,6 +518,7 @@
 	1: "PROCESSED_BY_GOOGLE",
 	2: "PROCESSED_BY_PARTNER",
 }
+
 var PaymentInformation_PaymentProcessedBy_value = map[string]int32{
 	"PAYMENT_PROCESSED_BY_UNSPECIFIED": 0,
 	"PROCESSED_BY_GOOGLE":              1,
@@ -497,8 +528,9 @@
 func (x PaymentInformation_PaymentProcessedBy) String() string {
 	return proto.EnumName(PaymentInformation_PaymentProcessedBy_name, int32(x))
 }
+
 func (PaymentInformation_PaymentProcessedBy) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{33, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{33, 0}
 }
 
 // Request to check availability for a Slot.
@@ -514,16 +546,17 @@
 func (m *CheckAvailabilityRequest) String() string { return proto.CompactTextString(m) }
 func (*CheckAvailabilityRequest) ProtoMessage()    {}
 func (*CheckAvailabilityRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{0}
+	return fileDescriptor_1820d8e1a9fad753, []int{0}
 }
+
 func (m *CheckAvailabilityRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CheckAvailabilityRequest.Unmarshal(m, b)
 }
 func (m *CheckAvailabilityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_CheckAvailabilityRequest.Marshal(b, m, deterministic)
 }
-func (dst *CheckAvailabilityRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CheckAvailabilityRequest.Merge(dst, src)
+func (m *CheckAvailabilityRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CheckAvailabilityRequest.Merge(m, src)
 }
 func (m *CheckAvailabilityRequest) XXX_Size() int {
 	return xxx_messageInfo_CheckAvailabilityRequest.Size(m)
@@ -568,16 +601,17 @@
 func (m *CheckAvailabilityResponse) String() string { return proto.CompactTextString(m) }
 func (*CheckAvailabilityResponse) ProtoMessage()    {}
 func (*CheckAvailabilityResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{1}
+	return fileDescriptor_1820d8e1a9fad753, []int{1}
 }
+
 func (m *CheckAvailabilityResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CheckAvailabilityResponse.Unmarshal(m, b)
 }
 func (m *CheckAvailabilityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_CheckAvailabilityResponse.Marshal(b, m, deterministic)
 }
-func (dst *CheckAvailabilityResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CheckAvailabilityResponse.Merge(dst, src)
+func (m *CheckAvailabilityResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CheckAvailabilityResponse.Merge(m, src)
 }
 func (m *CheckAvailabilityResponse) XXX_Size() int {
 	return xxx_messageInfo_CheckAvailabilityResponse.Size(m)
@@ -629,16 +663,17 @@
 func (m *AvailabilityUpdate) String() string { return proto.CompactTextString(m) }
 func (*AvailabilityUpdate) ProtoMessage()    {}
 func (*AvailabilityUpdate) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{2}
+	return fileDescriptor_1820d8e1a9fad753, []int{2}
 }
+
 func (m *AvailabilityUpdate) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_AvailabilityUpdate.Unmarshal(m, b)
 }
 func (m *AvailabilityUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_AvailabilityUpdate.Marshal(b, m, deterministic)
 }
-func (dst *AvailabilityUpdate) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_AvailabilityUpdate.Merge(dst, src)
+func (m *AvailabilityUpdate) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AvailabilityUpdate.Merge(m, src)
 }
 func (m *AvailabilityUpdate) XXX_Size() int {
 	return xxx_messageInfo_AvailabilityUpdate.Size(m)
@@ -671,16 +706,17 @@
 func (m *SlotAvailability) String() string { return proto.CompactTextString(m) }
 func (*SlotAvailability) ProtoMessage()    {}
 func (*SlotAvailability) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{3}
+	return fileDescriptor_1820d8e1a9fad753, []int{3}
 }
+
 func (m *SlotAvailability) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SlotAvailability.Unmarshal(m, b)
 }
 func (m *SlotAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_SlotAvailability.Marshal(b, m, deterministic)
 }
-func (dst *SlotAvailability) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_SlotAvailability.Merge(dst, src)
+func (m *SlotAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SlotAvailability.Merge(m, src)
 }
 func (m *SlotAvailability) XXX_Size() int {
 	return xxx_messageInfo_SlotAvailability.Size(m)
@@ -721,16 +757,17 @@
 func (m *CheckOrderFulfillabilityRequest) String() string { return proto.CompactTextString(m) }
 func (*CheckOrderFulfillabilityRequest) ProtoMessage()    {}
 func (*CheckOrderFulfillabilityRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{4}
+	return fileDescriptor_1820d8e1a9fad753, []int{4}
 }
+
 func (m *CheckOrderFulfillabilityRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CheckOrderFulfillabilityRequest.Unmarshal(m, b)
 }
 func (m *CheckOrderFulfillabilityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_CheckOrderFulfillabilityRequest.Marshal(b, m, deterministic)
 }
-func (dst *CheckOrderFulfillabilityRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CheckOrderFulfillabilityRequest.Merge(dst, src)
+func (m *CheckOrderFulfillabilityRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CheckOrderFulfillabilityRequest.Merge(m, src)
 }
 func (m *CheckOrderFulfillabilityRequest) XXX_Size() int {
 	return xxx_messageInfo_CheckOrderFulfillabilityRequest.Size(m)
@@ -772,16 +809,17 @@
 func (m *CheckOrderFulfillabilityResponse) String() string { return proto.CompactTextString(m) }
 func (*CheckOrderFulfillabilityResponse) ProtoMessage()    {}
 func (*CheckOrderFulfillabilityResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{5}
+	return fileDescriptor_1820d8e1a9fad753, []int{5}
 }
+
 func (m *CheckOrderFulfillabilityResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CheckOrderFulfillabilityResponse.Unmarshal(m, b)
 }
 func (m *CheckOrderFulfillabilityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_CheckOrderFulfillabilityResponse.Marshal(b, m, deterministic)
 }
-func (dst *CheckOrderFulfillabilityResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CheckOrderFulfillabilityResponse.Merge(dst, src)
+func (m *CheckOrderFulfillabilityResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CheckOrderFulfillabilityResponse.Merge(m, src)
 }
 func (m *CheckOrderFulfillabilityResponse) XXX_Size() int {
 	return xxx_messageInfo_CheckOrderFulfillabilityResponse.Size(m)
@@ -819,16 +857,17 @@
 func (m *GetBookingStatusRequest) String() string { return proto.CompactTextString(m) }
 func (*GetBookingStatusRequest) ProtoMessage()    {}
 func (*GetBookingStatusRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{6}
+	return fileDescriptor_1820d8e1a9fad753, []int{6}
 }
+
 func (m *GetBookingStatusRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetBookingStatusRequest.Unmarshal(m, b)
 }
 func (m *GetBookingStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_GetBookingStatusRequest.Marshal(b, m, deterministic)
 }
-func (dst *GetBookingStatusRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_GetBookingStatusRequest.Merge(dst, src)
+func (m *GetBookingStatusRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetBookingStatusRequest.Merge(m, src)
 }
 func (m *GetBookingStatusRequest) XXX_Size() int {
 	return xxx_messageInfo_GetBookingStatusRequest.Size(m)
@@ -864,16 +903,17 @@
 func (m *GetBookingStatusResponse) String() string { return proto.CompactTextString(m) }
 func (*GetBookingStatusResponse) ProtoMessage()    {}
 func (*GetBookingStatusResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{7}
+	return fileDescriptor_1820d8e1a9fad753, []int{7}
 }
+
 func (m *GetBookingStatusResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_GetBookingStatusResponse.Unmarshal(m, b)
 }
 func (m *GetBookingStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_GetBookingStatusResponse.Marshal(b, m, deterministic)
 }
-func (dst *GetBookingStatusResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_GetBookingStatusResponse.Merge(dst, src)
+func (m *GetBookingStatusResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetBookingStatusResponse.Merge(m, src)
 }
 func (m *GetBookingStatusResponse) XXX_Size() int {
 	return xxx_messageInfo_GetBookingStatusResponse.Size(m)
@@ -941,16 +981,17 @@
 func (m *CreateBookingRequest) String() string { return proto.CompactTextString(m) }
 func (*CreateBookingRequest) ProtoMessage()    {}
 func (*CreateBookingRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{8}
+	return fileDescriptor_1820d8e1a9fad753, []int{8}
 }
+
 func (m *CreateBookingRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateBookingRequest.Unmarshal(m, b)
 }
 func (m *CreateBookingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_CreateBookingRequest.Marshal(b, m, deterministic)
 }
-func (dst *CreateBookingRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CreateBookingRequest.Merge(dst, src)
+func (m *CreateBookingRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateBookingRequest.Merge(m, src)
 }
 func (m *CreateBookingRequest) XXX_Size() int {
 	return xxx_messageInfo_CreateBookingRequest.Size(m)
@@ -1035,16 +1076,17 @@
 func (m *CreateBookingResponse) String() string { return proto.CompactTextString(m) }
 func (*CreateBookingResponse) ProtoMessage()    {}
 func (*CreateBookingResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{9}
+	return fileDescriptor_1820d8e1a9fad753, []int{9}
 }
+
 func (m *CreateBookingResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateBookingResponse.Unmarshal(m, b)
 }
 func (m *CreateBookingResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_CreateBookingResponse.Marshal(b, m, deterministic)
 }
-func (dst *CreateBookingResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CreateBookingResponse.Merge(dst, src)
+func (m *CreateBookingResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateBookingResponse.Merge(m, src)
 }
 func (m *CreateBookingResponse) XXX_Size() int {
 	return xxx_messageInfo_CreateBookingResponse.Size(m)
@@ -1092,16 +1134,17 @@
 func (m *CreateLeaseRequest) String() string { return proto.CompactTextString(m) }
 func (*CreateLeaseRequest) ProtoMessage()    {}
 func (*CreateLeaseRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{10}
+	return fileDescriptor_1820d8e1a9fad753, []int{10}
 }
+
 func (m *CreateLeaseRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateLeaseRequest.Unmarshal(m, b)
 }
 func (m *CreateLeaseRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_CreateLeaseRequest.Marshal(b, m, deterministic)
 }
-func (dst *CreateLeaseRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CreateLeaseRequest.Merge(dst, src)
+func (m *CreateLeaseRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateLeaseRequest.Merge(m, src)
 }
 func (m *CreateLeaseRequest) XXX_Size() int {
 	return xxx_messageInfo_CreateLeaseRequest.Size(m)
@@ -1136,16 +1179,17 @@
 func (m *CreateLeaseResponse) String() string { return proto.CompactTextString(m) }
 func (*CreateLeaseResponse) ProtoMessage()    {}
 func (*CreateLeaseResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{11}
+	return fileDescriptor_1820d8e1a9fad753, []int{11}
 }
+
 func (m *CreateLeaseResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateLeaseResponse.Unmarshal(m, b)
 }
 func (m *CreateLeaseResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_CreateLeaseResponse.Marshal(b, m, deterministic)
 }
-func (dst *CreateLeaseResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CreateLeaseResponse.Merge(dst, src)
+func (m *CreateLeaseResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateLeaseResponse.Merge(m, src)
 }
 func (m *CreateLeaseResponse) XXX_Size() int {
 	return xxx_messageInfo_CreateLeaseResponse.Size(m)
@@ -1192,16 +1236,17 @@
 func (m *Lease) String() string { return proto.CompactTextString(m) }
 func (*Lease) ProtoMessage()    {}
 func (*Lease) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{12}
+	return fileDescriptor_1820d8e1a9fad753, []int{12}
 }
+
 func (m *Lease) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Lease.Unmarshal(m, b)
 }
 func (m *Lease) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Lease.Marshal(b, m, deterministic)
 }
-func (dst *Lease) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Lease.Merge(dst, src)
+func (m *Lease) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Lease.Merge(m, src)
 }
 func (m *Lease) XXX_Size() int {
 	return xxx_messageInfo_Lease.Size(m)
@@ -1253,16 +1298,17 @@
 func (m *LeaseReference) String() string { return proto.CompactTextString(m) }
 func (*LeaseReference) ProtoMessage()    {}
 func (*LeaseReference) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{13}
+	return fileDescriptor_1820d8e1a9fad753, []int{13}
 }
+
 func (m *LeaseReference) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_LeaseReference.Unmarshal(m, b)
 }
 func (m *LeaseReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_LeaseReference.Marshal(b, m, deterministic)
 }
-func (dst *LeaseReference) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_LeaseReference.Merge(dst, src)
+func (m *LeaseReference) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LeaseReference.Merge(m, src)
 }
 func (m *LeaseReference) XXX_Size() int {
 	return xxx_messageInfo_LeaseReference.Size(m)
@@ -1299,16 +1345,17 @@
 func (m *CreateOrderRequest) String() string { return proto.CompactTextString(m) }
 func (*CreateOrderRequest) ProtoMessage()    {}
 func (*CreateOrderRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{14}
+	return fileDescriptor_1820d8e1a9fad753, []int{14}
 }
+
 func (m *CreateOrderRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateOrderRequest.Unmarshal(m, b)
 }
 func (m *CreateOrderRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_CreateOrderRequest.Marshal(b, m, deterministic)
 }
-func (dst *CreateOrderRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CreateOrderRequest.Merge(dst, src)
+func (m *CreateOrderRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateOrderRequest.Merge(m, src)
 }
 func (m *CreateOrderRequest) XXX_Size() int {
 	return xxx_messageInfo_CreateOrderRequest.Size(m)
@@ -1360,16 +1407,17 @@
 func (m *CreateOrderResponse) String() string { return proto.CompactTextString(m) }
 func (*CreateOrderResponse) ProtoMessage()    {}
 func (*CreateOrderResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{15}
+	return fileDescriptor_1820d8e1a9fad753, []int{15}
 }
+
 func (m *CreateOrderResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_CreateOrderResponse.Unmarshal(m, b)
 }
 func (m *CreateOrderResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_CreateOrderResponse.Marshal(b, m, deterministic)
 }
-func (dst *CreateOrderResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_CreateOrderResponse.Merge(dst, src)
+func (m *CreateOrderResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateOrderResponse.Merge(m, src)
 }
 func (m *CreateOrderResponse) XXX_Size() int {
 	return xxx_messageInfo_CreateOrderResponse.Size(m)
@@ -1387,11 +1435,13 @@
 type CreateOrderResponse_Order struct {
 	Order *Order `protobuf:"bytes,1,opt,name=order,proto3,oneof"`
 }
+
 type CreateOrderResponse_OrderFailure struct {
 	OrderFailure *OrderFailure `protobuf:"bytes,2,opt,name=order_failure,json=orderFailure,proto3,oneof"`
 }
 
-func (*CreateOrderResponse_Order) isCreateOrderResponse_Result()        {}
+func (*CreateOrderResponse_Order) isCreateOrderResponse_Result() {}
+
 func (*CreateOrderResponse_OrderFailure) isCreateOrderResponse_Result() {}
 
 func (m *CreateOrderResponse) GetResult() isCreateOrderResponse_Result {
@@ -1502,16 +1552,17 @@
 func (m *ListBookingsRequest) String() string { return proto.CompactTextString(m) }
 func (*ListBookingsRequest) ProtoMessage()    {}
 func (*ListBookingsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{16}
+	return fileDescriptor_1820d8e1a9fad753, []int{16}
 }
+
 func (m *ListBookingsRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ListBookingsRequest.Unmarshal(m, b)
 }
 func (m *ListBookingsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_ListBookingsRequest.Marshal(b, m, deterministic)
 }
-func (dst *ListBookingsRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListBookingsRequest.Merge(dst, src)
+func (m *ListBookingsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListBookingsRequest.Merge(m, src)
 }
 func (m *ListBookingsRequest) XXX_Size() int {
 	return xxx_messageInfo_ListBookingsRequest.Size(m)
@@ -1542,16 +1593,17 @@
 func (m *ListBookingsResponse) String() string { return proto.CompactTextString(m) }
 func (*ListBookingsResponse) ProtoMessage()    {}
 func (*ListBookingsResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{17}
+	return fileDescriptor_1820d8e1a9fad753, []int{17}
 }
+
 func (m *ListBookingsResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ListBookingsResponse.Unmarshal(m, b)
 }
 func (m *ListBookingsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_ListBookingsResponse.Marshal(b, m, deterministic)
 }
-func (dst *ListBookingsResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListBookingsResponse.Merge(dst, src)
+func (m *ListBookingsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListBookingsResponse.Merge(m, src)
 }
 func (m *ListBookingsResponse) XXX_Size() int {
 	return xxx_messageInfo_ListBookingsResponse.Size(m)
@@ -1586,16 +1638,17 @@
 func (m *ListOrdersRequest) String() string { return proto.CompactTextString(m) }
 func (*ListOrdersRequest) ProtoMessage()    {}
 func (*ListOrdersRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{18}
+	return fileDescriptor_1820d8e1a9fad753, []int{18}
 }
+
 func (m *ListOrdersRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ListOrdersRequest.Unmarshal(m, b)
 }
 func (m *ListOrdersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_ListOrdersRequest.Marshal(b, m, deterministic)
 }
-func (dst *ListOrdersRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListOrdersRequest.Merge(dst, src)
+func (m *ListOrdersRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListOrdersRequest.Merge(m, src)
 }
 func (m *ListOrdersRequest) XXX_Size() int {
 	return xxx_messageInfo_ListOrdersRequest.Size(m)
@@ -1613,11 +1666,13 @@
 type ListOrdersRequest_UserId struct {
 	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3,oneof"`
 }
+
 type ListOrdersRequest_OrderIds_ struct {
 	OrderIds *ListOrdersRequest_OrderIds `protobuf:"bytes,2,opt,name=order_ids,json=orderIds,proto3,oneof"`
 }
 
-func (*ListOrdersRequest_UserId) isListOrdersRequest_Ids()    {}
+func (*ListOrdersRequest_UserId) isListOrdersRequest_Ids() {}
+
 func (*ListOrdersRequest_OrderIds_) isListOrdersRequest_Ids() {}
 
 func (m *ListOrdersRequest) GetIds() isListOrdersRequest_Ids {
@@ -1722,16 +1777,17 @@
 func (m *ListOrdersRequest_OrderIds) String() string { return proto.CompactTextString(m) }
 func (*ListOrdersRequest_OrderIds) ProtoMessage()    {}
 func (*ListOrdersRequest_OrderIds) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{18, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{18, 0}
 }
+
 func (m *ListOrdersRequest_OrderIds) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ListOrdersRequest_OrderIds.Unmarshal(m, b)
 }
 func (m *ListOrdersRequest_OrderIds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_ListOrdersRequest_OrderIds.Marshal(b, m, deterministic)
 }
-func (dst *ListOrdersRequest_OrderIds) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListOrdersRequest_OrderIds.Merge(dst, src)
+func (m *ListOrdersRequest_OrderIds) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListOrdersRequest_OrderIds.Merge(m, src)
 }
 func (m *ListOrdersRequest_OrderIds) XXX_Size() int {
 	return xxx_messageInfo_ListOrdersRequest_OrderIds.Size(m)
@@ -1762,16 +1818,17 @@
 func (m *ListOrdersResponse) String() string { return proto.CompactTextString(m) }
 func (*ListOrdersResponse) ProtoMessage()    {}
 func (*ListOrdersResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{19}
+	return fileDescriptor_1820d8e1a9fad753, []int{19}
 }
+
 func (m *ListOrdersResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ListOrdersResponse.Unmarshal(m, b)
 }
 func (m *ListOrdersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_ListOrdersResponse.Marshal(b, m, deterministic)
 }
-func (dst *ListOrdersResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ListOrdersResponse.Merge(dst, src)
+func (m *ListOrdersResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListOrdersResponse.Merge(m, src)
 }
 func (m *ListOrdersResponse) XXX_Size() int {
 	return xxx_messageInfo_ListOrdersResponse.Size(m)
@@ -1805,16 +1862,17 @@
 func (m *UpdateBookingRequest) String() string { return proto.CompactTextString(m) }
 func (*UpdateBookingRequest) ProtoMessage()    {}
 func (*UpdateBookingRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{20}
+	return fileDescriptor_1820d8e1a9fad753, []int{20}
 }
+
 func (m *UpdateBookingRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_UpdateBookingRequest.Unmarshal(m, b)
 }
 func (m *UpdateBookingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_UpdateBookingRequest.Marshal(b, m, deterministic)
 }
-func (dst *UpdateBookingRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_UpdateBookingRequest.Merge(dst, src)
+func (m *UpdateBookingRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateBookingRequest.Merge(m, src)
 }
 func (m *UpdateBookingRequest) XXX_Size() int {
 	return xxx_messageInfo_UpdateBookingRequest.Size(m)
@@ -1858,16 +1916,17 @@
 func (m *UpdateBookingResponse) String() string { return proto.CompactTextString(m) }
 func (*UpdateBookingResponse) ProtoMessage()    {}
 func (*UpdateBookingResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{21}
+	return fileDescriptor_1820d8e1a9fad753, []int{21}
 }
+
 func (m *UpdateBookingResponse) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_UpdateBookingResponse.Unmarshal(m, b)
 }
 func (m *UpdateBookingResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_UpdateBookingResponse.Marshal(b, m, deterministic)
 }
-func (dst *UpdateBookingResponse) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_UpdateBookingResponse.Merge(dst, src)
+func (m *UpdateBookingResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateBookingResponse.Merge(m, src)
 }
 func (m *UpdateBookingResponse) XXX_Size() int {
 	return xxx_messageInfo_UpdateBookingResponse.Size(m)
@@ -1921,16 +1980,17 @@
 func (m *Booking) String() string { return proto.CompactTextString(m) }
 func (*Booking) ProtoMessage()    {}
 func (*Booking) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{22}
+	return fileDescriptor_1820d8e1a9fad753, []int{22}
 }
+
 func (m *Booking) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Booking.Unmarshal(m, b)
 }
 func (m *Booking) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Booking.Marshal(b, m, deterministic)
 }
-func (dst *Booking) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Booking.Merge(dst, src)
+func (m *Booking) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Booking.Merge(m, src)
 }
 func (m *Booking) XXX_Size() int {
 	return xxx_messageInfo_Booking.Size(m)
@@ -1996,16 +2056,17 @@
 func (m *BookingFailure) String() string { return proto.CompactTextString(m) }
 func (*BookingFailure) ProtoMessage()    {}
 func (*BookingFailure) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{23}
+	return fileDescriptor_1820d8e1a9fad753, []int{23}
 }
+
 func (m *BookingFailure) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_BookingFailure.Unmarshal(m, b)
 }
 func (m *BookingFailure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_BookingFailure.Marshal(b, m, deterministic)
 }
-func (dst *BookingFailure) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_BookingFailure.Merge(dst, src)
+func (m *BookingFailure) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BookingFailure.Merge(m, src)
 }
 func (m *BookingFailure) XXX_Size() int {
 	return xxx_messageInfo_BookingFailure.Size(m)
@@ -2061,16 +2122,17 @@
 func (m *Order) String() string { return proto.CompactTextString(m) }
 func (*Order) ProtoMessage()    {}
 func (*Order) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{24}
+	return fileDescriptor_1820d8e1a9fad753, []int{24}
 }
+
 func (m *Order) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Order.Unmarshal(m, b)
 }
 func (m *Order) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Order.Marshal(b, m, deterministic)
 }
-func (dst *Order) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Order.Merge(dst, src)
+func (m *Order) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Order.Merge(m, src)
 }
 func (m *Order) XXX_Size() int {
 	return xxx_messageInfo_Order.Size(m)
@@ -2147,16 +2209,17 @@
 func (m *LineItem) String() string { return proto.CompactTextString(m) }
 func (*LineItem) ProtoMessage()    {}
 func (*LineItem) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{25}
+	return fileDescriptor_1820d8e1a9fad753, []int{25}
 }
+
 func (m *LineItem) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_LineItem.Unmarshal(m, b)
 }
 func (m *LineItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_LineItem.Marshal(b, m, deterministic)
 }
-func (dst *LineItem) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_LineItem.Merge(dst, src)
+func (m *LineItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LineItem.Merge(m, src)
 }
 func (m *LineItem) XXX_Size() int {
 	return xxx_messageInfo_LineItem.Size(m)
@@ -2221,16 +2284,17 @@
 func (m *LineItem_OrderedTickets) String() string { return proto.CompactTextString(m) }
 func (*LineItem_OrderedTickets) ProtoMessage()    {}
 func (*LineItem_OrderedTickets) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{25, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{25, 0}
 }
+
 func (m *LineItem_OrderedTickets) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_LineItem_OrderedTickets.Unmarshal(m, b)
 }
 func (m *LineItem_OrderedTickets) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_LineItem_OrderedTickets.Marshal(b, m, deterministic)
 }
-func (dst *LineItem_OrderedTickets) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_LineItem_OrderedTickets.Merge(dst, src)
+func (m *LineItem_OrderedTickets) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LineItem_OrderedTickets.Merge(m, src)
 }
 func (m *LineItem_OrderedTickets) XXX_Size() int {
 	return xxx_messageInfo_LineItem_OrderedTickets.Size(m)
@@ -2276,16 +2340,17 @@
 func (m *OrderFailure) String() string { return proto.CompactTextString(m) }
 func (*OrderFailure) ProtoMessage()    {}
 func (*OrderFailure) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{26}
+	return fileDescriptor_1820d8e1a9fad753, []int{26}
 }
+
 func (m *OrderFailure) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_OrderFailure.Unmarshal(m, b)
 }
 func (m *OrderFailure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_OrderFailure.Marshal(b, m, deterministic)
 }
-func (dst *OrderFailure) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_OrderFailure.Merge(dst, src)
+func (m *OrderFailure) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OrderFailure.Merge(m, src)
 }
 func (m *OrderFailure) XXX_Size() int {
 	return xxx_messageInfo_OrderFailure.Size(m)
@@ -2340,16 +2405,17 @@
 func (m *OrderFulfillability) String() string { return proto.CompactTextString(m) }
 func (*OrderFulfillability) ProtoMessage()    {}
 func (*OrderFulfillability) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{27}
+	return fileDescriptor_1820d8e1a9fad753, []int{27}
 }
+
 func (m *OrderFulfillability) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_OrderFulfillability.Unmarshal(m, b)
 }
 func (m *OrderFulfillability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_OrderFulfillability.Marshal(b, m, deterministic)
 }
-func (dst *OrderFulfillability) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_OrderFulfillability.Merge(dst, src)
+func (m *OrderFulfillability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OrderFulfillability.Merge(m, src)
 }
 func (m *OrderFulfillability) XXX_Size() int {
 	return xxx_messageInfo_OrderFulfillability.Size(m)
@@ -2406,16 +2472,17 @@
 func (m *LineItemFulfillability) String() string { return proto.CompactTextString(m) }
 func (*LineItemFulfillability) ProtoMessage()    {}
 func (*LineItemFulfillability) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{28}
+	return fileDescriptor_1820d8e1a9fad753, []int{28}
 }
+
 func (m *LineItemFulfillability) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_LineItemFulfillability.Unmarshal(m, b)
 }
 func (m *LineItemFulfillability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_LineItemFulfillability.Marshal(b, m, deterministic)
 }
-func (dst *LineItemFulfillability) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_LineItemFulfillability.Merge(dst, src)
+func (m *LineItemFulfillability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LineItemFulfillability.Merge(m, src)
 }
 func (m *LineItemFulfillability) XXX_Size() int {
 	return xxx_messageInfo_LineItemFulfillability.Size(m)
@@ -2480,16 +2547,17 @@
 }
 func (*LineItemFulfillability_UpdatedAvailability) ProtoMessage() {}
 func (*LineItemFulfillability_UpdatedAvailability) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{28, 0}
+	return fileDescriptor_1820d8e1a9fad753, []int{28, 0}
 }
+
 func (m *LineItemFulfillability_UpdatedAvailability) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Unmarshal(m, b)
 }
 func (m *LineItemFulfillability_UpdatedAvailability) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Marshal(b, m, deterministic)
 }
-func (dst *LineItemFulfillability_UpdatedAvailability) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Merge(dst, src)
+func (m *LineItemFulfillability_UpdatedAvailability) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Merge(m, src)
 }
 func (m *LineItemFulfillability_UpdatedAvailability) XXX_Size() int {
 	return xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Size(m)
@@ -2529,16 +2597,17 @@
 func (m *TicketType) String() string { return proto.CompactTextString(m) }
 func (*TicketType) ProtoMessage()    {}
 func (*TicketType) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{29}
+	return fileDescriptor_1820d8e1a9fad753, []int{29}
 }
+
 func (m *TicketType) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_TicketType.Unmarshal(m, b)
 }
 func (m *TicketType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_TicketType.Marshal(b, m, deterministic)
 }
-func (dst *TicketType) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_TicketType.Merge(dst, src)
+func (m *TicketType) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TicketType.Merge(m, src)
 }
 func (m *TicketType) XXX_Size() int {
 	return xxx_messageInfo_TicketType.Size(m)
@@ -2590,16 +2659,17 @@
 func (m *ResourceIds) String() string { return proto.CompactTextString(m) }
 func (*ResourceIds) ProtoMessage()    {}
 func (*ResourceIds) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{30}
+	return fileDescriptor_1820d8e1a9fad753, []int{30}
 }
+
 func (m *ResourceIds) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_ResourceIds.Unmarshal(m, b)
 }
 func (m *ResourceIds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_ResourceIds.Marshal(b, m, deterministic)
 }
-func (dst *ResourceIds) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ResourceIds.Merge(dst, src)
+func (m *ResourceIds) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResourceIds.Merge(m, src)
 }
 func (m *ResourceIds) XXX_Size() int {
 	return xxx_messageInfo_ResourceIds.Size(m)
@@ -2676,16 +2746,17 @@
 func (m *PaymentProcessingParameters) String() string { return proto.CompactTextString(m) }
 func (*PaymentProcessingParameters) ProtoMessage()    {}
 func (*PaymentProcessingParameters) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{31}
+	return fileDescriptor_1820d8e1a9fad753, []int{31}
 }
+
 func (m *PaymentProcessingParameters) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PaymentProcessingParameters.Unmarshal(m, b)
 }
 func (m *PaymentProcessingParameters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_PaymentProcessingParameters.Marshal(b, m, deterministic)
 }
-func (dst *PaymentProcessingParameters) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_PaymentProcessingParameters.Merge(dst, src)
+func (m *PaymentProcessingParameters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PaymentProcessingParameters.Merge(m, src)
 }
 func (m *PaymentProcessingParameters) XXX_Size() int {
 	return xxx_messageInfo_PaymentProcessingParameters.Size(m)
@@ -2769,16 +2840,17 @@
 func (m *UserPaymentOption) String() string { return proto.CompactTextString(m) }
 func (*UserPaymentOption) ProtoMessage()    {}
 func (*UserPaymentOption) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{32}
+	return fileDescriptor_1820d8e1a9fad753, []int{32}
 }
+
 func (m *UserPaymentOption) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_UserPaymentOption.Unmarshal(m, b)
 }
 func (m *UserPaymentOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_UserPaymentOption.Marshal(b, m, deterministic)
 }
-func (dst *UserPaymentOption) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_UserPaymentOption.Merge(dst, src)
+func (m *UserPaymentOption) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserPaymentOption.Merge(m, src)
 }
 func (m *UserPaymentOption) XXX_Size() int {
 	return xxx_messageInfo_UserPaymentOption.Size(m)
@@ -2907,16 +2979,17 @@
 func (m *PaymentInformation) String() string { return proto.CompactTextString(m) }
 func (*PaymentInformation) ProtoMessage()    {}
 func (*PaymentInformation) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{33}
+	return fileDescriptor_1820d8e1a9fad753, []int{33}
 }
+
 func (m *PaymentInformation) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PaymentInformation.Unmarshal(m, b)
 }
 func (m *PaymentInformation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_PaymentInformation.Marshal(b, m, deterministic)
 }
-func (dst *PaymentInformation) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_PaymentInformation.Merge(dst, src)
+func (m *PaymentInformation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PaymentInformation.Merge(m, src)
 }
 func (m *PaymentInformation) XXX_Size() int {
 	return xxx_messageInfo_PaymentInformation.Size(m)
@@ -2927,27 +3000,6 @@
 
 var xxx_messageInfo_PaymentInformation proto.InternalMessageInfo
 
-type isPaymentInformation_PaymentId interface {
-	isPaymentInformation_PaymentId()
-}
-
-type PaymentInformation_PaymentOptionId struct {
-	PaymentOptionId string `protobuf:"bytes,6,opt,name=payment_option_id,json=paymentOptionId,proto3,oneof"`
-}
-type PaymentInformation_UserPaymentOptionId struct {
-	UserPaymentOptionId string `protobuf:"bytes,7,opt,name=user_payment_option_id,json=userPaymentOptionId,proto3,oneof"`
-}
-
-func (*PaymentInformation_PaymentOptionId) isPaymentInformation_PaymentId()     {}
-func (*PaymentInformation_UserPaymentOptionId) isPaymentInformation_PaymentId() {}
-
-func (m *PaymentInformation) GetPaymentId() isPaymentInformation_PaymentId {
-	if m != nil {
-		return m.PaymentId
-	}
-	return nil
-}
-
 func (m *PaymentInformation) GetPrepaymentStatus() PrepaymentStatus {
 	if m != nil {
 		return m.PrepaymentStatus
@@ -2983,6 +3035,29 @@
 	return PaymentInformation_PAYMENT_PROCESSED_BY_UNSPECIFIED
 }
 
+type isPaymentInformation_PaymentId interface {
+	isPaymentInformation_PaymentId()
+}
+
+type PaymentInformation_PaymentOptionId struct {
+	PaymentOptionId string `protobuf:"bytes,6,opt,name=payment_option_id,json=paymentOptionId,proto3,oneof"`
+}
+
+type PaymentInformation_UserPaymentOptionId struct {
+	UserPaymentOptionId string `protobuf:"bytes,7,opt,name=user_payment_option_id,json=userPaymentOptionId,proto3,oneof"`
+}
+
+func (*PaymentInformation_PaymentOptionId) isPaymentInformation_PaymentId() {}
+
+func (*PaymentInformation_UserPaymentOptionId) isPaymentInformation_PaymentId() {}
+
+func (m *PaymentInformation) GetPaymentId() isPaymentInformation_PaymentId {
+	if m != nil {
+		return m.PaymentId
+	}
+	return nil
+}
+
 func (m *PaymentInformation) GetPaymentOptionId() string {
 	if x, ok := m.GetPaymentId().(*PaymentInformation_PaymentOptionId); ok {
 		return x.PaymentOptionId
@@ -3106,16 +3181,17 @@
 func (m *Price) String() string { return proto.CompactTextString(m) }
 func (*Price) ProtoMessage()    {}
 func (*Price) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{34}
+	return fileDescriptor_1820d8e1a9fad753, []int{34}
 }
+
 func (m *Price) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Price.Unmarshal(m, b)
 }
 func (m *Price) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Price.Marshal(b, m, deterministic)
 }
-func (dst *Price) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Price.Merge(dst, src)
+func (m *Price) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Price.Merge(m, src)
 }
 func (m *Price) XXX_Size() int {
 	return xxx_messageInfo_Price.Size(m)
@@ -3164,16 +3240,17 @@
 func (m *NoShowFee) String() string { return proto.CompactTextString(m) }
 func (*NoShowFee) ProtoMessage()    {}
 func (*NoShowFee) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{35}
+	return fileDescriptor_1820d8e1a9fad753, []int{35}
 }
+
 func (m *NoShowFee) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_NoShowFee.Unmarshal(m, b)
 }
 func (m *NoShowFee) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_NoShowFee.Marshal(b, m, deterministic)
 }
-func (dst *NoShowFee) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_NoShowFee.Merge(dst, src)
+func (m *NoShowFee) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NoShowFee.Merge(m, src)
 }
 func (m *NoShowFee) XXX_Size() int {
 	return xxx_messageInfo_NoShowFee.Size(m)
@@ -3216,16 +3293,17 @@
 func (m *Deposit) String() string { return proto.CompactTextString(m) }
 func (*Deposit) ProtoMessage()    {}
 func (*Deposit) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{36}
+	return fileDescriptor_1820d8e1a9fad753, []int{36}
 }
+
 func (m *Deposit) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Deposit.Unmarshal(m, b)
 }
 func (m *Deposit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Deposit.Marshal(b, m, deterministic)
 }
-func (dst *Deposit) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Deposit.Merge(dst, src)
+func (m *Deposit) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Deposit.Merge(m, src)
 }
 func (m *Deposit) XXX_Size() int {
 	return xxx_messageInfo_Deposit.Size(m)
@@ -3283,16 +3361,17 @@
 func (m *Slot) String() string { return proto.CompactTextString(m) }
 func (*Slot) ProtoMessage()    {}
 func (*Slot) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{37}
+	return fileDescriptor_1820d8e1a9fad753, []int{37}
 }
+
 func (m *Slot) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Slot.Unmarshal(m, b)
 }
 func (m *Slot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Slot.Marshal(b, m, deterministic)
 }
-func (dst *Slot) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Slot.Merge(dst, src)
+func (m *Slot) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Slot.Merge(m, src)
 }
 func (m *Slot) XXX_Size() int {
 	return xxx_messageInfo_Slot.Size(m)
@@ -3369,16 +3448,17 @@
 func (m *UserInformation) String() string { return proto.CompactTextString(m) }
 func (*UserInformation) ProtoMessage()    {}
 func (*UserInformation) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{38}
+	return fileDescriptor_1820d8e1a9fad753, []int{38}
 }
+
 func (m *UserInformation) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_UserInformation.Unmarshal(m, b)
 }
 func (m *UserInformation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_UserInformation.Marshal(b, m, deterministic)
 }
-func (dst *UserInformation) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_UserInformation.Merge(dst, src)
+func (m *UserInformation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserInformation.Merge(m, src)
 }
 func (m *UserInformation) XXX_Size() int {
 	return xxx_messageInfo_UserInformation.Size(m)
@@ -3452,16 +3532,17 @@
 func (m *PostalAddress) String() string { return proto.CompactTextString(m) }
 func (*PostalAddress) ProtoMessage()    {}
 func (*PostalAddress) Descriptor() ([]byte, []int) {
-	return fileDescriptor_v3_e164fdd8b81531d4, []int{39}
+	return fileDescriptor_1820d8e1a9fad753, []int{39}
 }
+
 func (m *PostalAddress) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_PostalAddress.Unmarshal(m, b)
 }
 func (m *PostalAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_PostalAddress.Marshal(b, m, deterministic)
 }
-func (dst *PostalAddress) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_PostalAddress.Merge(dst, src)
+func (m *PostalAddress) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PostalAddress.Merge(m, src)
 }
 func (m *PostalAddress) XXX_Size() int {
 	return xxx_messageInfo_PostalAddress.Size(m)
@@ -3565,213 +3646,215 @@
 	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy", PaymentInformation_PaymentProcessedBy_name, PaymentInformation_PaymentProcessedBy_value)
 }
 
-func init() { proto.RegisterFile("v3.proto", fileDescriptor_v3_e164fdd8b81531d4) }
+func init() { proto.RegisterFile("v3.proto", fileDescriptor_1820d8e1a9fad753) }
 
-var fileDescriptor_v3_e164fdd8b81531d4 = []byte{
-	// 3278 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3a, 0xcd, 0x6f, 0x1b, 0xc7,
-	0xf5, 0x5e, 0x7e, 0x88, 0xe2, 0xa3, 0x44, 0xad, 0x46, 0x8a, 0x4d, 0xf9, 0x23, 0x96, 0x37, 0x76,
-	0xe2, 0xc8, 0x89, 0xf2, 0x8b, 0xec, 0xe0, 0x97, 0x14, 0x45, 0xda, 0x15, 0x39, 0xb2, 0x36, 0xa1,
-	0x48, 0x66, 0xb8, 0x94, 0xed, 0x1c, 0xba, 0x59, 0x73, 0x47, 0xf2, 0xd6, 0x24, 0x97, 0xd9, 0x5d,
-	0x2a, 0x56, 0xd0, 0xdc, 0x7a, 0xed, 0xa1, 0xe8, 0xa1, 0xe8, 0xa1, 0xc7, 0x1c, 0x0a, 0xb4, 0x40,
-	0x0f, 0xbd, 0x14, 0xbd, 0x14, 0x28, 0xd0, 0x4b, 0x91, 0x53, 0x0f, 0xed, 0xa9, 0x87, 0xa2, 0x87,
-	0xfe, 0x0b, 0x01, 0x8a, 0xa2, 0x98, 0x8f, 0xe5, 0xc7, 0x92, 0xa2, 0x28, 0xc5, 0xee, 0xa5, 0x17,
-	0x41, 0xf3, 0xbe, 0xe6, 0xcd, 0x7b, 0x6f, 0xde, 0x7b, 0xf3, 0x96, 0x30, 0x7f, 0x74, 0x77, 0xb3,
-	0xeb, 0x7b, 0xa1, 0x87, 0xae, 0xd0, 0x67, 0xe1, 0x66, 0xdb, 0xee, 0x06, 0x9b, 0x8f, 0x3d, 0xef,
-	0xa9, 0xdb, 0x39, 0xdc, 0xec, 0xda, 0x7e, 0xd8, 0xa1, 0xfe, 0xe6, 0xd1, 0x5d, 0xed, 0x23, 0x28,
-	0x14, 0x9f, 0xd0, 0xe6, 0x53, 0xfd, 0xc8, 0x76, 0x5b, 0xf6, 0x63, 0xb7, 0xe5, 0x86, 0xc7, 0x84,
-	0x7e, 0xda, 0xa3, 0x41, 0x88, 0xde, 0x81, 0x54, 0xd0, 0xf2, 0xc2, 0x82, 0xb2, 0xae, 0xdc, 0xce,
-	0x6d, 0xdd, 0xd8, 0x9c, 0x22, 0x67, 0xb3, 0xde, 0xf2, 0x42, 0xc2, 0xc9, 0xb5, 0x3f, 0x25, 0x61,
-	0x6d, 0x82, 0xcc, 0xa0, 0xeb, 0x75, 0x02, 0x7a, 0x4e, 0xa1, 0xe8, 0x35, 0x58, 0x6a, 0x7a, 0xbd,
-	0x4e, 0x68, 0xd9, 0x42, 0x68, 0x8b, 0x16, 0x12, 0xeb, 0xca, 0xed, 0x34, 0xc9, 0x73, 0xb0, 0x1e,
-	0x41, 0xd1, 0x17, 0xb0, 0xea, 0xf4, 0x7c, 0x3b, 0x74, 0xbd, 0x8e, 0xe5, 0xd3, 0x4f, 0x7b, 0xae,
-	0x4f, 0xdb, 0xb4, 0x13, 0x16, 0x92, 0xeb, 0xca, 0xed, 0xfc, 0xd6, 0x07, 0x53, 0xf7, 0x3b, 0x51,
-	0xeb, 0xcd, 0x92, 0x14, 0x49, 0x06, 0x12, 0xc9, 0x8a, 0x33, 0x0e, 0x44, 0x9f, 0xc0, 0x8a, 0x3d,
-	0x24, 0xc0, 0xea, 0x75, 0x1d, 0x3b, 0xa4, 0x85, 0x14, 0x3f, 0xed, 0x5b, 0x53, 0x77, 0x1f, 0xde,
-	0xb8, 0xc1, 0xd9, 0x08, 0xb2, 0xc7, 0x60, 0x5a, 0x1b, 0x56, 0x26, 0x68, 0x83, 0x6e, 0xc2, 0x7a,
-	0xa9, 0x41, 0x74, 0xd3, 0xa8, 0x56, 0x2c, 0x82, 0x3f, 0x6a, 0x18, 0x04, 0xef, 0xe1, 0x8a, 0x69,
-	0x35, 0x2a, 0xf5, 0x1a, 0x2e, 0x1a, 0x3b, 0x06, 0x2e, 0xa9, 0x17, 0x50, 0x01, 0x56, 0x4b, 0x55,
-	0xab, 0x52, 0x35, 0xad, 0xfa, 0x6e, 0xf5, 0x81, 0x15, 0x71, 0xa8, 0x0a, 0xba, 0x08, 0x68, 0xaf,
-	0x51, 0x8f, 0xc3, 0x13, 0x5a, 0x17, 0xd0, 0xb8, 0x62, 0xe8, 0x63, 0x58, 0x66, 0x6e, 0xb1, 0x86,
-	0xf5, 0x2b, 0x28, 0xeb, 0xc9, 0xdb, 0xb9, 0xad, 0x37, 0x4f, 0x75, 0xe9, 0x88, 0x85, 0xd5, 0x20,
-	0x06, 0xd1, 0x7c, 0x50, 0xe3, 0x54, 0x2f, 0x3a, 0x6a, 0xb4, 0x2f, 0xe0, 0x3a, 0x77, 0x7e, 0xd5,
-	0x77, 0xa8, 0xbf, 0xd3, 0x6b, 0x1d, 0xb8, 0xad, 0xf8, 0x6d, 0xb8, 0x0e, 0xb9, 0x36, 0xf5, 0x9b,
-	0x4f, 0xec, 0x4e, 0x68, 0xb9, 0x0e, 0xd7, 0x24, 0x4b, 0x20, 0x02, 0x19, 0x0e, 0x7a, 0x0f, 0x52,
-	0x6e, 0x48, 0xdb, 0x85, 0x04, 0x37, 0xc3, 0xad, 0xa9, 0x3a, 0x96, 0xdd, 0x0e, 0x35, 0x42, 0xda,
-	0x26, 0x9c, 0x45, 0xfb, 0xa3, 0x02, 0xeb, 0x27, 0xef, 0x2f, 0x6f, 0xce, 0x43, 0xc8, 0x1f, 0x8c,
-	0x60, 0xa4, 0x35, 0xfe, 0x6f, 0xea, 0x4e, 0x93, 0x24, 0xc6, 0xe4, 0xa0, 0x5d, 0xc8, 0x1f, 0x50,
-	0x1a, 0x58, 0x76, 0xc7, 0xb1, 0x42, 0xfb, 0x19, 0x0d, 0xb8, 0x95, 0x72, 0x5b, 0xda, 0x54, 0xc9,
-	0x35, 0xdf, 0x6d, 0x52, 0xb2, 0xc0, 0x38, 0xf5, 0x8e, 0x63, 0x32, 0x3e, 0xed, 0x5d, 0xb8, 0x74,
-	0x9f, 0x86, 0xdb, 0x82, 0xb8, 0x1e, 0xda, 0x61, 0x2f, 0x88, 0xec, 0x77, 0x0d, 0x40, 0x0a, 0x19,
-	0x98, 0x2f, 0x2b, 0x21, 0x86, 0xa3, 0xfd, 0x53, 0x81, 0xc2, 0x38, 0xab, 0x3c, 0xfa, 0x74, 0x5e,
-	0xf4, 0x11, 0xe4, 0x23, 0x74, 0xc0, 0x19, 0xb9, 0xfe, 0xf9, 0xad, 0x8d, 0xa9, 0xfa, 0x8f, 0x6e,
-	0xb5, 0xf8, 0x78, 0x78, 0xc9, 0x02, 0xbc, 0xeb, 0xd3, 0xae, 0x7d, 0xcc, 0x2e, 0x57, 0x24, 0x55,
-	0xe4, 0x90, 0x37, 0x4f, 0xb1, 0x4a, 0xc4, 0x25, 0x05, 0xab, 0xdd, 0x18, 0x44, 0xfb, 0x65, 0x0a,
-	0x56, 0x8b, 0x3e, 0xb5, 0x43, 0x2a, 0x55, 0xf8, 0x66, 0x09, 0x17, 0xed, 0x42, 0xb6, 0x45, 0xed,
-	0x80, 0x5a, 0x3e, 0x3d, 0x90, 0x9e, 0xbb, 0x33, 0x3d, 0xfa, 0x18, 0x35, 0xa1, 0x07, 0xd4, 0xa7,
-	0x9d, 0x26, 0x25, 0xf3, 0x2d, 0xb9, 0x46, 0x0f, 0x40, 0xed, 0x05, 0xd4, 0xb7, 0xdc, 0xce, 0x81,
-	0xe7, 0xb7, 0x79, 0x8e, 0xe1, 0x87, 0xce, 0x6d, 0xbd, 0x31, 0x55, 0x60, 0x23, 0xa0, 0xbe, 0x31,
-	0xe0, 0x21, 0x4b, 0xbd, 0x51, 0x00, 0x4b, 0x8b, 0x91, 0x2d, 0x87, 0x65, 0xcf, 0x92, 0x16, 0x6b,
-	0x82, 0x6f, 0x58, 0x3c, 0xea, 0x8e, 0xc1, 0xd0, 0x0f, 0xe0, 0x5a, 0xb4, 0x43, 0xd7, 0xf7, 0x9a,
-	0x34, 0x08, 0x58, 0x38, 0x74, 0x6d, 0xdf, 0x6e, 0xd3, 0x90, 0xfa, 0x41, 0x21, 0xcd, 0xf7, 0x7a,
-	0x77, 0x96, 0xbd, 0x6a, 0x7d, 0x01, 0xb5, 0x3e, 0x3f, 0xb9, 0xd2, 0x3d, 0x19, 0x89, 0xee, 0xc0,
-	0xb2, 0xeb, 0xd0, 0x76, 0xd7, 0x0b, 0x69, 0xa7, 0x79, 0x6c, 0x85, 0xde, 0x53, 0xda, 0x29, 0xcc,
-	0xf1, 0x38, 0x55, 0x87, 0x10, 0x26, 0x83, 0xa3, 0x37, 0x01, 0xd9, 0x8e, 0xe3, 0x32, 0xb5, 0xed,
-	0x16, 0x2f, 0x52, 0x34, 0x08, 0x0b, 0x19, 0x4e, 0xbd, 0x3c, 0xc0, 0xc8, 0xa8, 0xd0, 0x7e, 0x94,
-	0x80, 0x97, 0x62, 0xe1, 0x22, 0xaf, 0xc5, 0xfb, 0x90, 0x91, 0x87, 0x90, 0x21, 0x73, 0x73, 0x96,
-	0x80, 0x27, 0x11, 0x13, 0xfa, 0x1e, 0xac, 0x70, 0x77, 0x47, 0x86, 0xf3, 0xba, 0xdc, 0x2b, 0x22,
-	0x84, 0x36, 0x4f, 0xf5, 0xb8, 0xb4, 0x56, 0x95, 0x73, 0x91, 0xe5, 0x5e, 0x1c, 0x84, 0x4c, 0x58,
-	0x8a, 0xee, 0xe5, 0x81, 0xed, 0xb6, 0x7a, 0x3e, 0x95, 0xd1, 0x74, 0x67, 0x16, 0x3d, 0x77, 0x04,
-	0x0b, 0x89, 0xee, 0xb6, 0x5c, 0x6b, 0x15, 0x40, 0xc2, 0x1c, 0x32, 0x8c, 0xc5, 0xdd, 0x79, 0x17,
-	0xd2, 0x3c, 0x8c, 0xa5, 0x25, 0xb4, 0x19, 0x2e, 0x80, 0x60, 0xd0, 0xbe, 0x54, 0x60, 0x65, 0x44,
-	0xa0, 0xb4, 0xee, 0xb9, 0x25, 0x4e, 0x3a, 0x77, 0xe2, 0x9b, 0x9f, 0xfb, 0x77, 0x0a, 0xa4, 0xf9,
-	0x36, 0x68, 0x0d, 0xc4, 0x95, 0x1d, 0x24, 0xc3, 0x0c, 0x5f, 0x1b, 0x4e, 0x3f, 0x85, 0x24, 0xce,
-	0x96, 0x42, 0x6e, 0x41, 0x9e, 0x47, 0x82, 0x1f, 0x25, 0x05, 0xee, 0xa8, 0x2c, 0x59, 0x64, 0xd0,
-	0x7e, 0xa6, 0x40, 0xef, 0xc1, 0x9a, 0xd8, 0x98, 0x3e, 0xeb, 0xba, 0xb2, 0xc9, 0x0a, 0xdd, 0x36,
-	0xb5, 0x02, 0xda, 0xe4, 0x97, 0x39, 0x49, 0x2e, 0x72, 0x02, 0xdc, 0xc7, 0x9b, 0x6e, 0x9b, 0xd6,
-	0x69, 0x53, 0xbb, 0x03, 0xf9, 0xd1, 0xb4, 0x33, 0xe5, 0x14, 0xda, 0xd7, 0x4a, 0xe4, 0x63, 0x5e,
-	0xbe, 0x86, 0x7c, 0xec, 0xb1, 0xf5, 0x4c, 0x1e, 0x11, 0x9c, 0x82, 0xe1, 0xf4, 0xec, 0x90, 0xf8,
-	0xaf, 0x67, 0x87, 0xe4, 0xe4, 0xec, 0xa0, 0xfd, 0xaa, 0x1f, 0x8e, 0xf2, 0xec, 0x32, 0x1c, 0xbf,
-	0x75, 0xe6, 0xc3, 0xef, 0x5e, 0x88, 0x8e, 0x5f, 0x83, 0x45, 0xfe, 0x4f, 0x2c, 0x1c, 0x5f, 0x9f,
-	0xa1, 0x73, 0x10, 0x0c, 0xbb, 0x17, 0xc8, 0x82, 0x37, 0xb4, 0xde, 0x9e, 0x87, 0x39, 0x9f, 0x06,
-	0xbd, 0x56, 0xa8, 0x6d, 0xc2, 0x4a, 0xd9, 0x0d, 0xa2, 0xc2, 0xdd, 0x2f, 0xf7, 0x97, 0x20, 0x23,
-	0x4a, 0x49, 0xe4, 0xdc, 0x39, 0x5e, 0x13, 0x1c, 0xed, 0x21, 0xac, 0x8e, 0xd2, 0xcb, 0xf3, 0x7d,
-	0x17, 0xe6, 0xa5, 0x12, 0x81, 0xec, 0x24, 0x67, 0xcb, 0x66, 0x7d, 0x2e, 0xed, 0x37, 0x0a, 0x2c,
-	0x33, 0xd1, 0x5c, 0xf1, 0xbe, 0x22, 0x6b, 0x31, 0x45, 0x76, 0x2f, 0x44, 0xaa, 0xa0, 0x7d, 0xc8,
-	0x0a, 0xb3, 0xb8, 0x4e, 0x14, 0x01, 0xff, 0x7f, 0x4a, 0xdb, 0x16, 0x93, 0x2e, 0x8c, 0x64, 0x38,
-	0xc1, 0xee, 0x05, 0x32, 0xef, 0xc9, 0xff, 0x2f, 0xdf, 0x82, 0xf9, 0x08, 0xce, 0xa2, 0x3c, 0xda,
-	0x83, 0x1f, 0x2b, 0x4b, 0x32, 0x92, 0x6e, 0x3b, 0x0d, 0x49, 0xd7, 0x09, 0x58, 0x3e, 0x1b, 0x96,
-	0x3b, 0xc8, 0x3e, 0x91, 0xbb, 0x93, 0x67, 0x8a, 0x75, 0x6d, 0x1f, 0x56, 0x45, 0x97, 0x1e, 0xeb,
-	0x2e, 0xbe, 0x61, 0xb5, 0xe0, 0x75, 0x28, 0x26, 0xf8, 0x7f, 0xba, 0x0e, 0xfd, 0x2d, 0x01, 0x19,
-	0x49, 0x72, 0x5a, 0x83, 0x7a, 0xce, 0xac, 0xfc, 0xc2, 0xda, 0xb1, 0x6d, 0x98, 0x93, 0x2d, 0x6d,
-	0xea, 0xcc, 0x8d, 0xb2, 0xe4, 0x3c, 0xa9, 0xa5, 0x4b, 0x3f, 0xb7, 0x96, 0x4e, 0xfb, 0x4b, 0x0a,
-	0xf2, 0xa3, 0x3e, 0x40, 0xf7, 0x21, 0xdd, 0xb4, 0x7b, 0xb2, 0x26, 0xe7, 0xb7, 0xde, 0x3e, 0x83,
-	0xff, 0x36, 0x8b, 0x8c, 0x91, 0x08, 0x7e, 0xf4, 0x08, 0x90, 0x4f, 0xbf, 0x4f, 0x9b, 0x21, 0x75,
-	0xac, 0xa6, 0xed, 0x3b, 0x56, 0x78, 0xdc, 0xa5, 0xf2, 0xd9, 0x30, 0x3d, 0x2a, 0x8a, 0x3e, 0x75,
-	0xdc, 0xb0, 0x68, 0xfb, 0x8e, 0x79, 0xdc, 0xa5, 0x44, 0x8d, 0xc4, 0x44, 0x10, 0xb4, 0x0e, 0x39,
-	0x87, 0x06, 0x4d, 0xdf, 0xed, 0xf6, 0x1d, 0x96, 0x25, 0xc3, 0x20, 0xed, 0xdf, 0x09, 0x48, 0x73,
-	0x6d, 0xd0, 0x4b, 0xb0, 0x5c, 0xd4, 0x1b, 0x75, 0x1c, 0x7b, 0xa6, 0xaf, 0x82, 0x5a, 0x2f, 0x57,
-	0xd9, 0xe3, 0x5d, 0xdf, 0xd7, 0x8d, 0xb2, 0xbe, 0x5d, 0xc6, 0xaa, 0x82, 0xae, 0xc3, 0x15, 0x0e,
-	0xd5, 0xcb, 0x04, 0xeb, 0xa5, 0x47, 0xd6, 0x76, 0xb5, 0xfa, 0x21, 0x2e, 0x59, 0xdb, 0x8f, 0xac,
-	0x46, 0x1d, 0x13, 0x35, 0x81, 0x96, 0x61, 0xb1, 0x8c, 0xf5, 0x3a, 0xb6, 0xf0, 0xc3, 0x9a, 0x41,
-	0x70, 0x49, 0x4d, 0x32, 0x9e, 0x6a, 0xc3, 0xac, 0x1b, 0x25, 0x6c, 0x15, 0xf5, 0x4a, 0x11, 0x97,
-	0xcb, 0x62, 0x44, 0xf0, 0xc0, 0xa8, 0x94, 0xaa, 0x0f, 0xd4, 0x14, 0xba, 0x09, 0xeb, 0x35, 0xfd,
-	0x11, 0x1f, 0x15, 0x60, 0x42, 0xaa, 0xc4, 0x2a, 0xea, 0xa4, 0x64, 0x99, 0x8f, 0x6a, 0xd8, 0x22,
-	0xf8, 0x03, 0x5c, 0x34, 0x71, 0x49, 0x4d, 0x33, 0x31, 0x13, 0xa8, 0x4a, 0xb8, 0x58, 0x36, 0x2a,
-	0xb8, 0xa4, 0xce, 0xa1, 0xab, 0x50, 0x88, 0x08, 0xaa, 0x35, 0xbe, 0x43, 0xa5, 0x6a, 0x5a, 0xfb,
-	0x7a, 0xd9, 0x28, 0xa9, 0x19, 0xa6, 0xd8, 0x08, 0xbb, 0x3a, 0x8f, 0x34, 0x78, 0x99, 0x69, 0xcd,
-	0xb4, 0x62, 0x94, 0xcc, 0x06, 0xa3, 0x02, 0xd4, 0x2c, 0xba, 0x06, 0x6b, 0xec, 0x8c, 0x46, 0xe5,
-	0x7e, 0xff, 0xcc, 0xf2, 0x10, 0xb8, 0xa4, 0x02, 0xba, 0x02, 0x97, 0x22, 0x34, 0x13, 0x11, 0x9d,
-	0x8f, 0x19, 0x2b, 0xc7, 0x90, 0xd5, 0x7d, 0x4c, 0xca, 0x7a, 0xad, 0xc6, 0x08, 0x08, 0xae, 0x63,
-	0xb2, 0x2f, 0x86, 0x1a, 0x0b, 0xda, 0x6f, 0x13, 0x90, 0xe6, 0x39, 0x33, 0x96, 0x9e, 0x95, 0xa1,
-	0xf4, 0x3c, 0xf1, 0xf6, 0x25, 0x5e, 0xe0, 0x63, 0x28, 0xf9, 0xfc, 0x1e, 0x43, 0xb1, 0x59, 0x45,
-	0xea, 0xc4, 0x59, 0x45, 0xfa, 0xec, 0xb3, 0x8a, 0x7f, 0x25, 0x60, 0x3e, 0x02, 0xb1, 0xbc, 0x17,
-	0x50, 0xff, 0xc8, 0x6d, 0x0e, 0x75, 0x71, 0x59, 0x09, 0x31, 0x1c, 0x74, 0x05, 0xb2, 0x41, 0x68,
-	0xfb, 0x21, 0xef, 0x0f, 0x13, 0xbc, 0x3f, 0x9c, 0xe7, 0x80, 0x3a, 0x6d, 0xa2, 0x1b, 0xb0, 0xd0,
-	0x9f, 0xd4, 0x31, 0x7c, 0x92, 0xe3, 0x73, 0x11, 0x8c, 0x91, 0x54, 0x20, 0x13, 0xba, 0xcd, 0xa7,
-	0x34, 0x64, 0x89, 0x8a, 0x69, 0x7a, 0x6f, 0x26, 0x4d, 0x45, 0x3d, 0xa4, 0x8e, 0x29, 0x78, 0x49,
-	0x24, 0x84, 0x15, 0xd5, 0xae, 0xef, 0x36, 0xa9, 0xcc, 0x52, 0xb3, 0xcc, 0x37, 0x04, 0xc3, 0x50,
-	0xc6, 0x9c, 0x3b, 0x6f, 0xc6, 0xbc, 0x5c, 0x84, 0xfc, 0xa8, 0x62, 0xcc, 0x3e, 0x42, 0xb5, 0x81,
-	0xf5, 0xe6, 0x05, 0xc0, 0x70, 0xd0, 0x2a, 0xa4, 0xf9, 0x94, 0x4a, 0x8e, 0xac, 0xc4, 0x42, 0xfb,
-	0x7d, 0x12, 0x16, 0x86, 0x3b, 0x33, 0x84, 0x47, 0x53, 0xe2, 0x5b, 0x33, 0xf7, 0x74, 0xa3, 0x09,
-	0x71, 0x7c, 0xba, 0x94, 0x78, 0x4e, 0xd3, 0xa5, 0xc9, 0xa9, 0x36, 0xf9, 0x02, 0x52, 0x6d, 0x6a,
-	0x3c, 0xd5, 0xfe, 0x58, 0x39, 0x25, 0xd5, 0x5e, 0x82, 0x95, 0x2a, 0x29, 0x61, 0x62, 0x35, 0x2a,
-	0x3b, 0x8d, 0xf2, 0x8e, 0x51, 0x8e, 0xb2, 0xed, 0x2c, 0x89, 0x31, 0x71, 0x5a, 0x62, 0x4c, 0x8e,
-	0xa7, 0xbe, 0x94, 0xf6, 0xd7, 0x24, 0xac, 0x4c, 0x30, 0x1c, 0x7a, 0x1c, 0xf5, 0xd4, 0xd2, 0x95,
-	0x1f, 0x9c, 0xd5, 0xf4, 0x9b, 0x93, 0xc7, 0x87, 0xbd, 0x56, 0x48, 0xa4, 0x64, 0xe4, 0xc0, 0x0a,
-	0xbb, 0xc5, 0xd6, 0x98, 0xaf, 0xd9, 0xed, 0xba, 0x3b, 0xd3, 0xed, 0x8a, 0xc9, 0x47, 0xee, 0x18,
-	0x0c, 0xbd, 0x0d, 0xab, 0xbd, 0x4e, 0x7f, 0x8b, 0x16, 0xb5, 0x7c, 0x6a, 0x07, 0xfd, 0x5a, 0xb8,
-	0x32, 0x82, 0x23, 0x1c, 0xa5, 0xfd, 0x41, 0x81, 0xb5, 0x13, 0xd5, 0x47, 0x77, 0xe0, 0x35, 0xe1,
-	0xa5, 0xbe, 0x8f, 0x8c, 0xb2, 0x61, 0x3e, 0x62, 0x69, 0xbd, 0x51, 0x8e, 0x0f, 0xb9, 0x97, 0x20,
-	0x57, 0xd4, 0x2b, 0x11, 0xa9, 0xaa, 0xb0, 0x5a, 0x30, 0xe2, 0x5d, 0x8b, 0x39, 0xc7, 0x32, 0x4c,
-	0xbc, 0xa7, 0x26, 0xd0, 0x2d, 0xb8, 0x31, 0x8a, 0x64, 0x85, 0xc2, 0x28, 0x62, 0xab, 0x58, 0xdd,
-	0xdb, 0x36, 0x2a, 0xa2, 0x64, 0x24, 0x59, 0x38, 0x4c, 0x88, 0x13, 0xab, 0x6a, 0xee, 0x62, 0x62,
-	0x11, 0xac, 0xd7, 0xab, 0x15, 0x35, 0xa5, 0xfd, 0x22, 0x0d, 0x17, 0x27, 0xdb, 0xa9, 0x9f, 0x72,
-	0x45, 0x87, 0x7c, 0x96, 0x94, 0x8b, 0x9c, 0x7e, 0x60, 0x88, 0x06, 0xa5, 0x7c, 0x0e, 0x3f, 0x6d,
-	0x4e, 0x70, 0xdd, 0x68, 0x68, 0x9c, 0xdd, 0x69, 0xe8, 0x29, 0x2c, 0x8c, 0x7c, 0x01, 0x10, 0xf3,
-	0xbc, 0xfb, 0xe7, 0x51, 0x4f, 0xbc, 0x2c, 0x9c, 0x91, 0x6f, 0x03, 0x23, 0xc2, 0xd1, 0x2e, 0xe4,
-	0x64, 0xb2, 0xe4, 0x09, 0x44, 0x94, 0xae, 0xd7, 0xa6, 0xee, 0x25, 0xf2, 0x2c, 0x4f, 0x1e, 0x10,
-	0xf6, 0xff, 0xbf, 0x7c, 0x0f, 0x56, 0x26, 0x6c, 0xc7, 0x8b, 0x59, 0xd7, 0x0b, 0x03, 0xcb, 0xeb,
-	0xd2, 0x0e, 0xf7, 0x53, 0x9a, 0x64, 0x39, 0xa4, 0xda, 0xa5, 0x1d, 0xed, 0x2b, 0x05, 0x0a, 0x27,
-	0x19, 0x11, 0x6d, 0xc0, 0xab, 0x2c, 0x9e, 0xce, 0x17, 0x9f, 0x93, 0xda, 0xbd, 0x04, 0x8b, 0xb8,
-	0xd1, 0x58, 0x33, 0x8d, 0xe2, 0x87, 0xd8, 0x8c, 0xc5, 0xe5, 0x0a, 0x2c, 0x19, 0x95, 0x62, 0x95,
-	0x10, 0x5c, 0x34, 0xad, 0x1a, 0x31, 0x8a, 0x58, 0x4d, 0xa1, 0x57, 0xe0, 0x3a, 0xd7, 0x66, 0x4a,
-	0xac, 0xa6, 0xb5, 0x9f, 0x29, 0x00, 0x03, 0x03, 0xa1, 0x9b, 0x90, 0x1f, 0x32, 0xef, 0xa0, 0x20,
-	0x2d, 0x0c, 0x0c, 0x67, 0x38, 0xe8, 0x0e, 0x2c, 0x07, 0x4f, 0x3c, 0x3f, 0xb4, 0x86, 0xf3, 0x6e,
-	0x42, 0x8c, 0x32, 0x38, 0xa2, 0x34, 0x80, 0x0f, 0xca, 0x6d, 0xf2, 0x8c, 0xe5, 0x56, 0xfb, 0x04,
-	0x72, 0x84, 0x06, 0x5e, 0xcf, 0x67, 0x6d, 0x04, 0x7f, 0x44, 0x07, 0xa1, 0x7d, 0x70, 0x30, 0xd4,
-	0xa5, 0xf1, 0xb5, 0xe1, 0xa0, 0x4b, 0x90, 0xf1, 0x3d, 0xaf, 0xcd, 0x30, 0x42, 0x8d, 0x39, 0xb6,
-	0x34, 0x1c, 0xe6, 0x4d, 0x26, 0xfd, 0xd8, 0x0a, 0xdc, 0xcf, 0x85, 0x06, 0x69, 0x92, 0xe5, 0x90,
-	0xba, 0xfb, 0x39, 0xd5, 0x7e, 0x9d, 0x84, 0x2b, 0x53, 0x06, 0x3a, 0xe8, 0x29, 0x64, 0xe5, 0xa4,
-	0xc8, 0xf3, 0x65, 0x3e, 0x36, 0xce, 0x3b, 0x1d, 0x8a, 0xe1, 0x3c, 0x7f, 0x3b, 0x51, 0x50, 0xc8,
-	0x40, 0x3e, 0xba, 0x07, 0xab, 0x51, 0x47, 0xd8, 0xa6, 0xe1, 0x13, 0xcf, 0x91, 0x33, 0x22, 0x7e,
-	0x22, 0x4e, 0x1c, 0x75, 0x79, 0x7b, 0x1c, 0x2d, 0xe6, 0xc8, 0x3a, 0x5c, 0xeb, 0x75, 0xba, 0xb6,
-	0x1f, 0x50, 0xc7, 0x9a, 0xc8, 0x9e, 0xe6, 0x06, 0xb9, 0x1c, 0x11, 0xd5, 0xc6, 0x45, 0x14, 0x20,
-	0x73, 0x44, 0xfd, 0x60, 0xf0, 0x4e, 0x89, 0x96, 0xcc, 0xd1, 0xb1, 0x89, 0x99, 0xe7, 0xcb, 0x02,
-	0xab, 0x76, 0x63, 0xc7, 0xd1, 0x1c, 0x50, 0xe3, 0x47, 0x44, 0x37, 0xe0, 0x5a, 0x54, 0xf8, 0x6a,
-	0xa4, 0x5a, 0xc4, 0xf5, 0x7a, 0x95, 0x8c, 0x3f, 0x73, 0x06, 0xa8, 0xba, 0x49, 0x8c, 0x1a, 0x2b,
-	0xbc, 0x97, 0x60, 0x65, 0x00, 0xdd, 0x26, 0xba, 0x51, 0x31, 0x09, 0xc6, 0x6a, 0x42, 0xfb, 0x7b,
-	0x02, 0x96, 0xc7, 0xde, 0xfb, 0xe8, 0x2e, 0x5c, 0x9c, 0x30, 0x3c, 0x18, 0x44, 0xca, 0xca, 0xd8,
-	0x3c, 0xc0, 0x70, 0xd0, 0x5b, 0xb0, 0x7a, 0x64, 0xb7, 0x5c, 0xc7, 0x12, 0xed, 0x69, 0x7f, 0x86,
-	0x29, 0x7a, 0xd4, 0x65, 0x8e, 0xab, 0x33, 0x94, 0x1c, 0x5f, 0xa2, 0x3b, 0x80, 0x04, 0x03, 0xed,
-	0x38, 0x03, 0x72, 0xd1, 0xb2, 0x2e, 0x71, 0x0c, 0xee, 0x38, 0x11, 0xf1, 0x36, 0xa4, 0x78, 0x8a,
-	0x12, 0x8f, 0xeb, 0xcd, 0x59, 0xc2, 0x46, 0x68, 0xc6, 0x33, 0x15, 0xe7, 0x45, 0xb7, 0x20, 0xef,
-	0xf9, 0xee, 0xa1, 0xdb, 0xb1, 0x5b, 0x96, 0x68, 0x03, 0xd3, 0x3c, 0x84, 0x17, 0x23, 0x68, 0x91,
-	0x01, 0xd1, 0x2b, 0xb0, 0xd8, 0xec, 0xf9, 0x3e, 0x3b, 0xb8, 0xa0, 0x9a, 0xe3, 0x54, 0x0b, 0x12,
-	0x28, 0x88, 0x36, 0x06, 0xbe, 0x1c, 0x58, 0x47, 0x7c, 0x6f, 0x58, 0xea, 0x8e, 0x5a, 0x46, 0xfb,
-	0x6a, 0x0e, 0xd0, 0xf8, 0x2b, 0x63, 0xf2, 0xf7, 0x30, 0xe5, 0xb9, 0x7c, 0x0f, 0x43, 0xf7, 0xe0,
-	0x62, 0x24, 0x38, 0xf4, 0xed, 0x4e, 0x60, 0x37, 0x23, 0x1d, 0xc5, 0x8d, 0x8e, 0xee, 0x86, 0x39,
-	0x40, 0x1a, 0xce, 0xf9, 0x93, 0x0b, 0xd2, 0x01, 0x42, 0xfb, 0x99, 0x65, 0xb7, 0xb9, 0xc1, 0x52,
-	0x33, 0xb3, 0x67, 0x43, 0xfb, 0x99, 0xce, 0x99, 0x50, 0x38, 0xb8, 0xb0, 0xf2, 0x76, 0x50, 0xc7,
-	0x7a, 0x7c, 0xcc, 0x7d, 0x94, 0xdf, 0xda, 0x3e, 0xe3, 0x1b, 0x2e, 0x96, 0x1f, 0xa8, 0xb3, 0x7d,
-	0xdc, 0xbf, 0xf0, 0x43, 0x30, 0xf4, 0xc6, 0x24, 0x3f, 0xce, 0xc9, 0xa1, 0x66, 0xdc, 0x93, 0xe8,
-	0x9d, 0x13, 0x2f, 0x46, 0x46, 0xb2, 0x4c, 0xbc, 0x1a, 0xef, 0x43, 0xc6, 0xa1, 0x5d, 0x2f, 0x70,
-	0xc3, 0xc2, 0xfc, 0x0c, 0xc3, 0xbc, 0x92, 0xa0, 0x25, 0x11, 0x13, 0xda, 0x81, 0x5c, 0xc7, 0xb3,
-	0x82, 0x27, 0xde, 0x67, 0xd6, 0x01, 0xa5, 0x85, 0x2c, 0x97, 0xf1, 0xea, 0x54, 0x19, 0x15, 0xaf,
-	0xfe, 0xc4, 0xfb, 0x6c, 0x87, 0x52, 0x92, 0xed, 0x44, 0xff, 0x4e, 0xf8, 0x28, 0x0d, 0xe7, 0xfc,
-	0x28, 0xdd, 0xee, 0x47, 0xf4, 0xb0, 0x31, 0x87, 0xfa, 0x7b, 0x99, 0x6e, 0xe4, 0x2c, 0x25, 0xfe,
-	0x3c, 0x18, 0xc1, 0xde, 0xaf, 0x56, 0xef, 0xf3, 0xe7, 0x41, 0x01, 0x56, 0x47, 0x10, 0x35, 0x9d,
-	0x98, 0x15, 0x4c, 0xd4, 0xc4, 0xf6, 0x02, 0x2b, 0x3c, 0xf2, 0x79, 0xef, 0x68, 0x5f, 0x40, 0x9a,
-	0xeb, 0xc4, 0x9e, 0xbb, 0x3c, 0xfc, 0xac, 0xb6, 0xdb, 0xf4, 0x3d, 0x71, 0x79, 0x92, 0x24, 0xc7,
-	0x61, 0x7b, 0x1c, 0x34, 0xb8, 0xcc, 0xcd, 0x63, 0xab, 0xe9, 0x39, 0x54, 0xc6, 0xff, 0x42, 0x04,
-	0x2c, 0x7a, 0x0e, 0x45, 0x6f, 0x00, 0x62, 0x3c, 0x6e, 0xe7, 0x30, 0xf2, 0x68, 0x68, 0x1f, 0x46,
-	0x5f, 0x13, 0x24, 0x46, 0x66, 0x13, 0xfb, 0x50, 0xfb, 0xa1, 0x02, 0xd9, 0xbe, 0x79, 0xd1, 0x3d,
-	0x48, 0x32, 0x9f, 0x28, 0x33, 0x1b, 0x92, 0x91, 0x23, 0x1d, 0xe6, 0x0f, 0x28, 0x1d, 0x7e, 0xb6,
-	0xbd, 0x7a, 0x3a, 0x2b, 0x4f, 0x65, 0x99, 0x03, 0xca, 0xff, 0xd1, 0xfe, 0xac, 0x40, 0x46, 0x46,
-	0x0a, 0xfa, 0xf6, 0x20, 0xc0, 0x66, 0x57, 0xa4, 0x1f, 0x5e, 0xdf, 0x81, 0xab, 0x6d, 0xb7, 0x63,
-	0xd9, 0xce, 0x91, 0xdd, 0x69, 0x52, 0xab, 0xc9, 0xfe, 0xb6, 0x5a, 0x83, 0x29, 0x82, 0xc8, 0xe0,
-	0x6b, 0x6d, 0xb7, 0xa3, 0x0b, 0x92, 0xe2, 0x10, 0x05, 0x4b, 0xce, 0x06, 0x2c, 0x48, 0x59, 0xe7,
-	0x39, 0x51, 0x4e, 0xf2, 0xf2, 0x53, 0x7d, 0xad, 0x40, 0xaa, 0xde, 0xf2, 0x66, 0xf8, 0x6d, 0xc8,
-	0xe8, 0x9c, 0x24, 0x31, 0x75, 0x4e, 0x92, 0x3c, 0x65, 0x4e, 0x92, 0x1a, 0x9f, 0x93, 0xbc, 0x0e,
-	0xea, 0xc8, 0xaf, 0x8e, 0x58, 0x44, 0x88, 0xe2, 0xbf, 0x34, 0x0c, 0x37, 0xed, 0x43, 0xb4, 0x03,
-	0x59, 0x5f, 0x76, 0x56, 0x62, 0x96, 0x91, 0xdb, 0xba, 0x3d, 0xf5, 0xec, 0x43, 0x7d, 0x18, 0x19,
-	0xb0, 0x6a, 0xff, 0x50, 0x60, 0x29, 0x36, 0xe9, 0x3a, 0xf1, 0x9b, 0x0f, 0x3b, 0xfe, 0xa1, 0x7b,
-	0x44, 0x3b, 0x56, 0xc7, 0x6e, 0x47, 0x51, 0x9d, 0xe5, 0x90, 0x8a, 0xdd, 0xa6, 0xcc, 0x7c, 0x07,
-	0x76, 0xdb, 0x6d, 0x1d, 0x0b, 0xbc, 0x88, 0x65, 0x10, 0x20, 0x4e, 0x50, 0x82, 0x8c, 0xed, 0x38,
-	0x3e, 0x0d, 0x02, 0x99, 0xae, 0xa7, 0x8f, 0x5f, 0x6a, 0x5e, 0x10, 0xda, 0x2d, 0x5d, 0x70, 0x90,
-	0x88, 0x15, 0x5d, 0x85, 0x6c, 0x48, 0x5b, 0xb4, 0xfb, 0xc4, 0xeb, 0x50, 0x69, 0x9e, 0x01, 0x00,
-	0xad, 0x42, 0x9a, 0xb6, 0x6d, 0xb7, 0x25, 0x3f, 0xdb, 0x8b, 0x85, 0xf6, 0xa5, 0x02, 0x8b, 0x23,
-	0xe2, 0x58, 0xcb, 0xc4, 0x2b, 0xad, 0x7f, 0x1c, 0xb5, 0xa2, 0x72, 0x89, 0x2e, 0xc3, 0x7c, 0xcb,
-	0x6b, 0xda, 0xfd, 0xe1, 0x49, 0x96, 0xf4, 0xd7, 0xe8, 0x22, 0x7b, 0xc2, 0x1d, 0x0e, 0xfa, 0x2c,
-	0xb9, 0x62, 0x47, 0xef, 0x72, 0xf1, 0xe2, 0xc2, 0xcb, 0x49, 0x9d, 0x00, 0xf1, 0xeb, 0x7e, 0x0b,
-	0xf2, 0x41, 0xe8, 0x53, 0x1a, 0x5a, 0x91, 0x05, 0x84, 0xe6, 0x8b, 0x02, 0x2a, 0xb5, 0xda, 0xf8,
-	0x89, 0x02, 0x8b, 0x23, 0x53, 0x27, 0xf4, 0x32, 0x5c, 0x8e, 0xa6, 0xa3, 0x75, 0x53, 0x37, 0x1b,
-	0xf5, 0x58, 0x66, 0x5b, 0x84, 0x6c, 0xb1, 0x5a, 0xd9, 0x31, 0xc8, 0x1e, 0x2e, 0xa9, 0x0a, 0x6f,
-	0xd7, 0x70, 0xa5, 0xc4, 0xc8, 0xf7, 0x30, 0x29, 0xee, 0xea, 0x15, 0xf6, 0xd2, 0xe0, 0x78, 0xf9,
-	0x53, 0x30, 0xb4, 0x00, 0xf3, 0x62, 0xc6, 0xca, 0x07, 0x1b, 0x39, 0xc8, 0x54, 0xaa, 0xfc, 0xe7,
-	0x62, 0x6a, 0x0a, 0xbd, 0x04, 0xcb, 0x72, 0x61, 0xd5, 0x70, 0x45, 0x2f, 0x1b, 0x1f, 0xe3, 0x92,
-	0x9a, 0xde, 0xe8, 0x42, 0x7e, 0x74, 0x86, 0x83, 0xd6, 0xe1, 0x6a, 0x91, 0xe0, 0x92, 0x61, 0x0e,
-	0x8d, 0x53, 0x46, 0xf5, 0x9a, 0x87, 0xd4, 0xbe, 0x51, 0xd7, 0x55, 0x05, 0xe5, 0x01, 0xf6, 0xf4,
-	0xba, 0x89, 0x09, 0x23, 0x55, 0x13, 0xac, 0x5d, 0xd4, 0xf7, 0x30, 0x31, 0xd8, 0xe3, 0x09, 0x3f,
-	0xac, 0x11, 0x5c, 0xaf, 0xab, 0x49, 0xa6, 0x55, 0xc9, 0xa8, 0x17, 0xab, 0xfb, 0x98, 0xa8, 0xa9,
-	0x8d, 0x9f, 0x2a, 0xb0, 0x3c, 0xd6, 0x52, 0xb1, 0xf7, 0x50, 0x6c, 0x3a, 0x3d, 0x61, 0xe3, 0x6b,
-	0xb0, 0x16, 0x23, 0xaa, 0x1b, 0x95, 0xfb, 0x65, 0x6c, 0x35, 0xea, 0x2c, 0xe1, 0x8f, 0x4f, 0xb8,
-	0xf7, 0x1a, 0x65, 0xd3, 0xe0, 0xd8, 0x04, 0x3b, 0x57, 0x0c, 0xdb, 0xa8, 0x94, 0x8d, 0x3d, 0xc3,
-	0xc4, 0x25, 0x4e, 0x91, 0xdc, 0xf8, 0xb9, 0x02, 0x6a, 0xbc, 0x19, 0xe2, 0x56, 0x27, 0x38, 0xe2,
-	0x9c, 0xe8, 0x27, 0x5e, 0x81, 0xf0, 0x50, 0xa9, 0xda, 0x37, 0x4a, 0xdc, 0x63, 0x57, 0xe0, 0xd2,
-	0x10, 0xa2, 0x52, 0x1d, 0x42, 0x26, 0x62, 0x5c, 0x04, 0xef, 0x34, 0x2a, 0x25, 0xee, 0xb6, 0x51,
-	0x84, 0xf0, 0x05, 0x2e, 0xa9, 0xa9, 0x8d, 0xbb, 0x90, 0xed, 0xa7, 0x39, 0x74, 0x11, 0xd0, 0x8e,
-	0xf1, 0x10, 0x97, 0x2c, 0xa2, 0x9b, 0xd8, 0x2a, 0xe1, 0x1d, 0xbd, 0x51, 0x36, 0xd5, 0x0b, 0xcc,
-	0x25, 0x35, 0x4c, 0xac, 0x1a, 0x26, 0xec, 0x0d, 0xa9, 0x3c, 0x9e, 0xe3, 0x3f, 0x31, 0xbd, 0xfb,
-	0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x14, 0x95, 0x3d, 0x8b, 0x6e, 0x2a, 0x00, 0x00,
+var fileDescriptor_1820d8e1a9fad753 = []byte{
+	// 3301 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3a, 0x3b, 0x70, 0x1b, 0xd7,
+	0x76, 0x5a, 0x7c, 0x08, 0xe2, 0x80, 0x04, 0x97, 0x97, 0xb4, 0x04, 0xea, 0x63, 0x51, 0x6b, 0xc9,
+	0x96, 0x29, 0x9b, 0x8e, 0x29, 0x79, 0x62, 0x67, 0x32, 0x4e, 0x96, 0xd8, 0x4b, 0x71, 0x6d, 0x10,
+	0x80, 0x2f, 0x16, 0x94, 0xe4, 0x22, 0xeb, 0x15, 0xf6, 0x92, 0xda, 0x08, 0xc0, 0xc2, 0xbb, 0x0b,
+	0x5a, 0xf4, 0xc4, 0x5d, 0xda, 0x14, 0x99, 0x14, 0x99, 0x14, 0x29, 0xdd, 0x25, 0x33, 0x29, 0xd2,
+	0x64, 0xd2, 0x64, 0x26, 0x33, 0x29, 0x92, 0x49, 0x95, 0x22, 0xa9, 0x52, 0x64, 0x52, 0xbc, 0xea,
+	0xf5, 0x9e, 0x79, 0xf3, 0xe6, 0xcd, 0xfd, 0x2c, 0x3e, 0x0b, 0x10, 0x04, 0x69, 0xe9, 0x35, 0xaf,
+	0xe1, 0xf0, 0x9e, 0xdf, 0x3d, 0xf7, 0x9c, 0x73, 0xcf, 0x39, 0xf7, 0x2c, 0x60, 0xf1, 0xe4, 0xe1,
+	0x76, 0x2f, 0xf0, 0x23, 0x1f, 0xdd, 0xa0, 0xaf, 0xa2, 0xed, 0x8e, 0xd3, 0x0b, 0xb7, 0x9f, 0xfb,
+	0xfe, 0x4b, 0xaf, 0x7b, 0xbc, 0xdd, 0x73, 0x82, 0xa8, 0x4b, 0x83, 0xed, 0x93, 0x87, 0xda, 0x57,
+	0x50, 0x2a, 0xbf, 0xa0, 0xad, 0x97, 0xfa, 0x89, 0xe3, 0xb5, 0x9d, 0xe7, 0x5e, 0xdb, 0x8b, 0x4e,
+	0x09, 0xfd, 0xb6, 0x4f, 0xc3, 0x08, 0x7d, 0x02, 0x99, 0xb0, 0xed, 0x47, 0x25, 0x65, 0x53, 0xb9,
+	0x5f, 0xd8, 0xb9, 0xb3, 0x3d, 0x43, 0xce, 0x76, 0xa3, 0xed, 0x47, 0x84, 0x93, 0x6b, 0xff, 0x91,
+	0x86, 0x8d, 0x29, 0x32, 0xc3, 0x9e, 0xdf, 0x0d, 0xe9, 0x25, 0x85, 0xa2, 0xf7, 0x60, 0xa5, 0xe5,
+	0xf7, 0xbb, 0x91, 0xed, 0x08, 0xa1, 0x6d, 0x5a, 0x4a, 0x6d, 0x2a, 0xf7, 0xb3, 0xa4, 0xc8, 0xc1,
+	0x7a, 0x0c, 0x45, 0x3f, 0xc0, 0xba, 0xdb, 0x0f, 0x9c, 0xc8, 0xf3, 0xbb, 0x76, 0x40, 0xbf, 0xed,
+	0x7b, 0x01, 0xed, 0xd0, 0x6e, 0x54, 0x4a, 0x6f, 0x2a, 0xf7, 0x8b, 0x3b, 0x5f, 0xcc, 0xdc, 0xef,
+	0x4c, 0xad, 0xb7, 0x0d, 0x29, 0x92, 0x0c, 0x25, 0x92, 0x35, 0x77, 0x12, 0x88, 0xbe, 0x81, 0x35,
+	0x67, 0x44, 0x80, 0xdd, 0xef, 0xb9, 0x4e, 0x44, 0x4b, 0x19, 0x7e, 0xda, 0x8f, 0x66, 0xee, 0x3e,
+	0xba, 0x71, 0x93, 0xb3, 0x11, 0xe4, 0x4c, 0xc0, 0xb4, 0x0e, 0xac, 0x4d, 0xd1, 0x06, 0xdd, 0x85,
+	0x4d, 0xa3, 0x49, 0x74, 0xcb, 0xac, 0x55, 0x6d, 0x82, 0xbf, 0x6a, 0x9a, 0x04, 0x1f, 0xe0, 0xaa,
+	0x65, 0x37, 0xab, 0x8d, 0x3a, 0x2e, 0x9b, 0x7b, 0x26, 0x36, 0xd4, 0x2b, 0xa8, 0x04, 0xeb, 0x46,
+	0xcd, 0xae, 0xd6, 0x2c, 0xbb, 0xb1, 0x5f, 0x7b, 0x62, 0xc7, 0x1c, 0xaa, 0x82, 0xae, 0x02, 0x3a,
+	0x68, 0x36, 0x92, 0xf0, 0x94, 0xd6, 0x03, 0x34, 0xa9, 0x18, 0xfa, 0x1a, 0x56, 0x99, 0x5b, 0xec,
+	0x51, 0xfd, 0x4a, 0xca, 0x66, 0xfa, 0x7e, 0x61, 0xe7, 0xc3, 0x73, 0x5d, 0x3a, 0x66, 0x61, 0x35,
+	0x4c, 0x40, 0xb4, 0x00, 0xd4, 0x24, 0xd5, 0x9b, 0x8e, 0x1a, 0xed, 0x07, 0xb8, 0xcd, 0x9d, 0x5f,
+	0x0b, 0x5c, 0x1a, 0xec, 0xf5, 0xdb, 0x47, 0x5e, 0x3b, 0x79, 0x1b, 0x6e, 0x43, 0xa1, 0x43, 0x83,
+	0xd6, 0x0b, 0xa7, 0x1b, 0xd9, 0x9e, 0xcb, 0x35, 0xc9, 0x13, 0x88, 0x41, 0xa6, 0x8b, 0x3e, 0x83,
+	0x8c, 0x17, 0xd1, 0x4e, 0x29, 0xc5, 0xcd, 0x70, 0x6f, 0xa6, 0x8e, 0x15, 0xaf, 0x4b, 0xcd, 0x88,
+	0x76, 0x08, 0x67, 0xd1, 0xfe, 0x4d, 0x81, 0xcd, 0xb3, 0xf7, 0x97, 0x37, 0xe7, 0x29, 0x14, 0x8f,
+	0xc6, 0x30, 0xd2, 0x1a, 0xbf, 0x37, 0x73, 0xa7, 0x69, 0x12, 0x13, 0x72, 0xd0, 0x3e, 0x14, 0x8f,
+	0x28, 0x0d, 0x6d, 0xa7, 0xeb, 0xda, 0x91, 0xf3, 0x8a, 0x86, 0xdc, 0x4a, 0x85, 0x1d, 0x6d, 0xa6,
+	0xe4, 0x7a, 0xe0, 0xb5, 0x28, 0x59, 0x62, 0x9c, 0x7a, 0xd7, 0xb5, 0x18, 0x9f, 0xf6, 0x29, 0x5c,
+	0x7b, 0x4c, 0xa3, 0x5d, 0x41, 0xdc, 0x88, 0x9c, 0xa8, 0x1f, 0xc6, 0xf6, 0xbb, 0x05, 0x20, 0x85,
+	0x0c, 0xcd, 0x97, 0x97, 0x10, 0xd3, 0xd5, 0x7e, 0xa1, 0x40, 0x69, 0x92, 0x55, 0x1e, 0x7d, 0x36,
+	0x2f, 0xfa, 0x0a, 0x8a, 0x31, 0x3a, 0xe4, 0x8c, 0x5c, 0xff, 0xe2, 0xce, 0xd6, 0x4c, 0xfd, 0xc7,
+	0xb7, 0x5a, 0x7e, 0x3e, 0xba, 0x64, 0x01, 0xde, 0x0b, 0x68, 0xcf, 0x39, 0x65, 0x97, 0x2b, 0x96,
+	0x2a, 0x72, 0xc8, 0x87, 0xe7, 0x58, 0x25, 0xe6, 0x92, 0x82, 0xd5, 0x5e, 0x02, 0xa2, 0xfd, 0x5d,
+	0x06, 0xd6, 0xcb, 0x01, 0x75, 0x22, 0x2a, 0x55, 0xf8, 0x79, 0x09, 0x17, 0xed, 0x43, 0xbe, 0x4d,
+	0x9d, 0x90, 0xda, 0x01, 0x3d, 0x92, 0x9e, 0x7b, 0x30, 0x3b, 0xfa, 0x18, 0x35, 0xa1, 0x47, 0x34,
+	0xa0, 0xdd, 0x16, 0x25, 0x8b, 0x6d, 0xb9, 0x46, 0x4f, 0x40, 0xed, 0x87, 0x34, 0xb0, 0xbd, 0xee,
+	0x91, 0x1f, 0x74, 0x78, 0x8e, 0xe1, 0x87, 0x2e, 0xec, 0x7c, 0x30, 0x53, 0x60, 0x33, 0xa4, 0x81,
+	0x39, 0xe4, 0x21, 0x2b, 0xfd, 0x71, 0x00, 0x4b, 0x8b, 0xb1, 0x2d, 0x47, 0x65, 0xcf, 0x93, 0x16,
+	0xeb, 0x82, 0x6f, 0x54, 0x3c, 0xea, 0x4d, 0xc0, 0xd0, 0x9f, 0xc1, 0xad, 0x78, 0x87, 0x5e, 0xe0,
+	0xb7, 0x68, 0x18, 0xb2, 0x70, 0xe8, 0x39, 0x81, 0xd3, 0xa1, 0x11, 0x0d, 0xc2, 0x52, 0x96, 0xef,
+	0xf5, 0xe9, 0x3c, 0x7b, 0xd5, 0x07, 0x02, 0xea, 0x03, 0x7e, 0x72, 0xa3, 0x77, 0x36, 0x12, 0x3d,
+	0x80, 0x55, 0xcf, 0xa5, 0x9d, 0x9e, 0x1f, 0xd1, 0x6e, 0xeb, 0xd4, 0x8e, 0xfc, 0x97, 0xb4, 0x5b,
+	0x5a, 0xe0, 0x71, 0xaa, 0x8e, 0x20, 0x2c, 0x06, 0x47, 0x1f, 0x02, 0x72, 0x5c, 0xd7, 0x63, 0x6a,
+	0x3b, 0x6d, 0x5e, 0xa4, 0x68, 0x18, 0x95, 0x72, 0x9c, 0x7a, 0x75, 0x88, 0x91, 0x51, 0xa1, 0xfd,
+	0x45, 0x0a, 0xde, 0x4a, 0x84, 0x8b, 0xbc, 0x16, 0x9f, 0x43, 0x4e, 0x1e, 0x42, 0x86, 0xcc, 0xdd,
+	0x79, 0x02, 0x9e, 0xc4, 0x4c, 0xe8, 0x4f, 0x60, 0x8d, 0xbb, 0x3b, 0x36, 0x9c, 0xdf, 0xe3, 0x5e,
+	0x11, 0x21, 0xb4, 0x7d, 0xae, 0xc7, 0xa5, 0xb5, 0x6a, 0x9c, 0x8b, 0xac, 0xf6, 0x93, 0x20, 0x64,
+	0xc1, 0x4a, 0x7c, 0x2f, 0x8f, 0x1c, 0xaf, 0xdd, 0x0f, 0xa8, 0x8c, 0xa6, 0x07, 0xf3, 0xe8, 0xb9,
+	0x27, 0x58, 0x48, 0x7c, 0xb7, 0xe5, 0x5a, 0xab, 0x02, 0x12, 0xe6, 0x90, 0x61, 0x2c, 0xee, 0xce,
+	0xa7, 0x90, 0xe5, 0x61, 0x2c, 0x2d, 0xa1, 0xcd, 0x71, 0x01, 0x04, 0x83, 0xf6, 0xa3, 0x02, 0x6b,
+	0x63, 0x02, 0xa5, 0x75, 0x2f, 0x2d, 0x71, 0xda, 0xb9, 0x53, 0x3f, 0xff, 0xdc, 0xff, 0xac, 0x40,
+	0x96, 0x6f, 0x83, 0x36, 0x40, 0x5c, 0xd9, 0x61, 0x32, 0xcc, 0xf1, 0xb5, 0xe9, 0x0e, 0x52, 0x48,
+	0xea, 0x62, 0x29, 0xe4, 0x1e, 0x14, 0x79, 0x24, 0x04, 0x71, 0x52, 0xe0, 0x8e, 0xca, 0x93, 0x65,
+	0x06, 0x1d, 0x64, 0x0a, 0xf4, 0x19, 0x6c, 0x88, 0x8d, 0xe9, 0xab, 0x9e, 0x27, 0x9b, 0xac, 0xc8,
+	0xeb, 0x50, 0x3b, 0xa4, 0x2d, 0x7e, 0x99, 0xd3, 0xe4, 0x2a, 0x27, 0xc0, 0x03, 0xbc, 0xe5, 0x75,
+	0x68, 0x83, 0xb6, 0xb4, 0x07, 0x50, 0x1c, 0x4f, 0x3b, 0x33, 0x4e, 0xa1, 0xfd, 0xa4, 0xc4, 0x3e,
+	0xe6, 0xe5, 0x6b, 0xc4, 0xc7, 0x3e, 0x5b, 0xcf, 0xe5, 0x11, 0xc1, 0x29, 0x18, 0xce, 0xcf, 0x0e,
+	0xa9, 0xdf, 0x7a, 0x76, 0x48, 0x4f, 0xcf, 0x0e, 0xda, 0xdf, 0x0f, 0xc2, 0x51, 0x9e, 0x5d, 0x86,
+	0xe3, 0x1f, 0x5c, 0xf8, 0xf0, 0xfb, 0x57, 0xe2, 0xe3, 0xd7, 0x61, 0x99, 0xff, 0x93, 0x08, 0xc7,
+	0xf7, 0xe7, 0xe8, 0x1c, 0x04, 0xc3, 0xfe, 0x15, 0xb2, 0xe4, 0x8f, 0xac, 0x77, 0x17, 0x61, 0x21,
+	0xa0, 0x61, 0xbf, 0x1d, 0x69, 0xdb, 0xb0, 0x56, 0xf1, 0xc2, 0xb8, 0x70, 0x0f, 0xca, 0xfd, 0x35,
+	0xc8, 0x89, 0x52, 0x12, 0x3b, 0x77, 0x81, 0xd7, 0x04, 0x57, 0x7b, 0x0a, 0xeb, 0xe3, 0xf4, 0xf2,
+	0x7c, 0x7f, 0x0c, 0x8b, 0x52, 0x89, 0x50, 0x76, 0x92, 0xf3, 0x65, 0xb3, 0x01, 0x97, 0xf6, 0x8f,
+	0x0a, 0xac, 0x32, 0xd1, 0x5c, 0xf1, 0x81, 0x22, 0x1b, 0x09, 0x45, 0xf6, 0xaf, 0xc4, 0xaa, 0xa0,
+	0x43, 0xc8, 0x0b, 0xb3, 0x78, 0x6e, 0x1c, 0x01, 0xbf, 0x7f, 0x4e, 0xdb, 0x96, 0x90, 0x2e, 0x8c,
+	0x64, 0xba, 0xe1, 0xfe, 0x15, 0xb2, 0xe8, 0xcb, 0xff, 0xaf, 0xdf, 0x83, 0xc5, 0x18, 0xce, 0xa2,
+	0x3c, 0xde, 0x83, 0x1f, 0x2b, 0x4f, 0x72, 0x92, 0x6e, 0x37, 0x0b, 0x69, 0xcf, 0x0d, 0x59, 0x3e,
+	0x1b, 0x95, 0x3b, 0xcc, 0x3e, 0xb1, 0xbb, 0xd3, 0x17, 0x8a, 0x75, 0xed, 0x10, 0xd6, 0x45, 0x97,
+	0x9e, 0xe8, 0x2e, 0x7e, 0x66, 0xb5, 0xe0, 0x75, 0x28, 0x21, 0xf8, 0x77, 0xba, 0x0e, 0xfd, 0x6f,
+	0x0a, 0x72, 0x92, 0xe4, 0xbc, 0x06, 0xf5, 0x92, 0x59, 0xf9, 0x8d, 0xb5, 0x63, 0xbb, 0xb0, 0x20,
+	0x5b, 0xda, 0xcc, 0x85, 0x1b, 0x65, 0xc9, 0x79, 0x56, 0x4b, 0x97, 0x7d, 0x6d, 0x2d, 0x9d, 0xf6,
+	0xdf, 0x19, 0x28, 0x8e, 0xfb, 0x00, 0x3d, 0x86, 0x6c, 0xcb, 0xe9, 0xcb, 0x9a, 0x5c, 0xdc, 0xf9,
+	0xf8, 0x02, 0xfe, 0xdb, 0x2e, 0x33, 0x46, 0x22, 0xf8, 0xd1, 0x33, 0x40, 0x01, 0xfd, 0x53, 0xda,
+	0x8a, 0xa8, 0x6b, 0xb7, 0x9c, 0xc0, 0xb5, 0xa3, 0xd3, 0x1e, 0x95, 0xcf, 0x86, 0xd9, 0x51, 0x51,
+	0x0e, 0xa8, 0xeb, 0x45, 0x65, 0x27, 0x70, 0xad, 0xd3, 0x1e, 0x25, 0x6a, 0x2c, 0x26, 0x86, 0xa0,
+	0x4d, 0x28, 0xb8, 0x34, 0x6c, 0x05, 0x5e, 0x6f, 0xe0, 0xb0, 0x3c, 0x19, 0x05, 0x69, 0xbf, 0x4e,
+	0x41, 0x96, 0x6b, 0x83, 0xde, 0x82, 0xd5, 0xb2, 0xde, 0x6c, 0xe0, 0xc4, 0x33, 0x7d, 0x1d, 0xd4,
+	0x46, 0xa5, 0xc6, 0x1e, 0xef, 0xfa, 0xa1, 0x6e, 0x56, 0xf4, 0xdd, 0x0a, 0x56, 0x15, 0x74, 0x1b,
+	0x6e, 0x70, 0xa8, 0x5e, 0x21, 0x58, 0x37, 0x9e, 0xd9, 0xbb, 0xb5, 0xda, 0x97, 0xd8, 0xb0, 0x77,
+	0x9f, 0xd9, 0xcd, 0x06, 0x26, 0x6a, 0x0a, 0xad, 0xc2, 0x72, 0x05, 0xeb, 0x0d, 0x6c, 0xe3, 0xa7,
+	0x75, 0x93, 0x60, 0x43, 0x4d, 0x33, 0x9e, 0x5a, 0xd3, 0x6a, 0x98, 0x06, 0xb6, 0xcb, 0x7a, 0xb5,
+	0x8c, 0x2b, 0x15, 0x31, 0x22, 0x78, 0x62, 0x56, 0x8d, 0xda, 0x13, 0x35, 0x83, 0xee, 0xc2, 0x66,
+	0x5d, 0x7f, 0xc6, 0x47, 0x05, 0x98, 0x90, 0x1a, 0xb1, 0xcb, 0x3a, 0x31, 0x6c, 0xeb, 0x59, 0x1d,
+	0xdb, 0x04, 0x7f, 0x81, 0xcb, 0x16, 0x36, 0xd4, 0x2c, 0x13, 0x33, 0x85, 0xca, 0xc0, 0xe5, 0x8a,
+	0x59, 0xc5, 0x86, 0xba, 0x80, 0x6e, 0x42, 0x29, 0x26, 0xa8, 0xd5, 0xf9, 0x0e, 0xd5, 0x9a, 0x65,
+	0x1f, 0xea, 0x15, 0xd3, 0x50, 0x73, 0x4c, 0xb1, 0x31, 0x76, 0x75, 0x11, 0x69, 0xf0, 0x36, 0xd3,
+	0x9a, 0x69, 0xc5, 0x28, 0x99, 0x0d, 0xc6, 0x05, 0xa8, 0x79, 0x74, 0x0b, 0x36, 0xd8, 0x19, 0xcd,
+	0xea, 0xe3, 0xc1, 0x99, 0xe5, 0x21, 0xb0, 0xa1, 0x02, 0xba, 0x01, 0xd7, 0x62, 0x34, 0x13, 0x11,
+	0x9f, 0x8f, 0x19, 0xab, 0xc0, 0x90, 0xb5, 0x43, 0x4c, 0x2a, 0x7a, 0xbd, 0xce, 0x08, 0x08, 0x6e,
+	0x60, 0x72, 0x28, 0x86, 0x1a, 0x4b, 0xda, 0x3f, 0xa5, 0x20, 0xcb, 0x73, 0x66, 0x22, 0x3d, 0x2b,
+	0x23, 0xe9, 0x79, 0xea, 0xed, 0x4b, 0xbd, 0xc1, 0xc7, 0x50, 0xfa, 0xf5, 0x3d, 0x86, 0x12, 0xb3,
+	0x8a, 0xcc, 0x99, 0xb3, 0x8a, 0xec, 0xc5, 0x67, 0x15, 0xbf, 0x4a, 0xc1, 0x62, 0x0c, 0x62, 0x79,
+	0x2f, 0xa4, 0xc1, 0x89, 0xd7, 0x1a, 0xe9, 0xe2, 0xf2, 0x12, 0x62, 0xba, 0xe8, 0x06, 0xe4, 0xc3,
+	0xc8, 0x09, 0x22, 0xde, 0x1f, 0xa6, 0x78, 0x7f, 0xb8, 0xc8, 0x01, 0x0d, 0xda, 0x42, 0x77, 0x60,
+	0x69, 0x30, 0xa9, 0x63, 0xf8, 0x34, 0xc7, 0x17, 0x62, 0x18, 0x23, 0xa9, 0x42, 0x2e, 0xf2, 0x5a,
+	0x2f, 0x69, 0xc4, 0x12, 0x15, 0xd3, 0xf4, 0xd1, 0x5c, 0x9a, 0x8a, 0x7a, 0x48, 0x5d, 0x4b, 0xf0,
+	0x92, 0x58, 0x08, 0x2b, 0xaa, 0xbd, 0xc0, 0x6b, 0x51, 0x99, 0xa5, 0xe6, 0x99, 0x6f, 0x08, 0x86,
+	0x91, 0x8c, 0xb9, 0x70, 0xd9, 0x8c, 0x79, 0xbd, 0x0c, 0xc5, 0x71, 0xc5, 0x98, 0x7d, 0x84, 0x6a,
+	0x43, 0xeb, 0x2d, 0x0a, 0x80, 0xe9, 0xa2, 0x75, 0xc8, 0xf2, 0x29, 0x95, 0x1c, 0x59, 0x89, 0x85,
+	0xf6, 0x2f, 0x69, 0x58, 0x1a, 0xed, 0xcc, 0x10, 0x1e, 0x4f, 0x89, 0x1f, 0xcd, 0xdd, 0xd3, 0x8d,
+	0x27, 0xc4, 0xc9, 0xe9, 0x52, 0xea, 0x35, 0x4d, 0x97, 0xa6, 0xa7, 0xda, 0xf4, 0x1b, 0x48, 0xb5,
+	0x99, 0xc9, 0x54, 0xfb, 0x97, 0xca, 0x39, 0xa9, 0xf6, 0x1a, 0xac, 0xd5, 0x88, 0x81, 0x89, 0xdd,
+	0xac, 0xee, 0x35, 0x2b, 0x7b, 0x66, 0x25, 0xce, 0xb6, 0xf3, 0x24, 0xc6, 0xd4, 0x79, 0x89, 0x31,
+	0x3d, 0x99, 0xfa, 0x32, 0xda, 0xff, 0xa4, 0x61, 0x6d, 0x8a, 0xe1, 0xd0, 0xf3, 0xb8, 0xa7, 0x96,
+	0xae, 0xfc, 0xe2, 0xa2, 0xa6, 0xdf, 0x9e, 0x3e, 0x3e, 0xec, 0xb7, 0x23, 0x22, 0x25, 0x23, 0x17,
+	0xd6, 0xd8, 0x2d, 0xb6, 0x27, 0x7c, 0xcd, 0x6e, 0xd7, 0xc3, 0xb9, 0x6e, 0x57, 0x42, 0x3e, 0xf2,
+	0x26, 0x60, 0xe8, 0x63, 0x58, 0xef, 0x77, 0x07, 0x5b, 0xb4, 0xa9, 0x1d, 0x50, 0x27, 0x1c, 0xd4,
+	0xc2, 0xb5, 0x31, 0x1c, 0xe1, 0x28, 0xed, 0x5f, 0x15, 0xd8, 0x38, 0x53, 0x7d, 0xf4, 0x00, 0xde,
+	0x13, 0x5e, 0x1a, 0xf8, 0xc8, 0xac, 0x98, 0xd6, 0x33, 0x96, 0xd6, 0x9b, 0x95, 0xe4, 0x90, 0x7b,
+	0x05, 0x0a, 0x65, 0xbd, 0x1a, 0x93, 0xaa, 0x0a, 0xab, 0x05, 0x63, 0xde, 0xb5, 0x99, 0x73, 0x6c,
+	0xd3, 0xc2, 0x07, 0x6a, 0x0a, 0xdd, 0x83, 0x3b, 0xe3, 0x48, 0x56, 0x28, 0xcc, 0x32, 0xb6, 0xcb,
+	0xb5, 0x83, 0x5d, 0xb3, 0x2a, 0x4a, 0x46, 0x9a, 0x85, 0xc3, 0x94, 0x38, 0xb1, 0x6b, 0xd6, 0x3e,
+	0x26, 0x36, 0xc1, 0x7a, 0xa3, 0x56, 0x55, 0x33, 0xda, 0xbf, 0x67, 0xe1, 0xea, 0x74, 0x3b, 0x0d,
+	0x52, 0xae, 0xe8, 0x90, 0x2f, 0x92, 0x72, 0x91, 0x3b, 0x08, 0x0c, 0xd1, 0xa0, 0x54, 0x2e, 0xe1,
+	0xa7, 0xed, 0x29, 0xae, 0x1b, 0x0f, 0x8d, 0x8b, 0x3b, 0x0d, 0xbd, 0x84, 0xa5, 0xb1, 0x2f, 0x00,
+	0x62, 0x9e, 0xf7, 0xf8, 0x32, 0xea, 0x89, 0x97, 0x85, 0x3b, 0xf6, 0x6d, 0x60, 0x4c, 0x38, 0xda,
+	0x87, 0x82, 0x4c, 0x96, 0x3c, 0x81, 0x88, 0xd2, 0xf5, 0xde, 0xcc, 0xbd, 0x44, 0x9e, 0xe5, 0xc9,
+	0x03, 0xa2, 0xc1, 0xff, 0xd7, 0x1f, 0xc1, 0xda, 0x94, 0xed, 0x78, 0x31, 0xeb, 0xf9, 0x51, 0x68,
+	0xfb, 0x3d, 0xda, 0xe5, 0x7e, 0xca, 0x92, 0x3c, 0x87, 0xd4, 0x7a, 0xb4, 0xab, 0xfd, 0x52, 0x81,
+	0xd2, 0x59, 0x46, 0x44, 0x5b, 0xf0, 0x2e, 0x8b, 0xa7, 0xcb, 0xc5, 0xe7, 0xb4, 0x76, 0x8f, 0xa7,
+	0x96, 0xf2, 0xbe, 0x59, 0x31, 0x6c, 0xcb, 0x2c, 0x7f, 0x89, 0xad, 0x86, 0xfd, 0xc4, 0xb4, 0xf6,
+	0x6b, 0x4d, 0xcb, 0xd6, 0x8d, 0x66, 0xc5, 0x52, 0x17, 0x58, 0x48, 0x8e, 0x07, 0xa3, 0x20, 0x4c,
+	0x04, 0xee, 0x1a, 0xac, 0x98, 0xd5, 0x72, 0x8d, 0x10, 0x5c, 0xb6, 0xec, 0x3a, 0x31, 0xcb, 0x58,
+	0xcd, 0xa0, 0x77, 0xe0, 0x36, 0x57, 0x77, 0x46, 0x30, 0x67, 0xb5, 0xbf, 0x51, 0x00, 0x86, 0x16,
+	0x44, 0x77, 0xa1, 0x38, 0x62, 0xff, 0x61, 0xc5, 0x5a, 0x1a, 0x5a, 0xd6, 0x74, 0xd1, 0x03, 0x58,
+	0x0d, 0x5f, 0xf8, 0x41, 0x64, 0x8f, 0x26, 0xe6, 0x94, 0x98, 0x75, 0x70, 0x84, 0x31, 0x84, 0x0f,
+	0xeb, 0x71, 0xfa, 0x82, 0xf5, 0x58, 0xfb, 0x06, 0x0a, 0x84, 0x86, 0x7e, 0x3f, 0x60, 0x7d, 0x06,
+	0x7f, 0x65, 0x87, 0x91, 0x73, 0x74, 0x34, 0xd2, 0xc6, 0xf1, 0xb5, 0xe9, 0xa2, 0x6b, 0x90, 0x0b,
+	0x7c, 0xbf, 0xc3, 0x30, 0x42, 0x8d, 0x05, 0xb6, 0x34, 0x5d, 0xe6, 0x6e, 0x26, 0xfd, 0xd4, 0x0e,
+	0xbd, 0xef, 0x85, 0x06, 0x59, 0x92, 0xe7, 0x90, 0x86, 0xf7, 0x3d, 0xd5, 0xfe, 0x21, 0x0d, 0x37,
+	0x66, 0x4c, 0x7c, 0xd0, 0x4b, 0xc8, 0xcb, 0x51, 0x92, 0x1f, 0xc8, 0x84, 0x6d, 0x5e, 0x76, 0x7c,
+	0x94, 0xc0, 0xf9, 0xc1, 0x6e, 0xaa, 0xa4, 0x90, 0xa1, 0x7c, 0xf4, 0x08, 0xd6, 0xe3, 0x96, 0xb1,
+	0x43, 0xa3, 0x17, 0xbe, 0x2b, 0x87, 0x48, 0xfc, 0x44, 0x9c, 0x38, 0x6e, 0x03, 0x0f, 0x38, 0x5a,
+	0x0c, 0x9a, 0x75, 0xb8, 0xd5, 0xef, 0xf6, 0x9c, 0x20, 0xa4, 0xae, 0x3d, 0x95, 0x3d, 0xcb, 0x0d,
+	0x72, 0x3d, 0x26, 0xaa, 0x4f, 0x8a, 0x28, 0x41, 0xee, 0x84, 0x06, 0xe1, 0xf0, 0x21, 0x13, 0x2f,
+	0x99, 0xa3, 0x13, 0x23, 0x35, 0x3f, 0x90, 0x15, 0x58, 0xed, 0x25, 0x8e, 0xa3, 0xb9, 0xa0, 0x26,
+	0x8f, 0x88, 0xee, 0xc0, 0xad, 0xb8, 0x32, 0xd6, 0x49, 0xad, 0x8c, 0x1b, 0x8d, 0x1a, 0x99, 0x7c,
+	0x07, 0x0d, 0x51, 0x0d, 0x8b, 0x98, 0x75, 0x56, 0x99, 0xaf, 0xc1, 0xda, 0x10, 0xba, 0x4b, 0x74,
+	0xb3, 0x6a, 0x11, 0x8c, 0xd5, 0x94, 0xf6, 0x7f, 0x29, 0x58, 0x9d, 0x18, 0x08, 0xa0, 0x87, 0x70,
+	0x75, 0xca, 0x74, 0x61, 0x18, 0x29, 0x6b, 0x13, 0x03, 0x03, 0xd3, 0x45, 0x1f, 0xc1, 0xfa, 0x89,
+	0xd3, 0xf6, 0x5c, 0x5b, 0xf4, 0xaf, 0x83, 0x21, 0xa7, 0x68, 0x62, 0x57, 0x39, 0xae, 0xc1, 0x50,
+	0x72, 0xbe, 0x89, 0x1e, 0x00, 0x12, 0x0c, 0xb4, 0xeb, 0x0e, 0xc9, 0x45, 0x4f, 0xbb, 0xc2, 0x31,
+	0xb8, 0xeb, 0xc6, 0xc4, 0xbb, 0x90, 0xe1, 0x39, 0x4c, 0xbc, 0xbe, 0xb7, 0xe7, 0x09, 0x1b, 0xa1,
+	0x19, 0x4f, 0x65, 0x9c, 0x17, 0xdd, 0x83, 0xa2, 0x1f, 0x78, 0xc7, 0x5e, 0xd7, 0x69, 0xdb, 0xa2,
+	0x4f, 0xcc, 0xf2, 0x10, 0x5e, 0x8e, 0xa1, 0x65, 0x06, 0x44, 0xef, 0xc0, 0x72, 0xab, 0x1f, 0x04,
+	0xec, 0xe0, 0x82, 0x6a, 0x81, 0x53, 0x2d, 0x49, 0xa0, 0x20, 0xda, 0x1a, 0xfa, 0x72, 0x68, 0x1d,
+	0xf1, 0x41, 0x62, 0xa5, 0x37, 0x6e, 0x19, 0xed, 0x3f, 0x17, 0x00, 0x4d, 0x3e, 0x43, 0xa6, 0x7f,
+	0x30, 0x53, 0x5e, 0xcb, 0x07, 0x33, 0xf4, 0x08, 0xae, 0xc6, 0x82, 0xa3, 0xc0, 0xe9, 0x86, 0x4e,
+	0x2b, 0xd6, 0x51, 0xdc, 0xe8, 0xf8, 0x6e, 0x58, 0x43, 0xa4, 0xe9, 0x5e, 0x3e, 0xb9, 0x20, 0x1d,
+	0x20, 0x72, 0x5e, 0xd9, 0x4e, 0x87, 0x1b, 0x2c, 0x33, 0x37, 0x7b, 0x3e, 0x72, 0x5e, 0xe9, 0x9c,
+	0x09, 0x45, 0xc3, 0x0b, 0x2b, 0x6f, 0x07, 0x75, 0xed, 0xe7, 0xa7, 0xdc, 0x47, 0xc5, 0x9d, 0xdd,
+	0x0b, 0x3e, 0xf2, 0x12, 0xf9, 0x81, 0xba, 0xbb, 0xa7, 0x83, 0x0b, 0x3f, 0x02, 0x43, 0x1f, 0x4c,
+	0xf3, 0xe3, 0x82, 0x9c, 0x7a, 0x26, 0x3d, 0x89, 0x3e, 0x39, 0xf3, 0x62, 0xe4, 0x24, 0xcb, 0xd4,
+	0xab, 0xf1, 0x39, 0xe4, 0x5c, 0xda, 0xf3, 0x43, 0x2f, 0x2a, 0x2d, 0xce, 0x31, 0xed, 0x33, 0x04,
+	0x2d, 0x89, 0x99, 0xd0, 0x1e, 0x14, 0xba, 0xbe, 0x1d, 0xbe, 0xf0, 0xbf, 0xb3, 0x8f, 0x28, 0x2d,
+	0xe5, 0xb9, 0x8c, 0x77, 0x67, 0xca, 0xa8, 0xfa, 0x8d, 0x17, 0xfe, 0x77, 0x7b, 0x94, 0x92, 0x7c,
+	0x37, 0xfe, 0x77, 0xca, 0x57, 0x6b, 0xb8, 0xe4, 0x57, 0xeb, 0xce, 0x20, 0xa2, 0x47, 0x8d, 0x39,
+	0xf2, 0x00, 0x90, 0xe9, 0x46, 0x0e, 0x5b, 0x92, 0xef, 0x87, 0x31, 0xec, 0xe3, 0x5a, 0xed, 0x31,
+	0x7f, 0x3f, 0x94, 0x60, 0x7d, 0x0c, 0x51, 0xd7, 0x89, 0x55, 0xc5, 0x44, 0x4d, 0xed, 0x2e, 0xb1,
+	0xc2, 0x23, 0xdf, 0xff, 0xae, 0xf6, 0x03, 0x64, 0xb9, 0x4e, 0xec, 0x3d, 0xcc, 0xc3, 0xcf, 0xee,
+	0x78, 0xad, 0xc0, 0x17, 0x97, 0x27, 0x4d, 0x0a, 0x1c, 0x76, 0xc0, 0x41, 0xc3, 0xcb, 0xdc, 0x3a,
+	0xb5, 0x5b, 0xbe, 0x4b, 0x65, 0xfc, 0x2f, 0xc5, 0xc0, 0xb2, 0xef, 0x52, 0xf4, 0x01, 0x20, 0xc6,
+	0xe3, 0x75, 0x8f, 0x63, 0x8f, 0x46, 0xce, 0x71, 0xfc, 0xb9, 0x41, 0x62, 0x64, 0x36, 0x71, 0x8e,
+	0xb5, 0x3f, 0x57, 0x20, 0x3f, 0x30, 0x2f, 0x7a, 0x04, 0x69, 0xe6, 0x13, 0x65, 0x6e, 0x43, 0x32,
+	0x72, 0xa4, 0xc3, 0xe2, 0x11, 0xa5, 0xa3, 0xef, 0xba, 0x77, 0xcf, 0x67, 0xe5, 0xa9, 0x2c, 0x77,
+	0x44, 0xf9, 0x3f, 0xda, 0x7f, 0x29, 0x90, 0x93, 0x91, 0x82, 0xfe, 0x70, 0x18, 0x60, 0xf3, 0x2b,
+	0x32, 0x08, 0xaf, 0x3f, 0x82, 0x9b, 0x1d, 0xaf, 0x6b, 0x3b, 0xee, 0x89, 0xd3, 0x6d, 0x51, 0xbb,
+	0xc5, 0xfe, 0xb6, 0xdb, 0xc3, 0x31, 0x83, 0xc8, 0xe0, 0x1b, 0x1d, 0xaf, 0xab, 0x0b, 0x92, 0xf2,
+	0x08, 0x05, 0x4b, 0xce, 0x26, 0x2c, 0x49, 0x59, 0x97, 0x39, 0x51, 0x41, 0xf2, 0xf2, 0x53, 0xfd,
+	0xa4, 0x40, 0xa6, 0xd1, 0xf6, 0xe7, 0xf8, 0xf1, 0xc8, 0xf8, 0x20, 0x25, 0x35, 0x73, 0x90, 0x92,
+	0x3e, 0x67, 0x90, 0x92, 0x99, 0x1c, 0xa4, 0xbc, 0x0f, 0xea, 0xd8, 0xcf, 0x92, 0x58, 0x44, 0x88,
+	0xe2, 0xbf, 0x32, 0x0a, 0xb7, 0x9c, 0x63, 0xb4, 0x07, 0xf9, 0x40, 0x76, 0x56, 0x62, 0xd8, 0x51,
+	0xd8, 0xb9, 0x3f, 0xf3, 0xec, 0x23, 0x7d, 0x18, 0x19, 0xb2, 0x6a, 0xff, 0xaf, 0xc0, 0x4a, 0x62,
+	0x14, 0x76, 0xe6, 0x47, 0x21, 0x76, 0xfc, 0x63, 0xef, 0x84, 0x76, 0xed, 0xae, 0xd3, 0x89, 0xa3,
+	0x3a, 0xcf, 0x21, 0x55, 0xa7, 0x43, 0x99, 0xf9, 0x8e, 0x9c, 0x8e, 0xd7, 0x3e, 0x15, 0x78, 0x11,
+	0xcb, 0x20, 0x40, 0x9c, 0xc0, 0x80, 0x9c, 0xe3, 0xba, 0x01, 0x0d, 0x43, 0x99, 0xae, 0x67, 0xcf,
+	0x67, 0xea, 0x7e, 0x18, 0x39, 0x6d, 0x5d, 0x70, 0x90, 0x98, 0x15, 0xdd, 0x84, 0x7c, 0x44, 0xdb,
+	0xb4, 0xf7, 0xc2, 0xef, 0x52, 0x69, 0x9e, 0x21, 0x00, 0xad, 0x43, 0x96, 0x76, 0x1c, 0xaf, 0x2d,
+	0xbf, 0xeb, 0x8b, 0x85, 0xf6, 0xa3, 0x02, 0xcb, 0x63, 0xe2, 0x58, 0xcb, 0xc4, 0x2b, 0x6d, 0x70,
+	0x1a, 0xb7, 0xa2, 0x72, 0x89, 0xae, 0xc3, 0x62, 0xdb, 0x6f, 0x39, 0x83, 0xe9, 0x4a, 0x9e, 0x0c,
+	0xd6, 0xe8, 0x2a, 0x7b, 0xe3, 0x1d, 0x0f, 0xfb, 0x2c, 0xb9, 0x62, 0x47, 0xef, 0x71, 0xf1, 0xe2,
+	0xc2, 0xcb, 0x51, 0x9e, 0x00, 0xf1, 0xeb, 0x7e, 0x0f, 0x8a, 0x61, 0x14, 0x50, 0x1a, 0xd9, 0xb1,
+	0x05, 0x84, 0xe6, 0xcb, 0x02, 0x2a, 0xb5, 0xda, 0xfa, 0x2b, 0x05, 0x96, 0xc7, 0xc6, 0x52, 0xe8,
+	0x6d, 0xb8, 0x1e, 0x8f, 0x4f, 0x1b, 0x96, 0x6e, 0x35, 0x1b, 0x89, 0xcc, 0xb6, 0x0c, 0xf9, 0x72,
+	0xad, 0xba, 0x67, 0x92, 0x03, 0x6c, 0xa8, 0x0a, 0x6f, 0xd7, 0x70, 0xd5, 0x60, 0xe4, 0x07, 0x98,
+	0x94, 0xf7, 0xf5, 0x2a, 0x7b, 0x69, 0x70, 0xbc, 0xfc, 0xad, 0x18, 0x5a, 0x82, 0x45, 0x31, 0x84,
+	0xe5, 0x93, 0x8f, 0x02, 0xe4, 0xaa, 0x35, 0xfe, 0x7b, 0x32, 0x35, 0x83, 0xde, 0x82, 0x55, 0xb9,
+	0xb0, 0xeb, 0xb8, 0xaa, 0x57, 0xcc, 0xaf, 0xb1, 0xa1, 0x66, 0xb7, 0x7a, 0x50, 0x1c, 0x1f, 0xf2,
+	0xa0, 0x4d, 0xb8, 0x59, 0x26, 0xd8, 0x30, 0xad, 0x91, 0x79, 0xcb, 0xb8, 0x5e, 0x8b, 0x90, 0x39,
+	0x34, 0x1b, 0xba, 0xaa, 0xa0, 0x22, 0xc0, 0x81, 0xde, 0xb0, 0x30, 0x61, 0xa4, 0x6a, 0x8a, 0xb5,
+	0x8b, 0xfa, 0x01, 0x26, 0x26, 0x7b, 0x5d, 0xe1, 0xa7, 0x75, 0x82, 0x1b, 0x0d, 0x35, 0xcd, 0xb4,
+	0x32, 0xcc, 0x46, 0xb9, 0x76, 0x88, 0x89, 0x9a, 0xd9, 0xfa, 0x6b, 0x05, 0x56, 0x27, 0x5a, 0x2a,
+	0xf6, 0x1e, 0x4a, 0x8c, 0xaf, 0xa7, 0x6c, 0x7c, 0x0b, 0x36, 0x12, 0x44, 0x0d, 0xb3, 0xfa, 0xb8,
+	0x82, 0xed, 0x66, 0x83, 0x25, 0xfc, 0xc9, 0x11, 0xf8, 0x41, 0xb3, 0x62, 0x99, 0x1c, 0x9b, 0x62,
+	0xe7, 0x4a, 0x60, 0x9b, 0xd5, 0x8a, 0x79, 0x60, 0x5a, 0xd8, 0xe0, 0x14, 0xe9, 0xad, 0xbf, 0x55,
+	0x40, 0x4d, 0x36, 0x43, 0xdc, 0xea, 0x04, 0xc7, 0x9c, 0x53, 0xfd, 0xc4, 0x2b, 0x10, 0x1e, 0x29,
+	0x55, 0x87, 0xa6, 0xc1, 0x3d, 0x76, 0x03, 0xae, 0x8d, 0x20, 0xaa, 0xb5, 0x11, 0x64, 0x2a, 0xc1,
+	0x45, 0xf0, 0x5e, 0xb3, 0x6a, 0x70, 0xb7, 0x8d, 0x23, 0x84, 0x2f, 0xb0, 0xa1, 0x66, 0xb6, 0x1e,
+	0x42, 0x7e, 0x90, 0xe6, 0xd0, 0x55, 0x40, 0x7b, 0xe6, 0x53, 0x6c, 0xd8, 0x44, 0xb7, 0xb0, 0x6d,
+	0xe0, 0x3d, 0x9d, 0xbd, 0x49, 0xaf, 0x30, 0x97, 0xd4, 0x31, 0xb1, 0xeb, 0x98, 0xb0, 0x37, 0xa4,
+	0xf2, 0x7c, 0x81, 0xff, 0x06, 0xf5, 0xe1, 0x6f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xdc, 0x5d,
+	0x0e, 0x8f, 0x2a, 0x00, 0x00,
 }
diff --git a/waitlist/waitlist.pb.go b/waitlist/waitlist.pb.go
new file mode 100644
index 0000000..09df310
--- /dev/null
+++ b/waitlist/waitlist.pb.go
@@ -0,0 +1,1202 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: waitlist.proto
+
+// Waitlist partner API protos
+package ext_maps_booking_partner_v3_waitlist
+
+/*
+Waitlist partner API protos
+*/
+
+import (
+	fmt "fmt"
+	math "math"
+
+	proto "github.com/golang/protobuf/proto"
+)
+
+// 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
+
+// A status for the waitlist that determines if new users can join and what
+// the reason is if they can’t join.
+type WaitlistStatus int32
+
+const (
+	WaitlistStatus_WAITLIST_STATUS_UNSPECIFIED WaitlistStatus = 0
+	// The waitlist is open and is accepting new users.
+	WaitlistStatus_OPEN WaitlistStatus = 1
+	// There is currently no wait and users should arrive at the merchant
+	// without joining the waitlist.
+	WaitlistStatus_CLOSED_NO_WAIT WaitlistStatus = 2
+	// The waitlist is not currently accepting new users because it is full
+	// or closed for other reasons.
+	WaitlistStatus_CLOSED_OTHER WaitlistStatus = 3
+)
+
+var WaitlistStatus_name = map[int32]string{
+	0: "WAITLIST_STATUS_UNSPECIFIED",
+	1: "OPEN",
+	2: "CLOSED_NO_WAIT",
+	3: "CLOSED_OTHER",
+}
+
+var WaitlistStatus_value = map[string]int32{
+	"WAITLIST_STATUS_UNSPECIFIED": 0,
+	"OPEN":                        1,
+	"CLOSED_NO_WAIT":              2,
+	"CLOSED_OTHER":                3,
+}
+
+func (x WaitlistStatus) String() string {
+	return proto.EnumName(WaitlistStatus_name, int32(x))
+}
+
+func (WaitlistStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{0}
+}
+
+type WaitlistEntryState int32
+
+const (
+	WaitlistEntryState_WAITLIST_ENTRY_STATE_UNSPECIFIED WaitlistEntryState = 0
+	// The waitlist entry was created and the user is currently waiting in the
+	// waitlist.
+	WaitlistEntryState_WAITING WaitlistEntryState = 1
+	// The waitlist entry has been canceled. Cancellation for no-shows should use
+	// the NO_SHOW state.
+	WaitlistEntryState_CANCELED WaitlistEntryState = 2
+	// The merchant is ready to serve the user.
+	WaitlistEntryState_SERVICE_READY WaitlistEntryState = 3
+	// The user has checked in with the host and is waiting to be seated.
+	WaitlistEntryState_CHECKED_IN WaitlistEntryState = 4
+	// The user has arrived and been seated by the merchant.
+	WaitlistEntryState_SEATED WaitlistEntryState = 5
+	// The user did not arrive at the merchant in time and lost their space.
+	WaitlistEntryState_NO_SHOW WaitlistEntryState = 6
+)
+
+var WaitlistEntryState_name = map[int32]string{
+	0: "WAITLIST_ENTRY_STATE_UNSPECIFIED",
+	1: "WAITING",
+	2: "CANCELED",
+	3: "SERVICE_READY",
+	4: "CHECKED_IN",
+	5: "SEATED",
+	6: "NO_SHOW",
+}
+
+var WaitlistEntryState_value = map[string]int32{
+	"WAITLIST_ENTRY_STATE_UNSPECIFIED": 0,
+	"WAITING":                          1,
+	"CANCELED":                         2,
+	"SERVICE_READY":                    3,
+	"CHECKED_IN":                       4,
+	"SEATED":                           5,
+	"NO_SHOW":                          6,
+}
+
+func (x WaitlistEntryState) String() string {
+	return proto.EnumName(WaitlistEntryState_name, int32(x))
+}
+
+func (WaitlistEntryState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{1}
+}
+
+type WaitlistBusinessLogicFailure_Cause int32
+
+const (
+	// Default value: Don't use; amounts to an "unknown error"
+	// Unexpected errors must be returned using standard HTTP error codes.
+	WaitlistBusinessLogicFailure_CAUSE_UNSPECIFIED WaitlistBusinessLogicFailure_Cause = 0
+	// The user has already booked a waitlist entry with the partner.
+	WaitlistBusinessLogicFailure_EXISTING_WAITLIST_ENTRY WaitlistBusinessLogicFailure_Cause = 1
+	// The requested party size is below the merchant’s minimum.
+	WaitlistBusinessLogicFailure_BELOW_MIN_PARTY_SIZE WaitlistBusinessLogicFailure_Cause = 2
+	// The requested party size is above the merchant’s maximum.
+	WaitlistBusinessLogicFailure_ABOVE_MAX_PARTY_SIZE WaitlistBusinessLogicFailure_Cause = 3
+	// The requested merchant is currently closed.
+	WaitlistBusinessLogicFailure_MERCHANT_CLOSED WaitlistBusinessLogicFailure_Cause = 4
+	// There is currently no wait and the user should walk in without joining
+	// the waitlist.
+	WaitlistBusinessLogicFailure_NO_WAIT WaitlistBusinessLogicFailure_Cause = 5
+	// The waitlist is at capacity and new users are not being accepted at this
+	// time.
+	WaitlistBusinessLogicFailure_WAITLIST_FULL WaitlistBusinessLogicFailure_Cause = 6
+)
+
+var WaitlistBusinessLogicFailure_Cause_name = map[int32]string{
+	0: "CAUSE_UNSPECIFIED",
+	1: "EXISTING_WAITLIST_ENTRY",
+	2: "BELOW_MIN_PARTY_SIZE",
+	3: "ABOVE_MAX_PARTY_SIZE",
+	4: "MERCHANT_CLOSED",
+	5: "NO_WAIT",
+	6: "WAITLIST_FULL",
+}
+
+var WaitlistBusinessLogicFailure_Cause_value = map[string]int32{
+	"CAUSE_UNSPECIFIED":       0,
+	"EXISTING_WAITLIST_ENTRY": 1,
+	"BELOW_MIN_PARTY_SIZE":    2,
+	"ABOVE_MAX_PARTY_SIZE":    3,
+	"MERCHANT_CLOSED":         4,
+	"NO_WAIT":                 5,
+	"WAITLIST_FULL":           6,
+}
+
+func (x WaitlistBusinessLogicFailure_Cause) String() string {
+	return proto.EnumName(WaitlistBusinessLogicFailure_Cause_name, int32(x))
+}
+
+func (WaitlistBusinessLogicFailure_Cause) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{12, 0}
+}
+
+// Batch request for the wait estimates for the specified merchant, service and
+// party sizes.
+type BatchGetWaitEstimatesRequest struct {
+	// Required. Partner-provided ID for the merchant.
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
+	// Required. Partner-provided ID for the service.
+	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
+	// Required. The different party sizes WaitEstimates are requested for.
+	// WaitEstimates may differ with the number of people in the party.
+	PartySize            []int32  `protobuf:"varint,3,rep,packed,name=party_size,json=partySize,proto3" json:"party_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BatchGetWaitEstimatesRequest) Reset()         { *m = BatchGetWaitEstimatesRequest{} }
+func (m *BatchGetWaitEstimatesRequest) String() string { return proto.CompactTextString(m) }
+func (*BatchGetWaitEstimatesRequest) ProtoMessage()    {}
+func (*BatchGetWaitEstimatesRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{0}
+}
+
+func (m *BatchGetWaitEstimatesRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BatchGetWaitEstimatesRequest.Unmarshal(m, b)
+}
+func (m *BatchGetWaitEstimatesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BatchGetWaitEstimatesRequest.Marshal(b, m, deterministic)
+}
+func (m *BatchGetWaitEstimatesRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BatchGetWaitEstimatesRequest.Merge(m, src)
+}
+func (m *BatchGetWaitEstimatesRequest) XXX_Size() int {
+	return xxx_messageInfo_BatchGetWaitEstimatesRequest.Size(m)
+}
+func (m *BatchGetWaitEstimatesRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_BatchGetWaitEstimatesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BatchGetWaitEstimatesRequest proto.InternalMessageInfo
+
+func (m *BatchGetWaitEstimatesRequest) GetMerchantId() string {
+	if m != nil {
+		return m.MerchantId
+	}
+	return ""
+}
+
+func (m *BatchGetWaitEstimatesRequest) GetServiceId() string {
+	if m != nil {
+		return m.ServiceId
+	}
+	return ""
+}
+
+func (m *BatchGetWaitEstimatesRequest) GetPartySize() []int32 {
+	if m != nil {
+		return m.PartySize
+	}
+	return nil
+}
+
+// Response for the BatchGetWaitEstimates RPC with the wait estimates of the
+// specified merchant, service and party sizes.
+type BatchGetWaitEstimatesResponse struct {
+	// Required. A status for the waitlist that indicates whether new users can
+	// join and what the reason is if they can’t join. If the waitlist is not
+	// open, all other fields in the BatchGetWaitEstimatesResponse are expected to
+	// be unset.
+	WaitlistStatus WaitlistStatus `protobuf:"varint,1,opt,name=waitlist_status,json=waitlistStatus,proto3,enum=ext.maps.booking.partner.v3.waitlist.WaitlistStatus" json:"waitlist_status,omitempty"`
+	// The wait estimates for each party size requested. The response should
+	// contain exactly one wait estimate for each party size sent in the request.
+	// If a party size is not available for some reason, prefer ommitting it
+	// instead of returning an error so that the user will have some options to
+	// choose from.
+	WaitEstimate         []*WaitEstimate `protobuf:"bytes,2,rep,name=wait_estimate,json=waitEstimate,proto3" json:"wait_estimate,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *BatchGetWaitEstimatesResponse) Reset()         { *m = BatchGetWaitEstimatesResponse{} }
+func (m *BatchGetWaitEstimatesResponse) String() string { return proto.CompactTextString(m) }
+func (*BatchGetWaitEstimatesResponse) ProtoMessage()    {}
+func (*BatchGetWaitEstimatesResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{1}
+}
+
+func (m *BatchGetWaitEstimatesResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BatchGetWaitEstimatesResponse.Unmarshal(m, b)
+}
+func (m *BatchGetWaitEstimatesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BatchGetWaitEstimatesResponse.Marshal(b, m, deterministic)
+}
+func (m *BatchGetWaitEstimatesResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BatchGetWaitEstimatesResponse.Merge(m, src)
+}
+func (m *BatchGetWaitEstimatesResponse) XXX_Size() int {
+	return xxx_messageInfo_BatchGetWaitEstimatesResponse.Size(m)
+}
+func (m *BatchGetWaitEstimatesResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_BatchGetWaitEstimatesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BatchGetWaitEstimatesResponse proto.InternalMessageInfo
+
+func (m *BatchGetWaitEstimatesResponse) GetWaitlistStatus() WaitlistStatus {
+	if m != nil {
+		return m.WaitlistStatus
+	}
+	return WaitlistStatus_WAITLIST_STATUS_UNSPECIFIED
+}
+
+func (m *BatchGetWaitEstimatesResponse) GetWaitEstimate() []*WaitEstimate {
+	if m != nil {
+		return m.WaitEstimate
+	}
+	return nil
+}
+
+// The range of time for the current estimated seat time for the user. Estimated
+// seat time range must change over time when the merchant or partner updates
+// their estimates.
+type EstimatedSeatTimeRange struct {
+	// Required. The lower bound for the range. Expressed as the number of seconds
+	// since the Unix epoch.
+	StartSeconds int64 `protobuf:"varint,1,opt,name=start_seconds,json=startSeconds,proto3" json:"start_seconds,omitempty"`
+	// Required. The upper bound for the range. Expressed as the number of seconds
+	// since the Unix epoch.
+	EndSeconds           int64    `protobuf:"varint,2,opt,name=end_seconds,json=endSeconds,proto3" json:"end_seconds,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EstimatedSeatTimeRange) Reset()         { *m = EstimatedSeatTimeRange{} }
+func (m *EstimatedSeatTimeRange) String() string { return proto.CompactTextString(m) }
+func (*EstimatedSeatTimeRange) ProtoMessage()    {}
+func (*EstimatedSeatTimeRange) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{2}
+}
+
+func (m *EstimatedSeatTimeRange) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EstimatedSeatTimeRange.Unmarshal(m, b)
+}
+func (m *EstimatedSeatTimeRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EstimatedSeatTimeRange.Marshal(b, m, deterministic)
+}
+func (m *EstimatedSeatTimeRange) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EstimatedSeatTimeRange.Merge(m, src)
+}
+func (m *EstimatedSeatTimeRange) XXX_Size() int {
+	return xxx_messageInfo_EstimatedSeatTimeRange.Size(m)
+}
+func (m *EstimatedSeatTimeRange) XXX_DiscardUnknown() {
+	xxx_messageInfo_EstimatedSeatTimeRange.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EstimatedSeatTimeRange proto.InternalMessageInfo
+
+func (m *EstimatedSeatTimeRange) GetStartSeconds() int64 {
+	if m != nil {
+		return m.StartSeconds
+	}
+	return 0
+}
+
+func (m *EstimatedSeatTimeRange) GetEndSeconds() int64 {
+	if m != nil {
+		return m.EndSeconds
+	}
+	return 0
+}
+
+// Contains fields measuring how long (in time or # of people) until the
+// user is ready to leave the waitlist and be seated.
+type WaitLength struct {
+	// The count of how many other parties are ahead of the user in the waitlist.
+	// parties_ahead_count must change over time as parties ahead
+	// in the waitlist are seated or leave the waitlist. Either
+	// parties_ahead_count or estimated_seat_time_range must be populated. Both
+	// should be populated.
+	PartiesAheadCount int32 `protobuf:"varint,1,opt,name=parties_ahead_count,json=partiesAheadCount,proto3" json:"parties_ahead_count,omitempty"`
+	// The range of time that the user is estimated to be seated in. Either
+	// parties_ahead_count or estimated_seat_time_range must be populated. Both
+	// should be populated.
+	EstimatedSeatTimeRange *EstimatedSeatTimeRange `protobuf:"bytes,2,opt,name=estimated_seat_time_range,json=estimatedSeatTimeRange,proto3" json:"estimated_seat_time_range,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{}                `json:"-"`
+	XXX_unrecognized       []byte                  `json:"-"`
+	XXX_sizecache          int32                   `json:"-"`
+}
+
+func (m *WaitLength) Reset()         { *m = WaitLength{} }
+func (m *WaitLength) String() string { return proto.CompactTextString(m) }
+func (*WaitLength) ProtoMessage()    {}
+func (*WaitLength) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{3}
+}
+
+func (m *WaitLength) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_WaitLength.Unmarshal(m, b)
+}
+func (m *WaitLength) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_WaitLength.Marshal(b, m, deterministic)
+}
+func (m *WaitLength) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_WaitLength.Merge(m, src)
+}
+func (m *WaitLength) XXX_Size() int {
+	return xxx_messageInfo_WaitLength.Size(m)
+}
+func (m *WaitLength) XXX_DiscardUnknown() {
+	xxx_messageInfo_WaitLength.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WaitLength proto.InternalMessageInfo
+
+func (m *WaitLength) GetPartiesAheadCount() int32 {
+	if m != nil {
+		return m.PartiesAheadCount
+	}
+	return 0
+}
+
+func (m *WaitLength) GetEstimatedSeatTimeRange() *EstimatedSeatTimeRange {
+	if m != nil {
+		return m.EstimatedSeatTimeRange
+	}
+	return nil
+}
+
+// The wait estimate for a particular party size, merchant and service.
+type WaitEstimate struct {
+	// Required. The party size this wait estimate applies to.
+	PartySize int32 `protobuf:"varint,1,opt,name=party_size,json=partySize,proto3" json:"party_size,omitempty"`
+	// Required. Contains fields measuring how long (in time or # of people) until
+	// the user is ready to leave the waitlist and be seated.
+	WaitLength           *WaitLength `protobuf:"bytes,2,opt,name=wait_length,json=waitLength,proto3" json:"wait_length,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *WaitEstimate) Reset()         { *m = WaitEstimate{} }
+func (m *WaitEstimate) String() string { return proto.CompactTextString(m) }
+func (*WaitEstimate) ProtoMessage()    {}
+func (*WaitEstimate) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{4}
+}
+
+func (m *WaitEstimate) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_WaitEstimate.Unmarshal(m, b)
+}
+func (m *WaitEstimate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_WaitEstimate.Marshal(b, m, deterministic)
+}
+func (m *WaitEstimate) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_WaitEstimate.Merge(m, src)
+}
+func (m *WaitEstimate) XXX_Size() int {
+	return xxx_messageInfo_WaitEstimate.Size(m)
+}
+func (m *WaitEstimate) XXX_DiscardUnknown() {
+	xxx_messageInfo_WaitEstimate.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WaitEstimate proto.InternalMessageInfo
+
+func (m *WaitEstimate) GetPartySize() int32 {
+	if m != nil {
+		return m.PartySize
+	}
+	return 0
+}
+
+func (m *WaitEstimate) GetWaitLength() *WaitLength {
+	if m != nil {
+		return m.WaitLength
+	}
+	return nil
+}
+
+// Request for a user to join the waitlist.
+//
+// Reserve with Google may retry REST HTTP requests if no response is
+// received. If the exact same CreateWaitlistEntry is received a second time,
+// then the same CreateWaitlistResponse must be returned. A second waitlist
+// entry must not be created.
+type CreateWaitlistEntryRequest struct {
+	// Required. Partner-provided ID for the merchant.
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
+	// Required. Partner-provided ID for the service.
+	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
+	// Required. The party size requested for the waitlist entry.
+	PartySize int32 `protobuf:"varint,3,opt,name=party_size,json=partySize,proto3" json:"party_size,omitempty"`
+	// Required. Personal information of the user joining the waitlist.
+	UserInformation *UserInformation `protobuf:"bytes,4,opt,name=user_information,json=userInformation,proto3" json:"user_information,omitempty"`
+	// A string from the user which contains any special requests or additional
+	// information that they would like to notify the merchant about.
+	// This will be populated when the user submits an additional request to
+	// Reserve with Google. The partner can disable this functionality at the
+	// service level by setting supports_additional_request to false in the
+	// service feed.
+	AdditionalRequest string `protobuf:"bytes,5,opt,name=additional_request,json=additionalRequest,proto3" json:"additional_request,omitempty"`
+	// Required. Used to differentiate retries from separate requests. If the
+	// exact same CreateWaitlistEntry is received a second time, (including
+	// idempotency_token) then the same CreateWaitlistResponse must be returned.
+	IdempotencyToken     string   `protobuf:"bytes,6,opt,name=idempotency_token,json=idempotencyToken,proto3" json:"idempotency_token,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateWaitlistEntryRequest) Reset()         { *m = CreateWaitlistEntryRequest{} }
+func (m *CreateWaitlistEntryRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateWaitlistEntryRequest) ProtoMessage()    {}
+func (*CreateWaitlistEntryRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{5}
+}
+
+func (m *CreateWaitlistEntryRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateWaitlistEntryRequest.Unmarshal(m, b)
+}
+func (m *CreateWaitlistEntryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateWaitlistEntryRequest.Marshal(b, m, deterministic)
+}
+func (m *CreateWaitlistEntryRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateWaitlistEntryRequest.Merge(m, src)
+}
+func (m *CreateWaitlistEntryRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateWaitlistEntryRequest.Size(m)
+}
+func (m *CreateWaitlistEntryRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateWaitlistEntryRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateWaitlistEntryRequest proto.InternalMessageInfo
+
+func (m *CreateWaitlistEntryRequest) GetMerchantId() string {
+	if m != nil {
+		return m.MerchantId
+	}
+	return ""
+}
+
+func (m *CreateWaitlistEntryRequest) GetServiceId() string {
+	if m != nil {
+		return m.ServiceId
+	}
+	return ""
+}
+
+func (m *CreateWaitlistEntryRequest) GetPartySize() int32 {
+	if m != nil {
+		return m.PartySize
+	}
+	return 0
+}
+
+func (m *CreateWaitlistEntryRequest) GetUserInformation() *UserInformation {
+	if m != nil {
+		return m.UserInformation
+	}
+	return nil
+}
+
+func (m *CreateWaitlistEntryRequest) GetAdditionalRequest() string {
+	if m != nil {
+		return m.AdditionalRequest
+	}
+	return ""
+}
+
+func (m *CreateWaitlistEntryRequest) GetIdempotencyToken() string {
+	if m != nil {
+		return m.IdempotencyToken
+	}
+	return ""
+}
+
+// Response for the CreateWaitlistEntry RPC with the waitlist entry ID or any
+// failing business logic information.
+type CreateWaitlistEntryResponse struct {
+	// Unique partner-provided ID for the newly created entry in the waitlist.
+	// Required if the waitlist entry was created successfully. Unique for all
+	// time.
+	WaitlistEntryId              string                        `protobuf:"bytes,1,opt,name=waitlist_entry_id,json=waitlistEntryId,proto3" json:"waitlist_entry_id,omitempty"`
+	WaitlistBusinessLogicFailure *WaitlistBusinessLogicFailure `protobuf:"bytes,2,opt,name=waitlist_business_logic_failure,json=waitlistBusinessLogicFailure,proto3" json:"waitlist_business_logic_failure,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}                      `json:"-"`
+	XXX_unrecognized             []byte                        `json:"-"`
+	XXX_sizecache                int32                         `json:"-"`
+}
+
+func (m *CreateWaitlistEntryResponse) Reset()         { *m = CreateWaitlistEntryResponse{} }
+func (m *CreateWaitlistEntryResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateWaitlistEntryResponse) ProtoMessage()    {}
+func (*CreateWaitlistEntryResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{6}
+}
+
+func (m *CreateWaitlistEntryResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateWaitlistEntryResponse.Unmarshal(m, b)
+}
+func (m *CreateWaitlistEntryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateWaitlistEntryResponse.Marshal(b, m, deterministic)
+}
+func (m *CreateWaitlistEntryResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateWaitlistEntryResponse.Merge(m, src)
+}
+func (m *CreateWaitlistEntryResponse) XXX_Size() int {
+	return xxx_messageInfo_CreateWaitlistEntryResponse.Size(m)
+}
+func (m *CreateWaitlistEntryResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateWaitlistEntryResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateWaitlistEntryResponse proto.InternalMessageInfo
+
+func (m *CreateWaitlistEntryResponse) GetWaitlistEntryId() string {
+	if m != nil {
+		return m.WaitlistEntryId
+	}
+	return ""
+}
+
+func (m *CreateWaitlistEntryResponse) GetWaitlistBusinessLogicFailure() *WaitlistBusinessLogicFailure {
+	if m != nil {
+		return m.WaitlistBusinessLogicFailure
+	}
+	return nil
+}
+
+// Get the waitlist entry corresponding to the provided waitlist entry ID.
+type GetWaitlistEntryRequest struct {
+	// Required. The partner-provided waitlist entry ID to request info for.
+	WaitlistEntryId      string   `protobuf:"bytes,1,opt,name=waitlist_entry_id,json=waitlistEntryId,proto3" json:"waitlist_entry_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetWaitlistEntryRequest) Reset()         { *m = GetWaitlistEntryRequest{} }
+func (m *GetWaitlistEntryRequest) String() string { return proto.CompactTextString(m) }
+func (*GetWaitlistEntryRequest) ProtoMessage()    {}
+func (*GetWaitlistEntryRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{7}
+}
+
+func (m *GetWaitlistEntryRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetWaitlistEntryRequest.Unmarshal(m, b)
+}
+func (m *GetWaitlistEntryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetWaitlistEntryRequest.Marshal(b, m, deterministic)
+}
+func (m *GetWaitlistEntryRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetWaitlistEntryRequest.Merge(m, src)
+}
+func (m *GetWaitlistEntryRequest) XXX_Size() int {
+	return xxx_messageInfo_GetWaitlistEntryRequest.Size(m)
+}
+func (m *GetWaitlistEntryRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetWaitlistEntryRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetWaitlistEntryRequest proto.InternalMessageInfo
+
+func (m *GetWaitlistEntryRequest) GetWaitlistEntryId() string {
+	if m != nil {
+		return m.WaitlistEntryId
+	}
+	return ""
+}
+
+// Response with the waitlist entry corresponding to the provided
+// waitlist entry ID.
+type GetWaitlistEntryResponse struct {
+	// Required. The partner-provided information about a user’s waitlist entry.
+	WaitlistEntry        *WaitlistEntry `protobuf:"bytes,1,opt,name=waitlist_entry,json=waitlistEntry,proto3" json:"waitlist_entry,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *GetWaitlistEntryResponse) Reset()         { *m = GetWaitlistEntryResponse{} }
+func (m *GetWaitlistEntryResponse) String() string { return proto.CompactTextString(m) }
+func (*GetWaitlistEntryResponse) ProtoMessage()    {}
+func (*GetWaitlistEntryResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{8}
+}
+
+func (m *GetWaitlistEntryResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetWaitlistEntryResponse.Unmarshal(m, b)
+}
+func (m *GetWaitlistEntryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetWaitlistEntryResponse.Marshal(b, m, deterministic)
+}
+func (m *GetWaitlistEntryResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetWaitlistEntryResponse.Merge(m, src)
+}
+func (m *GetWaitlistEntryResponse) XXX_Size() int {
+	return xxx_messageInfo_GetWaitlistEntryResponse.Size(m)
+}
+func (m *GetWaitlistEntryResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetWaitlistEntryResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetWaitlistEntryResponse proto.InternalMessageInfo
+
+func (m *GetWaitlistEntryResponse) GetWaitlistEntry() *WaitlistEntry {
+	if m != nil {
+		return m.WaitlistEntry
+	}
+	return nil
+}
+
+// Cancel the user's entry in the waitlist.
+type DeleteWaitlistEntryRequest struct {
+	// Required. The partner-provided ID for the waitlist entry to be deleted.
+	WaitlistEntryId      string   `protobuf:"bytes,1,opt,name=waitlist_entry_id,json=waitlistEntryId,proto3" json:"waitlist_entry_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeleteWaitlistEntryRequest) Reset()         { *m = DeleteWaitlistEntryRequest{} }
+func (m *DeleteWaitlistEntryRequest) String() string { return proto.CompactTextString(m) }
+func (*DeleteWaitlistEntryRequest) ProtoMessage()    {}
+func (*DeleteWaitlistEntryRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{9}
+}
+
+func (m *DeleteWaitlistEntryRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteWaitlistEntryRequest.Unmarshal(m, b)
+}
+func (m *DeleteWaitlistEntryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteWaitlistEntryRequest.Marshal(b, m, deterministic)
+}
+func (m *DeleteWaitlistEntryRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteWaitlistEntryRequest.Merge(m, src)
+}
+func (m *DeleteWaitlistEntryRequest) XXX_Size() int {
+	return xxx_messageInfo_DeleteWaitlistEntryRequest.Size(m)
+}
+func (m *DeleteWaitlistEntryRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteWaitlistEntryRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteWaitlistEntryRequest proto.InternalMessageInfo
+
+func (m *DeleteWaitlistEntryRequest) GetWaitlistEntryId() string {
+	if m != nil {
+		return m.WaitlistEntryId
+	}
+	return ""
+}
+
+// The times at which the waitlist entry changed state.
+type WaitlistEntryStateTimes struct {
+	// Required. The time at which the waitlist entry was created.
+	// In seconds since Unix epoch.
+	CreatedTimeSeconds int64 `protobuf:"varint,1,opt,name=created_time_seconds,json=createdTimeSeconds,proto3" json:"created_time_seconds,omitempty"`
+	// The time that the waitlist entry was cancelled. Must be populated
+	// when the waitlist entry has been canceled but not before.
+	// In seconds since Unix epoch.
+	CanceledTimeSeconds int64 `protobuf:"varint,2,opt,name=canceled_time_seconds,json=canceledTimeSeconds,proto3" json:"canceled_time_seconds,omitempty"`
+	// The time the merchant was ready to serve the user.
+	// service_readied_time_seconds must be populated after the merchant is
+	// ready to serve the user but not before.
+	// In seconds since Unix epoch.
+	ServiceReadiedTimeSeconds int64 `protobuf:"varint,3,opt,name=service_readied_time_seconds,json=serviceReadiedTimeSeconds,proto3" json:"service_readied_time_seconds,omitempty"`
+	// The actual time the user checked in with the host. checked_in_time must be
+	// populated after the user has checked in with the merchant but not before.
+	// In seconds since Unix epoch.
+	CheckedInTimeSeconds int64 `protobuf:"varint,4,opt,name=checked_in_time_seconds,json=checkedInTimeSeconds,proto3" json:"checked_in_time_seconds,omitempty"`
+	// The seated time for the user. seated_time_seconds must be populated
+	// when the user has been seated but not before.
+	// In seconds since Unix epoch.
+	SeatedTimeSeconds int64 `protobuf:"varint,5,opt,name=seated_time_seconds,json=seatedTimeSeconds,proto3" json:"seated_time_seconds,omitempty"`
+	// The time that the user was marked as a no-show. marked_no_show_time_seconds
+	// must be populated when the user has been marked a no-show but not before.
+	// In seconds since Unix epoch.
+	MarkedNoShowTimeSeconds int64    `protobuf:"varint,6,opt,name=marked_no_show_time_seconds,json=markedNoShowTimeSeconds,proto3" json:"marked_no_show_time_seconds,omitempty"`
+	XXX_NoUnkeyedLiteral    struct{} `json:"-"`
+	XXX_unrecognized        []byte   `json:"-"`
+	XXX_sizecache           int32    `json:"-"`
+}
+
+func (m *WaitlistEntryStateTimes) Reset()         { *m = WaitlistEntryStateTimes{} }
+func (m *WaitlistEntryStateTimes) String() string { return proto.CompactTextString(m) }
+func (*WaitlistEntryStateTimes) ProtoMessage()    {}
+func (*WaitlistEntryStateTimes) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{10}
+}
+
+func (m *WaitlistEntryStateTimes) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_WaitlistEntryStateTimes.Unmarshal(m, b)
+}
+func (m *WaitlistEntryStateTimes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_WaitlistEntryStateTimes.Marshal(b, m, deterministic)
+}
+func (m *WaitlistEntryStateTimes) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_WaitlistEntryStateTimes.Merge(m, src)
+}
+func (m *WaitlistEntryStateTimes) XXX_Size() int {
+	return xxx_messageInfo_WaitlistEntryStateTimes.Size(m)
+}
+func (m *WaitlistEntryStateTimes) XXX_DiscardUnknown() {
+	xxx_messageInfo_WaitlistEntryStateTimes.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WaitlistEntryStateTimes proto.InternalMessageInfo
+
+func (m *WaitlistEntryStateTimes) GetCreatedTimeSeconds() int64 {
+	if m != nil {
+		return m.CreatedTimeSeconds
+	}
+	return 0
+}
+
+func (m *WaitlistEntryStateTimes) GetCanceledTimeSeconds() int64 {
+	if m != nil {
+		return m.CanceledTimeSeconds
+	}
+	return 0
+}
+
+func (m *WaitlistEntryStateTimes) GetServiceReadiedTimeSeconds() int64 {
+	if m != nil {
+		return m.ServiceReadiedTimeSeconds
+	}
+	return 0
+}
+
+func (m *WaitlistEntryStateTimes) GetCheckedInTimeSeconds() int64 {
+	if m != nil {
+		return m.CheckedInTimeSeconds
+	}
+	return 0
+}
+
+func (m *WaitlistEntryStateTimes) GetSeatedTimeSeconds() int64 {
+	if m != nil {
+		return m.SeatedTimeSeconds
+	}
+	return 0
+}
+
+func (m *WaitlistEntryStateTimes) GetMarkedNoShowTimeSeconds() int64 {
+	if m != nil {
+		return m.MarkedNoShowTimeSeconds
+	}
+	return 0
+}
+
+// An entry in the waitlist.
+type WaitlistEntry struct {
+	// Required.
+	WaitlistEntryState WaitlistEntryState `protobuf:"varint,1,opt,name=waitlist_entry_state,json=waitlistEntryState,proto3,enum=ext.maps.booking.partner.v3.waitlist.WaitlistEntryState" json:"waitlist_entry_state,omitempty"`
+	// Required. The times at which the waitlist entry changed state.
+	WaitlistEntryStateTimes *WaitlistEntryStateTimes `protobuf:"bytes,2,opt,name=waitlist_entry_state_times,json=waitlistEntryStateTimes,proto3" json:"waitlist_entry_state_times,omitempty"`
+	// Required. Contains fields measuring how long (in time or # of people) until
+	// the user is ready to leave the waitlist and be seated.
+	WaitEstimate         *WaitEstimate `protobuf:"bytes,3,opt,name=wait_estimate,json=waitEstimate,proto3" json:"wait_estimate,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *WaitlistEntry) Reset()         { *m = WaitlistEntry{} }
+func (m *WaitlistEntry) String() string { return proto.CompactTextString(m) }
+func (*WaitlistEntry) ProtoMessage()    {}
+func (*WaitlistEntry) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{11}
+}
+
+func (m *WaitlistEntry) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_WaitlistEntry.Unmarshal(m, b)
+}
+func (m *WaitlistEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_WaitlistEntry.Marshal(b, m, deterministic)
+}
+func (m *WaitlistEntry) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_WaitlistEntry.Merge(m, src)
+}
+func (m *WaitlistEntry) XXX_Size() int {
+	return xxx_messageInfo_WaitlistEntry.Size(m)
+}
+func (m *WaitlistEntry) XXX_DiscardUnknown() {
+	xxx_messageInfo_WaitlistEntry.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WaitlistEntry proto.InternalMessageInfo
+
+func (m *WaitlistEntry) GetWaitlistEntryState() WaitlistEntryState {
+	if m != nil {
+		return m.WaitlistEntryState
+	}
+	return WaitlistEntryState_WAITLIST_ENTRY_STATE_UNSPECIFIED
+}
+
+func (m *WaitlistEntry) GetWaitlistEntryStateTimes() *WaitlistEntryStateTimes {
+	if m != nil {
+		return m.WaitlistEntryStateTimes
+	}
+	return nil
+}
+
+func (m *WaitlistEntry) GetWaitEstimate() *WaitEstimate {
+	if m != nil {
+		return m.WaitEstimate
+	}
+	return nil
+}
+
+// Status data that conveys why creating a waitlist entry fails.
+// If there is a business logic error that is not captured here, please
+// reach out to the Reserve with Google team to add it to this list. Other
+// errors should be returned using standard HTTP error codes.
+type WaitlistBusinessLogicFailure struct {
+	// Required. The reason why the booking failed.
+	Cause WaitlistBusinessLogicFailure_Cause `protobuf:"varint,1,opt,name=cause,proto3,enum=ext.maps.booking.partner.v3.waitlist.WaitlistBusinessLogicFailure_Cause" json:"cause,omitempty"`
+	// This optional field is used for the partner to include additional
+	// information for debugging purposes only.
+	Description          string   `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *WaitlistBusinessLogicFailure) Reset()         { *m = WaitlistBusinessLogicFailure{} }
+func (m *WaitlistBusinessLogicFailure) String() string { return proto.CompactTextString(m) }
+func (*WaitlistBusinessLogicFailure) ProtoMessage()    {}
+func (*WaitlistBusinessLogicFailure) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{12}
+}
+
+func (m *WaitlistBusinessLogicFailure) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_WaitlistBusinessLogicFailure.Unmarshal(m, b)
+}
+func (m *WaitlistBusinessLogicFailure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_WaitlistBusinessLogicFailure.Marshal(b, m, deterministic)
+}
+func (m *WaitlistBusinessLogicFailure) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_WaitlistBusinessLogicFailure.Merge(m, src)
+}
+func (m *WaitlistBusinessLogicFailure) XXX_Size() int {
+	return xxx_messageInfo_WaitlistBusinessLogicFailure.Size(m)
+}
+func (m *WaitlistBusinessLogicFailure) XXX_DiscardUnknown() {
+	xxx_messageInfo_WaitlistBusinessLogicFailure.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WaitlistBusinessLogicFailure proto.InternalMessageInfo
+
+func (m *WaitlistBusinessLogicFailure) GetCause() WaitlistBusinessLogicFailure_Cause {
+	if m != nil {
+		return m.Cause
+	}
+	return WaitlistBusinessLogicFailure_CAUSE_UNSPECIFIED
+}
+
+func (m *WaitlistBusinessLogicFailure) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+// Personal information about the person making a booking
+type UserInformation struct {
+	// Unique ID of the user to the partner, chosen by Reserve with Google.
+	// (required)
+	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
+	// Given name of the user (maximum 40 characters) (required)
+	GivenName string `protobuf:"bytes,2,opt,name=given_name,json=givenName,proto3" json:"given_name,omitempty"`
+	// Family name of the user (maximum 40 characters) (required)
+	FamilyName string `protobuf:"bytes,3,opt,name=family_name,json=familyName,proto3" json:"family_name,omitempty"`
+	// Address of the user (optional)
+	Address *PostalAddress `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"`
+	// Phone number of the user (required)
+	Telephone string `protobuf:"bytes,5,opt,name=telephone,proto3" json:"telephone,omitempty"`
+	// Email address of the user (required)
+	Email                string   `protobuf:"bytes,6,opt,name=email,proto3" json:"email,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UserInformation) Reset()         { *m = UserInformation{} }
+func (m *UserInformation) String() string { return proto.CompactTextString(m) }
+func (*UserInformation) ProtoMessage()    {}
+func (*UserInformation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{13}
+}
+
+func (m *UserInformation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserInformation.Unmarshal(m, b)
+}
+func (m *UserInformation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserInformation.Marshal(b, m, deterministic)
+}
+func (m *UserInformation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserInformation.Merge(m, src)
+}
+func (m *UserInformation) XXX_Size() int {
+	return xxx_messageInfo_UserInformation.Size(m)
+}
+func (m *UserInformation) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserInformation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserInformation proto.InternalMessageInfo
+
+func (m *UserInformation) GetUserId() string {
+	if m != nil {
+		return m.UserId
+	}
+	return ""
+}
+
+func (m *UserInformation) GetGivenName() string {
+	if m != nil {
+		return m.GivenName
+	}
+	return ""
+}
+
+func (m *UserInformation) GetFamilyName() string {
+	if m != nil {
+		return m.FamilyName
+	}
+	return ""
+}
+
+func (m *UserInformation) GetAddress() *PostalAddress {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+func (m *UserInformation) GetTelephone() string {
+	if m != nil {
+		return m.Telephone
+	}
+	return ""
+}
+
+func (m *UserInformation) GetEmail() string {
+	if m != nil {
+		return m.Email
+	}
+	return ""
+}
+
+// The postal address for a merchant.
+type PostalAddress struct {
+	// The country, e.g. "USA". (required)
+	Country string `protobuf:"bytes,1,opt,name=country,proto3" json:"country,omitempty"`
+	// The locality/city, e.g. "Mountain View". (required)
+	Locality string `protobuf:"bytes,2,opt,name=locality,proto3" json:"locality,omitempty"`
+	// The region/state/province, e.g. "CA". (required)
+	Region string `protobuf:"bytes,3,opt,name=region,proto3" json:"region,omitempty"`
+	// The postal code, e.g. "94043". (required)
+	PostalCode string `protobuf:"bytes,4,opt,name=postal_code,json=postalCode,proto3" json:"postal_code,omitempty"`
+	// The street address, e.g. "1600 Amphitheatre Pkwy". (required)
+	StreetAddress        string   `protobuf:"bytes,5,opt,name=street_address,json=streetAddress,proto3" json:"street_address,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PostalAddress) Reset()         { *m = PostalAddress{} }
+func (m *PostalAddress) String() string { return proto.CompactTextString(m) }
+func (*PostalAddress) ProtoMessage()    {}
+func (*PostalAddress) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c4272259c545fcea, []int{14}
+}
+
+func (m *PostalAddress) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PostalAddress.Unmarshal(m, b)
+}
+func (m *PostalAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PostalAddress.Marshal(b, m, deterministic)
+}
+func (m *PostalAddress) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PostalAddress.Merge(m, src)
+}
+func (m *PostalAddress) XXX_Size() int {
+	return xxx_messageInfo_PostalAddress.Size(m)
+}
+func (m *PostalAddress) XXX_DiscardUnknown() {
+	xxx_messageInfo_PostalAddress.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PostalAddress proto.InternalMessageInfo
+
+func (m *PostalAddress) GetCountry() string {
+	if m != nil {
+		return m.Country
+	}
+	return ""
+}
+
+func (m *PostalAddress) GetLocality() string {
+	if m != nil {
+		return m.Locality
+	}
+	return ""
+}
+
+func (m *PostalAddress) GetRegion() string {
+	if m != nil {
+		return m.Region
+	}
+	return ""
+}
+
+func (m *PostalAddress) GetPostalCode() string {
+	if m != nil {
+		return m.PostalCode
+	}
+	return ""
+}
+
+func (m *PostalAddress) GetStreetAddress() string {
+	if m != nil {
+		return m.StreetAddress
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*BatchGetWaitEstimatesRequest)(nil), "ext.maps.booking.partner.v3.waitlist.BatchGetWaitEstimatesRequest")
+	proto.RegisterType((*BatchGetWaitEstimatesResponse)(nil), "ext.maps.booking.partner.v3.waitlist.BatchGetWaitEstimatesResponse")
+	proto.RegisterType((*EstimatedSeatTimeRange)(nil), "ext.maps.booking.partner.v3.waitlist.EstimatedSeatTimeRange")
+	proto.RegisterType((*WaitLength)(nil), "ext.maps.booking.partner.v3.waitlist.WaitLength")
+	proto.RegisterType((*WaitEstimate)(nil), "ext.maps.booking.partner.v3.waitlist.WaitEstimate")
+	proto.RegisterType((*CreateWaitlistEntryRequest)(nil), "ext.maps.booking.partner.v3.waitlist.CreateWaitlistEntryRequest")
+	proto.RegisterType((*CreateWaitlistEntryResponse)(nil), "ext.maps.booking.partner.v3.waitlist.CreateWaitlistEntryResponse")
+	proto.RegisterType((*GetWaitlistEntryRequest)(nil), "ext.maps.booking.partner.v3.waitlist.GetWaitlistEntryRequest")
+	proto.RegisterType((*GetWaitlistEntryResponse)(nil), "ext.maps.booking.partner.v3.waitlist.GetWaitlistEntryResponse")
+	proto.RegisterType((*DeleteWaitlistEntryRequest)(nil), "ext.maps.booking.partner.v3.waitlist.DeleteWaitlistEntryRequest")
+	proto.RegisterType((*WaitlistEntryStateTimes)(nil), "ext.maps.booking.partner.v3.waitlist.WaitlistEntryStateTimes")
+	proto.RegisterType((*WaitlistEntry)(nil), "ext.maps.booking.partner.v3.waitlist.WaitlistEntry")
+	proto.RegisterType((*WaitlistBusinessLogicFailure)(nil), "ext.maps.booking.partner.v3.waitlist.WaitlistBusinessLogicFailure")
+	proto.RegisterType((*UserInformation)(nil), "ext.maps.booking.partner.v3.waitlist.UserInformation")
+	proto.RegisterType((*PostalAddress)(nil), "ext.maps.booking.partner.v3.waitlist.PostalAddress")
+	proto.RegisterEnum("ext.maps.booking.partner.v3.waitlist.WaitlistStatus", WaitlistStatus_name, WaitlistStatus_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.waitlist.WaitlistEntryState", WaitlistEntryState_name, WaitlistEntryState_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.waitlist.WaitlistBusinessLogicFailure_Cause", WaitlistBusinessLogicFailure_Cause_name, WaitlistBusinessLogicFailure_Cause_value)
+}
+
+func init() { proto.RegisterFile("waitlist.proto", fileDescriptor_c4272259c545fcea) }
+
+var fileDescriptor_c4272259c545fcea = []byte{
+	// 1295 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcd, 0x6e, 0xdb, 0x46,
+	0x10, 0x2e, 0x25, 0x4b, 0x8e, 0x47, 0xfe, 0xa1, 0xd6, 0x4e, 0xa4, 0xd8, 0x0e, 0x62, 0xb0, 0x29,
+	0x10, 0xa4, 0xa8, 0x10, 0x38, 0x0d, 0xd0, 0x43, 0x8a, 0x42, 0x96, 0x98, 0x98, 0xa8, 0x2c, 0xb9,
+	0xa4, 0x1c, 0x27, 0x01, 0x9a, 0xed, 0x86, 0x9c, 0x58, 0x6c, 0x28, 0x52, 0xe5, 0xae, 0xac, 0x3a,
+	0x40, 0x81, 0x5e, 0x7b, 0xec, 0x3b, 0xb4, 0x8f, 0xd0, 0x43, 0x9f, 0xa0, 0xd7, 0x5e, 0x8a, 0x3e,
+	0x41, 0x8f, 0x7d, 0x87, 0x82, 0xbb, 0xa4, 0x2c, 0xc9, 0x4e, 0x60, 0x27, 0xe8, 0x8d, 0x3b, 0x3f,
+	0xdf, 0xcc, 0x37, 0x3b, 0x3b, 0x23, 0xc1, 0xf2, 0x88, 0xf9, 0x22, 0xf0, 0xb9, 0xa8, 0x0d, 0xe2,
+	0x48, 0x44, 0xe4, 0x16, 0x7e, 0x2f, 0x6a, 0x7d, 0x36, 0xe0, 0xb5, 0x17, 0x51, 0xf4, 0xca, 0x0f,
+	0x8f, 0x6a, 0x03, 0x16, 0x8b, 0x10, 0xe3, 0xda, 0xf1, 0xbd, 0x5a, 0x66, 0x6b, 0xfc, 0x00, 0x9b,
+	0x3b, 0x4c, 0xb8, 0xbd, 0x47, 0x28, 0x0e, 0x99, 0x2f, 0x4c, 0x2e, 0xfc, 0x3e, 0x13, 0xc8, 0x6d,
+	0xfc, 0x6e, 0x88, 0x5c, 0x90, 0x9b, 0x50, 0xea, 0x63, 0xec, 0xf6, 0x58, 0x28, 0xa8, 0xef, 0x55,
+	0xb5, 0x2d, 0xed, 0xf6, 0x82, 0x0d, 0x99, 0xc8, 0xf2, 0xc8, 0x0d, 0x00, 0x8e, 0xf1, 0xb1, 0xef,
+	0x62, 0xa2, 0xcf, 0x49, 0xfd, 0x42, 0x2a, 0x51, 0xea, 0x24, 0xec, 0x09, 0xe5, 0xfe, 0x6b, 0xac,
+	0xe6, 0xb7, 0xf2, 0xb7, 0x0b, 0xf6, 0x82, 0x94, 0x38, 0xfe, 0x6b, 0x34, 0xfe, 0xd6, 0xe0, 0xc6,
+	0x1b, 0xe2, 0xf3, 0x41, 0x14, 0x72, 0x24, 0x5f, 0xc3, 0x4a, 0x96, 0x2c, 0xe5, 0x82, 0x89, 0x21,
+	0x97, 0x49, 0x2c, 0x6f, 0x7f, 0x5a, 0xbb, 0x08, 0xc1, 0xda, 0x61, 0xfa, 0xe1, 0x48, 0x5f, 0x7b,
+	0x5c, 0x25, 0x75, 0x26, 0x87, 0xb0, 0x94, 0x48, 0x28, 0xa6, 0x81, 0xab, 0xb9, 0xad, 0xfc, 0xed,
+	0xd2, 0xf6, 0xf6, 0xc5, 0xc1, 0xb3, 0x94, 0xed, 0xc5, 0xd1, 0xc4, 0xc9, 0x78, 0x0e, 0xd7, 0xb2,
+	0x6f, 0xcf, 0x41, 0x26, 0xba, 0x7e, 0x1f, 0x6d, 0x16, 0x1e, 0x21, 0xf9, 0x10, 0x96, 0xb8, 0x60,
+	0xb1, 0xa0, 0x1c, 0xdd, 0x28, 0xf4, 0x14, 0x9f, 0xbc, 0xbd, 0x28, 0x85, 0x8e, 0x92, 0x25, 0x75,
+	0xc7, 0xd0, 0x1b, 0x9b, 0xe4, 0xa4, 0x09, 0x60, 0xe8, 0xa5, 0x06, 0xc6, 0x6f, 0x1a, 0x40, 0x12,
+	0xbe, 0x85, 0xe1, 0x91, 0xe8, 0x91, 0x1a, 0xac, 0x26, 0x09, 0xfa, 0xc8, 0x29, 0xeb, 0x21, 0xf3,
+	0xa8, 0x1b, 0x0d, 0x43, 0x21, 0xa1, 0x0b, 0x76, 0x39, 0x55, 0xd5, 0x13, 0x4d, 0x23, 0x51, 0x90,
+	0x11, 0x5c, 0xcf, 0x28, 0x27, 0x51, 0x98, 0xa0, 0xc2, 0xef, 0x23, 0x8d, 0x93, 0x0c, 0x65, 0xb4,
+	0xd2, 0xf6, 0x83, 0x8b, 0xd5, 0xe0, 0x7c, 0x96, 0xf6, 0x35, 0x3c, 0x57, 0x6e, 0xfc, 0xa8, 0xc1,
+	0xe2, 0x64, 0xd9, 0x66, 0x3a, 0x44, 0x25, 0x7c, 0xda, 0x21, 0xe4, 0x2b, 0x28, 0xc9, 0x0b, 0x0a,
+	0x24, 0xcf, 0x34, 0xb5, 0xbb, 0x17, 0xbf, 0x1e, 0x55, 0x1f, 0x1b, 0x46, 0xe3, 0x6f, 0xe3, 0xf7,
+	0x1c, 0xac, 0x37, 0x62, 0x64, 0x02, 0xb3, 0xe6, 0x30, 0x43, 0x11, 0x9f, 0xfc, 0x5f, 0x2d, 0x3f,
+	0x43, 0xe8, 0x1b, 0xd0, 0x87, 0x1c, 0x63, 0xea, 0x87, 0x2f, 0xa3, 0xb8, 0xcf, 0x84, 0x1f, 0x85,
+	0xd5, 0x39, 0xc9, 0xea, 0xfe, 0xc5, 0x58, 0x1d, 0x70, 0x8c, 0xad, 0x53, 0x67, 0x7b, 0x65, 0x38,
+	0x2d, 0x20, 0x9f, 0x00, 0x61, 0x9e, 0xe7, 0x27, 0xdf, 0x2c, 0xa0, 0xb1, 0xa2, 0x55, 0x2d, 0xc8,
+	0x3c, 0xcb, 0xa7, 0x9a, 0x8c, 0xef, 0xc7, 0x50, 0xf6, 0x3d, 0xec, 0x0f, 0x22, 0x81, 0xa1, 0x7b,
+	0x42, 0x45, 0xf4, 0x0a, 0xc3, 0x6a, 0x51, 0x5a, 0xeb, 0x13, 0x8a, 0x6e, 0x22, 0x37, 0xfe, 0xd2,
+	0x60, 0xe3, 0xdc, 0xda, 0xa5, 0xcf, 0xf5, 0x0e, 0x94, 0xc7, 0xcf, 0x15, 0x13, 0xcd, 0x69, 0x09,
+	0xc7, 0xef, 0x58, 0x7a, 0x58, 0x1e, 0xf9, 0x49, 0x83, 0x9b, 0x63, 0xe3, 0x17, 0x43, 0xee, 0x87,
+	0xc8, 0x39, 0x0d, 0xa2, 0x23, 0xdf, 0xa5, 0x2f, 0x99, 0x1f, 0x0c, 0xe3, 0xac, 0x15, 0x77, 0x2e,
+	0xf7, 0xd6, 0x77, 0x52, 0xac, 0x56, 0x02, 0xf5, 0x50, 0x21, 0xd9, 0x9b, 0xa3, 0xb7, 0x68, 0x0d,
+	0x13, 0x2a, 0xe9, 0x08, 0x3a, 0xd3, 0x0f, 0x97, 0xa0, 0x64, 0x1c, 0x43, 0xf5, 0x2c, 0x4c, 0x5a,
+	0x9a, 0x67, 0xa7, 0x23, 0x5a, 0xe1, 0x48, 0x90, 0xd2, 0xf6, 0xbd, 0xcb, 0x91, 0x53, 0xa0, 0x4b,
+	0x53, 0x91, 0x8d, 0x5d, 0x58, 0x6f, 0x62, 0x80, 0x6f, 0xe8, 0xe8, 0xcb, 0x30, 0xf8, 0x27, 0x07,
+	0x95, 0x29, 0x90, 0x64, 0x50, 0x62, 0xf2, 0x7e, 0x39, 0xb9, 0x0b, 0x6b, 0xae, 0xbc, 0x7b, 0x4f,
+	0x4d, 0x8b, 0xe9, 0x01, 0x46, 0x52, 0x5d, 0x62, 0x9b, 0x8d, 0xb1, 0x6d, 0xb8, 0xea, 0xb2, 0xd0,
+	0xc5, 0x60, 0xd6, 0x45, 0x0d, 0xb4, 0xd5, 0x4c, 0x39, 0xe9, 0xf3, 0x05, 0x6c, 0x66, 0xcf, 0x2b,
+	0x46, 0xe6, 0xf9, 0xb3, 0xae, 0x79, 0xe9, 0x7a, 0x3d, 0xb5, 0xb1, 0x95, 0xc9, 0x24, 0xc0, 0x7d,
+	0xa8, 0xb8, 0x3d, 0x74, 0x5f, 0xa1, 0x47, 0xfd, 0x70, 0xda, 0x77, 0x4e, 0xfa, 0xae, 0xa5, 0x6a,
+	0x2b, 0x9c, 0x74, 0xab, 0xc1, 0x2a, 0x3f, 0x87, 0x5c, 0x41, 0xba, 0x94, 0xf9, 0x19, 0x6e, 0x0f,
+	0x60, 0xa3, 0xcf, 0xe2, 0x24, 0x4a, 0x18, 0x51, 0xde, 0x8b, 0x46, 0xd3, 0x7e, 0x45, 0xe9, 0x57,
+	0x51, 0x26, 0xed, 0xc8, 0xe9, 0x45, 0xa3, 0x09, 0x6f, 0xe3, 0xcf, 0x1c, 0x2c, 0x4d, 0xd5, 0x99,
+	0x7c, 0x0b, 0x6b, 0x33, 0xb7, 0x94, 0xec, 0x3b, 0x4c, 0xd7, 0xdd, 0x67, 0xef, 0xd0, 0x25, 0xf2,
+	0xea, 0x6c, 0x32, 0x3a, 0x23, 0x23, 0xaf, 0x61, 0xfd, 0xbc, 0x58, 0x92, 0x01, 0x4f, 0x1f, 0xdd,
+	0xe7, 0xef, 0x1a, 0x51, 0x36, 0x8b, 0x5d, 0x19, 0xbd, 0xa1, 0x8b, 0xce, 0xac, 0xdc, 0xbc, 0x0c,
+	0xf7, 0xfe, 0x2b, 0xf7, 0x8f, 0x1c, 0x6c, 0xbe, 0x6d, 0x04, 0x90, 0xe7, 0x50, 0x70, 0xd9, 0x90,
+	0x67, 0x25, 0xdd, 0x7d, 0xff, 0xa9, 0x52, 0x6b, 0x24, 0x78, 0xb6, 0x82, 0x25, 0x5b, 0x50, 0xf2,
+	0x90, 0xbb, 0xb1, 0x3f, 0x90, 0x53, 0x5d, 0x6d, 0x86, 0x49, 0x91, 0xf1, 0x8b, 0x06, 0x05, 0xe9,
+	0x42, 0xae, 0x42, 0xb9, 0x51, 0x3f, 0x70, 0x4c, 0x7a, 0xd0, 0x76, 0xf6, 0xcd, 0x86, 0xf5, 0xd0,
+	0x32, 0x9b, 0xfa, 0x07, 0x64, 0x03, 0x2a, 0xe6, 0x13, 0xcb, 0xe9, 0x5a, 0xed, 0x47, 0xf4, 0xb0,
+	0x6e, 0x75, 0x5b, 0x96, 0xd3, 0xa5, 0x66, 0xbb, 0x6b, 0x3f, 0xd5, 0x35, 0x52, 0x85, 0xb5, 0x1d,
+	0xb3, 0xd5, 0x39, 0xa4, 0x7b, 0x56, 0x9b, 0xee, 0xd7, 0xed, 0xee, 0x53, 0xea, 0x58, 0xcf, 0x4c,
+	0x3d, 0x97, 0x68, 0xea, 0x3b, 0x9d, 0xc7, 0x26, 0xdd, 0xab, 0x3f, 0x99, 0xd4, 0xe4, 0xc9, 0x2a,
+	0xac, 0xec, 0x99, 0x76, 0x63, 0xb7, 0xde, 0xee, 0xd2, 0x46, 0xab, 0xe3, 0x98, 0x4d, 0x7d, 0x8e,
+	0x94, 0x60, 0xbe, 0xdd, 0x91, 0xf8, 0x7a, 0x81, 0x94, 0x61, 0x69, 0x1c, 0xe9, 0xe1, 0x41, 0xab,
+	0xa5, 0x17, 0x8d, 0x7f, 0x35, 0x58, 0x99, 0x59, 0x33, 0xa4, 0x02, 0xf3, 0x6a, 0x6f, 0x65, 0xa3,
+	0xa3, 0x28, 0xf7, 0x8e, 0xdc, 0x77, 0x47, 0xfe, 0x31, 0x86, 0x34, 0x64, 0x7d, 0xcc, 0xd6, 0xa1,
+	0x94, 0xb4, 0x59, 0x1f, 0x93, 0x75, 0xfa, 0x92, 0xf5, 0xfd, 0xe0, 0x44, 0xe9, 0xf3, 0x6a, 0x9d,
+	0x2a, 0x91, 0x34, 0xd8, 0x83, 0x79, 0xe6, 0x79, 0x31, 0x72, 0x9e, 0xee, 0xc1, 0x0b, 0x0e, 0xc4,
+	0xfd, 0x88, 0x0b, 0x16, 0xd4, 0x95, 0xab, 0x9d, 0x61, 0x90, 0x4d, 0x58, 0x10, 0x18, 0xe0, 0xa0,
+	0x17, 0x85, 0x98, 0x2e, 0xbd, 0x53, 0x01, 0x59, 0x83, 0x02, 0xf6, 0x99, 0x1f, 0xa4, 0x0b, 0x4e,
+	0x1d, 0x8c, 0x5f, 0x35, 0x58, 0x9a, 0x82, 0x23, 0x55, 0x98, 0x97, 0xbf, 0xa0, 0xd2, 0x29, 0xbd,
+	0x60, 0x67, 0x47, 0xb2, 0x0e, 0x57, 0x82, 0xc8, 0x65, 0x81, 0x2f, 0x4e, 0x52, 0xb2, 0xe3, 0x33,
+	0xb9, 0x06, 0xc5, 0x18, 0x8f, 0x92, 0xbb, 0x57, 0x34, 0xd3, 0x53, 0x52, 0x83, 0x81, 0x84, 0xa7,
+	0x6e, 0xe4, 0xa1, 0xa4, 0xb9, 0x60, 0x83, 0x12, 0x35, 0x22, 0x0f, 0xc9, 0x47, 0xb0, 0xcc, 0x45,
+	0x8c, 0x28, 0x68, 0x56, 0x0a, 0x95, 0xf9, 0x92, 0x92, 0xa6, 0x59, 0xdd, 0x61, 0xb0, 0x3c, 0xfd,
+	0x7b, 0x96, 0xdc, 0x84, 0x8d, 0xf1, 0xe5, 0x39, 0xdd, 0x7a, 0xf7, 0xc0, 0x99, 0x69, 0xa8, 0x2b,
+	0x30, 0xd7, 0xd9, 0x37, 0xdb, 0xba, 0x46, 0x08, 0x2c, 0xab, 0x06, 0xa0, 0xd9, 0xdd, 0xe7, 0x88,
+	0x0e, 0x8b, 0xa9, 0xac, 0xd3, 0xdd, 0x35, 0x6d, 0x3d, 0x7f, 0xe7, 0x67, 0x0d, 0xc8, 0xd9, 0x27,
+	0x4d, 0x6e, 0xc1, 0xd6, 0x74, 0x3b, 0xca, 0x68, 0xb3, 0xdd, 0x5b, 0x82, 0xf9, 0xc4, 0xca, 0x6a,
+	0x3f, 0xd2, 0x35, 0xb2, 0x08, 0x57, 0x1a, 0xf5, 0x76, 0xc3, 0x6c, 0x99, 0x4d, 0x3d, 0x97, 0x74,
+	0x99, 0x63, 0xda, 0x8f, 0xad, 0x86, 0x49, 0x6d, 0xb3, 0xde, 0x7c, 0xaa, 0xe7, 0xc9, 0x32, 0x40,
+	0x63, 0xd7, 0x6c, 0x7c, 0x69, 0x36, 0xa9, 0xd5, 0xd6, 0xe7, 0x08, 0x40, 0xd1, 0x31, 0xeb, 0x5d,
+	0xb3, 0xa9, 0x17, 0xd2, 0x0e, 0x75, 0x76, 0x3b, 0x87, 0x7a, 0xf1, 0x45, 0x51, 0xfe, 0xa3, 0xb9,
+	0xf7, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1b, 0x7a, 0x92, 0x6d, 0xe3, 0x0c, 0x00, 0x00,
+}
