Updated test client names and switched to external facing proto definitions
diff --git a/api/api.go b/api/api.go
index 317690d..ac99b79 100644
--- a/api/api.go
+++ b/api/api.go
@@ -544,7 +544,7 @@
 
 	// UserId check first.
 	reqPB := &mpb.ListOrdersRequest{
-		UserId: userID,
+		Ids: &mpb.ListOrdersRequest_UserId{userID},
 	}
 	respUser, err := sendListOrdersRequest(reqPB, conn)
 	if err != nil {
@@ -556,9 +556,12 @@
 
 	// Still here? OrderId check.
 	reqPB.Reset()
+	var orderIDs mpb.ListOrdersRequest_OrderIds
 	for _, order := range orders {
-		reqPB.OrderId = append(reqPB.OrderId, order.GetOrderId())
+		orderIDs.OrderId = append(orderIDs.OrderId, order.GetOrderId())
 	}
+	reqPB.Ids = &mpb.ListOrdersRequest_OrderIds_{&orderIDs}
+
 	respOrder, err := sendListOrdersRequest(reqPB, conn)
 	if err != nil {
 		return err
diff --git a/proto/v3.proto b/proto/v3.proto
index 1c217bb..c443878 100644
--- a/proto/v3.proto
+++ b/proto/v3.proto
@@ -1,274 +1,219 @@
+// API v3 public interface declaration
 syntax = "proto3";
 
-package v3;
+package ext.maps.booking.partner.v3;
 
-// [START postaladdr_definition]
-// 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;
-}
-// [END postaladdr_definition]
+// +------+------------------------------+----------------------------------+
+// | Verb |          HTTP Path           |      Request/Response Body       |
+// +------+------------------------------+----------------------------------+
+// | GET  | /v3/HealthCheck              | -                                |
+// |      |                              | -                                |
+// +------+------------------------------+----------------------------------+
+// | POST | /v3/CheckAvailability        | CheckAvailabilityRequest         |
+// |      |                              | CheckAvailabilityResponse        |
+// +------+------------------------------+----------------------------------+
+// | POST | /v3/CreateBooking            | CreateBookingRequest             |
+// |      |                              | CreateBookingResponse            |
+// +------+------------------------------+----------------------------------+
+// | POST | /v3/UpdateBooking            | UpdateBookingRequest             |
+// |      |                              | UpdateBookingResponse            |
+// +------+------------------------------+----------------------------------+
+// | POST | /v3/GetBookingStatus         | GetBookingStatusRequest          |
+// |      |                              | GetBookingStatusResponse         |
+// +------+------------------------------+----------------------------------+
+// | POST | /v3/ListBookings             | ListBookingsRequest              |
+// |      |                              | ListBookingsResponse             |
+// +------+------------------------------+----------------------------------+
+// | POST | /v3/CheckOrderFulfillability | CheckOrderFulfillabilityRequest  |
+// |      |                              | CheckOrderFulfillabilityResponse |
+// +------+------------------------------+----------------------------------+
+// | POST | /v3/CreateOrder              | CreateOrderRequest               |
+// |      |                              | CreateOrderResponse              |
+// +------+------------------------------+----------------------------------+
+// | POST | /v3/ListOrders               | ListOrdersRequest                |
+// |      |                              | ListOrdersResponse               |
+// +------+------------------------------+----------------------------------+
 
-// [START geocoord_definition]
-// The Geo data of a location, including latitude, longitude, and address.
-message GeoCoordinates {
-  double latitude = 1;        // In degrees. (optional)
-  double longitude = 2;       // In degrees. (optional)
-  PostalAddress address = 3;  // (required)
-}
-// [END geocoord_definition]
+// CheckAvailability method
 
-// [START price_definition]
-// The price of a service or a fee.
-message Price {
-  // The price in micro-units of the currency.
-  // Fractions of smallest currency unit will be rounded using nearest even
-  // rounding. (e.g. For USD 2.5 cents rounded to 2 cents, 3.5 cents rounded to
-  // 4 cents, 0.5 cents rounded to 0 cents, 2.51 cents rounded to 3 cents).
-  // (required)
-  int64 price_micros = 1;
-  // The currency of the price that is defined in ISO 4217. (required)
-  string currency_code = 2;
-  // An optional and opaque string that identifies the pricing option that is
-  // associated with the extended price. (optional)
-  string pricing_option_tag = 3;
-}
-// [END price_definition]
-
-// [START taxrate_definition]
-// A tax rate applied when charging the user for a service, and which can be set
-// on either a per merchant, or per service basis.
-message TaxRate {
-  // A tax rate in millionths of one percent, effectively giving 6 decimals of
-  // precision. For example, if the tax rate is 7.253%, this field should be set
-  // to 7253000.
-  //
-  // If this field is left unset or set to 0, the total price charged to a user
-  // for any service provided by this merchant is the exact price specified by
-  // Service.price. The service price is assumed to be exempt from or already
-  // inclusive of applicable taxes. Taxes will not be shown to the user as a
-  // separate line item.
-  //
-  // If this field is set to any nonzero value, the total price charged to a
-  // user for any service provided by this merchant will include the service
-  // price plus the tax assessed using the tax rate provided here. Fractions of
-  // the smallest currency unit (for example, fractions of one cent) will be
-  // rounded using nearest even rounding. Taxes will be shown to the user as a
-  // separate line item. (required)
-  int32 micro_percent = 1;
-}
-// [END taxrate_definition]
-
-// [START schedulingrules_definition]
-// The scheduling rules for a service.
-message SchedulingRules {
-  // The minimum advance notice in seconds required to book an appointment.
-  // (optional)
-  int64 min_advance_booking = 1;
-
-  // The minimum advance notice in seconds required to cancel a booked
-  // appointment online. (optional)
-  int64 min_advance_online_canceling = 2;
-
-  // The fee for canceling within the minimum advance notice period.
-  Price late_cancellation_fee = 3 [deprecated = true];
-
-  // The fee for no-show without canceling.
-  Price noshow_fee = 4 [deprecated = true];
-}
-// [END schedulingrules_definition]
-
-// This defines the ingestion source type.
-enum IngestionSource {
-  SOURCE_UNKNOWN = 0;
-
-  // This ingestion is from an uploaded feed file.
-  SOURCE_FEED = 1;
-
-  // This ingestion is from an API call.
-  SOURCE_API = 2;
+// Request to check availability for a Slot.
+message CheckAvailabilityRequest {
+  // The appointment slot that is being checked (required)
+  Slot slot = 1;
 }
 
-// An empty boilplate proto for the Ingestion Queue in Spanner.
-message IngestionQueuePayload {
-}
+// Response for the CheckAvailability RPC with the availability of the
+// appointment slot.
+message CheckAvailabilityResponse {
+  // The requested slot. (required)
+  Slot slot = 1;
+  // Number of available spots.
+  // 0 indicates that the appointment slot is not available. (required)
+  int32 count_available = 2;
+  // This enum indicates what requirements exist for the user to acknowledge or
+  // view the requested slots duration/end time.
+  enum DurationRequirement {
+    // The handling of the end time is not specified. This is the default.
+    DURATION_REQUIREMENT_UNSPECIFIED = 0;
 
-// The types of content that we can ingest through feeds or APIs.
-enum ContentType {
-  CONTENT_UNKNOWN = 0;
-  CONTENT_MERCHANT = 1;
-  CONTENT_SERVICE = 2;
-  CONTENT_AVAILABILITY = 3;
-  CONTENT_PAYMENT_OPTION = 4;
-  CONTENT_PAYMENT_OPTION_SERVICE = 5;
-}
+    // The end time is not shown to the user.
+    DO_NOT_SHOW_DURATION = 1;
 
-message IngestionStatus {
-  // The status code of an Ingestion event: a feed upload or an API call.
-  // Only used for logging the ingestion status in the IngestionMetadata
-  // table, do NOT use it in the code's control flow.
-  enum Code {
-    // An unknown status for Ingestion, shouldn't use it.
-    STATUS_UNKNOWN = 0;
-
-    // 1-99 for Feed upload.
-    // A feed has been uploaded.
-    STATUS_FEED_UPLOADED = 1;
-    // A feed has been added to the Ingestion Queue.
-    STATUS_FEED_ENQUEUED = 2;
-    // A feed has been picked up from the queue and started processing.
-    STATUS_FEED_PROCESSING_STARTED = 3;
-    // A feed has been processed successfully.
-    STATUS_FEED_PROCESSING_SUCCEEDED = 4;
-    // A feed has failed the processing.
-    STATUS_FEED_PROCESSING_FAILED = 5;
-    // A feed duplicate was uploaded.
-    STATUS_FEED_DUPLICATED = 6;
-
-    // 101-199 for API.
-    // An API has been called.
-    STATUS_API_CALLED = 101;
-    // An API has been processed successfully.
-    STATUS_API_PROCESSING_SUCCEEDED = 102;
-    // An API has failed the processing.
-    STATUS_API_PROCESSING_FAILED = 103;
+    // The end time has to be shown to the user before an appointment can be
+    // made.
+    MUST_SHOW_DURATION = 2;
   }
+  // The requirement to show the slots duration and/or endtime. This field will
+  // be ignored if the slot is unavailable. (optional)
+  DurationRequirement duration_requirement = 3;
 
-  // The code of the status.
-  Code code = 1;
-
-  // Microseconds since epoch when the ingestion updates its status code.
-  int64 timestamp_micros = 2;
-
-  // A human description of the error if any.
-  string internal_error_details = 3;
-  string partner_visible_error_details = 4;
+  // Optionally, the partner can return additional updated information about the
+  // availability for this merchant if this information is present when
+  // responding to the CheckAvailabilityRequest and if there is no negative
+  // impact on the CheckAvailability request latency.
+  // For instance an entire day of merchant availability for a superset of
+  // resources can be returned here.
+  AvailabilityUpdate availability_update = 4;
 }
 
-// [START timerange_definition]
-// A closed-open time range, i.e. [begin_sec, end_sec)
-message TimeRange {
-  // Seconds of UTC time since Unix epoch (required)
-  int64 begin_sec = 1;
-  // Seconds of UTC time since Unix epoch (required)
-  int64 end_sec = 2;
+// An update to one ore more slots indicating that the availability for the
+// associated time has potentially changed.
+message AvailabilityUpdate {
+  repeated SlotAvailability slot_availability = 1;
 }
-// [END timerange_definition]
 
-// [START pricetype_definition]
-// Defines how a total price is determined from an availability.
-enum PriceType {
-  // The price is for a fixed amount. This is the default value if the field is
-  // not set.
-  FIXED_RATE_DEFAULT = 0;
-  // The price specified is per person, and the total price is calculated
-  // according to the party size specified in Resources as
-  // price_micros * party_size. A PER_PERSON price must be accompanied by a
-  // party size in the availability resources. If it is not, a party size of one
-  // is used.
-  PER_PERSON = 1;
+// An inventory slot and associated count of open spots.
+message SlotAvailability {
+  Slot slot = 1;
+  // Number of available spots.
+  // 0 indicates that the appointment slot is not available. (required)
+  int32 count_available = 2;
 }
-// [END pricetype_definition]
 
-// [START noshowfee_definition]
-// A fee that a user may be charged if they have made a booking but do not
-// show up.
-message NoShowFee {
-  // The amount the user may be charged if they do not show up for their
-  // reservation.
-  Price fee = 1;
+// CheckOrderFulfillability method
 
-  // Defines how the fee is determined from the availability.
-  PriceType fee_type = 3;
-}
-// [END noshowfee_definition]
-
-// [START deposit_definition]
-// A deposit that the user may be charged or have a hold on their credit card
-// for.
-message Deposit {
-  // Deposit amount.
-  Price deposit = 1;
-
-  // Minimum advance cancellation for the deposit.
-  int64 min_advance_cancellation_sec = 2;
-
-  // Defines how the deposit is determined from the availability.
-  PriceType deposit_type = 3;
-}
-// [END deposit_definition]
-
-// [START RequireCreditCard_definition]
-// Defines whether a credit card is required in order to book an appointment.
-enum RequireCreditCard {
-  // The credit card requirement is not explicitly specified and the
-  // behaviour is identical to the one specified for CONDITIONAL.
-  REQUIRE_CREDIT_CARD_UNSPECIFIED = 0;
-
-  // Google will require a credit card for the booking if any of the following
-  // conditions are met:
-  // * the availability has a price and the prepayment_type is REQUIRED
-  // * the no_show_fee is set
-  // * the deposit field is set.
-  REQUIRE_CREDIT_CARD_CONDITIONAL = 1;
-
-  // A credit card is always required in order to book this availability
-  // regardless of other field values.
-  REQUIRE_CREDIT_CARD_ALWAYS = 2;
-}
-// [END RequireCreditCard_definition]
-
-// [START ActionLink_definition]
-// An action URL with associated language and list of countries restricted to.
-message ActionLink {
-  // The entry point URL for this action link.
-  string url = 1;
-
-  // The BCP-47 language tag identifying the language in which the content
-  // from this URI is available.
-  string language = 2;
-
-  // ISO 3166-1 alpha-2 country code. Leave empty for unrestricted visibility.
-  repeated string restricted_country = 3;
-}
-// [END ActionLink_definition]
-
-// [START message_slot]
-// An inventory slot
-message Slot {
-  // ID of the merchant for the slot (required)
+// Request to check the fulfillability of an order.
+message CheckOrderFulfillabilityRequest {
+  // The merchant that this order is intended for. (required)
   string merchant_id = 1;
 
-  // ID of the merchant service (required)
-  string service_id = 2;
-
-  // Start time of the appointment slot in seconds of UTC time since Unix epoch.
-  // (required)
-  int64 start_sec = 3;
-
-  // Duration of the appointment slot (required)
-  int64 duration_sec = 4;
-
-  // Opaque tag that identifies the availability slot and matches the value
-  // provided in the availability feed (optional)
-  string availability_tag = 5;
-
-  // The set of resources that disambiguates the appointment slot, e.g. by
-  // indicating the staff member and room selected by the user (optional)
-  ResourceIds resources = 6;
+  // The line items in this order. All services requested must belong to the
+  // specified merchant. (required)
+  repeated LineItem item = 2;
 }
-// [END message_slot]
 
-// [START message_lease]
+// Response for the CheckOrderfulfillabilityRequest.
+message CheckOrderFulfillabilityResponse {
+  // Fulfillability status of the order, potentially contains updated
+  // availabilities and prices of the requested line item. (required)
+  OrderFulfillability fulfillability = 1;
+
+  // Total processing fees & taxes that need to be paid for this order.
+  // (required)
+  Price fees_and_taxes = 2;
+}
+
+// GetBookingStatus method
+
+// Request to get booking status and prepayment status for a Booking.
+message GetBookingStatusRequest {
+  // ID of the existing booking (required)
+  string booking_id = 1;
+}
+
+// Response for the GetBookingStatus RPC with booking status and prepayment
+// status.
+message GetBookingStatusResponse {
+  // ID of the booking (required)
+  string booking_id = 1;
+
+  // Status of the booking (required)
+  BookingStatus booking_status = 2;
+
+  // Prepayment status of the booking (required)
+  PrepaymentStatus prepayment_status = 3;
+}
+
+// CreateBooking method
+
+// Request to create a Booking for an inventory slot. Consumes the lease if
+// provided.
+message CreateBookingRequest {
+  // The inventory slot that is being requested to make this booking.
+  // If lease_ref is provided, slot must match the lease; slot is provided for
+  // the partner to verify the lease information.
+  // If lease_ref is absent, then create the booking for the slot. (required)
+  Slot slot = 1;
+
+  // The lease that is being confirmed to make this booking.
+  // If lease_ref is provided, then create the booking using the lease.
+  // (optional)
+  LeaseReference lease_ref = 2;
+
+  // Personal information of the user making the appointment (required)
+  UserInformation user_information = 3;
+
+  // Information about payments. When payment authorizations are handled by
+  // Google, if the booking request does not succeed, payment authorizations are
+  // automatically canceled. (optional)
+  PaymentInformation payment_information = 4;
+
+  // 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;
+
+  // Idempotency token for CreateBooking requests. (required)
+  string idempotency_token = 6;
+
+  // A string from the user which contains any special requests or additional
+  // information that they would like to notify the merchant about. (optional)
+  string additional_request = 7;
+}
+
+// Response with the created Booking for an inventory slot.
+message CreateBookingResponse {
+  // The created booking (required)
+  Booking booking = 1;
+
+  // The updated user payment option used in this booking.
+  // If a new payment option was purchased to pay for the booking, this should
+  // be a newly created user payment option.
+  // If an already purchased user payment option was used for this booking,
+  // this should reflect an updated version of that user payment option.
+  // (optional)
+  UserPaymentOption user_payment_option = 2;
+
+  // If creating a booking fails, this field should reflect the business logic
+  // error (e.g., slot has become unavailable) and all other fields in the
+  // CreateBookingResponse message are expected to be unset. (required if
+  // failure occurs)
+  BookingFailure booking_failure = 3;
+}
+
+// CreateLease method
+
+// Request to create a Lease for a slot in the inventory.  The expiration time
+// in the returned Lease may be modified by the backend, e.g. if the requested
+// lease period is too long.
+message CreateLeaseRequest {
+  // The lease to be created with information about the appointment slot
+  // (required)
+  Lease lease = 1;
+}
+
+// Response for the CreateLease RPC with the created Lease.
+message CreateLeaseResponse {
+  // The created Lease (required)
+  Lease lease = 1;
+
+  // If creating a lease fails, this field should reflect the business logic
+  // error (e.g., slot has become unavailable) and lease field is expected to be
+  // unset. (required if failure occurs)
+  BookingFailure booking_failure = 2;
+}
+
 // Temporary lease for an inventory slot
 message Lease {
   // ID of the lease.
@@ -292,9 +237,111 @@
   // Lease ID (required)
   string lease_id = 1;
 }
-// [END message_lease]
 
-// [START message_booking]
+// CreateOrder method
+
+// Request to create an order.
+message CreateOrderRequest {
+  // The order to create. (required)
+  Order order = 1;
+
+  // The parameters to be used if the payment is processed by the partner
+  // (i.e. order.payment_information.payment_processed_by is equal to
+  // PROCESSED_BY_PARTNER). (required if payment is processed by the partner)
+  PaymentProcessingParameters payment_processing_parameters = 2;
+
+  // Idempotency token for CreateOrder requests. (required)
+  string idempotency_token = 3;
+}
+
+// Response for the CreateOrderRequest.
+message CreateOrderResponse {
+  // All line items in an order either fail or succeed together.
+  // This means that if some of the items cannot be fulfilled, the entire
+  // order must fail, the booking must not be made for any item, and the user
+  // must not be charged.
+  oneof result {
+    // The order created.
+    Order order = 1;
+
+    // If creating an order fails, this field should reflect the business logic
+    // error (e.g., slot has become unavailable or price has changed).
+    OrderFailure order_failure = 2;
+  }
+}
+
+// ListBookings method
+
+// Request to list all bookings for a user
+message ListBookingsRequest {
+  // ID of the user (required)
+  string user_id = 1;
+}
+
+// Response for the ListBookings RPC with all bookings for the requested user.
+message ListBookingsResponse {
+  // All bookings of the user (required)
+  repeated Booking bookings = 1;
+}
+
+// ListOrders method
+
+// Request to list orders.
+message ListOrdersRequest {
+  message OrderIds {
+    repeated string order_id = 1;
+  }
+
+  // Request of orders either by user ID, or by order ID.
+  oneof ids {
+    // If set, return all orders belong to the user.
+    string user_id = 1;
+
+    // If set, return the specified orders.
+    OrderIds order_ids = 2;
+  }
+}
+
+// Response for the ListOrders RPC.
+message ListOrdersResponse {
+  // All requested orders (required)
+  repeated Order order = 1;
+}
+
+// UpdateBooking method
+
+// Request to update a Booking.
+message UpdateBookingRequest {
+  // The booking to be updated
+  // The following fields can be set in a booking:
+  // - status, to cancel a booking.
+  // - start_time and duration in the slot, to reschedule a booking. (required)
+  Booking booking = 1;
+}
+
+// Response with the updated Booking.
+message UpdateBookingResponse {
+  // The updated booking (required)
+  Booking booking = 1;
+
+  // The updated user payment option originally used to pay for this booking.
+  // This should be set if the UpdateBookingRequest results in a change to
+  // the UserPaymentOption.
+  // For instance, if the booking is canceled, the UserPaymentOption should
+  // reflect an additional credit to the user. In the case of a multi-use
+  // payment option, the current_count should be increased by one to
+  // allow the user to create another booking with this payment option. In the
+  // case of a single-use payment option, a new single-use user payment option
+  // should be returned. (required if altered in update)
+  UserPaymentOption user_payment_option = 2;
+
+  // If updating a booking fails, this field should reflect the business logic
+  // error (e.g., booking is not cancellable) (required if failure occurs)
+  BookingFailure booking_failure = 3;
+}
+
+// Booking specification
+
 // A booking for an inventory slot
 message Booking {
   // ID of this booking (required)
@@ -313,33 +360,286 @@
   // (optional)
   PaymentInformation payment_information = 5;
 }
-// [END message_booking]
 
-// [START user_definition]
-// 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;
+// BookingStatus specification
 
-  // Given name of the user (required)
-  string given_name = 2;
-
-  // Family name of the user (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;
+// Status of a booking.
+//
+// Updating booking status does not change the status of the associated payment.
+// Prepayment status updates should be done using the PrepaymentStatus enum.
+//
+// nextID: 6
+enum BookingStatus {
+  // Not specified.
+  BOOKING_STATUS_UNSPECIFIED = 0;
+  // Booking has been confirmed
+  CONFIRMED = 1;
+  // Booking is awaiting confirmation by the merchant before it can transition
+  // into CONFIRMED status
+  PENDING_MERCHANT_CONFIRMATION = 2;
+  // Booking has been canceled on behalf of the user.
+  // The merchant can still trigger a manual refund.
+  CANCELED = 3;
+  // User did not show for the appointment
+  NO_SHOW = 4;
+  // User did not show for the appointment in violation of the cancellation
+  // policy.
+  NO_SHOW_PENALIZED = 5;
 }
-// [END user_definition]
 
-// [START paymentprocessing_definition]
+// BookingFailure specification
+
+// Status data that conveys why (1) creating a lease or (2) creating or updating
+// a booking fails.
+// BookingFailure is intended to primarily capture business logic errors.
+message BookingFailure {
+  enum Cause {
+    // Default value: Don't use; amounts to an "unknown error"
+    CAUSE_UNSPECIFIED = 0;
+    // The referenced availability slot is not available any longer.
+    SLOT_UNAVAILABLE = 1;
+    // The user has already booked an appointment for the referenced
+    // availability slot.
+    SLOT_ALREADY_BOOKED_BY_USER = 2;
+    // The lease (if provided) has expired and cannot be used any longer to
+    // complete the requested booking.
+    LEASE_EXPIRED = 3;
+    // The requested cancellation cannot be performed at the current time due
+    // to time restrictions in the merchant's cancellation policy.
+    OUTSIDE_CANCELLATION_WINDOW = 4;
+    // An error was encountered while processing the payment because the
+    // provided credit card type was not accepted by the merchant. The credit
+    // card type must be supplied in rejected_card_type.
+    PAYMENT_ERROR_CARD_TYPE_REJECTED = 5;
+    // An error was encountered while processing the payment because the
+    // provided credit card was declined.
+    PAYMENT_ERROR_CARD_DECLINED = 6;
+    // An error was encountered with the pack/membership used to pay for the
+    // booking. There could be no valid uses left, it could have expired, etc.
+    PAYMENT_OPTION_NOT_VALID = 7;
+    // An error was encountered while processing the payment for this booking.
+    // Use this value to indicate a general payment related error, only if the
+    // error does not match to a specific payment error above.
+    PAYMENT_ERROR = 8;
+    // User cannot use the given payment option (e.g. user trying to use a
+    // first time price for the second time).
+    USER_CANNOT_USE_PAYMENT_OPTION = 9;
+    // A booking that the user tried to cancel has already been cancelled.
+    BOOKING_ALREADY_CANCELLED = 10;
+    // A booking that the user tried to cancel is not cancellable.
+    BOOKING_NOT_CANCELLABLE = 11;
+    // User has an existing reservation too close to this time.
+    OVERLAPPING_RESERVATION = 12;
+  }
+  // The reason why the booking failed. (required)
+  Cause cause = 1;
+
+  // (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
+  CreditCardType rejected_card_type = 2;
+
+  // This optional field is used for the partner to include additional
+  // information for debugging purpose only. (optional)
+  string description = 3;
+}
+
+// Used when booking/order failure cause is PAYMENT_ERROR_CARD_TYPE_REJECTED to
+// indicate the type of credit card that was rejected.
+enum CreditCardType {
+  // Default value. Used if credit card type does not match to one below.
+  CREDIT_CARD_TYPE_UNSPECIFIED = 0;
+  VISA = 1;
+  MASTERCARD = 2;
+  AMERICAN_EXPRESS = 3;
+  DISCOVER = 4;
+}
+
+// Order specification
+
+// An order for service appointments with a merchant.
+message Order {
+  // ID of this Order, chosen by the booking partner who handles the order
+  // (required in CreateOrderResponse and ListOrdersResponse, must not be set in
+  // CreateOrderRequest)
+  string order_id = 1;
+  // Personal information of the user making the order (required)
+  UserInformation user_information = 2;
+  // Information about payment transactions that relate to the Order.
+  // (optional)
+  PaymentInformation payment_information = 3;
+  // The merchant that all services in this Order belong to.
+  string merchant_id = 4;
+  // Line items in this order.
+  repeated LineItem item = 5;
+}
+
+// A single item in an Order--the booking of a single service in a single time
+// slot.
+message LineItem {
+  // ID of the merchant Service. (required)
+  string service_id = 1;
+  // Start time of the appointment slot in seconds of UTC time since Unix epoch.
+  // (required)
+  int64 start_sec = 2;
+  // Duration of the appointment slot in seconds. (required)
+  int64 duration_sec = 3;
+
+  message OrderedTickets {
+    string ticket_id = 1;
+    int32 count = 2;
+  }
+  // Number of tickets ordered by Ticket Type.
+  repeated OrderedTickets tickets = 4;
+
+  // In handling CreateOrderRequest and CheckOrderFulfillabilityRequest,
+  // the total price (excluding taxes) of the item must be verified to guard
+  // against price changes. In CreateOrderResponse and
+  // CheckOrderFulfillabilityResponse, the price should be updated to the
+  // correct value if the value from the request was incorrect or outdated.
+  // (reqired)
+  Price price = 5;
+
+  // Status of the Line Item. (required in CreateOrderResponse and
+  // ListOrdersResponse; should not be set in requests)
+  BookingStatus status = 6;
+}
+
+// Status data that conveys why creating an order fails.
+// OrderFailure is intended to primarily capture business logic errors.
+message OrderFailure {
+  enum Cause {
+    // Default value: Don't use; amounts to an "unknown error"
+    CAUSE_UNSPECIFIED = 0;
+    // The order is no longer fulfillable.
+    ORDER_UNFULFILLABLE = 1;
+    // An error was encountered while processing the payment because the
+    // provided credit card type was not accepted by the merchant. The credit
+    // card type must be supplied in rejected_card_type.
+    PAYMENT_ERROR_CARD_TYPE_REJECTED = 2;
+    // An error was encountered while processing the payment because the
+    // provided credit card was declined.
+    PAYMENT_ERROR_CARD_DECLINED = 3;
+    // An error was encountered while processing the payment for this order.
+    // Use this value to indicate a general payment related error, only if the
+    // error does not match to a specific payment error above.
+    PAYMENT_ERROR = 4;
+  }
+  // The reason why the order failed. (required)
+  Cause cause = 1;
+
+  // (required only if cause is ORDER_UNFULFILLABLE)
+  OrderFulfillability fulfillability = 2;
+
+  // (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
+  CreditCardType rejected_card_type = 3;
+
+  // This optional field is used for the partner to include additional
+  // information for debugging purpose only. (optional)
+  string description = 4;
+}
+
+// OrderFulfillability specification
+
+message OrderFulfillability {
+  // The result of an order fulfillability check.
+  enum OrderFulfillabilityResult {
+    // Default value: Don't use.
+    ORDER_FULFILLABILITY_RESULT_UNSPECIFIED = 0;
+    // The order can be fulfilled.
+    CAN_FULFILL = 1;
+    // The order cannot be fulfilled due to one or more unfulfillable line
+    // item(s).
+    UNFULFILLABLE_LINE_ITEM = 2;
+    // The combination of the line items requested cannot be fulfilled.
+    UNFULFILLABLE_SERVICE_COMBINATION = 3;
+    // The order cannot be fulfilled due to reasons that do not fall into the
+    // categories above.
+    ORDER_UNFULFILLABLE_OTHER_REASON = 4;
+  }
+
+  OrderFulfillabilityResult result = 1;
+  // Fulfillability results of all line items in this order (required).
+  repeated LineItemFulfillability item_fulfillability = 2;
+  // Additional description of the reason if the item is unfulfillable.
+  // (optional)
+  string unfulfillable_reason = 3;
+}
+
+// Fulfillability of a line item.
+message LineItemFulfillability {
+  // The line item of question. (required)
+  LineItem item = 1;
+
+  // The result of a line item fulfillability check.
+  enum ItemFulfillabilityResult {
+    // Default value: Don't use.
+    ITEM_FULFILLABILITY_RESULT_UNSPECIFIED = 0;
+    // This line item can be fulfilled.
+    CAN_FULFILL = 1;
+    // No adequate availability for the slot requested.
+    SLOT_UNAVAILABLE = 2;
+    // The combination of ticket types requested cannot be fulfilled.
+    UNFULFILLABLE_TICKET_COMBINATION = 3;
+    // The total price of this line item is not correct.
+    INCORRECT_PRICE = 4;
+    // The line item cannot be fulfilled for reasons that do not fall into
+    // the categories above.
+    ITEM_UNFULFILLABLE_OTHER_REASON = 5;
+  }
+  // (required)
+  ItemFulfillabilityResult result = 2;
+  // Additional description of the reason if the item is unfulfillable.
+  // (optional)
+  string unfulfillable_reason = 3;
+  // Updated availability for this slot can be piggybacked in
+  // CheckOrderFulfillabilityResponse.
+  message UpdatedAvailability {
+    // Number of available spots for the given slot. 0 indicates no
+    // availability. (required)
+    int32 spots_open = 1;
+  }
+  // (optional)
+  UpdatedAvailability availability = 4;
+  // Updated ticket types can be piggybacked in
+  // CheckOrderFulfillabilityResponse. If non-empty, all available ticket types
+  // for this slot with up-to-date prices should be listed without omitting any.
+  // (optional)
+  repeated TicketType ticket_type = 5;
+}
+
+// TicketType is used to differentiate among tickets (where a ticket can be a
+// spot on a raft trip, an admission to a museum, etc.) with different prices
+// and/or availabilities due to different user types or different service
+// attributes.
+message TicketType {
+  // The ticket id is used to differentiate among different ticket types of the
+  // same service, and is only expected to be unique within a service.
+  string ticket_type_id = 1;
+
+  // This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc.
+  string short_description = 2;
+
+  // The price of a single ticket of this type, exclusive of any taxes. The tax
+  // rate of Service is applied to its tickets.
+  Price price = 3;
+}
+
+// Other specifications
+
+// Resource specification that disambiguates an appointment slot
+message ResourceIds {
+  // The staff ID as provided in the feed or empty if not applicable or no staff
+  // was selected. (optional)
+  string staff_id = 1;
+  // The room ID as provided in the feed or empty if not applicable or no room
+  // was selected. (optional)
+  string room_id = 2;
+  // For Dining Reservations only: the number of seats requested in the booking.
+  // (optional)
+  int32 party_size = 3;
+}
+
+// Payment specification
+
 message PaymentProcessingParameters {
   enum PaymentProcessor {
     PAYMENT_PROCESSOR_UNSPECIFIED = 0;
@@ -386,18 +686,14 @@
   // (required)
   string payment_processor = 4;
 }
-// [END paymentprocessing_definition]
 
-// [START paymentoption_definition]
 enum PaymentOptionType {
   PAYMENT_OPTION_TYPE_UNSPECIFIED = 0;
   PAYMENT_OPTION_SINGLE_USE = 1;
   PAYMENT_OPTION_MULTI_USE = 2;
   PAYMENT_OPTION_UNLIMITED_USE = 3;
 }
-// [END paymentoption_definition]
 
-// [START userpaymentoption_definition]
 // This describes a payment option, such as a pack, membership, or
 // single-session pass after it has been purchased by a user. It includes an
 // identifier for the user payment option, as well as some information about
@@ -426,9 +722,7 @@
   // payment option. (required)
   string payment_option_id = 7;
 }
-// [END userpaymentoption_definition]
 
-// [START paymentinfo_definition]
 // Payment details that are sent when creating a new booking.
 message PaymentInformation {
   // Prepayment status of the booking.
@@ -441,7 +735,10 @@
   PrepaymentStatus prepayment_status = 1;
 
   // Unique identifier for a payment transaction associated with the booking.
-  // Empty if not applicable. (required)
+  // If the payment is PROCESSED_BY_GOOGLE, this field will be set by Google.
+  // If the payment is PROCESSED_BY_PARTNER, this field will be left empty in
+  // Google's CreateBooking or CreateOrder requests to the partner, and it must
+  // be set by the partner in their responses.
   string payment_transaction_id = 2;
 
   // These fields must match the service price (specified in the Services feed)
@@ -505,101 +802,7 @@
   // CreateOrder method). (optional)
   Price fees_and_taxes = 10;
 }
-// [END paymentinfo_definition]
 
-// [START bookingstatus_definition]
-// Status of a booking.
-//
-// Updating booking status does not change the status of the associated payment.
-// Prepayment status updates should be done using the PrepaymentStatus enum.
-//
-// nextID: 6
-enum BookingStatus {
-  // Not specified.
-  BOOKING_STATUS_UNSPECIFIED = 0;
-  // Booking has been confirmed
-  CONFIRMED = 1;
-  // Booking is awaiting confirmation by the merchant before it can transition
-  // into CONFIRMED status
-  PENDING_MERCHANT_CONFIRMATION = 2;
-  // Booking has been canceled on behalf of the user.
-  // The merchant can still trigger a manual refund.
-  CANCELED = 3;
-  // User did not show for the appointment
-  NO_SHOW = 4;
-  // User did not show for the appointment in violation of the cancellation
-  // policy.
-  NO_SHOW_PENALIZED = 5;
-}
-// [END bookingstatus_definition]
-
-// [START creditcardtype_definition]
-// Used when booking/order failure cause is PAYMENT_ERROR_CARD_TYPE_REJECTED to
-// indicate the type of credit card that was rejected.
-enum CreditCardType {
-  // Default value. Used if credit card type does not match to one below.
-  CREDIT_CARD_TYPE_UNSPECIFIED = 0;
-  VISA = 1;
-  MASTERCARD = 2;
-  AMERICAN_EXPRESS = 3;
-  DISCOVER = 4;
-}
-// [END creditcardtype_definition]
-
-// [START bookingfailure_definition]
-// Status data that conveys why (1) creating a lease or (2) creating or updating
-// a booking fails.
-// BookingFailure is intended to primarily capture business logic errors.
-message BookingFailure {
-  enum Cause {
-    // Default value: Don't use; amounts to an "unknown error"
-    CAUSE_UNSPECIFIED = 0;
-    // The referenced availability slot is not available any longer.
-    SLOT_UNAVAILABLE = 1;
-    // The user has already booked an appointment for the referenced
-    // availability slot.
-    SLOT_ALREADY_BOOKED_BY_USER = 2;
-    // The lease (if provided) has expired and cannot be used any longer to
-    // complete the requested booking.
-    LEASE_EXPIRED = 3;
-    // The requested cancellation cannot be performed at the current time due
-    // to time restrictions in the merchant's cancellation policy.
-    OUTSIDE_CANCELLATION_WINDOW = 4;
-    // An error was encountered while processing the payment because the
-    // provided credit card type was not accepted by the merchant. The credit
-    // card type must be supplied in rejected_card_type.
-    PAYMENT_ERROR_CARD_TYPE_REJECTED = 5;
-    // An error was encountered while processing the payment because the
-    // provided credit card was declined.
-    PAYMENT_ERROR_CARD_DECLINED = 6;
-    // An error was encountered with the pack/membership used to pay for the
-    // booking. There could be no valid uses left, it could have expired, etc.
-    PAYMENT_OPTION_NOT_VALID = 7;
-    // An error was encountered while processing the payment for this booking.
-    // Use this value to indicate a general payment related error, only if the
-    // error does not match to a specific payment error above.
-    PAYMENT_ERROR = 8;
-    // User cannot use the given payment option (e.g. user trying to use a
-    // first time price for the second time).
-    USER_CANNOT_USE_PAYMENT_OPTION = 9;
-    // A booking that the user tried to cancel has already been cancelled.
-    BOOKING_ALREADY_CANCELLED = 10;
-    // A booking that the user tried to cancel is not cancellable.
-    BOOKING_NOT_CANCELLABLE = 11;
-  }
-  // The reason why the booking failed. (required)
-  Cause cause = 1;
-
-  // (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
-  CreditCardType rejected_card_type = 2;
-
-  // This optional field is used for the partner to include additional
-  // information for debugging purpose only. (optional)
-  string description = 3;
-}
-// [END bookingfailure_definition]
-
-// [START prepaymentstatus_definition]
 // Prepayment status of a booking.
 // Updating payment status will trigger an update on the payment status of the
 // associated booking (if applicable).
@@ -621,465 +824,119 @@
   // UserPaymentOption.
   PREPAYMENT_CREDITED = 4;
 }
-// [END prepaymentstatus_definition]
 
-// [START message_slot_availability]
-// An inventory slot and associated count of open spots.
-message SlotAvailability {
-  Slot slot = 1;
-  // Number of available spots.
-  // 0 indicates that the appointment slot is not available. (required)
-  int32 count_available = 2;
-}
-// [END message_slot_availability]
-
-// [START message_availability_update]
-// An update to one ore more slots indicating that the availability for the
-// associated time has potentially changed.
-message AvailabilityUpdate {
-  repeated SlotAvailability slot_availability = 1;
-}
-// [END message_availability_update]
-
-// [START resources_definition]
-// Resource specification that disambiguates an appointment slot
-message ResourceIds {
-  // The staff ID as provided in the feed or empty if not applicable or no staff
-  // was selected. (optional)
-  string staff_id = 1;
-  // The room ID as provided in the feed or empty if not applicable or no room
-  // was selected. (optional)
-  string room_id = 2;
-  // For Dining Reservations only: the number of seats requested in the booking.
-  // (optional)
-  int32 party_size = 3;
-}
-// [END resources_definition]
-
-// [START tickettype_definition]
-// TicketType is used to differentiate among tickets (where a ticket can be a
-// spot on a raft trip, an admission to a museum, etc.) with different prices
-// and/or availabilities due to different user types or different service
-// attributes.
-message TicketType {
-  // The ticket id is used to differentiate among different ticket types of the
-  // same service, and is only expected to be unique within a service.
-  string ticket_type_id = 1;
-
-  // This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc.
-  string short_description = 2;
-
-  // The price of a single ticket of this type, exclusive of any taxes. The tax
-  // rate of Service is applied to its tickets.
-  Price price = 3;
-}
-// [END tickettype_definition]
-
-// [START lineitem_definition]
-// A single item in an order--the booking of a single service in a single time
-// slot.
-message LineItem {
-  // ID of the merchant service. (required)
-  string service_id = 1;
-  // Start time of the appointment slot in seconds of UTC time since Unix epoch.
+// The price of a service or a fee.
+message Price {
+  // The price in micro-units of the currency.
+  // Fractions of smallest currency unit will be rounded using nearest even
+  // rounding. (e.g. For USD 2.5 cents rounded to 2 cents, 3.5 cents rounded to
+  // 4 cents, 0.5 cents rounded to 0 cents, 2.51 cents rounded to 3 cents).
   // (required)
-  int64 start_sec = 2;
-  // Duration of the appointment slot in seconds. (required)
-  int64 duration_sec = 3;
-
-  message OrderedTickets {
-    string ticket_id = 1;
-    int32 count = 2;
-  }
-  // Number of tickets ordered by type.
-  repeated OrderedTickets tickets = 4;
-
-  // In handling CreateOrderRequest and CheckOrderFulfillabilityRequest,
-  // the total price (excluding taxes) of the item must be verified to guard
-  // against price changes. In CreateOrderResponse and
-  // CheckOrderFulfillabilityResponse, the price should be updated to the
-  // correct value if the value from the request was incorrect or outdated.
-  // (reqired)
-  Price price = 5;
-
-  // Status of the line item. (required in CreateOrderResponse and
-  // ListOrdersResponse; should not be set in requests)
-  BookingStatus status = 6;
-}
-// [END lineitem_definition]
-
-// [START lineitemfulfillability_definition]
-// Fulfillability of a line item.
-message LineItemFulfillability {
-  // The line item of question. (required)
-  LineItem item = 1;
-
-  // The result of a line item fulfillability check.
-  enum ItemFulfillabilityResult {
-    // Default value: Don't use.
-    ITEM_FULFILLABILITY_RESULT_UNSPECIFIED = 0;
-    // This line item can be fulfilled.
-    CAN_FULFILL = 1;
-    // No adequate availability for the slot requested.
-    SLOT_UNAVAILABLE = 2;
-    // The combination of ticket types requested cannot be fulfilled.
-    UNFULFILLABLE_TICKET_COMBINATION = 3;
-    // The total price of this line item is not incorrect.
-    INCORRECT_PRICE = 4;
-    // The line item cannot be fulfilled for reasons that do not fall into
-    // the categories above.
-    ITEM_UNFULFILLABLE_OTHER_REASON = 5;
-  }
-  // (required)
-  ItemFulfillabilityResult result = 2;
-  // Additional description of the reason if the item is unfulfillable.
-  // (optional)
-  string unfulfillable_reason = 3;
-  // Updated availability for this slot can be piggybacked in
-  // CheckOrderFulfillabilityResponse. (optional)
-  int32 spots_open = 4;
-  // Updated ticket types can be piggybacked in
-  // CheckOrderFulfillabilityResponse. If non-empty, all available ticket types
-  // for this slot with up-to-date prices should be listed without omitting any.
-  // (optional)
-  repeated TicketType ticket_type = 5;
-}
-// [END lineitemfulfillability_definition]
-
-// [START orderfulfillability_definition]
-message OrderFulfillability {
-  // The result of an order fulfillability check.
-  enum OrderFulfillabilityResult {
-    // Default value: Don't use.
-    ORDER_FULFILLABILITY_RESULT_UNSPECIFIED = 0;
-    // The order can be fulfilled.
-    CAN_FULFILL = 1;
-    // The order cannot be fulfilled due to one or more unfulfillable line
-    // item(s).
-    UNFULFILLABLE_LINE_ITEM = 2;
-    // The combination of the line items requested cannot be fulfilled.
-    UNFULFILLABLE_SERVICE_COMBINATION = 3;
-    // The order cannot be fulfilled due to reasons that do not fall into the
-    // categories above.
-    ORDER_UNFULFILLABLE_OTHER_REASON = 4;
-  }
-
-  OrderFulfillabilityResult result = 1;
-  // Fulfillability results of all line items in this order (required).
-  repeated LineItemFulfillability item_fulfillability = 2;
-  // Additional description of the reason if the item is unfulfillable.
-  // (optional)
-  string unfulfillable_reason = 3;
-}
-// [END orderfulfillability_definition]
-
-// [START order_definition]
-// An order for service appointments with a merchant.
-message Order {
-  // ID of this order, chosen by the booking partner who handles the order
-  // (required in CreateOrderResponse and ListOrdersResponse, must not be set in
-  // CreateOrderRequest)
-  string order_id = 1;
-  // Personal information of the user making the order (required)
-  UserInformation user_information = 2;
-  // Information about payment transactions that relate to the order.
-  // (optional)
-  PaymentInformation payment_information = 3;
-  // The merchant that all services in this order belong to.
-  string merchant_id = 4;
-  // Line items in this order.
-  repeated LineItem item = 5;
-}
-// [END order_definition]
-
-// [START orderfailure_definition]
-// Status data that conveys why creating an order fails.
-// OrderFailure is intended to primarily capture business logic errors.
-message OrderFailure {
-  enum Cause {
-    // Default value: Don't use; amounts to an "unknown error"
-    CAUSE_UNSPECIFIED = 0;
-    // The order is no longer fulfillable.
-    ORDER_UNFULFILLABLE = 1;
-    // An error was encountered while processing the payment because the
-    // provided credit card type was not accepted by the merchant. The credit
-    // card type must be supplied in rejected_card_type.
-    PAYMENT_ERROR_CARD_TYPE_REJECTED = 2;
-    // An error was encountered while processing the payment because the
-    // provided credit card was declined.
-    PAYMENT_ERROR_CARD_DECLINED = 3;
-    // An error was encountered while processing the payment for this order.
-    // Use this value to indicate a general payment related error, only if the
-    // error does not match to a specific payment error above.
-    PAYMENT_ERROR = 4;
-  }
-  // The reason why the order failed. (required)
-  Cause cause = 1;
-
-  // (required only if cause is ORDER_UNFULFILLABLE)
-  OrderFulfillability fulfillability = 2;
-
-  // (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
-  CreditCardType rejected_card_type = 3;
-
-  // This optional field is used for the partner to include additional
-  // information for debugging purpose only. (optional)
-  string description = 4;
-}
-// [END orderfailure_definition]
-
-// [START method_check_availability]
-// Request to check availability for a Slot.
-message CheckAvailabilityRequest {
-  // The appointment slot that is being checked (required)
-  Slot slot = 1;
+  int64 price_micros = 1;
+  // The currency of the price that is defined in ISO 4217. (required)
+  string currency_code = 2;
+  // An optional and opaque string that identifies the pricing option that is
+  // associated with the extended price. (optional)
+  string pricing_option_tag = 3;
 }
 
-// Response for the CheckAvailability RPC with the availability of the
-// appointment slot.
-message CheckAvailabilityResponse {
-  // The requested slot. (required)
-  Slot slot = 1;
-  // Number of available spots.
-  // 0 indicates that the appointment slot is not available. (required)
-  int32 count_available = 2;
-  // This enum indicates what requirements exist for the user to acknowledge or
-  // view the requested slots duration/end time.
-  enum DurationRequirement {
-    // The handling of the end time is not specified. This is the default.
-    DURATION_REQUIREMENT_UNSPECIFIED = 0;
-
-    // The end time is not shown to the user.
-    DO_NOT_SHOW_DURATION = 1;
-
-    // The end time has to be shown to the user before an appointment can be
-    // made.
-    MUST_SHOW_DURATION = 2;
-  }
-  // The requirement to show the slots duration and/or endtime. This field will
-  // be ignored if the slot is unavailable. (optional)
-  DurationRequirement duration_requirement = 3;
-
-  // Optionally, the partner can return additional updated information about the
-  // availability for this merchant if this information is present when
-  // responding to the CheckAvailabilityRequest and if there is no negative
-  // impact on the CheckAvailability request latency.
-  // For instance an entire day of merchant availability for a superset of
-  // resources can be returned here.
-  AvailabilityUpdate availability_update = 4;
-}
-// [END method_check_availability]
-
-// [START method_get_booking_status]
-// Request to get booking status and prepayment status for a Booking.
-message GetBookingStatusRequest {
-  // ID of the existing booking (required)
-  string booking_id = 1;
+// Defines how a total price is determined from an availability.
+enum PriceType {
+  // The price is for a fixed amount. This is the default value if the field is
+  // not set.
+  FIXED_RATE_DEFAULT = 0;
+  // The price specified is per person, and the total price is calculated
+  // according to the party size specified in Resources as
+  // price_micros * party_size. A PER_PERSON price must be accompanied by a
+  // party size in the availability resources. If it is not, a party size of one
+  // is used.
+  PER_PERSON = 1;
 }
 
-// Response for the GetBookingStatus RPC with booking status and prepayment
-// status.
-message GetBookingStatusResponse {
-  // ID of the booking (required)
-  string booking_id = 1;
+// A fee that a user may be charged if they have made a booking but do not
+// show up.
+message NoShowFee {
+  // The amount the user may be charged if they do not show up for their
+  // reservation.
+  Price fee = 1;
 
-  // Status of the booking (required)
-  BookingStatus booking_status = 2;
-
-  // Prepayment status of the booking (required)
-  PrepaymentStatus prepayment_status = 3;
+  // Defines how the fee is determined from the availability.
+  PriceType fee_type = 3;
 }
-// [END method_get_booking_status]
 
-// [START method_check_order_fulfillability]
-// Request to check the fulfillability of an order.
-message CheckOrderFulfillabilityRequest {
-  // The merchant that this order is intended for. (required)
+// A deposit that the user may be charged or have a hold on their credit card
+// for.
+message Deposit {
+  // Deposit amount.
+  Price deposit = 1;
+
+  // Minimum advance cancellation for the deposit.
+  int64 min_advance_cancellation_sec = 2;
+
+  // Defines how the deposit is determined from the availability.
+  PriceType deposit_type = 3;
+}
+
+// Slot specification
+
+// An inventory slot
+message Slot {
+  // ID of the merchant for the slot (required)
   string merchant_id = 1;
 
-  // The line items in this order. All services requested must belong to the
-  // specified merchant. (required)
-  repeated LineItem item = 2;
-}
+  // ID of the merchant Service (required)
+  string service_id = 2;
 
-// Response for the CheckOrderfulfillabilityRequest.
-message CheckOrderFulfillabilityResponse {
-  // Fulfillability status of the order, potentially contains updated
-  // availabilities and prices of the requested line item. (required)
-  OrderFulfillability fulfillability = 1;
-
-  // Total processing fees & taxes that need to be paid for this order.
+  // Start time of the appointment slot in seconds of UTC time since Unix epoch.
   // (required)
-  Price fees_and_taxes = 2;
-}
-// [END method_check_order_fulfillability]
+  int64 start_sec = 3;
 
-// [START method_create_booking]
-// Request to create a Booking for an inventory slot. Consumes the lease if
-// provided.
-message CreateBookingRequest {
-  // The inventory slot that is being requested to make this booking.
-  // If lease_ref is provided, slot must match the lease; slot is provided for
-  // the partner to verify the lease information.
-  // If lease_ref is absent, then create the booking for the slot. (required)
-  Slot slot = 1;
+  // Duration of the appointment slot (required)
+  int64 duration_sec = 4;
 
-  // The lease that is being confirmed to make this booking.
-  // If lease_ref is provided, then create the booking using the lease.
-  // (optional)
-  LeaseReference lease_ref = 2;
+  // Opaque tag that identifies the availability slot and matches the value
+  // provided in the availability feed (optional)
+  string availability_tag = 5;
 
-  // Personal information of the user making the appointment (required)
-  UserInformation user_information = 3;
-
-  // Information about payments. When payment authorizations are handled by
-  // Google, if the booking request does not succeed, payment authorizations are
-  // automatically canceled. (optional)
-  PaymentInformation payment_information = 4;
-
-  // 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;
-
-  // Idempotency token for CreateBooking requests. (required)
-  string idempotency_token = 6;
-
-  // A string from the user which contains any special requests or additional
-  // information that they would like to notify the merchant about. (optional)
-  string additional_request = 7;
+  // The set of resources that disambiguates the appointment slot, e.g. by
+  // indicating the staff member and room selected by the user (optional)
+  ResourceIds resources = 6;
 }
 
-// Response with the created Booking for an inventory slot.
-message CreateBookingResponse {
-  // The created booking (required)
-  Booking booking = 1;
+// User specification
 
-  // The updated user payment option used in this booking.
-  // If a new payment option was purchased to pay for the booking, this should
-  // be a newly created user payment option.
-  // If an already purchased user payment option was used for this booking,
-  // this should reflect an updated version of that user payment option.
-  // (optional)
-  UserPaymentOption user_payment_option = 2;
-
-  // If creating a booking fails, this field should reflect the business logic
-  // error (e.g., slot has become unavailable) and all other fields in the
-  // CreateBookingResponse message are expected to be unset. (required if
-  // failure occurs)
-  BookingFailure booking_failure = 3;
-}
-// [END method_create_booking]
-
-// [START method_create_order]
-// Request to create an order.
-message CreateOrderRequest {
-  // The order to create. (required)
-  Order order = 1;
-
-  // The parameters to be used if the payment is processed by the partner
-  // (i.e. order.payment_information.payment_processed_by is equal to
-  // PROCESSED_BY_PARTNER). (required if payment is processed by the partner)
-  PaymentProcessingParameters payment_processing_parameters = 2;
-
-  // Idempotency token for CreateOrder requests. (required)
-  string idempotency_token = 3;
-}
-
-// Response for the CreateOrderRequest.
-message CreateOrderResponse {
-  // The order created. (required)
-  Order order = 1;
-
-  // If creating an order fails, this field should reflect the business logic
-  // error (e.g., slot has become unavailable or price has changed) and all
-  // other fields in the CreateOrderResponse are expected to be unset. (required
-  // if failure occurs)
-  OrderFailure order_failure = 2;
-}
-// [END method_create_order]
-
-// [START method_create_lease]
-// Request to create a Leaese for a slot in the inventory.  The expiration time
-// in the returned Lease may be modified by the backend, e.g. if the requested
-// lease period is too long.
-message CreateLeaseRequest {
-  // The lease to be created with information about the appointment slot
+// Personal information about the person making a booking
+message UserInformation {
+  // Unique ID of the user to the partner, chosen by Reserve with Google.
   // (required)
-  Lease lease = 1;
-}
-
-// Response for the CreateLease RPC with the created Lease.
-message CreateLeaseResponse {
-  // The created Lease (required)
-  Lease lease = 1;
-
-  // If creating a lease fails, this field should reflect the business logic
-  // error (e.g., slot has become unavailable) and lease field is expected to be
-  // unset. (required if failure occurs)
-  BookingFailure booking_failure = 2;
-}
-// [END method_create_lease]
-
-// [START method_list_bookings]
-// Request to list all bookings for a user
-message ListBookingsRequest {
-  // ID of the user (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;
 }
 
-// Response for the ListBookings RPC with all bookings for the requested user.
-message ListBookingsResponse {
-  // All bookings of the user (required)
-  repeated Booking bookings = 1;
-}
-// [END method_list_bookings]
-
-// [START method_list_orders]
-// Request to list orders.
-message ListOrdersRequest {
-  // ID of the user (required only if order_id is not set).
-  string user_id = 1;
-  // If set, return only the specified orders; otherwise, return all orders of
-  // the user. (required only if user_id is not set).
-  repeated string order_id = 2;
-}
-
-// Response for the ListOrders RPC.
-message ListOrdersResponse {
-  // All requested orders (required)
-  repeated Order order = 1;
-}
-// [END method_list_orders]
-
-// [START method_update_booking]
-// Request to update a Booking.
-message UpdateBookingRequest {
-  // The booking to be updated
-  // The following fields can be set in a booking:
-  // - status, to cancel a booking.
-  // - start_time and duration in the slot, to reschedule a booking. (required)
-  Booking booking = 1;
-}
-
-// Response with the updated Booking.
-message UpdateBookingResponse {
-  // The updated booking (required)
-  Booking booking = 1;
-
-  // The updated user payment option originally used to pay for this booking.
-  // This should be set if the UpdateBookingRequest results in a change to
-  // the UserPaymentOption.
-  // For instance, if the booking is canceled, the UserPaymentOption should
-  // reflect an additional credit to the user. In the case of a multi-use
-  // payment option, the current_count should be increased by one to
-  // allow the user to create another booking with this payment option. In the
-  // case of a single-use payment option, a new single-use user payment option
-  // should be returned. (required if altered in update)
-  UserPaymentOption user_payment_option = 2;
-
-  // If updating a booking fails, this field should reflect the business logic
-  // error (e.g., booking is not cancellable) (required if failure occurs)
-  BookingFailure booking_failure = 3;
-}
-// [END method_update_booking]
+// 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;
+}
\ No newline at end of file
diff --git a/testclient/bookingBasedTestClient.go b/testclient/bookingClient.go
similarity index 100%
rename from testclient/bookingBasedTestClient.go
rename to testclient/bookingClient.go
diff --git a/testclient/orderBasedTestClient.go b/testclient/orderClient.go
similarity index 100%
rename from testclient/orderBasedTestClient.go
rename to testclient/orderClient.go
diff --git a/v3/v3.pb.go b/v3/v3.pb.go
index 2df1389..3db0270 100644
--- a/v3/v3.pb.go
+++ b/v3/v3.pb.go
@@ -1,62 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: v3.proto
 
-/*
-Package v3 is a generated protocol buffer package.
-
-It is generated from these files:
-	v3.proto
-
-It has these top-level messages:
-	PostalAddress
-	GeoCoordinates
-	Price
-	TaxRate
-	SchedulingRules
-	IngestionQueuePayload
-	IngestionStatus
-	TimeRange
-	NoShowFee
-	Deposit
-	ActionLink
-	Slot
-	Lease
-	LeaseReference
-	Booking
-	UserInformation
-	PaymentProcessingParameters
-	UserPaymentOption
-	PaymentInformation
-	BookingFailure
-	SlotAvailability
-	AvailabilityUpdate
-	ResourceIds
-	TicketType
-	LineItem
-	LineItemFulfillability
-	OrderFulfillability
-	Order
-	OrderFailure
-	CheckAvailabilityRequest
-	CheckAvailabilityResponse
-	GetBookingStatusRequest
-	GetBookingStatusResponse
-	CheckOrderFulfillabilityRequest
-	CheckOrderFulfillabilityResponse
-	CreateBookingRequest
-	CreateBookingResponse
-	CreateOrderRequest
-	CreateOrderResponse
-	CreateLeaseRequest
-	CreateLeaseResponse
-	ListBookingsRequest
-	ListBookingsResponse
-	ListOrdersRequest
-	ListOrdersResponse
-	UpdateBookingRequest
-	UpdateBookingResponse
-*/
-package v3
+package ext_maps_booking_partner_v3
 
 import proto "github.com/golang/protobuf/proto"
 import fmt "fmt"
@@ -73,161 +18,6 @@
 // proto package needs to be updated.
 const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 
-// This defines the ingestion source type.
-type IngestionSource int32
-
-const (
-	IngestionSource_SOURCE_UNKNOWN IngestionSource = 0
-	// This ingestion is from an uploaded feed file.
-	IngestionSource_SOURCE_FEED IngestionSource = 1
-	// This ingestion is from an API call.
-	IngestionSource_SOURCE_API IngestionSource = 2
-)
-
-var IngestionSource_name = map[int32]string{
-	0: "SOURCE_UNKNOWN",
-	1: "SOURCE_FEED",
-	2: "SOURCE_API",
-}
-var IngestionSource_value = map[string]int32{
-	"SOURCE_UNKNOWN": 0,
-	"SOURCE_FEED":    1,
-	"SOURCE_API":     2,
-}
-
-func (x IngestionSource) String() string {
-	return proto.EnumName(IngestionSource_name, int32(x))
-}
-func (IngestionSource) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
-
-// The types of content that we can ingest through feeds or APIs.
-type ContentType int32
-
-const (
-	ContentType_CONTENT_UNKNOWN                ContentType = 0
-	ContentType_CONTENT_MERCHANT               ContentType = 1
-	ContentType_CONTENT_SERVICE                ContentType = 2
-	ContentType_CONTENT_AVAILABILITY           ContentType = 3
-	ContentType_CONTENT_PAYMENT_OPTION         ContentType = 4
-	ContentType_CONTENT_PAYMENT_OPTION_SERVICE ContentType = 5
-)
-
-var ContentType_name = map[int32]string{
-	0: "CONTENT_UNKNOWN",
-	1: "CONTENT_MERCHANT",
-	2: "CONTENT_SERVICE",
-	3: "CONTENT_AVAILABILITY",
-	4: "CONTENT_PAYMENT_OPTION",
-	5: "CONTENT_PAYMENT_OPTION_SERVICE",
-}
-var ContentType_value = map[string]int32{
-	"CONTENT_UNKNOWN":                0,
-	"CONTENT_MERCHANT":               1,
-	"CONTENT_SERVICE":                2,
-	"CONTENT_AVAILABILITY":           3,
-	"CONTENT_PAYMENT_OPTION":         4,
-	"CONTENT_PAYMENT_OPTION_SERVICE": 5,
-}
-
-func (x ContentType) String() string {
-	return proto.EnumName(ContentType_name, int32(x))
-}
-func (ContentType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
-
-// [START pricetype_definition]
-// Defines how a total price is determined from an availability.
-type PriceType int32
-
-const (
-	// The price is for a fixed amount. This is the default value if the field is
-	// not set.
-	PriceType_FIXED_RATE_DEFAULT PriceType = 0
-	// The price specified is per person, and the total price is calculated
-	// according to the party size specified in Resources as
-	// price_micros * party_size. A PER_PERSON price must be accompanied by a
-	// party size in the availability resources. If it is not, a party size of one
-	// is used.
-	PriceType_PER_PERSON PriceType = 1
-)
-
-var PriceType_name = map[int32]string{
-	0: "FIXED_RATE_DEFAULT",
-	1: "PER_PERSON",
-}
-var PriceType_value = map[string]int32{
-	"FIXED_RATE_DEFAULT": 0,
-	"PER_PERSON":         1,
-}
-
-func (x PriceType) String() string {
-	return proto.EnumName(PriceType_name, int32(x))
-}
-func (PriceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
-
-// [START RequireCreditCard_definition]
-// Defines whether a credit card is required in order to book an appointment.
-type RequireCreditCard int32
-
-const (
-	// The credit card requirement is not explicitly specified and the
-	// behaviour is identical to the one specified for CONDITIONAL.
-	RequireCreditCard_REQUIRE_CREDIT_CARD_UNSPECIFIED RequireCreditCard = 0
-	// Google will require a credit card for the booking if any of the following
-	// conditions are met:
-	// * the availability has a price and the prepayment_type is REQUIRED
-	// * the no_show_fee is set
-	// * the deposit field is set.
-	RequireCreditCard_REQUIRE_CREDIT_CARD_CONDITIONAL RequireCreditCard = 1
-	// A credit card is always required in order to book this availability
-	// regardless of other field values.
-	RequireCreditCard_REQUIRE_CREDIT_CARD_ALWAYS RequireCreditCard = 2
-)
-
-var RequireCreditCard_name = map[int32]string{
-	0: "REQUIRE_CREDIT_CARD_UNSPECIFIED",
-	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,
-	"REQUIRE_CREDIT_CARD_ALWAYS":      2,
-}
-
-func (x RequireCreditCard) String() string {
-	return proto.EnumName(RequireCreditCard_name, int32(x))
-}
-func (RequireCreditCard) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
-
-// [START paymentoption_definition]
-type PaymentOptionType int32
-
-const (
-	PaymentOptionType_PAYMENT_OPTION_TYPE_UNSPECIFIED PaymentOptionType = 0
-	PaymentOptionType_PAYMENT_OPTION_SINGLE_USE       PaymentOptionType = 1
-	PaymentOptionType_PAYMENT_OPTION_MULTI_USE        PaymentOptionType = 2
-	PaymentOptionType_PAYMENT_OPTION_UNLIMITED_USE    PaymentOptionType = 3
-)
-
-var PaymentOptionType_name = map[int32]string{
-	0: "PAYMENT_OPTION_TYPE_UNSPECIFIED",
-	1: "PAYMENT_OPTION_SINGLE_USE",
-	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,
-	"PAYMENT_OPTION_MULTI_USE":        2,
-	"PAYMENT_OPTION_UNLIMITED_USE":    3,
-}
-
-func (x PaymentOptionType) String() string {
-	return proto.EnumName(PaymentOptionType_name, int32(x))
-}
-func (PaymentOptionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
-
-// [START bookingstatus_definition]
 // Status of a booking.
 //
 // Updating booking status does not change the status of the associated payment.
@@ -274,9 +64,10 @@
 func (x BookingStatus) String() string {
 	return proto.EnumName(BookingStatus_name, int32(x))
 }
-func (BookingStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+func (BookingStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []int{0}
+}
 
-// [START creditcardtype_definition]
 // Used when booking/order failure cause is PAYMENT_ERROR_CARD_TYPE_REJECTED to
 // indicate the type of credit card that was rejected.
 type CreditCardType int32
@@ -308,9 +99,39 @@
 func (x CreditCardType) String() string {
 	return proto.EnumName(CreditCardType_name, int32(x))
 }
-func (CreditCardType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+func (CreditCardType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []int{1}
+}
 
-// [START prepaymentstatus_definition]
+type PaymentOptionType int32
+
+const (
+	PaymentOptionType_PAYMENT_OPTION_TYPE_UNSPECIFIED PaymentOptionType = 0
+	PaymentOptionType_PAYMENT_OPTION_SINGLE_USE       PaymentOptionType = 1
+	PaymentOptionType_PAYMENT_OPTION_MULTI_USE        PaymentOptionType = 2
+	PaymentOptionType_PAYMENT_OPTION_UNLIMITED_USE    PaymentOptionType = 3
+)
+
+var PaymentOptionType_name = map[int32]string{
+	0: "PAYMENT_OPTION_TYPE_UNSPECIFIED",
+	1: "PAYMENT_OPTION_SINGLE_USE",
+	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,
+	"PAYMENT_OPTION_MULTI_USE":        2,
+	"PAYMENT_OPTION_UNLIMITED_USE":    3,
+}
+
+func (x PaymentOptionType) String() string {
+	return proto.EnumName(PaymentOptionType_name, int32(x))
+}
+func (PaymentOptionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []int{2}
+}
+
 // Prepayment status of a booking.
 // Updating payment status will trigger an update on the payment status of the
 // associated booking (if applicable).
@@ -353,122 +174,71 @@
 func (x PrepaymentStatus) String() string {
 	return proto.EnumName(PrepaymentStatus_name, int32(x))
 }
-func (PrepaymentStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+func (PrepaymentStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []int{3}
+}
 
-// The status code of an Ingestion event: a feed upload or an API call.
-// Only used for logging the ingestion status in the IngestionMetadata
-// table, do NOT use it in the code's control flow.
-type IngestionStatus_Code int32
+// Defines how a total price is determined from an availability.
+type PriceType int32
 
 const (
-	// An unknown status for Ingestion, shouldn't use it.
-	IngestionStatus_STATUS_UNKNOWN IngestionStatus_Code = 0
-	// 1-99 for Feed upload.
-	// A feed has been uploaded.
-	IngestionStatus_STATUS_FEED_UPLOADED IngestionStatus_Code = 1
-	// A feed has been added to the Ingestion Queue.
-	IngestionStatus_STATUS_FEED_ENQUEUED IngestionStatus_Code = 2
-	// A feed has been picked up from the queue and started processing.
-	IngestionStatus_STATUS_FEED_PROCESSING_STARTED IngestionStatus_Code = 3
-	// A feed has been processed successfully.
-	IngestionStatus_STATUS_FEED_PROCESSING_SUCCEEDED IngestionStatus_Code = 4
-	// A feed has failed the processing.
-	IngestionStatus_STATUS_FEED_PROCESSING_FAILED IngestionStatus_Code = 5
-	// A feed duplicate was uploaded.
-	IngestionStatus_STATUS_FEED_DUPLICATED IngestionStatus_Code = 6
-	// 101-199 for API.
-	// An API has been called.
-	IngestionStatus_STATUS_API_CALLED IngestionStatus_Code = 101
-	// An API has been processed successfully.
-	IngestionStatus_STATUS_API_PROCESSING_SUCCEEDED IngestionStatus_Code = 102
-	// An API has failed the processing.
-	IngestionStatus_STATUS_API_PROCESSING_FAILED IngestionStatus_Code = 103
+	// The price is for a fixed amount. This is the default value if the field is
+	// not set.
+	PriceType_FIXED_RATE_DEFAULT PriceType = 0
+	// The price specified is per person, and the total price is calculated
+	// according to the party size specified in Resources as
+	// price_micros * party_size. A PER_PERSON price must be accompanied by a
+	// party size in the availability resources. If it is not, a party size of one
+	// is used.
+	PriceType_PER_PERSON PriceType = 1
 )
 
-var IngestionStatus_Code_name = map[int32]string{
-	0:   "STATUS_UNKNOWN",
-	1:   "STATUS_FEED_UPLOADED",
-	2:   "STATUS_FEED_ENQUEUED",
-	3:   "STATUS_FEED_PROCESSING_STARTED",
-	4:   "STATUS_FEED_PROCESSING_SUCCEEDED",
-	5:   "STATUS_FEED_PROCESSING_FAILED",
-	6:   "STATUS_FEED_DUPLICATED",
-	101: "STATUS_API_CALLED",
-	102: "STATUS_API_PROCESSING_SUCCEEDED",
-	103: "STATUS_API_PROCESSING_FAILED",
+var PriceType_name = map[int32]string{
+	0: "FIXED_RATE_DEFAULT",
+	1: "PER_PERSON",
 }
-var IngestionStatus_Code_value = map[string]int32{
-	"STATUS_UNKNOWN":                   0,
-	"STATUS_FEED_UPLOADED":             1,
-	"STATUS_FEED_ENQUEUED":             2,
-	"STATUS_FEED_PROCESSING_STARTED":   3,
-	"STATUS_FEED_PROCESSING_SUCCEEDED": 4,
-	"STATUS_FEED_PROCESSING_FAILED":    5,
-	"STATUS_FEED_DUPLICATED":           6,
-	"STATUS_API_CALLED":                101,
-	"STATUS_API_PROCESSING_SUCCEEDED":  102,
-	"STATUS_API_PROCESSING_FAILED":     103,
+var PriceType_value = map[string]int32{
+	"FIXED_RATE_DEFAULT": 0,
+	"PER_PERSON":         1,
 }
 
-func (x IngestionStatus_Code) String() string {
-	return proto.EnumName(IngestionStatus_Code_name, int32(x))
+func (x PriceType) String() string {
+	return proto.EnumName(PriceType_name, int32(x))
 }
-func (IngestionStatus_Code) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 0} }
+func (PriceType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []int{4}
+}
 
-type PaymentProcessingParameters_PaymentProcessor int32
+// This enum indicates what requirements exist for the user to acknowledge or
+// view the requested slots duration/end time.
+type CheckAvailabilityResponse_DurationRequirement int32
 
 const (
-	PaymentProcessingParameters_PAYMENT_PROCESSOR_UNSPECIFIED PaymentProcessingParameters_PaymentProcessor = 0
-	PaymentProcessingParameters_PROCESSOR_STRIPE              PaymentProcessingParameters_PaymentProcessor = 1
-	PaymentProcessingParameters_PROCESSOR_BRAINTREE           PaymentProcessingParameters_PaymentProcessor = 2
+	// The handling of the end time is not specified. This is the default.
+	CheckAvailabilityResponse_DURATION_REQUIREMENT_UNSPECIFIED CheckAvailabilityResponse_DurationRequirement = 0
+	// The end time is not shown to the user.
+	CheckAvailabilityResponse_DO_NOT_SHOW_DURATION CheckAvailabilityResponse_DurationRequirement = 1
+	// The end time has to be shown to the user before an appointment can be
+	// made.
+	CheckAvailabilityResponse_MUST_SHOW_DURATION CheckAvailabilityResponse_DurationRequirement = 2
 )
 
-var PaymentProcessingParameters_PaymentProcessor_name = map[int32]string{
-	0: "PAYMENT_PROCESSOR_UNSPECIFIED",
-	1: "PROCESSOR_STRIPE",
-	2: "PROCESSOR_BRAINTREE",
+var CheckAvailabilityResponse_DurationRequirement_name = map[int32]string{
+	0: "DURATION_REQUIREMENT_UNSPECIFIED",
+	1: "DO_NOT_SHOW_DURATION",
+	2: "MUST_SHOW_DURATION",
 }
-var PaymentProcessingParameters_PaymentProcessor_value = map[string]int32{
-	"PAYMENT_PROCESSOR_UNSPECIFIED": 0,
-	"PROCESSOR_STRIPE":              1,
-	"PROCESSOR_BRAINTREE":           2,
+var CheckAvailabilityResponse_DurationRequirement_value = map[string]int32{
+	"DURATION_REQUIREMENT_UNSPECIFIED": 0,
+	"DO_NOT_SHOW_DURATION":             1,
+	"MUST_SHOW_DURATION":               2,
 }
 
-func (x PaymentProcessingParameters_PaymentProcessor) String() string {
-	return proto.EnumName(PaymentProcessingParameters_PaymentProcessor_name, int32(x))
+func (x CheckAvailabilityResponse_DurationRequirement) String() string {
+	return proto.EnumName(CheckAvailabilityResponse_DurationRequirement_name, int32(x))
 }
-func (PaymentProcessingParameters_PaymentProcessor) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{16, 0}
-}
-
-// Who handles payment processing?
-// If payment is processed by the partner, CreateBooking request will
-// include additional parameters (PaymentProcessingParameters) indicating
-// the payment method to be used to process the payment.
-type PaymentInformation_PaymentProcessedBy int32
-
-const (
-	PaymentInformation_PAYMENT_PROCESSED_BY_UNSPECIFIED PaymentInformation_PaymentProcessedBy = 0
-	PaymentInformation_PROCESSED_BY_GOOGLE              PaymentInformation_PaymentProcessedBy = 1
-	PaymentInformation_PROCESSED_BY_PARTNER             PaymentInformation_PaymentProcessedBy = 2
-)
-
-var PaymentInformation_PaymentProcessedBy_name = map[int32]string{
-	0: "PAYMENT_PROCESSED_BY_UNSPECIFIED",
-	1: "PROCESSED_BY_GOOGLE",
-	2: "PROCESSED_BY_PARTNER",
-}
-var PaymentInformation_PaymentProcessedBy_value = map[string]int32{
-	"PAYMENT_PROCESSED_BY_UNSPECIFIED": 0,
-	"PROCESSED_BY_GOOGLE":              1,
-	"PROCESSED_BY_PARTNER":             2,
-}
-
-func (x PaymentInformation_PaymentProcessedBy) String() string {
-	return proto.EnumName(PaymentInformation_PaymentProcessedBy_name, int32(x))
-}
-func (PaymentInformation_PaymentProcessedBy) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{18, 0}
+func (CheckAvailabilityResponse_DurationRequirement) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []int{1, 0}
 }
 
 type BookingFailure_Cause int32
@@ -508,6 +278,8 @@
 	BookingFailure_BOOKING_ALREADY_CANCELLED BookingFailure_Cause = 10
 	// A booking that the user tried to cancel is not cancellable.
 	BookingFailure_BOOKING_NOT_CANCELLABLE BookingFailure_Cause = 11
+	// User has an existing reservation too close to this time.
+	BookingFailure_OVERLAPPING_RESERVATION BookingFailure_Cause = 12
 )
 
 var BookingFailure_Cause_name = map[int32]string{
@@ -523,6 +295,7 @@
 	9:  "USER_CANNOT_USE_PAYMENT_OPTION",
 	10: "BOOKING_ALREADY_CANCELLED",
 	11: "BOOKING_NOT_CANCELLABLE",
+	12: "OVERLAPPING_RESERVATION",
 }
 var BookingFailure_Cause_value = map[string]int32{
 	"CAUSE_UNSPECIFIED":                0,
@@ -537,94 +310,14 @@
 	"USER_CANNOT_USE_PAYMENT_OPTION":   9,
 	"BOOKING_ALREADY_CANCELLED":        10,
 	"BOOKING_NOT_CANCELLABLE":          11,
+	"OVERLAPPING_RESERVATION":          12,
 }
 
 func (x BookingFailure_Cause) String() string {
 	return proto.EnumName(BookingFailure_Cause_name, int32(x))
 }
-func (BookingFailure_Cause) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{19, 0} }
-
-// The result of a line item fulfillability check.
-type LineItemFulfillability_ItemFulfillabilityResult int32
-
-const (
-	// Default value: Don't use.
-	LineItemFulfillability_ITEM_FULFILLABILITY_RESULT_UNSPECIFIED LineItemFulfillability_ItemFulfillabilityResult = 0
-	// This line item can be fulfilled.
-	LineItemFulfillability_CAN_FULFILL LineItemFulfillability_ItemFulfillabilityResult = 1
-	// No adequate availability for the slot requested.
-	LineItemFulfillability_SLOT_UNAVAILABLE LineItemFulfillability_ItemFulfillabilityResult = 2
-	// 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 incorrect.
-	LineItemFulfillability_INCORRECT_PRICE LineItemFulfillability_ItemFulfillabilityResult = 4
-	// The line item cannot be fulfilled for reasons that do not fall into
-	// the categories above.
-	LineItemFulfillability_ITEM_UNFULFILLABLE_OTHER_REASON LineItemFulfillability_ItemFulfillabilityResult = 5
-)
-
-var LineItemFulfillability_ItemFulfillabilityResult_name = map[int32]string{
-	0: "ITEM_FULFILLABILITY_RESULT_UNSPECIFIED",
-	1: "CAN_FULFILL",
-	2: "SLOT_UNAVAILABLE",
-	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,
-	"UNFULFILLABLE_TICKET_COMBINATION":       3,
-	"INCORRECT_PRICE":                        4,
-	"ITEM_UNFULFILLABLE_OTHER_REASON":        5,
-}
-
-func (x LineItemFulfillability_ItemFulfillabilityResult) String() string {
-	return proto.EnumName(LineItemFulfillability_ItemFulfillabilityResult_name, int32(x))
-}
-func (LineItemFulfillability_ItemFulfillabilityResult) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{25, 0}
-}
-
-// The result of an order fulfillability check.
-type OrderFulfillability_OrderFulfillabilityResult int32
-
-const (
-	// Default value: Don't use.
-	OrderFulfillability_ORDER_FULFILLABILITY_RESULT_UNSPECIFIED OrderFulfillability_OrderFulfillabilityResult = 0
-	// The order can be fulfilled.
-	OrderFulfillability_CAN_FULFILL OrderFulfillability_OrderFulfillabilityResult = 1
-	// The order cannot be fulfilled due to one or more unfulfillable line
-	// item(s).
-	OrderFulfillability_UNFULFILLABLE_LINE_ITEM OrderFulfillability_OrderFulfillabilityResult = 2
-	// The combination of the line items requested cannot be fulfilled.
-	OrderFulfillability_UNFULFILLABLE_SERVICE_COMBINATION OrderFulfillability_OrderFulfillabilityResult = 3
-	// The order cannot be fulfilled due to reasons that do not fall into the
-	// categories above.
-	OrderFulfillability_ORDER_UNFULFILLABLE_OTHER_REASON OrderFulfillability_OrderFulfillabilityResult = 4
-)
-
-var OrderFulfillability_OrderFulfillabilityResult_name = map[int32]string{
-	0: "ORDER_FULFILLABILITY_RESULT_UNSPECIFIED",
-	1: "CAN_FULFILL",
-	2: "UNFULFILLABLE_LINE_ITEM",
-	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,
-}
-
-func (x OrderFulfillability_OrderFulfillabilityResult) String() string {
-	return proto.EnumName(OrderFulfillability_OrderFulfillabilityResult_name, int32(x))
-}
-func (OrderFulfillability_OrderFulfillabilityResult) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{26, 0}
+func (BookingFailure_Cause) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []int{23, 0}
 }
 
 type OrderFailure_Cause int32
@@ -665,527 +358,859 @@
 func (x OrderFailure_Cause) String() string {
 	return proto.EnumName(OrderFailure_Cause_name, int32(x))
 }
-func (OrderFailure_Cause) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{28, 0} }
+func (OrderFailure_Cause) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []int{26, 0}
+}
 
-// This enum indicates what requirements exist for the user to acknowledge or
-// view the requested slots duration/end time.
-type CheckAvailabilityResponse_DurationRequirement int32
+// The result of an order fulfillability check.
+type OrderFulfillability_OrderFulfillabilityResult int32
 
 const (
-	// The handling of the end time is not specified. This is the default.
-	CheckAvailabilityResponse_DURATION_REQUIREMENT_UNSPECIFIED CheckAvailabilityResponse_DurationRequirement = 0
-	// The end time is not shown to the user.
-	CheckAvailabilityResponse_DO_NOT_SHOW_DURATION CheckAvailabilityResponse_DurationRequirement = 1
-	// The end time has to be shown to the user before an appointment can be
-	// made.
-	CheckAvailabilityResponse_MUST_SHOW_DURATION CheckAvailabilityResponse_DurationRequirement = 2
+	// Default value: Don't use.
+	OrderFulfillability_ORDER_FULFILLABILITY_RESULT_UNSPECIFIED OrderFulfillability_OrderFulfillabilityResult = 0
+	// The order can be fulfilled.
+	OrderFulfillability_CAN_FULFILL OrderFulfillability_OrderFulfillabilityResult = 1
+	// The order cannot be fulfilled due to one or more unfulfillable line
+	// item(s).
+	OrderFulfillability_UNFULFILLABLE_LINE_ITEM OrderFulfillability_OrderFulfillabilityResult = 2
+	// The combination of the line items requested cannot be fulfilled.
+	OrderFulfillability_UNFULFILLABLE_SERVICE_COMBINATION OrderFulfillability_OrderFulfillabilityResult = 3
+	// The order cannot be fulfilled due to reasons that do not fall into the
+	// categories above.
+	OrderFulfillability_ORDER_UNFULFILLABLE_OTHER_REASON OrderFulfillability_OrderFulfillabilityResult = 4
 )
 
-var CheckAvailabilityResponse_DurationRequirement_name = map[int32]string{
-	0: "DURATION_REQUIREMENT_UNSPECIFIED",
-	1: "DO_NOT_SHOW_DURATION",
-	2: "MUST_SHOW_DURATION",
+var OrderFulfillability_OrderFulfillabilityResult_name = map[int32]string{
+	0: "ORDER_FULFILLABILITY_RESULT_UNSPECIFIED",
+	1: "CAN_FULFILL",
+	2: "UNFULFILLABLE_LINE_ITEM",
+	3: "UNFULFILLABLE_SERVICE_COMBINATION",
+	4: "ORDER_UNFULFILLABLE_OTHER_REASON",
 }
-var CheckAvailabilityResponse_DurationRequirement_value = map[string]int32{
-	"DURATION_REQUIREMENT_UNSPECIFIED": 0,
-	"DO_NOT_SHOW_DURATION":             1,
-	"MUST_SHOW_DURATION":               2,
+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,
 }
 
-func (x CheckAvailabilityResponse_DurationRequirement) String() string {
-	return proto.EnumName(CheckAvailabilityResponse_DurationRequirement_name, int32(x))
+func (x OrderFulfillability_OrderFulfillabilityResult) String() string {
+	return proto.EnumName(OrderFulfillability_OrderFulfillabilityResult_name, int32(x))
 }
-func (CheckAvailabilityResponse_DurationRequirement) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{30, 0}
+func (OrderFulfillability_OrderFulfillabilityResult) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []int{27, 0}
 }
 
-// [START postaladdr_definition]
-// The postal address for a merchant.
-type PostalAddress struct {
-	// The country, e.g. "USA". (required)
-	Country string `protobuf:"bytes,1,opt,name=country" json:"country,omitempty"`
-	// The locality/city, e.g. "Mountain View". (required)
-	Locality string `protobuf:"bytes,2,opt,name=locality" json:"locality,omitempty"`
-	// The region/state/province, e.g. "CA". (required)
-	Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"`
-	// The postal code, e.g. "94043". (required)
-	PostalCode string `protobuf:"bytes,4,opt,name=postal_code,json=postalCode" json:"postal_code,omitempty"`
-	// The street address, e.g. "1600 Amphitheatre Pkwy". (required)
-	StreetAddress string `protobuf:"bytes,5,opt,name=street_address,json=streetAddress" json:"street_address,omitempty"`
+// The result of a line item fulfillability check.
+type LineItemFulfillability_ItemFulfillabilityResult int32
+
+const (
+	// Default value: Don't use.
+	LineItemFulfillability_ITEM_FULFILLABILITY_RESULT_UNSPECIFIED LineItemFulfillability_ItemFulfillabilityResult = 0
+	// This line item can be fulfilled.
+	LineItemFulfillability_CAN_FULFILL LineItemFulfillability_ItemFulfillabilityResult = 1
+	// No adequate availability for the slot requested.
+	LineItemFulfillability_SLOT_UNAVAILABLE LineItemFulfillability_ItemFulfillabilityResult = 2
+	// 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.
+	LineItemFulfillability_INCORRECT_PRICE LineItemFulfillability_ItemFulfillabilityResult = 4
+	// The line item cannot be fulfilled for reasons that do not fall into
+	// the categories above.
+	LineItemFulfillability_ITEM_UNFULFILLABLE_OTHER_REASON LineItemFulfillability_ItemFulfillabilityResult = 5
+)
+
+var LineItemFulfillability_ItemFulfillabilityResult_name = map[int32]string{
+	0: "ITEM_FULFILLABILITY_RESULT_UNSPECIFIED",
+	1: "CAN_FULFILL",
+	2: "SLOT_UNAVAILABLE",
+	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,
+	"UNFULFILLABLE_TICKET_COMBINATION":       3,
+	"INCORRECT_PRICE":                        4,
+	"ITEM_UNFULFILLABLE_OTHER_REASON":        5,
 }
 
-func (m *PostalAddress) Reset()                    { *m = PostalAddress{} }
-func (m *PostalAddress) String() string            { return proto.CompactTextString(m) }
-func (*PostalAddress) ProtoMessage()               {}
-func (*PostalAddress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+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}
+}
 
-func (m *PostalAddress) GetCountry() string {
+type PaymentProcessingParameters_PaymentProcessor int32
+
+const (
+	PaymentProcessingParameters_PAYMENT_PROCESSOR_UNSPECIFIED PaymentProcessingParameters_PaymentProcessor = 0
+	PaymentProcessingParameters_PROCESSOR_STRIPE              PaymentProcessingParameters_PaymentProcessor = 1
+	PaymentProcessingParameters_PROCESSOR_BRAINTREE           PaymentProcessingParameters_PaymentProcessor = 2
+)
+
+var PaymentProcessingParameters_PaymentProcessor_name = map[int32]string{
+	0: "PAYMENT_PROCESSOR_UNSPECIFIED",
+	1: "PROCESSOR_STRIPE",
+	2: "PROCESSOR_BRAINTREE",
+}
+var PaymentProcessingParameters_PaymentProcessor_value = map[string]int32{
+	"PAYMENT_PROCESSOR_UNSPECIFIED": 0,
+	"PROCESSOR_STRIPE":              1,
+	"PROCESSOR_BRAINTREE":           2,
+}
+
+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}
+}
+
+// Who handles payment processing?
+// If payment is processed by the partner, CreateBooking request will
+// include additional parameters (PaymentProcessingParameters) indicating
+// the payment method to be used to process the payment.
+type PaymentInformation_PaymentProcessedBy int32
+
+const (
+	PaymentInformation_PAYMENT_PROCESSED_BY_UNSPECIFIED PaymentInformation_PaymentProcessedBy = 0
+	PaymentInformation_PROCESSED_BY_GOOGLE              PaymentInformation_PaymentProcessedBy = 1
+	PaymentInformation_PROCESSED_BY_PARTNER             PaymentInformation_PaymentProcessedBy = 2
+)
+
+var PaymentInformation_PaymentProcessedBy_name = map[int32]string{
+	0: "PAYMENT_PROCESSED_BY_UNSPECIFIED",
+	1: "PROCESSED_BY_GOOGLE",
+	2: "PROCESSED_BY_PARTNER",
+}
+var PaymentInformation_PaymentProcessedBy_value = map[string]int32{
+	"PAYMENT_PROCESSED_BY_UNSPECIFIED": 0,
+	"PROCESSED_BY_GOOGLE":              1,
+	"PROCESSED_BY_PARTNER":             2,
+}
+
+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}
+}
+
+// Request to check availability for a Slot.
+type CheckAvailabilityRequest struct {
+	// The appointment slot that is being checked (required)
+	Slot                 *Slot    `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CheckAvailabilityRequest) Reset()         { *m = CheckAvailabilityRequest{} }
+func (m *CheckAvailabilityRequest) String() string { return proto.CompactTextString(m) }
+func (*CheckAvailabilityRequest) ProtoMessage()    {}
+func (*CheckAvailabilityRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_CheckAvailabilityRequest.Size(m)
+}
+func (m *CheckAvailabilityRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CheckAvailabilityRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CheckAvailabilityRequest proto.InternalMessageInfo
+
+func (m *CheckAvailabilityRequest) GetSlot() *Slot {
 	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 ""
-}
-
-// [START geocoord_definition]
-// The Geo data of a location, including latitude, longitude, and address.
-type GeoCoordinates struct {
-	Latitude  float64        `protobuf:"fixed64,1,opt,name=latitude" json:"latitude,omitempty"`
-	Longitude float64        `protobuf:"fixed64,2,opt,name=longitude" json:"longitude,omitempty"`
-	Address   *PostalAddress `protobuf:"bytes,3,opt,name=address" json:"address,omitempty"`
-}
-
-func (m *GeoCoordinates) Reset()                    { *m = GeoCoordinates{} }
-func (m *GeoCoordinates) String() string            { return proto.CompactTextString(m) }
-func (*GeoCoordinates) ProtoMessage()               {}
-func (*GeoCoordinates) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
-
-func (m *GeoCoordinates) GetLatitude() float64 {
-	if m != nil {
-		return m.Latitude
-	}
-	return 0
-}
-
-func (m *GeoCoordinates) GetLongitude() float64 {
-	if m != nil {
-		return m.Longitude
-	}
-	return 0
-}
-
-func (m *GeoCoordinates) GetAddress() *PostalAddress {
-	if m != nil {
-		return m.Address
+		return m.Slot
 	}
 	return nil
 }
 
-// [START price_definition]
-// The price of a service or a fee.
-type Price struct {
-	// The price in micro-units of the currency.
-	// Fractions of smallest currency unit will be rounded using nearest even
-	// rounding. (e.g. For USD 2.5 cents rounded to 2 cents, 3.5 cents rounded to
-	// 4 cents, 0.5 cents rounded to 0 cents, 2.51 cents rounded to 3 cents).
-	// (required)
-	PriceMicros int64 `protobuf:"varint,1,opt,name=price_micros,json=priceMicros" json:"price_micros,omitempty"`
-	// The currency of the price that is defined in ISO 4217. (required)
-	CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode" json:"currency_code,omitempty"`
-	// An optional and opaque string that identifies the pricing option that is
-	// associated with the extended price. (optional)
-	PricingOptionTag string `protobuf:"bytes,3,opt,name=pricing_option_tag,json=pricingOptionTag" json:"pricing_option_tag,omitempty"`
+// Response for the CheckAvailability RPC with the availability of the
+// appointment slot.
+type CheckAvailabilityResponse struct {
+	// The requested slot. (required)
+	Slot *Slot `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
+	// Number of available spots.
+	// 0 indicates that the appointment slot is not available. (required)
+	CountAvailable int32 `protobuf:"varint,2,opt,name=count_available,json=countAvailable,proto3" json:"count_available,omitempty"`
+	// The requirement to show the slots duration and/or endtime. This field will
+	// be ignored if the slot is unavailable. (optional)
+	DurationRequirement CheckAvailabilityResponse_DurationRequirement `protobuf:"varint,3,opt,name=duration_requirement,json=durationRequirement,proto3,enum=ext.maps.booking.partner.v3.CheckAvailabilityResponse_DurationRequirement" json:"duration_requirement,omitempty"`
+	// Optionally, the partner can return additional updated information about the
+	// availability for this merchant if this information is present when
+	// responding to the CheckAvailabilityRequest and if there is no negative
+	// impact on the CheckAvailability request latency.
+	// For instance an entire day of merchant availability for a superset of
+	// resources can be returned here.
+	AvailabilityUpdate   *AvailabilityUpdate `protobuf:"bytes,4,opt,name=availability_update,json=availabilityUpdate,proto3" json:"availability_update,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
 }
 
-func (m *Price) Reset()                    { *m = Price{} }
-func (m *Price) String() string            { return proto.CompactTextString(m) }
-func (*Price) ProtoMessage()               {}
-func (*Price) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+func (m *CheckAvailabilityResponse) Reset()         { *m = CheckAvailabilityResponse{} }
+func (m *CheckAvailabilityResponse) String() string { return proto.CompactTextString(m) }
+func (*CheckAvailabilityResponse) ProtoMessage()    {}
+func (*CheckAvailabilityResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_CheckAvailabilityResponse.Size(m)
+}
+func (m *CheckAvailabilityResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CheckAvailabilityResponse.DiscardUnknown(m)
+}
 
-func (m *Price) GetPriceMicros() int64 {
+var xxx_messageInfo_CheckAvailabilityResponse proto.InternalMessageInfo
+
+func (m *CheckAvailabilityResponse) GetSlot() *Slot {
 	if m != nil {
-		return m.PriceMicros
-	}
-	return 0
-}
-
-func (m *Price) GetCurrencyCode() string {
-	if m != nil {
-		return m.CurrencyCode
-	}
-	return ""
-}
-
-func (m *Price) GetPricingOptionTag() string {
-	if m != nil {
-		return m.PricingOptionTag
-	}
-	return ""
-}
-
-// [START taxrate_definition]
-// A tax rate applied when charging the user for a service, and which can be set
-// on either a per merchant, or per service basis.
-type TaxRate struct {
-	// A tax rate in millionths of one percent, effectively giving 6 decimals of
-	// precision. For example, if the tax rate is 7.253%, this field should be set
-	// to 7253000.
-	//
-	// If this field is left unset or set to 0, the total price charged to a user
-	// for any service provided by this merchant is the exact price specified by
-	// Service.price. The service price is assumed to be exempt from or already
-	// inclusive of applicable taxes. Taxes will not be shown to the user as a
-	// separate line item.
-	//
-	// If this field is set to any nonzero value, the total price charged to a
-	// user for any service provided by this merchant will include the service
-	// price plus the tax assessed using the tax rate provided here. Fractions of
-	// the smallest currency unit (for example, fractions of one cent) will be
-	// rounded using nearest even rounding. Taxes will be shown to the user as a
-	// separate line item. (required)
-	MicroPercent int32 `protobuf:"varint,1,opt,name=micro_percent,json=microPercent" json:"micro_percent,omitempty"`
-}
-
-func (m *TaxRate) Reset()                    { *m = TaxRate{} }
-func (m *TaxRate) String() string            { return proto.CompactTextString(m) }
-func (*TaxRate) ProtoMessage()               {}
-func (*TaxRate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
-
-func (m *TaxRate) GetMicroPercent() int32 {
-	if m != nil {
-		return m.MicroPercent
-	}
-	return 0
-}
-
-// [START schedulingrules_definition]
-// The scheduling rules for a service.
-type SchedulingRules struct {
-	// The minimum advance notice in seconds required to book an appointment.
-	// (optional)
-	MinAdvanceBooking int64 `protobuf:"varint,1,opt,name=min_advance_booking,json=minAdvanceBooking" json:"min_advance_booking,omitempty"`
-	// The minimum advance notice in seconds required to cancel a booked
-	// appointment online. (optional)
-	MinAdvanceOnlineCanceling int64 `protobuf:"varint,2,opt,name=min_advance_online_canceling,json=minAdvanceOnlineCanceling" json:"min_advance_online_canceling,omitempty"`
-	// The fee for canceling within the minimum advance notice period.
-	LateCancellationFee *Price `protobuf:"bytes,3,opt,name=late_cancellation_fee,json=lateCancellationFee" json:"late_cancellation_fee,omitempty"`
-	// The fee for no-show without canceling.
-	NoshowFee *Price `protobuf:"bytes,4,opt,name=noshow_fee,json=noshowFee" json:"noshow_fee,omitempty"`
-}
-
-func (m *SchedulingRules) Reset()                    { *m = SchedulingRules{} }
-func (m *SchedulingRules) String() string            { return proto.CompactTextString(m) }
-func (*SchedulingRules) ProtoMessage()               {}
-func (*SchedulingRules) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
-
-func (m *SchedulingRules) GetMinAdvanceBooking() int64 {
-	if m != nil {
-		return m.MinAdvanceBooking
-	}
-	return 0
-}
-
-func (m *SchedulingRules) GetMinAdvanceOnlineCanceling() int64 {
-	if m != nil {
-		return m.MinAdvanceOnlineCanceling
-	}
-	return 0
-}
-
-func (m *SchedulingRules) GetLateCancellationFee() *Price {
-	if m != nil {
-		return m.LateCancellationFee
+		return m.Slot
 	}
 	return nil
 }
 
-func (m *SchedulingRules) GetNoshowFee() *Price {
+func (m *CheckAvailabilityResponse) GetCountAvailable() int32 {
 	if m != nil {
-		return m.NoshowFee
-	}
-	return nil
-}
-
-// An empty boilplate proto for the Ingestion Queue in Spanner.
-type IngestionQueuePayload struct {
-}
-
-func (m *IngestionQueuePayload) Reset()                    { *m = IngestionQueuePayload{} }
-func (m *IngestionQueuePayload) String() string            { return proto.CompactTextString(m) }
-func (*IngestionQueuePayload) ProtoMessage()               {}
-func (*IngestionQueuePayload) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
-
-type IngestionStatus struct {
-	// The code of the status.
-	Code IngestionStatus_Code `protobuf:"varint,1,opt,name=code,enum=v3.IngestionStatus_Code" json:"code,omitempty"`
-	// Microseconds since epoch when the ingestion updates its status code.
-	TimestampMicros int64 `protobuf:"varint,2,opt,name=timestamp_micros,json=timestampMicros" json:"timestamp_micros,omitempty"`
-	// A human description of the error if any.
-	InternalErrorDetails       string `protobuf:"bytes,3,opt,name=internal_error_details,json=internalErrorDetails" json:"internal_error_details,omitempty"`
-	PartnerVisibleErrorDetails string `protobuf:"bytes,4,opt,name=partner_visible_error_details,json=partnerVisibleErrorDetails" json:"partner_visible_error_details,omitempty"`
-}
-
-func (m *IngestionStatus) Reset()                    { *m = IngestionStatus{} }
-func (m *IngestionStatus) String() string            { return proto.CompactTextString(m) }
-func (*IngestionStatus) ProtoMessage()               {}
-func (*IngestionStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
-
-func (m *IngestionStatus) GetCode() IngestionStatus_Code {
-	if m != nil {
-		return m.Code
-	}
-	return IngestionStatus_STATUS_UNKNOWN
-}
-
-func (m *IngestionStatus) GetTimestampMicros() int64 {
-	if m != nil {
-		return m.TimestampMicros
+		return m.CountAvailable
 	}
 	return 0
 }
 
-func (m *IngestionStatus) GetInternalErrorDetails() string {
+func (m *CheckAvailabilityResponse) GetDurationRequirement() CheckAvailabilityResponse_DurationRequirement {
 	if m != nil {
-		return m.InternalErrorDetails
+		return m.DurationRequirement
 	}
-	return ""
+	return CheckAvailabilityResponse_DURATION_REQUIREMENT_UNSPECIFIED
 }
 
-func (m *IngestionStatus) GetPartnerVisibleErrorDetails() string {
+func (m *CheckAvailabilityResponse) GetAvailabilityUpdate() *AvailabilityUpdate {
 	if m != nil {
-		return m.PartnerVisibleErrorDetails
-	}
-	return ""
-}
-
-// [START timerange_definition]
-// A closed-open time range, i.e. [begin_sec, end_sec)
-type TimeRange struct {
-	// Seconds of UTC time since Unix epoch (required)
-	BeginSec int64 `protobuf:"varint,1,opt,name=begin_sec,json=beginSec" json:"begin_sec,omitempty"`
-	// Seconds of UTC time since Unix epoch (required)
-	EndSec int64 `protobuf:"varint,2,opt,name=end_sec,json=endSec" json:"end_sec,omitempty"`
-}
-
-func (m *TimeRange) Reset()                    { *m = TimeRange{} }
-func (m *TimeRange) String() string            { return proto.CompactTextString(m) }
-func (*TimeRange) ProtoMessage()               {}
-func (*TimeRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
-
-func (m *TimeRange) GetBeginSec() int64 {
-	if m != nil {
-		return m.BeginSec
-	}
-	return 0
-}
-
-func (m *TimeRange) GetEndSec() int64 {
-	if m != nil {
-		return m.EndSec
-	}
-	return 0
-}
-
-// [START noshowfee_definition]
-// A fee that a user may be charged if they have made a booking but do not
-// show up.
-type NoShowFee struct {
-	// The amount the user may be charged if they do not show up for their
-	// reservation.
-	Fee *Price `protobuf:"bytes,1,opt,name=fee" json:"fee,omitempty"`
-	// Defines how the fee is determined from the availability.
-	FeeType PriceType `protobuf:"varint,3,opt,name=fee_type,json=feeType,enum=v3.PriceType" json:"fee_type,omitempty"`
-}
-
-func (m *NoShowFee) Reset()                    { *m = NoShowFee{} }
-func (m *NoShowFee) String() string            { return proto.CompactTextString(m) }
-func (*NoShowFee) ProtoMessage()               {}
-func (*NoShowFee) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
-
-func (m *NoShowFee) GetFee() *Price {
-	if m != nil {
-		return m.Fee
+		return m.AvailabilityUpdate
 	}
 	return nil
 }
 
-func (m *NoShowFee) GetFeeType() PriceType {
-	if m != nil {
-		return m.FeeType
-	}
-	return PriceType_FIXED_RATE_DEFAULT
+// An update to one ore more slots indicating that the availability for the
+// associated time has potentially changed.
+type AvailabilityUpdate struct {
+	SlotAvailability     []*SlotAvailability `protobuf:"bytes,1,rep,name=slot_availability,json=slotAvailability,proto3" json:"slot_availability,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
 }
 
-// [START deposit_definition]
-// A deposit that the user may be charged or have a hold on their credit card
-// for.
-type Deposit struct {
-	// Deposit amount.
-	Deposit *Price `protobuf:"bytes,1,opt,name=deposit" json:"deposit,omitempty"`
-	// Minimum advance cancellation for the deposit.
-	MinAdvanceCancellationSec int64 `protobuf:"varint,2,opt,name=min_advance_cancellation_sec,json=minAdvanceCancellationSec" json:"min_advance_cancellation_sec,omitempty"`
-	// Defines how the deposit is determined from the availability.
-	DepositType PriceType `protobuf:"varint,3,opt,name=deposit_type,json=depositType,enum=v3.PriceType" json:"deposit_type,omitempty"`
+func (m *AvailabilityUpdate) Reset()         { *m = AvailabilityUpdate{} }
+func (m *AvailabilityUpdate) String() string { return proto.CompactTextString(m) }
+func (*AvailabilityUpdate) ProtoMessage()    {}
+func (*AvailabilityUpdate) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_AvailabilityUpdate.Size(m)
+}
+func (m *AvailabilityUpdate) XXX_DiscardUnknown() {
+	xxx_messageInfo_AvailabilityUpdate.DiscardUnknown(m)
 }
 
-func (m *Deposit) Reset()                    { *m = Deposit{} }
-func (m *Deposit) String() string            { return proto.CompactTextString(m) }
-func (*Deposit) ProtoMessage()               {}
-func (*Deposit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
+var xxx_messageInfo_AvailabilityUpdate proto.InternalMessageInfo
 
-func (m *Deposit) GetDeposit() *Price {
+func (m *AvailabilityUpdate) GetSlotAvailability() []*SlotAvailability {
 	if m != nil {
-		return m.Deposit
+		return m.SlotAvailability
 	}
 	return nil
 }
 
-func (m *Deposit) GetMinAdvanceCancellationSec() int64 {
+// An inventory slot and associated count of open spots.
+type SlotAvailability struct {
+	Slot *Slot `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
+	// Number of available spots.
+	// 0 indicates that the appointment slot is not available. (required)
+	CountAvailable       int32    `protobuf:"varint,2,opt,name=count_available,json=countAvailable,proto3" json:"count_available,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SlotAvailability) Reset()         { *m = SlotAvailability{} }
+func (m *SlotAvailability) String() string { return proto.CompactTextString(m) }
+func (*SlotAvailability) ProtoMessage()    {}
+func (*SlotAvailability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_SlotAvailability.Size(m)
+}
+func (m *SlotAvailability) XXX_DiscardUnknown() {
+	xxx_messageInfo_SlotAvailability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SlotAvailability proto.InternalMessageInfo
+
+func (m *SlotAvailability) GetSlot() *Slot {
 	if m != nil {
-		return m.MinAdvanceCancellationSec
+		return m.Slot
+	}
+	return nil
+}
+
+func (m *SlotAvailability) GetCountAvailable() int32 {
+	if m != nil {
+		return m.CountAvailable
 	}
 	return 0
 }
 
-func (m *Deposit) GetDepositType() PriceType {
-	if m != nil {
-		return m.DepositType
-	}
-	return PriceType_FIXED_RATE_DEFAULT
+// Request to check the fulfillability of an order.
+type CheckOrderFulfillabilityRequest struct {
+	// The merchant that this order is intended for. (required)
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
+	// The line items in this order. All services requested must belong to the
+	// specified merchant. (required)
+	Item                 []*LineItem `protobuf:"bytes,2,rep,name=item,proto3" json:"item,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
 }
 
-// [START ActionLink_definition]
-// An action URL with associated language and list of countries restricted to.
-type ActionLink struct {
-	// The entry point URL for this action link.
-	Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"`
-	// The BCP-47 language tag identifying the language in which the content
-	// from this URI is available.
-	Language string `protobuf:"bytes,2,opt,name=language" json:"language,omitempty"`
-	// ISO 3166-1 alpha-2 country code. Leave empty for unrestricted visibility.
-	RestrictedCountry []string `protobuf:"bytes,3,rep,name=restricted_country,json=restrictedCountry" json:"restricted_country,omitempty"`
+func (m *CheckOrderFulfillabilityRequest) Reset()         { *m = CheckOrderFulfillabilityRequest{} }
+func (m *CheckOrderFulfillabilityRequest) String() string { return proto.CompactTextString(m) }
+func (*CheckOrderFulfillabilityRequest) ProtoMessage()    {}
+func (*CheckOrderFulfillabilityRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_CheckOrderFulfillabilityRequest.Size(m)
+}
+func (m *CheckOrderFulfillabilityRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CheckOrderFulfillabilityRequest.DiscardUnknown(m)
 }
 
-func (m *ActionLink) Reset()                    { *m = ActionLink{} }
-func (m *ActionLink) String() string            { return proto.CompactTextString(m) }
-func (*ActionLink) ProtoMessage()               {}
-func (*ActionLink) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
+var xxx_messageInfo_CheckOrderFulfillabilityRequest proto.InternalMessageInfo
 
-func (m *ActionLink) GetUrl() string {
-	if m != nil {
-		return m.Url
-	}
-	return ""
-}
-
-func (m *ActionLink) GetLanguage() string {
-	if m != nil {
-		return m.Language
-	}
-	return ""
-}
-
-func (m *ActionLink) GetRestrictedCountry() []string {
-	if m != nil {
-		return m.RestrictedCountry
-	}
-	return nil
-}
-
-// [START message_slot]
-// An inventory slot
-type Slot struct {
-	// ID of the merchant for the slot (required)
-	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
-	// ID of the merchant service (required)
-	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId" json:"service_id,omitempty"`
-	// Start time of the appointment slot in seconds of UTC time since Unix epoch.
-	// (required)
-	StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec" json:"start_sec,omitempty"`
-	// Duration of the appointment slot (required)
-	DurationSec int64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
-	// Opaque tag that identifies the availability slot and matches the value
-	// provided in the availability feed (optional)
-	AvailabilityTag string `protobuf:"bytes,5,opt,name=availability_tag,json=availabilityTag" json:"availability_tag,omitempty"`
-	// The set of resources that disambiguates the appointment slot, e.g. by
-	// indicating the staff member and room selected by the user (optional)
-	Resources *ResourceIds `protobuf:"bytes,6,opt,name=resources" json:"resources,omitempty"`
-}
-
-func (m *Slot) Reset()                    { *m = Slot{} }
-func (m *Slot) String() string            { return proto.CompactTextString(m) }
-func (*Slot) ProtoMessage()               {}
-func (*Slot) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
-
-func (m *Slot) GetMerchantId() string {
+func (m *CheckOrderFulfillabilityRequest) GetMerchantId() string {
 	if m != nil {
 		return m.MerchantId
 	}
 	return ""
 }
 
-func (m *Slot) GetServiceId() string {
+func (m *CheckOrderFulfillabilityRequest) GetItem() []*LineItem {
 	if m != nil {
-		return m.ServiceId
-	}
-	return ""
-}
-
-func (m *Slot) GetStartSec() int64 {
-	if m != nil {
-		return m.StartSec
-	}
-	return 0
-}
-
-func (m *Slot) GetDurationSec() int64 {
-	if m != nil {
-		return m.DurationSec
-	}
-	return 0
-}
-
-func (m *Slot) GetAvailabilityTag() string {
-	if m != nil {
-		return m.AvailabilityTag
-	}
-	return ""
-}
-
-func (m *Slot) GetResources() *ResourceIds {
-	if m != nil {
-		return m.Resources
+		return m.Item
 	}
 	return nil
 }
 
-// [START message_lease]
+// Response for the CheckOrderfulfillabilityRequest.
+type CheckOrderFulfillabilityResponse struct {
+	// Fulfillability status of the order, potentially contains updated
+	// availabilities and prices of the requested line item. (required)
+	Fulfillability *OrderFulfillability `protobuf:"bytes,1,opt,name=fulfillability,proto3" json:"fulfillability,omitempty"`
+	// Total processing fees & taxes that need to be paid for this order.
+	// (required)
+	FeesAndTaxes         *Price   `protobuf:"bytes,2,opt,name=fees_and_taxes,json=feesAndTaxes,proto3" json:"fees_and_taxes,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CheckOrderFulfillabilityResponse) Reset()         { *m = CheckOrderFulfillabilityResponse{} }
+func (m *CheckOrderFulfillabilityResponse) String() string { return proto.CompactTextString(m) }
+func (*CheckOrderFulfillabilityResponse) ProtoMessage()    {}
+func (*CheckOrderFulfillabilityResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_CheckOrderFulfillabilityResponse.Size(m)
+}
+func (m *CheckOrderFulfillabilityResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CheckOrderFulfillabilityResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CheckOrderFulfillabilityResponse proto.InternalMessageInfo
+
+func (m *CheckOrderFulfillabilityResponse) GetFulfillability() *OrderFulfillability {
+	if m != nil {
+		return m.Fulfillability
+	}
+	return nil
+}
+
+func (m *CheckOrderFulfillabilityResponse) GetFeesAndTaxes() *Price {
+	if m != nil {
+		return m.FeesAndTaxes
+	}
+	return nil
+}
+
+// Request to get booking status and prepayment status for a Booking.
+type GetBookingStatusRequest struct {
+	// ID of the existing booking (required)
+	BookingId            string   `protobuf:"bytes,1,opt,name=booking_id,json=bookingId,proto3" json:"booking_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetBookingStatusRequest) Reset()         { *m = GetBookingStatusRequest{} }
+func (m *GetBookingStatusRequest) String() string { return proto.CompactTextString(m) }
+func (*GetBookingStatusRequest) ProtoMessage()    {}
+func (*GetBookingStatusRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_GetBookingStatusRequest.Size(m)
+}
+func (m *GetBookingStatusRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetBookingStatusRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetBookingStatusRequest proto.InternalMessageInfo
+
+func (m *GetBookingStatusRequest) GetBookingId() string {
+	if m != nil {
+		return m.BookingId
+	}
+	return ""
+}
+
+// Response for the GetBookingStatus RPC with booking status and prepayment
+// status.
+type GetBookingStatusResponse struct {
+	// ID of the booking (required)
+	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId,proto3" json:"booking_id,omitempty"`
+	// Status of the booking (required)
+	BookingStatus BookingStatus `protobuf:"varint,2,opt,name=booking_status,json=bookingStatus,proto3,enum=ext.maps.booking.partner.v3.BookingStatus" json:"booking_status,omitempty"`
+	// Prepayment status of the booking (required)
+	PrepaymentStatus     PrepaymentStatus `protobuf:"varint,3,opt,name=prepayment_status,json=prepaymentStatus,proto3,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *GetBookingStatusResponse) Reset()         { *m = GetBookingStatusResponse{} }
+func (m *GetBookingStatusResponse) String() string { return proto.CompactTextString(m) }
+func (*GetBookingStatusResponse) ProtoMessage()    {}
+func (*GetBookingStatusResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_GetBookingStatusResponse.Size(m)
+}
+func (m *GetBookingStatusResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetBookingStatusResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetBookingStatusResponse proto.InternalMessageInfo
+
+func (m *GetBookingStatusResponse) GetBookingId() string {
+	if m != nil {
+		return m.BookingId
+	}
+	return ""
+}
+
+func (m *GetBookingStatusResponse) GetBookingStatus() BookingStatus {
+	if m != nil {
+		return m.BookingStatus
+	}
+	return BookingStatus_BOOKING_STATUS_UNSPECIFIED
+}
+
+func (m *GetBookingStatusResponse) GetPrepaymentStatus() PrepaymentStatus {
+	if m != nil {
+		return m.PrepaymentStatus
+	}
+	return PrepaymentStatus_PREPAYMENT_STATUS_UNSPECIFIED
+}
+
+// Request to create a Booking for an inventory slot. Consumes the lease if
+// provided.
+type CreateBookingRequest struct {
+	// The inventory slot that is being requested to make this booking.
+	// If lease_ref is provided, slot must match the lease; slot is provided for
+	// the partner to verify the lease information.
+	// If lease_ref is absent, then create the booking for the slot. (required)
+	Slot *Slot `protobuf:"bytes,1,opt,name=slot,proto3" json:"slot,omitempty"`
+	// The lease that is being confirmed to make this booking.
+	// If lease_ref is provided, then create the booking using the lease.
+	// (optional)
+	LeaseRef *LeaseReference `protobuf:"bytes,2,opt,name=lease_ref,json=leaseRef,proto3" json:"lease_ref,omitempty"`
+	// Personal information of the user making the appointment (required)
+	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation,proto3" json:"user_information,omitempty"`
+	// Information about payments. When payment authorizations are handled by
+	// Google, if the booking request does not succeed, payment authorizations are
+	// automatically canceled. (optional)
+	PaymentInformation *PaymentInformation `protobuf:"bytes,4,opt,name=payment_information,json=paymentInformation,proto3" json:"payment_information,omitempty"`
+	// 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 *PaymentProcessingParameters `protobuf:"bytes,5,opt,name=payment_processing_parameters,json=paymentProcessingParameters,proto3" json:"payment_processing_parameters,omitempty"`
+	// Idempotency token for CreateBooking requests. (required)
+	IdempotencyToken string `protobuf:"bytes,6,opt,name=idempotency_token,json=idempotencyToken,proto3" json:"idempotency_token,omitempty"`
+	// A string from the user which contains any special requests or additional
+	// information that they would like to notify the merchant about. (optional)
+	AdditionalRequest    string   `protobuf:"bytes,7,opt,name=additional_request,json=additionalRequest,proto3" json:"additional_request,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateBookingRequest) Reset()         { *m = CreateBookingRequest{} }
+func (m *CreateBookingRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateBookingRequest) ProtoMessage()    {}
+func (*CreateBookingRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_CreateBookingRequest.Size(m)
+}
+func (m *CreateBookingRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateBookingRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateBookingRequest proto.InternalMessageInfo
+
+func (m *CreateBookingRequest) GetSlot() *Slot {
+	if m != nil {
+		return m.Slot
+	}
+	return nil
+}
+
+func (m *CreateBookingRequest) GetLeaseRef() *LeaseReference {
+	if m != nil {
+		return m.LeaseRef
+	}
+	return nil
+}
+
+func (m *CreateBookingRequest) GetUserInformation() *UserInformation {
+	if m != nil {
+		return m.UserInformation
+	}
+	return nil
+}
+
+func (m *CreateBookingRequest) GetPaymentInformation() *PaymentInformation {
+	if m != nil {
+		return m.PaymentInformation
+	}
+	return nil
+}
+
+func (m *CreateBookingRequest) GetPaymentProcessingParameters() *PaymentProcessingParameters {
+	if m != nil {
+		return m.PaymentProcessingParameters
+	}
+	return nil
+}
+
+func (m *CreateBookingRequest) GetIdempotencyToken() string {
+	if m != nil {
+		return m.IdempotencyToken
+	}
+	return ""
+}
+
+func (m *CreateBookingRequest) GetAdditionalRequest() string {
+	if m != nil {
+		return m.AdditionalRequest
+	}
+	return ""
+}
+
+// Response with the created Booking for an inventory slot.
+type CreateBookingResponse struct {
+	// The created booking (required)
+	Booking *Booking `protobuf:"bytes,1,opt,name=booking,proto3" json:"booking,omitempty"`
+	// The updated user payment option used in this booking.
+	// If a new payment option was purchased to pay for the booking, this should
+	// be a newly created user payment option.
+	// If an already purchased user payment option was used for this booking,
+	// this should reflect an updated version of that user payment option.
+	// (optional)
+	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption,proto3" json:"user_payment_option,omitempty"`
+	// If creating a booking fails, this field should reflect the business logic
+	// error (e.g., slot has become unavailable) and all other fields in the
+	// CreateBookingResponse message are expected to be unset. (required if
+	// failure occurs)
+	BookingFailure       *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure,proto3" json:"booking_failure,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *CreateBookingResponse) Reset()         { *m = CreateBookingResponse{} }
+func (m *CreateBookingResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateBookingResponse) ProtoMessage()    {}
+func (*CreateBookingResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_CreateBookingResponse.Size(m)
+}
+func (m *CreateBookingResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateBookingResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateBookingResponse proto.InternalMessageInfo
+
+func (m *CreateBookingResponse) GetBooking() *Booking {
+	if m != nil {
+		return m.Booking
+	}
+	return nil
+}
+
+func (m *CreateBookingResponse) GetUserPaymentOption() *UserPaymentOption {
+	if m != nil {
+		return m.UserPaymentOption
+	}
+	return nil
+}
+
+func (m *CreateBookingResponse) GetBookingFailure() *BookingFailure {
+	if m != nil {
+		return m.BookingFailure
+	}
+	return nil
+}
+
+// Request to create a Lease for a slot in the inventory.  The expiration time
+// in the returned Lease may be modified by the backend, e.g. if the requested
+// lease period is too long.
+type CreateLeaseRequest struct {
+	// The lease to be created with information about the appointment slot
+	// (required)
+	Lease                *Lease   `protobuf:"bytes,1,opt,name=lease,proto3" json:"lease,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateLeaseRequest) Reset()         { *m = CreateLeaseRequest{} }
+func (m *CreateLeaseRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateLeaseRequest) ProtoMessage()    {}
+func (*CreateLeaseRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_CreateLeaseRequest.Size(m)
+}
+func (m *CreateLeaseRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateLeaseRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateLeaseRequest proto.InternalMessageInfo
+
+func (m *CreateLeaseRequest) GetLease() *Lease {
+	if m != nil {
+		return m.Lease
+	}
+	return nil
+}
+
+// Response for the CreateLease RPC with the created Lease.
+type CreateLeaseResponse struct {
+	// The created Lease (required)
+	Lease *Lease `protobuf:"bytes,1,opt,name=lease,proto3" json:"lease,omitempty"`
+	// If creating a lease fails, this field should reflect the business logic
+	// error (e.g., slot has become unavailable) and lease field is expected to be
+	// unset. (required if failure occurs)
+	BookingFailure       *BookingFailure `protobuf:"bytes,2,opt,name=booking_failure,json=bookingFailure,proto3" json:"booking_failure,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *CreateLeaseResponse) Reset()         { *m = CreateLeaseResponse{} }
+func (m *CreateLeaseResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateLeaseResponse) ProtoMessage()    {}
+func (*CreateLeaseResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_CreateLeaseResponse.Size(m)
+}
+func (m *CreateLeaseResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateLeaseResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateLeaseResponse proto.InternalMessageInfo
+
+func (m *CreateLeaseResponse) GetLease() *Lease {
+	if m != nil {
+		return m.Lease
+	}
+	return nil
+}
+
+func (m *CreateLeaseResponse) GetBookingFailure() *BookingFailure {
+	if m != nil {
+		return m.BookingFailure
+	}
+	return nil
+}
+
 // Temporary lease for an inventory slot
 type Lease struct {
 	// ID of the lease.
 	// Not populated in CreateLeaseRequest. The value is chosen by the partner and
 	// has to be returned in the response of CreateLease. (required)
-	LeaseId string `protobuf:"bytes,1,opt,name=lease_id,json=leaseId" json:"lease_id,omitempty"`
+	LeaseId string `protobuf:"bytes,1,opt,name=lease_id,json=leaseId,proto3" json:"lease_id,omitempty"`
 	// The appointment slot that the lease is created for. (required)
-	Slot *Slot `protobuf:"bytes,2,opt,name=slot" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,2,opt,name=slot,proto3" json:"slot,omitempty"`
 	// Unique identifier for this lease, chosen by Reserve with Google. Serves as
 	// an idempotency token for CreateLease requests. (required)
-	UserReference string `protobuf:"bytes,3,opt,name=user_reference,json=userReference" json:"user_reference,omitempty"`
+	UserReference string `protobuf:"bytes,3,opt,name=user_reference,json=userReference,proto3" json:"user_reference,omitempty"`
 	// Expiration time of the lease in UTC Timestamp (required)
-	LeaseExpirationTimeSec int64 `protobuf:"varint,4,opt,name=lease_expiration_time_sec,json=leaseExpirationTimeSec" json:"lease_expiration_time_sec,omitempty"`
+	LeaseExpirationTimeSec int64    `protobuf:"varint,4,opt,name=lease_expiration_time_sec,json=leaseExpirationTimeSec,proto3" json:"lease_expiration_time_sec,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{} `json:"-"`
+	XXX_unrecognized       []byte   `json:"-"`
+	XXX_sizecache          int32    `json:"-"`
 }
 
-func (m *Lease) Reset()                    { *m = Lease{} }
-func (m *Lease) String() string            { return proto.CompactTextString(m) }
-func (*Lease) ProtoMessage()               {}
-func (*Lease) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
+func (m *Lease) Reset()         { *m = Lease{} }
+func (m *Lease) String() string { return proto.CompactTextString(m) }
+func (*Lease) ProtoMessage()    {}
+func (*Lease) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_Lease.Size(m)
+}
+func (m *Lease) XXX_DiscardUnknown() {
+	xxx_messageInfo_Lease.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Lease proto.InternalMessageInfo
 
 func (m *Lease) GetLeaseId() string {
 	if m != nil {
@@ -1218,13 +1243,35 @@
 // Reference to a Lease that has been created via CreateLease.
 type LeaseReference struct {
 	// Lease ID (required)
-	LeaseId string `protobuf:"bytes,1,opt,name=lease_id,json=leaseId" json:"lease_id,omitempty"`
+	LeaseId              string   `protobuf:"bytes,1,opt,name=lease_id,json=leaseId,proto3" json:"lease_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *LeaseReference) Reset()                    { *m = LeaseReference{} }
-func (m *LeaseReference) String() string            { return proto.CompactTextString(m) }
-func (*LeaseReference) ProtoMessage()               {}
-func (*LeaseReference) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
+func (m *LeaseReference) Reset()         { *m = LeaseReference{} }
+func (m *LeaseReference) String() string { return proto.CompactTextString(m) }
+func (*LeaseReference) ProtoMessage()    {}
+func (*LeaseReference) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_LeaseReference.Size(m)
+}
+func (m *LeaseReference) XXX_DiscardUnknown() {
+	xxx_messageInfo_LeaseReference.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LeaseReference proto.InternalMessageInfo
 
 func (m *LeaseReference) GetLeaseId() string {
 	if m != nil {
@@ -1233,26 +1280,666 @@
 	return ""
 }
 
-// [START message_booking]
+// Request to create an order.
+type CreateOrderRequest struct {
+	// The order to create. (required)
+	Order *Order `protobuf:"bytes,1,opt,name=order,proto3" json:"order,omitempty"`
+	// The parameters to be used if the payment is processed by the partner
+	// (i.e. order.payment_information.payment_processed_by is equal to
+	// PROCESSED_BY_PARTNER). (required if payment is processed by the partner)
+	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,2,opt,name=payment_processing_parameters,json=paymentProcessingParameters,proto3" json:"payment_processing_parameters,omitempty"`
+	// Idempotency token for CreateOrder requests. (required)
+	IdempotencyToken     string   `protobuf:"bytes,3,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 *CreateOrderRequest) Reset()         { *m = CreateOrderRequest{} }
+func (m *CreateOrderRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateOrderRequest) ProtoMessage()    {}
+func (*CreateOrderRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_CreateOrderRequest.Size(m)
+}
+func (m *CreateOrderRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateOrderRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateOrderRequest proto.InternalMessageInfo
+
+func (m *CreateOrderRequest) GetOrder() *Order {
+	if m != nil {
+		return m.Order
+	}
+	return nil
+}
+
+func (m *CreateOrderRequest) GetPaymentProcessingParameters() *PaymentProcessingParameters {
+	if m != nil {
+		return m.PaymentProcessingParameters
+	}
+	return nil
+}
+
+func (m *CreateOrderRequest) GetIdempotencyToken() string {
+	if m != nil {
+		return m.IdempotencyToken
+	}
+	return ""
+}
+
+// Response for the CreateOrderRequest.
+type CreateOrderResponse struct {
+	// All line items in an order either fail or succeed together.
+	// This means that if some of the items cannot be fulfilled, the entire
+	// order must fail, the booking must not be made for any item, and the user
+	// must not be charged.
+	//
+	// Types that are valid to be assigned to Result:
+	//	*CreateOrderResponse_Order
+	//	*CreateOrderResponse_OrderFailure
+	Result               isCreateOrderResponse_Result `protobuf_oneof:"result"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *CreateOrderResponse) Reset()         { *m = CreateOrderResponse{} }
+func (m *CreateOrderResponse) String() string { return proto.CompactTextString(m) }
+func (*CreateOrderResponse) ProtoMessage()    {}
+func (*CreateOrderResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_CreateOrderResponse.Size(m)
+}
+func (m *CreateOrderResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateOrderResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateOrderResponse proto.InternalMessageInfo
+
+type isCreateOrderResponse_Result interface {
+	isCreateOrderResponse_Result()
+}
+
+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_OrderFailure) isCreateOrderResponse_Result() {}
+
+func (m *CreateOrderResponse) GetResult() isCreateOrderResponse_Result {
+	if m != nil {
+		return m.Result
+	}
+	return nil
+}
+
+func (m *CreateOrderResponse) GetOrder() *Order {
+	if x, ok := m.GetResult().(*CreateOrderResponse_Order); ok {
+		return x.Order
+	}
+	return nil
+}
+
+func (m *CreateOrderResponse) GetOrderFailure() *OrderFailure {
+	if x, ok := m.GetResult().(*CreateOrderResponse_OrderFailure); ok {
+		return x.OrderFailure
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CreateOrderResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CreateOrderResponse_OneofMarshaler, _CreateOrderResponse_OneofUnmarshaler, _CreateOrderResponse_OneofSizer, []interface{}{
+		(*CreateOrderResponse_Order)(nil),
+		(*CreateOrderResponse_OrderFailure)(nil),
+	}
+}
+
+func _CreateOrderResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CreateOrderResponse)
+	// result
+	switch x := m.Result.(type) {
+	case *CreateOrderResponse_Order:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Order); err != nil {
+			return err
+		}
+	case *CreateOrderResponse_OrderFailure:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.OrderFailure); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("CreateOrderResponse.Result has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CreateOrderResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CreateOrderResponse)
+	switch tag {
+	case 1: // result.order
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Order)
+		err := b.DecodeMessage(msg)
+		m.Result = &CreateOrderResponse_Order{msg}
+		return true, err
+	case 2: // result.order_failure
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OrderFailure)
+		err := b.DecodeMessage(msg)
+		m.Result = &CreateOrderResponse_OrderFailure{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CreateOrderResponse_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CreateOrderResponse)
+	// result
+	switch x := m.Result.(type) {
+	case *CreateOrderResponse_Order:
+		s := proto.Size(x.Order)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CreateOrderResponse_OrderFailure:
+		s := proto.Size(x.OrderFailure)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Request to list all bookings for a user
+type ListBookingsRequest struct {
+	// ID of the user (required)
+	UserId               string   `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListBookingsRequest) Reset()         { *m = ListBookingsRequest{} }
+func (m *ListBookingsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListBookingsRequest) ProtoMessage()    {}
+func (*ListBookingsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_ListBookingsRequest.Size(m)
+}
+func (m *ListBookingsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListBookingsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListBookingsRequest proto.InternalMessageInfo
+
+func (m *ListBookingsRequest) GetUserId() string {
+	if m != nil {
+		return m.UserId
+	}
+	return ""
+}
+
+// Response for the ListBookings RPC with all bookings for the requested user.
+type ListBookingsResponse struct {
+	// All bookings of the user (required)
+	Bookings             []*Booking `protobuf:"bytes,1,rep,name=bookings,proto3" json:"bookings,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
+	XXX_unrecognized     []byte     `json:"-"`
+	XXX_sizecache        int32      `json:"-"`
+}
+
+func (m *ListBookingsResponse) Reset()         { *m = ListBookingsResponse{} }
+func (m *ListBookingsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListBookingsResponse) ProtoMessage()    {}
+func (*ListBookingsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_ListBookingsResponse.Size(m)
+}
+func (m *ListBookingsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListBookingsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListBookingsResponse proto.InternalMessageInfo
+
+func (m *ListBookingsResponse) GetBookings() []*Booking {
+	if m != nil {
+		return m.Bookings
+	}
+	return nil
+}
+
+// Request to list orders.
+type ListOrdersRequest struct {
+	// Request of orders either by user ID, or by order ID.
+	//
+	// Types that are valid to be assigned to Ids:
+	//	*ListOrdersRequest_UserId
+	//	*ListOrdersRequest_OrderIds_
+	Ids                  isListOrdersRequest_Ids `protobuf_oneof:"ids"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *ListOrdersRequest) Reset()         { *m = ListOrdersRequest{} }
+func (m *ListOrdersRequest) String() string { return proto.CompactTextString(m) }
+func (*ListOrdersRequest) ProtoMessage()    {}
+func (*ListOrdersRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_ListOrdersRequest.Size(m)
+}
+func (m *ListOrdersRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListOrdersRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListOrdersRequest proto.InternalMessageInfo
+
+type isListOrdersRequest_Ids interface {
+	isListOrdersRequest_Ids()
+}
+
+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_OrderIds_) isListOrdersRequest_Ids() {}
+
+func (m *ListOrdersRequest) GetIds() isListOrdersRequest_Ids {
+	if m != nil {
+		return m.Ids
+	}
+	return nil
+}
+
+func (m *ListOrdersRequest) GetUserId() string {
+	if x, ok := m.GetIds().(*ListOrdersRequest_UserId); ok {
+		return x.UserId
+	}
+	return ""
+}
+
+func (m *ListOrdersRequest) GetOrderIds() *ListOrdersRequest_OrderIds {
+	if x, ok := m.GetIds().(*ListOrdersRequest_OrderIds_); ok {
+		return x.OrderIds
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*ListOrdersRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _ListOrdersRequest_OneofMarshaler, _ListOrdersRequest_OneofUnmarshaler, _ListOrdersRequest_OneofSizer, []interface{}{
+		(*ListOrdersRequest_UserId)(nil),
+		(*ListOrdersRequest_OrderIds_)(nil),
+	}
+}
+
+func _ListOrdersRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*ListOrdersRequest)
+	// ids
+	switch x := m.Ids.(type) {
+	case *ListOrdersRequest_UserId:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.UserId)
+	case *ListOrdersRequest_OrderIds_:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.OrderIds); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("ListOrdersRequest.Ids has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _ListOrdersRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*ListOrdersRequest)
+	switch tag {
+	case 1: // ids.user_id
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Ids = &ListOrdersRequest_UserId{x}
+		return true, err
+	case 2: // ids.order_ids
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ListOrdersRequest_OrderIds)
+		err := b.DecodeMessage(msg)
+		m.Ids = &ListOrdersRequest_OrderIds_{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _ListOrdersRequest_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*ListOrdersRequest)
+	// ids
+	switch x := m.Ids.(type) {
+	case *ListOrdersRequest_UserId:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.UserId)))
+		n += len(x.UserId)
+	case *ListOrdersRequest_OrderIds_:
+		s := proto.Size(x.OrderIds)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+type ListOrdersRequest_OrderIds struct {
+	OrderId              []string `protobuf:"bytes,1,rep,name=order_id,json=orderId,proto3" json:"order_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListOrdersRequest_OrderIds) Reset()         { *m = ListOrdersRequest_OrderIds{} }
+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}
+}
+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_Size() int {
+	return xxx_messageInfo_ListOrdersRequest_OrderIds.Size(m)
+}
+func (m *ListOrdersRequest_OrderIds) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListOrdersRequest_OrderIds.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListOrdersRequest_OrderIds proto.InternalMessageInfo
+
+func (m *ListOrdersRequest_OrderIds) GetOrderId() []string {
+	if m != nil {
+		return m.OrderId
+	}
+	return nil
+}
+
+// Response for the ListOrders RPC.
+type ListOrdersResponse struct {
+	// All requested orders (required)
+	Order                []*Order `protobuf:"bytes,1,rep,name=order,proto3" json:"order,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListOrdersResponse) Reset()         { *m = ListOrdersResponse{} }
+func (m *ListOrdersResponse) String() string { return proto.CompactTextString(m) }
+func (*ListOrdersResponse) ProtoMessage()    {}
+func (*ListOrdersResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_ListOrdersResponse.Size(m)
+}
+func (m *ListOrdersResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListOrdersResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListOrdersResponse proto.InternalMessageInfo
+
+func (m *ListOrdersResponse) GetOrder() []*Order {
+	if m != nil {
+		return m.Order
+	}
+	return nil
+}
+
+// Request to update a Booking.
+type UpdateBookingRequest struct {
+	// The booking to be updated
+	// The following fields can be set in a booking:
+	// - status, to cancel a booking.
+	// - start_time and duration in the slot, to reschedule a booking. (required)
+	Booking              *Booking `protobuf:"bytes,1,opt,name=booking,proto3" json:"booking,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UpdateBookingRequest) Reset()         { *m = UpdateBookingRequest{} }
+func (m *UpdateBookingRequest) String() string { return proto.CompactTextString(m) }
+func (*UpdateBookingRequest) ProtoMessage()    {}
+func (*UpdateBookingRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_UpdateBookingRequest.Size(m)
+}
+func (m *UpdateBookingRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateBookingRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateBookingRequest proto.InternalMessageInfo
+
+func (m *UpdateBookingRequest) GetBooking() *Booking {
+	if m != nil {
+		return m.Booking
+	}
+	return nil
+}
+
+// Response with the updated Booking.
+type UpdateBookingResponse struct {
+	// The updated booking (required)
+	Booking *Booking `protobuf:"bytes,1,opt,name=booking,proto3" json:"booking,omitempty"`
+	// The updated user payment option originally used to pay for this booking.
+	// This should be set if the UpdateBookingRequest results in a change to
+	// the UserPaymentOption.
+	// For instance, if the booking is canceled, the UserPaymentOption should
+	// reflect an additional credit to the user. In the case of a multi-use
+	// payment option, the current_count should be increased by one to
+	// allow the user to create another booking with this payment option. In the
+	// case of a single-use payment option, a new single-use user payment option
+	// should be returned. (required if altered in update)
+	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption,proto3" json:"user_payment_option,omitempty"`
+	// If updating a booking fails, this field should reflect the business logic
+	// error (e.g., booking is not cancellable) (required if failure occurs)
+	BookingFailure       *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure,proto3" json:"booking_failure,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *UpdateBookingResponse) Reset()         { *m = UpdateBookingResponse{} }
+func (m *UpdateBookingResponse) String() string { return proto.CompactTextString(m) }
+func (*UpdateBookingResponse) ProtoMessage()    {}
+func (*UpdateBookingResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_UpdateBookingResponse.Size(m)
+}
+func (m *UpdateBookingResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateBookingResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateBookingResponse proto.InternalMessageInfo
+
+func (m *UpdateBookingResponse) GetBooking() *Booking {
+	if m != nil {
+		return m.Booking
+	}
+	return nil
+}
+
+func (m *UpdateBookingResponse) GetUserPaymentOption() *UserPaymentOption {
+	if m != nil {
+		return m.UserPaymentOption
+	}
+	return nil
+}
+
+func (m *UpdateBookingResponse) GetBookingFailure() *BookingFailure {
+	if m != nil {
+		return m.BookingFailure
+	}
+	return nil
+}
+
 // A booking for an inventory slot
 type Booking struct {
 	// ID of this booking (required)
-	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId" json:"booking_id,omitempty"`
+	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId,proto3" json:"booking_id,omitempty"`
 	// The appointment slot of this booking (required)
-	Slot *Slot `protobuf:"bytes,2,opt,name=slot" json:"slot,omitempty"`
+	Slot *Slot `protobuf:"bytes,2,opt,name=slot,proto3" json:"slot,omitempty"`
 	// Personal information of the user making the appointment (required)
-	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation" json:"user_information,omitempty"`
+	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation,proto3" json:"user_information,omitempty"`
 	// Status of the booking (required)
-	Status BookingStatus `protobuf:"varint,4,opt,name=status,enum=v3.BookingStatus" json:"status,omitempty"`
+	Status BookingStatus `protobuf:"varint,4,opt,name=status,proto3,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
 	// Information about payment transactions that relate to the booking.
 	// (optional)
-	PaymentInformation *PaymentInformation `protobuf:"bytes,5,opt,name=payment_information,json=paymentInformation" json:"payment_information,omitempty"`
+	PaymentInformation   *PaymentInformation `protobuf:"bytes,5,opt,name=payment_information,json=paymentInformation,proto3" json:"payment_information,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
 }
 
-func (m *Booking) Reset()                    { *m = Booking{} }
-func (m *Booking) String() string            { return proto.CompactTextString(m) }
-func (*Booking) ProtoMessage()               {}
-func (*Booking) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
+func (m *Booking) Reset()         { *m = Booking{} }
+func (m *Booking) String() string { return proto.CompactTextString(m) }
+func (*Booking) ProtoMessage()    {}
+func (*Booking) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_Booking.Size(m)
+}
+func (m *Booking) XXX_DiscardUnknown() {
+	xxx_messageInfo_Booking.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Booking proto.InternalMessageInfo
 
 func (m *Booking) GetBookingId() string {
 	if m != nil {
@@ -1289,78 +1976,667 @@
 	return nil
 }
 
-// [START user_definition]
-// 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" json:"user_id,omitempty"`
-	// Given name of the user (required)
-	GivenName string `protobuf:"bytes,2,opt,name=given_name,json=givenName" json:"given_name,omitempty"`
-	// Family name of the user (required)
-	FamilyName string `protobuf:"bytes,3,opt,name=family_name,json=familyName" json:"family_name,omitempty"`
-	// Address of the user (optional)
-	Address *PostalAddress `protobuf:"bytes,4,opt,name=address" json:"address,omitempty"`
-	// Phone number of the user (required)
-	Telephone string `protobuf:"bytes,5,opt,name=telephone" json:"telephone,omitempty"`
-	// Email address of the user (required)
-	Email string `protobuf:"bytes,6,opt,name=email" json:"email,omitempty"`
+// Status data that conveys why (1) creating a lease or (2) creating or updating
+// a booking fails.
+// BookingFailure is intended to primarily capture business logic errors.
+type BookingFailure struct {
+	// The reason why the booking failed. (required)
+	Cause BookingFailure_Cause `protobuf:"varint,1,opt,name=cause,proto3,enum=ext.maps.booking.partner.v3.BookingFailure_Cause" json:"cause,omitempty"`
+	// (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
+	RejectedCardType CreditCardType `protobuf:"varint,2,opt,name=rejected_card_type,json=rejectedCardType,proto3,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
+	// This optional field is used for the partner to include additional
+	// information for debugging purpose only. (optional)
+	Description          string   `protobuf:"bytes,3,opt,name=description,proto3" json:"description,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 fileDescriptor0, []int{15} }
+func (m *BookingFailure) Reset()         { *m = BookingFailure{} }
+func (m *BookingFailure) String() string { return proto.CompactTextString(m) }
+func (*BookingFailure) ProtoMessage()    {}
+func (*BookingFailure) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_BookingFailure.Size(m)
+}
+func (m *BookingFailure) XXX_DiscardUnknown() {
+	xxx_messageInfo_BookingFailure.DiscardUnknown(m)
+}
 
-func (m *UserInformation) GetUserId() string {
+var xxx_messageInfo_BookingFailure proto.InternalMessageInfo
+
+func (m *BookingFailure) GetCause() BookingFailure_Cause {
 	if m != nil {
-		return m.UserId
+		return m.Cause
+	}
+	return BookingFailure_CAUSE_UNSPECIFIED
+}
+
+func (m *BookingFailure) GetRejectedCardType() CreditCardType {
+	if m != nil {
+		return m.RejectedCardType
+	}
+	return CreditCardType_CREDIT_CARD_TYPE_UNSPECIFIED
+}
+
+func (m *BookingFailure) GetDescription() string {
+	if m != nil {
+		return m.Description
 	}
 	return ""
 }
 
-func (m *UserInformation) GetGivenName() string {
+// An order for service appointments with a merchant.
+type Order struct {
+	// ID of this Order, chosen by the booking partner who handles the order
+	// (required in CreateOrderResponse and ListOrdersResponse, must not be set in
+	// CreateOrderRequest)
+	OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"`
+	// Personal information of the user making the order (required)
+	UserInformation *UserInformation `protobuf:"bytes,2,opt,name=user_information,json=userInformation,proto3" json:"user_information,omitempty"`
+	// Information about payment transactions that relate to the Order.
+	// (optional)
+	PaymentInformation *PaymentInformation `protobuf:"bytes,3,opt,name=payment_information,json=paymentInformation,proto3" json:"payment_information,omitempty"`
+	// The merchant that all services in this Order belong to.
+	MerchantId string `protobuf:"bytes,4,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
+	// Line items in this order.
+	Item                 []*LineItem `protobuf:"bytes,5,rep,name=item,proto3" json:"item,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *Order) Reset()         { *m = Order{} }
+func (m *Order) String() string { return proto.CompactTextString(m) }
+func (*Order) ProtoMessage()    {}
+func (*Order) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_Order.Size(m)
+}
+func (m *Order) XXX_DiscardUnknown() {
+	xxx_messageInfo_Order.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Order proto.InternalMessageInfo
+
+func (m *Order) GetOrderId() string {
 	if m != nil {
-		return m.GivenName
+		return m.OrderId
 	}
 	return ""
 }
 
-func (m *UserInformation) GetFamilyName() string {
+func (m *Order) GetUserInformation() *UserInformation {
 	if m != nil {
-		return m.FamilyName
-	}
-	return ""
-}
-
-func (m *UserInformation) GetAddress() *PostalAddress {
-	if m != nil {
-		return m.Address
+		return m.UserInformation
 	}
 	return nil
 }
 
-func (m *UserInformation) GetTelephone() string {
+func (m *Order) GetPaymentInformation() *PaymentInformation {
 	if m != nil {
-		return m.Telephone
+		return m.PaymentInformation
+	}
+	return nil
+}
+
+func (m *Order) GetMerchantId() string {
+	if m != nil {
+		return m.MerchantId
 	}
 	return ""
 }
 
-func (m *UserInformation) GetEmail() string {
+func (m *Order) GetItem() []*LineItem {
 	if m != nil {
-		return m.Email
+		return m.Item
+	}
+	return nil
+}
+
+// A single item in an Order--the booking of a single service in a single time
+// slot.
+type LineItem struct {
+	// ID of the merchant Service. (required)
+	ServiceId string `protobuf:"bytes,1,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
+	// Start time of the appointment slot in seconds of UTC time since Unix epoch.
+	// (required)
+	StartSec int64 `protobuf:"varint,2,opt,name=start_sec,json=startSec,proto3" json:"start_sec,omitempty"`
+	// Duration of the appointment slot in seconds. (required)
+	DurationSec int64 `protobuf:"varint,3,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
+	// Number of tickets ordered by Ticket Type.
+	Tickets []*LineItem_OrderedTickets `protobuf:"bytes,4,rep,name=tickets,proto3" json:"tickets,omitempty"`
+	// In handling CreateOrderRequest and CheckOrderFulfillabilityRequest,
+	// the total price (excluding taxes) of the item must be verified to guard
+	// against price changes. In CreateOrderResponse and
+	// CheckOrderFulfillabilityResponse, the price should be updated to the
+	// correct value if the value from the request was incorrect or outdated.
+	// (reqired)
+	Price *Price `protobuf:"bytes,5,opt,name=price,proto3" json:"price,omitempty"`
+	// Status of the Line Item. (required in CreateOrderResponse and
+	// ListOrdersResponse; should not be set in requests)
+	Status               BookingStatus `protobuf:"varint,6,opt,name=status,proto3,enum=ext.maps.booking.partner.v3.BookingStatus" json:"status,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *LineItem) Reset()         { *m = LineItem{} }
+func (m *LineItem) String() string { return proto.CompactTextString(m) }
+func (*LineItem) ProtoMessage()    {}
+func (*LineItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_LineItem.Size(m)
+}
+func (m *LineItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_LineItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LineItem proto.InternalMessageInfo
+
+func (m *LineItem) GetServiceId() string {
+	if m != nil {
+		return m.ServiceId
 	}
 	return ""
 }
 
-// [START paymentprocessing_definition]
+func (m *LineItem) GetStartSec() int64 {
+	if m != nil {
+		return m.StartSec
+	}
+	return 0
+}
+
+func (m *LineItem) GetDurationSec() int64 {
+	if m != nil {
+		return m.DurationSec
+	}
+	return 0
+}
+
+func (m *LineItem) GetTickets() []*LineItem_OrderedTickets {
+	if m != nil {
+		return m.Tickets
+	}
+	return nil
+}
+
+func (m *LineItem) GetPrice() *Price {
+	if m != nil {
+		return m.Price
+	}
+	return nil
+}
+
+func (m *LineItem) GetStatus() BookingStatus {
+	if m != nil {
+		return m.Status
+	}
+	return BookingStatus_BOOKING_STATUS_UNSPECIFIED
+}
+
+type LineItem_OrderedTickets struct {
+	TicketId             string   `protobuf:"bytes,1,opt,name=ticket_id,json=ticketId,proto3" json:"ticket_id,omitempty"`
+	Count                int32    `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LineItem_OrderedTickets) Reset()         { *m = LineItem_OrderedTickets{} }
+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}
+}
+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_Size() int {
+	return xxx_messageInfo_LineItem_OrderedTickets.Size(m)
+}
+func (m *LineItem_OrderedTickets) XXX_DiscardUnknown() {
+	xxx_messageInfo_LineItem_OrderedTickets.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LineItem_OrderedTickets proto.InternalMessageInfo
+
+func (m *LineItem_OrderedTickets) GetTicketId() string {
+	if m != nil {
+		return m.TicketId
+	}
+	return ""
+}
+
+func (m *LineItem_OrderedTickets) GetCount() int32 {
+	if m != nil {
+		return m.Count
+	}
+	return 0
+}
+
+// Status data that conveys why creating an order fails.
+// OrderFailure is intended to primarily capture business logic errors.
+type OrderFailure struct {
+	// The reason why the order failed. (required)
+	Cause OrderFailure_Cause `protobuf:"varint,1,opt,name=cause,proto3,enum=ext.maps.booking.partner.v3.OrderFailure_Cause" json:"cause,omitempty"`
+	// (required only if cause is ORDER_UNFULFILLABLE)
+	Fulfillability *OrderFulfillability `protobuf:"bytes,2,opt,name=fulfillability,proto3" json:"fulfillability,omitempty"`
+	// (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
+	RejectedCardType CreditCardType `protobuf:"varint,3,opt,name=rejected_card_type,json=rejectedCardType,proto3,enum=ext.maps.booking.partner.v3.CreditCardType" json:"rejected_card_type,omitempty"`
+	// This optional field is used for the partner to include additional
+	// information for debugging purpose only. (optional)
+	Description          string   `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OrderFailure) Reset()         { *m = OrderFailure{} }
+func (m *OrderFailure) String() string { return proto.CompactTextString(m) }
+func (*OrderFailure) ProtoMessage()    {}
+func (*OrderFailure) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_OrderFailure.Size(m)
+}
+func (m *OrderFailure) XXX_DiscardUnknown() {
+	xxx_messageInfo_OrderFailure.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OrderFailure proto.InternalMessageInfo
+
+func (m *OrderFailure) GetCause() OrderFailure_Cause {
+	if m != nil {
+		return m.Cause
+	}
+	return OrderFailure_CAUSE_UNSPECIFIED
+}
+
+func (m *OrderFailure) GetFulfillability() *OrderFulfillability {
+	if m != nil {
+		return m.Fulfillability
+	}
+	return nil
+}
+
+func (m *OrderFailure) GetRejectedCardType() CreditCardType {
+	if m != nil {
+		return m.RejectedCardType
+	}
+	return CreditCardType_CREDIT_CARD_TYPE_UNSPECIFIED
+}
+
+func (m *OrderFailure) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+type OrderFulfillability struct {
+	Result OrderFulfillability_OrderFulfillabilityResult `protobuf:"varint,1,opt,name=result,proto3,enum=ext.maps.booking.partner.v3.OrderFulfillability_OrderFulfillabilityResult" json:"result,omitempty"`
+	// Fulfillability results of all line items in this order (required).
+	ItemFulfillability []*LineItemFulfillability `protobuf:"bytes,2,rep,name=item_fulfillability,json=itemFulfillability,proto3" json:"item_fulfillability,omitempty"`
+	// Additional description of the reason if the item is unfulfillable.
+	// (optional)
+	UnfulfillableReason  string   `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason,proto3" json:"unfulfillable_reason,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OrderFulfillability) Reset()         { *m = OrderFulfillability{} }
+func (m *OrderFulfillability) String() string { return proto.CompactTextString(m) }
+func (*OrderFulfillability) ProtoMessage()    {}
+func (*OrderFulfillability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_OrderFulfillability.Size(m)
+}
+func (m *OrderFulfillability) XXX_DiscardUnknown() {
+	xxx_messageInfo_OrderFulfillability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OrderFulfillability proto.InternalMessageInfo
+
+func (m *OrderFulfillability) GetResult() OrderFulfillability_OrderFulfillabilityResult {
+	if m != nil {
+		return m.Result
+	}
+	return OrderFulfillability_ORDER_FULFILLABILITY_RESULT_UNSPECIFIED
+}
+
+func (m *OrderFulfillability) GetItemFulfillability() []*LineItemFulfillability {
+	if m != nil {
+		return m.ItemFulfillability
+	}
+	return nil
+}
+
+func (m *OrderFulfillability) GetUnfulfillableReason() string {
+	if m != nil {
+		return m.UnfulfillableReason
+	}
+	return ""
+}
+
+// Fulfillability of a line item.
+type LineItemFulfillability struct {
+	// The line item of question. (required)
+	Item *LineItem `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"`
+	// (required)
+	Result LineItemFulfillability_ItemFulfillabilityResult `protobuf:"varint,2,opt,name=result,proto3,enum=ext.maps.booking.partner.v3.LineItemFulfillability_ItemFulfillabilityResult" json:"result,omitempty"`
+	// Additional description of the reason if the item is unfulfillable.
+	// (optional)
+	UnfulfillableReason string `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason,proto3" json:"unfulfillable_reason,omitempty"`
+	// (optional)
+	Availability *LineItemFulfillability_UpdatedAvailability `protobuf:"bytes,4,opt,name=availability,proto3" json:"availability,omitempty"`
+	// Updated ticket types can be piggybacked in
+	// CheckOrderFulfillabilityResponse. If non-empty, all available ticket types
+	// for this slot with up-to-date prices should be listed without omitting any.
+	// (optional)
+	TicketType           []*TicketType `protobuf:"bytes,5,rep,name=ticket_type,json=ticketType,proto3" json:"ticket_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *LineItemFulfillability) Reset()         { *m = LineItemFulfillability{} }
+func (m *LineItemFulfillability) String() string { return proto.CompactTextString(m) }
+func (*LineItemFulfillability) ProtoMessage()    {}
+func (*LineItemFulfillability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_LineItemFulfillability.Size(m)
+}
+func (m *LineItemFulfillability) XXX_DiscardUnknown() {
+	xxx_messageInfo_LineItemFulfillability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LineItemFulfillability proto.InternalMessageInfo
+
+func (m *LineItemFulfillability) GetItem() *LineItem {
+	if m != nil {
+		return m.Item
+	}
+	return nil
+}
+
+func (m *LineItemFulfillability) GetResult() LineItemFulfillability_ItemFulfillabilityResult {
+	if m != nil {
+		return m.Result
+	}
+	return LineItemFulfillability_ITEM_FULFILLABILITY_RESULT_UNSPECIFIED
+}
+
+func (m *LineItemFulfillability) GetUnfulfillableReason() string {
+	if m != nil {
+		return m.UnfulfillableReason
+	}
+	return ""
+}
+
+func (m *LineItemFulfillability) GetAvailability() *LineItemFulfillability_UpdatedAvailability {
+	if m != nil {
+		return m.Availability
+	}
+	return nil
+}
+
+func (m *LineItemFulfillability) GetTicketType() []*TicketType {
+	if m != nil {
+		return m.TicketType
+	}
+	return nil
+}
+
+// Updated availability for this slot can be piggybacked in
+// CheckOrderFulfillabilityResponse.
+type LineItemFulfillability_UpdatedAvailability struct {
+	// Number of available spots for the given slot. 0 indicates no
+	// availability. (required)
+	SpotsOpen            int32    `protobuf:"varint,1,opt,name=spots_open,json=spotsOpen,proto3" json:"spots_open,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LineItemFulfillability_UpdatedAvailability) Reset() {
+	*m = LineItemFulfillability_UpdatedAvailability{}
+}
+func (m *LineItemFulfillability_UpdatedAvailability) String() string {
+	return proto.CompactTextString(m)
+}
+func (*LineItemFulfillability_UpdatedAvailability) ProtoMessage() {}
+func (*LineItemFulfillability_UpdatedAvailability) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.Size(m)
+}
+func (m *LineItemFulfillability_UpdatedAvailability) XXX_DiscardUnknown() {
+	xxx_messageInfo_LineItemFulfillability_UpdatedAvailability.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LineItemFulfillability_UpdatedAvailability proto.InternalMessageInfo
+
+func (m *LineItemFulfillability_UpdatedAvailability) GetSpotsOpen() int32 {
+	if m != nil {
+		return m.SpotsOpen
+	}
+	return 0
+}
+
+// TicketType is used to differentiate among tickets (where a ticket can be a
+// spot on a raft trip, an admission to a museum, etc.) with different prices
+// and/or availabilities due to different user types or different service
+// attributes.
+type TicketType struct {
+	// The ticket id is used to differentiate among different ticket types of the
+	// same service, and is only expected to be unique within a service.
+	TicketTypeId string `protobuf:"bytes,1,opt,name=ticket_type_id,json=ticketTypeId,proto3" json:"ticket_type_id,omitempty"`
+	// This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc.
+	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription,proto3" json:"short_description,omitempty"`
+	// The price of a single ticket of this type, exclusive of any taxes. The tax
+	// rate of Service is applied to its tickets.
+	Price                *Price   `protobuf:"bytes,3,opt,name=price,proto3" json:"price,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TicketType) Reset()         { *m = TicketType{} }
+func (m *TicketType) String() string { return proto.CompactTextString(m) }
+func (*TicketType) ProtoMessage()    {}
+func (*TicketType) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_TicketType.Size(m)
+}
+func (m *TicketType) XXX_DiscardUnknown() {
+	xxx_messageInfo_TicketType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TicketType proto.InternalMessageInfo
+
+func (m *TicketType) GetTicketTypeId() string {
+	if m != nil {
+		return m.TicketTypeId
+	}
+	return ""
+}
+
+func (m *TicketType) GetShortDescription() string {
+	if m != nil {
+		return m.ShortDescription
+	}
+	return ""
+}
+
+func (m *TicketType) GetPrice() *Price {
+	if m != nil {
+		return m.Price
+	}
+	return nil
+}
+
+// Resource specification that disambiguates an appointment slot
+type ResourceIds struct {
+	// The staff ID as provided in the feed or empty if not applicable or no staff
+	// was selected. (optional)
+	StaffId string `protobuf:"bytes,1,opt,name=staff_id,json=staffId,proto3" json:"staff_id,omitempty"`
+	// The room ID as provided in the feed or empty if not applicable or no room
+	// was selected. (optional)
+	RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`
+	// For Dining Reservations only: the number of seats requested in the booking.
+	// (optional)
+	PartySize            int32    `protobuf:"varint,3,opt,name=party_size,json=partySize,proto3" json:"party_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ResourceIds) Reset()         { *m = ResourceIds{} }
+func (m *ResourceIds) String() string { return proto.CompactTextString(m) }
+func (*ResourceIds) ProtoMessage()    {}
+func (*ResourceIds) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_ResourceIds.Size(m)
+}
+func (m *ResourceIds) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResourceIds.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResourceIds proto.InternalMessageInfo
+
+func (m *ResourceIds) GetStaffId() string {
+	if m != nil {
+		return m.StaffId
+	}
+	return ""
+}
+
+func (m *ResourceIds) GetRoomId() string {
+	if m != nil {
+		return m.RoomId
+	}
+	return ""
+}
+
+func (m *ResourceIds) GetPartySize() int32 {
+	if m != nil {
+		return m.PartySize
+	}
+	return 0
+}
+
 type PaymentProcessingParameters struct {
 	// The payment processor used to process payment for a given booking.
 	// (required)
 	//
 	// Replaced by the payment_processor field.
-	Processor PaymentProcessingParameters_PaymentProcessor `protobuf:"varint,1,opt,name=processor,enum=v3.PaymentProcessingParameters_PaymentProcessor" json:"processor,omitempty"`
+	Processor PaymentProcessingParameters_PaymentProcessor `protobuf:"varint,1,opt,name=processor,proto3,enum=ext.maps.booking.partner.v3.PaymentProcessingParameters_PaymentProcessor" json:"processor,omitempty"` // Deprecated: Do not use.
 	// The token representing the payment method that will be used to pay
 	// for this booking. This token can be only used once. This token can be
 	// only used for the merchant associated with this booking.
@@ -1373,7 +2649,7 @@
 	// For example, for Stripe, unparsed_payment_method_token is a serialized
 	// JSON object documented at https://stripe.com/docs/api#token_object.
 	// payment_method_token is the 'id' field parsed out of that.
-	PaymentMethodToken string `protobuf:"bytes,2,opt,name=payment_method_token,json=paymentMethodToken" json:"payment_method_token,omitempty"`
+	PaymentMethodToken string `protobuf:"bytes,2,opt,name=payment_method_token,json=paymentMethodToken,proto3" json:"payment_method_token,omitempty"` // Deprecated: Do not use.
 	// The full token received from Google Payments.  This is typically a
 	// serialized JSON object.  See documentation from Google Payments and your
 	// payment processor for the JSON format of the token for your processor.
@@ -1381,23 +2657,46 @@
 	//
 	// This token can only be used once, and only for the merchant associated with
 	// this booking.
-	UnparsedPaymentMethodToken string `protobuf:"bytes,5,opt,name=unparsed_payment_method_token,json=unparsedPaymentMethodToken" json:"unparsed_payment_method_token,omitempty"`
+	UnparsedPaymentMethodToken string `protobuf:"bytes,5,opt,name=unparsed_payment_method_token,json=unparsedPaymentMethodToken,proto3" json:"unparsed_payment_method_token,omitempty"`
 	// The payment processor API version that the given payment token is valid
 	// for.
 	//
 	// Each processor may choose its own format for this field.
 	// Stripe uses a date (e.g. "2017-06-15"). (required)
-	Version string `protobuf:"bytes,3,opt,name=version" json:"version,omitempty"`
+	Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"`
 	// The payment processor whose configuration was used to generate this token.
 	// (required)
-	PaymentProcessor string `protobuf:"bytes,4,opt,name=payment_processor,json=paymentProcessor" json:"payment_processor,omitempty"`
+	PaymentProcessor     string   `protobuf:"bytes,4,opt,name=payment_processor,json=paymentProcessor,proto3" json:"payment_processor,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *PaymentProcessingParameters) Reset()                    { *m = PaymentProcessingParameters{} }
-func (m *PaymentProcessingParameters) String() string            { return proto.CompactTextString(m) }
-func (*PaymentProcessingParameters) ProtoMessage()               {}
-func (*PaymentProcessingParameters) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
+func (m *PaymentProcessingParameters) Reset()         { *m = PaymentProcessingParameters{} }
+func (m *PaymentProcessingParameters) String() string { return proto.CompactTextString(m) }
+func (*PaymentProcessingParameters) ProtoMessage()    {}
+func (*PaymentProcessingParameters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_PaymentProcessingParameters.Size(m)
+}
+func (m *PaymentProcessingParameters) XXX_DiscardUnknown() {
+	xxx_messageInfo_PaymentProcessingParameters.DiscardUnknown(m)
+}
 
+var xxx_messageInfo_PaymentProcessingParameters proto.InternalMessageInfo
+
+// Deprecated: Do not use.
 func (m *PaymentProcessingParameters) GetProcessor() PaymentProcessingParameters_PaymentProcessor {
 	if m != nil {
 		return m.Processor
@@ -1405,6 +2704,7 @@
 	return PaymentProcessingParameters_PAYMENT_PROCESSOR_UNSPECIFIED
 }
 
+// Deprecated: Do not use.
 func (m *PaymentProcessingParameters) GetPaymentMethodToken() string {
 	if m != nil {
 		return m.PaymentMethodToken
@@ -1433,7 +2733,6 @@
 	return ""
 }
 
-// [START userpaymentoption_definition]
 // This describes a payment option, such as a pack, membership, or
 // single-session pass after it has been purchased by a user. It includes an
 // identifier for the user payment option, as well as some information about
@@ -1441,32 +2740,54 @@
 type UserPaymentOption struct {
 	// A unique identifier for the user payment option. This Id MUST be unique
 	// for all UserPaymentOptions across all merchants and users. (required)
-	UserPaymentOptionId string `protobuf:"bytes,1,opt,name=user_payment_option_id,json=userPaymentOptionId" json:"user_payment_option_id,omitempty"`
+	UserPaymentOptionId string `protobuf:"bytes,1,opt,name=user_payment_option_id,json=userPaymentOptionId,proto3" json:"user_payment_option_id,omitempty"`
 	// The user payment option will be valid (usable) between start_time and
 	// end_time set in UTC. Attempts to use a user payment option to make a
 	// booking outside of this interval will fail. (both optional)
-	ValidStartTimeSec int64 `protobuf:"varint,2,opt,name=valid_start_time_sec,json=validStartTimeSec" json:"valid_start_time_sec,omitempty"`
-	ValidEndTimeSec   int64 `protobuf:"varint,3,opt,name=valid_end_time_sec,json=validEndTimeSec" json:"valid_end_time_sec,omitempty"`
+	ValidStartTimeSec int64 `protobuf:"varint,2,opt,name=valid_start_time_sec,json=validStartTimeSec,proto3" json:"valid_start_time_sec,omitempty"`
+	ValidEndTimeSec   int64 `protobuf:"varint,3,opt,name=valid_end_time_sec,json=validEndTimeSec,proto3" json:"valid_end_time_sec,omitempty"`
 	// The type of the payment option associated with this user payment option.
 	// This can be unlimited for a membership or subscription, multi-use for a
 	// pack, or single-use. (required)
-	Type PaymentOptionType `protobuf:"varint,4,opt,name=type,enum=v3.PaymentOptionType" json:"type,omitempty"`
+	Type PaymentOptionType `protobuf:"varint,4,opt,name=type,proto3,enum=ext.maps.booking.partner.v3.PaymentOptionType" json:"type,omitempty"`
 	// The original number of uses for this user payment option when it was
 	// purchased. This value is ignored for unlimited payment options. (required)
-	OriginalCount int32 `protobuf:"varint,5,opt,name=original_count,json=originalCount" json:"original_count,omitempty"`
+	OriginalCount int32 `protobuf:"varint,5,opt,name=original_count,json=originalCount,proto3" json:"original_count,omitempty"`
 	// The number of uses remaining for this user payment option. If this number
 	// is 0 for a pack, attempts to use this payment option to make a booking will
 	// fail. (required)
-	CurrentCount int32 `protobuf:"varint,6,opt,name=current_count,json=currentCount" json:"current_count,omitempty"`
+	CurrentCount int32 `protobuf:"varint,6,opt,name=current_count,json=currentCount,proto3" json:"current_count,omitempty"`
 	// The id of the payment option that has been used to purchase this user
 	// payment option. (required)
-	PaymentOptionId string `protobuf:"bytes,7,opt,name=payment_option_id,json=paymentOptionId" json:"payment_option_id,omitempty"`
+	PaymentOptionId      string   `protobuf:"bytes,7,opt,name=payment_option_id,json=paymentOptionId,proto3" json:"payment_option_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *UserPaymentOption) Reset()                    { *m = UserPaymentOption{} }
-func (m *UserPaymentOption) String() string            { return proto.CompactTextString(m) }
-func (*UserPaymentOption) ProtoMessage()               {}
-func (*UserPaymentOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
+func (m *UserPaymentOption) Reset()         { *m = UserPaymentOption{} }
+func (m *UserPaymentOption) String() string { return proto.CompactTextString(m) }
+func (*UserPaymentOption) ProtoMessage()    {}
+func (*UserPaymentOption) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_UserPaymentOption.Size(m)
+}
+func (m *UserPaymentOption) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserPaymentOption.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UserPaymentOption proto.InternalMessageInfo
 
 func (m *UserPaymentOption) GetUserPaymentOptionId() string {
 	if m != nil {
@@ -1517,7 +2838,6 @@
 	return ""
 }
 
-// [START paymentinfo_definition]
 // Payment details that are sent when creating a new booking.
 type PaymentInformation struct {
 	// Prepayment status of the booking.
@@ -1527,10 +2847,13 @@
 	// If the prepayment status is PREPAYMENT_REFUNDED, then
 	// payment_transaction_id contains the associated unique transaction id for
 	// the refund. (required)
-	PrepaymentStatus PrepaymentStatus `protobuf:"varint,1,opt,name=prepayment_status,json=prepaymentStatus,enum=v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
+	PrepaymentStatus PrepaymentStatus `protobuf:"varint,1,opt,name=prepayment_status,json=prepaymentStatus,proto3,enum=ext.maps.booking.partner.v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
 	// Unique identifier for a payment transaction associated with the booking.
-	// Empty if not applicable. (required)
-	PaymentTransactionId string `protobuf:"bytes,2,opt,name=payment_transaction_id,json=paymentTransactionId" json:"payment_transaction_id,omitempty"`
+	// If the payment is PROCESSED_BY_GOOGLE, this field will be set by Google.
+	// If the payment is PROCESSED_BY_PARTNER, this field will be left empty in
+	// Google's CreateBooking or CreateOrder requests to the partner, and it must
+	// be set by the partner in their responses.
+	PaymentTransactionId string `protobuf:"bytes,2,opt,name=payment_transaction_id,json=paymentTransactionId,proto3" json:"payment_transaction_id,omitempty"`
 	// These fields must match the service price (specified in the Services feed)
 	// or the PaymentOption corresponding with this service.
 	// They are included in the booking request and response to verify that
@@ -1540,15 +2863,15 @@
 	// The price of the booking or order, exclusive of any taxes.
 	// Existence of price or taxes does not imply that they have been paid,
 	// prepayment_state should be used for that purpose. (required)
-	Price *Price `protobuf:"bytes,3,opt,name=price" json:"price,omitempty"`
+	Price *Price `protobuf:"bytes,3,opt,name=price,proto3" json:"price,omitempty"`
 	// Taxes that are calculated to be paid for this booking.
 	// This field can only be absent in one of the following cases:
 	// (1) the price is exempt from or already inclusive of applicable taxes; or
 	// (2) the break down between taxes and fees is not available.
 	// (required when neither of the above holds)
-	TaxAmount *Price `protobuf:"bytes,4,opt,name=tax_amount,json=taxAmount" json:"tax_amount,omitempty"`
+	TaxAmount *Price `protobuf:"bytes,4,opt,name=tax_amount,json=taxAmount,proto3" json:"tax_amount,omitempty"`
 	// Whether the partner or Google processed the payment. (required)
-	PaymentProcessedBy PaymentInformation_PaymentProcessedBy `protobuf:"varint,5,opt,name=payment_processed_by,json=paymentProcessedBy,enum=v3.PaymentInformation_PaymentProcessedBy" json:"payment_processed_by,omitempty"`
+	PaymentProcessedBy PaymentInformation_PaymentProcessedBy `protobuf:"varint,5,opt,name=payment_processed_by,json=paymentProcessedBy,proto3,enum=ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy" json:"payment_processed_by,omitempty"`
 	// The id of the payment option or user payment option associated with the
 	// booking.
 	// If a payment option is purchased as part of a booking, payment_option_id
@@ -1567,30 +2890,52 @@
 	PaymentId isPaymentInformation_PaymentId `protobuf_oneof:"payment_id"`
 	// Defines how a deposit may be charged to the user. If there is a deposit,
 	// this field should be set. (optional)
-	Deposit *Deposit `protobuf:"bytes,8,opt,name=deposit" json:"deposit,omitempty"`
+	Deposit *Deposit `protobuf:"bytes,8,opt,name=deposit,proto3" json:"deposit,omitempty"`
 	// Defines a no show fee that may be charged to the user. If the user can be
 	// charged a no show fee, this field should be set. (optional)
-	NoShowFee *NoShowFee `protobuf:"bytes,9,opt,name=no_show_fee,json=noShowFee" json:"no_show_fee,omitempty"`
+	NoShowFee *NoShowFee `protobuf:"bytes,9,opt,name=no_show_fee,json=noShowFee,proto3" json:"no_show_fee,omitempty"`
 	// Total processing fees & taxes that the user needs to pay for the order;
 	// only applicable to partners that handle order based booking (e.g., with
 	// CreateOrder method). (optional)
-	FeesAndTaxes *Price `protobuf:"bytes,10,opt,name=fees_and_taxes,json=feesAndTaxes" json:"fees_and_taxes,omitempty"`
+	FeesAndTaxes         *Price   `protobuf:"bytes,10,opt,name=fees_and_taxes,json=feesAndTaxes,proto3" json:"fees_and_taxes,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *PaymentInformation) Reset()                    { *m = PaymentInformation{} }
-func (m *PaymentInformation) String() string            { return proto.CompactTextString(m) }
-func (*PaymentInformation) ProtoMessage()               {}
-func (*PaymentInformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
+func (m *PaymentInformation) Reset()         { *m = PaymentInformation{} }
+func (m *PaymentInformation) String() string { return proto.CompactTextString(m) }
+func (*PaymentInformation) ProtoMessage()    {}
+func (*PaymentInformation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_PaymentInformation.Size(m)
+}
+func (m *PaymentInformation) XXX_DiscardUnknown() {
+	xxx_messageInfo_PaymentInformation.DiscardUnknown(m)
+}
+
+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,oneof"`
+	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,oneof"`
+	UserPaymentOptionId string `protobuf:"bytes,7,opt,name=user_payment_option_id,json=userPaymentOptionId,proto3,oneof"`
 }
 
 func (*PaymentInformation_PaymentOptionId) isPaymentInformation_PaymentId()     {}
@@ -1725,11 +3070,11 @@
 	// payment_id
 	switch x := m.PaymentId.(type) {
 	case *PaymentInformation_PaymentOptionId:
-		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.PaymentOptionId)))
 		n += len(x.PaymentOptionId)
 	case *PaymentInformation_UserPaymentOptionId:
-		n += proto.SizeVarint(7<<3 | proto.WireBytes)
+		n += 1 // tag and wire
 		n += proto.SizeVarint(uint64(len(x.UserPaymentOptionId)))
 		n += len(x.UserPaymentOptionId)
 	case nil:
@@ -1739,1365 +3084,694 @@
 	return n
 }
 
-// [START bookingfailure_definition]
-// Status data that conveys why (1) creating a lease or (2) creating or updating
-// a booking fails.
-// BookingFailure is intended to primarily capture business logic errors.
-type BookingFailure struct {
-	// The reason why the booking failed. (required)
-	Cause BookingFailure_Cause `protobuf:"varint,1,opt,name=cause,enum=v3.BookingFailure_Cause" json:"cause,omitempty"`
-	// (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
-	RejectedCardType CreditCardType `protobuf:"varint,2,opt,name=rejected_card_type,json=rejectedCardType,enum=v3.CreditCardType" json:"rejected_card_type,omitempty"`
-	// This optional field is used for the partner to include additional
-	// information for debugging purpose only. (optional)
-	Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"`
+// The price of a service or a fee.
+type Price struct {
+	// The price in micro-units of the currency.
+	// Fractions of smallest currency unit will be rounded using nearest even
+	// rounding. (e.g. For USD 2.5 cents rounded to 2 cents, 3.5 cents rounded to
+	// 4 cents, 0.5 cents rounded to 0 cents, 2.51 cents rounded to 3 cents).
+	// (required)
+	PriceMicros int64 `protobuf:"varint,1,opt,name=price_micros,json=priceMicros,proto3" json:"price_micros,omitempty"`
+	// The currency of the price that is defined in ISO 4217. (required)
+	CurrencyCode string `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
+	// An optional and opaque string that identifies the pricing option that is
+	// associated with the extended price. (optional)
+	PricingOptionTag     string   `protobuf:"bytes,3,opt,name=pricing_option_tag,json=pricingOptionTag,proto3" json:"pricing_option_tag,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
-func (m *BookingFailure) Reset()                    { *m = BookingFailure{} }
-func (m *BookingFailure) String() string            { return proto.CompactTextString(m) }
-func (*BookingFailure) ProtoMessage()               {}
-func (*BookingFailure) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
+func (m *Price) Reset()         { *m = Price{} }
+func (m *Price) String() string { return proto.CompactTextString(m) }
+func (*Price) ProtoMessage()    {}
+func (*Price) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_Price.Size(m)
+}
+func (m *Price) XXX_DiscardUnknown() {
+	xxx_messageInfo_Price.DiscardUnknown(m)
+}
 
-func (m *BookingFailure) GetCause() BookingFailure_Cause {
+var xxx_messageInfo_Price proto.InternalMessageInfo
+
+func (m *Price) GetPriceMicros() int64 {
 	if m != nil {
-		return m.Cause
-	}
-	return BookingFailure_CAUSE_UNSPECIFIED
-}
-
-func (m *BookingFailure) GetRejectedCardType() CreditCardType {
-	if m != nil {
-		return m.RejectedCardType
-	}
-	return CreditCardType_CREDIT_CARD_TYPE_UNSPECIFIED
-}
-
-func (m *BookingFailure) GetDescription() string {
-	if m != nil {
-		return m.Description
-	}
-	return ""
-}
-
-// [START message_slot_availability]
-// An inventory slot and associated count of open spots.
-type SlotAvailability struct {
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
-	// Number of available spots.
-	// 0 indicates that the appointment slot is not available. (required)
-	CountAvailable int32 `protobuf:"varint,2,opt,name=count_available,json=countAvailable" json:"count_available,omitempty"`
-}
-
-func (m *SlotAvailability) Reset()                    { *m = SlotAvailability{} }
-func (m *SlotAvailability) String() string            { return proto.CompactTextString(m) }
-func (*SlotAvailability) ProtoMessage()               {}
-func (*SlotAvailability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
-
-func (m *SlotAvailability) GetSlot() *Slot {
-	if m != nil {
-		return m.Slot
-	}
-	return nil
-}
-
-func (m *SlotAvailability) GetCountAvailable() int32 {
-	if m != nil {
-		return m.CountAvailable
+		return m.PriceMicros
 	}
 	return 0
 }
 
-// [START message_availability_update]
-// An update to one ore more slots indicating that the availability for the
-// associated time has potentially changed.
-type AvailabilityUpdate struct {
-	SlotAvailability []*SlotAvailability `protobuf:"bytes,1,rep,name=slot_availability,json=slotAvailability" json:"slot_availability,omitempty"`
+func (m *Price) GetCurrencyCode() string {
+	if m != nil {
+		return m.CurrencyCode
+	}
+	return ""
 }
 
-func (m *AvailabilityUpdate) Reset()                    { *m = AvailabilityUpdate{} }
-func (m *AvailabilityUpdate) String() string            { return proto.CompactTextString(m) }
-func (*AvailabilityUpdate) ProtoMessage()               {}
-func (*AvailabilityUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
-
-func (m *AvailabilityUpdate) GetSlotAvailability() []*SlotAvailability {
+func (m *Price) GetPricingOptionTag() string {
 	if m != nil {
-		return m.SlotAvailability
+		return m.PricingOptionTag
+	}
+	return ""
+}
+
+// A fee that a user may be charged if they have made a booking but do not
+// show up.
+type NoShowFee struct {
+	// The amount the user may be charged if they do not show up for their
+	// reservation.
+	Fee *Price `protobuf:"bytes,1,opt,name=fee,proto3" json:"fee,omitempty"`
+	// Defines how the fee is determined from the availability.
+	FeeType              PriceType `protobuf:"varint,3,opt,name=fee_type,json=feeType,proto3,enum=ext.maps.booking.partner.v3.PriceType" json:"fee_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
+}
+
+func (m *NoShowFee) Reset()         { *m = NoShowFee{} }
+func (m *NoShowFee) String() string { return proto.CompactTextString(m) }
+func (*NoShowFee) ProtoMessage()    {}
+func (*NoShowFee) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_NoShowFee.Size(m)
+}
+func (m *NoShowFee) XXX_DiscardUnknown() {
+	xxx_messageInfo_NoShowFee.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NoShowFee proto.InternalMessageInfo
+
+func (m *NoShowFee) GetFee() *Price {
+	if m != nil {
+		return m.Fee
 	}
 	return nil
 }
 
-// [START resources_definition]
-// Resource specification that disambiguates an appointment slot
-type ResourceIds struct {
-	// The staff ID as provided in the feed or empty if not applicable or no staff
-	// was selected. (optional)
-	StaffId string `protobuf:"bytes,1,opt,name=staff_id,json=staffId" json:"staff_id,omitempty"`
-	// The room ID as provided in the feed or empty if not applicable or no room
-	// was selected. (optional)
-	RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId" json:"room_id,omitempty"`
-	// For Dining Reservations only: the number of seats requested in the booking.
-	// (optional)
-	PartySize int32 `protobuf:"varint,3,opt,name=party_size,json=partySize" json:"party_size,omitempty"`
-}
-
-func (m *ResourceIds) Reset()                    { *m = ResourceIds{} }
-func (m *ResourceIds) String() string            { return proto.CompactTextString(m) }
-func (*ResourceIds) ProtoMessage()               {}
-func (*ResourceIds) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
-
-func (m *ResourceIds) GetStaffId() string {
+func (m *NoShowFee) GetFeeType() PriceType {
 	if m != nil {
-		return m.StaffId
+		return m.FeeType
 	}
-	return ""
+	return PriceType_FIXED_RATE_DEFAULT
 }
 
-func (m *ResourceIds) GetRoomId() string {
+// A deposit that the user may be charged or have a hold on their credit card
+// for.
+type Deposit struct {
+	// Deposit amount.
+	Deposit *Price `protobuf:"bytes,1,opt,name=deposit,proto3" json:"deposit,omitempty"`
+	// Minimum advance cancellation for the deposit.
+	MinAdvanceCancellationSec int64 `protobuf:"varint,2,opt,name=min_advance_cancellation_sec,json=minAdvanceCancellationSec,proto3" json:"min_advance_cancellation_sec,omitempty"`
+	// Defines how the deposit is determined from the availability.
+	DepositType          PriceType `protobuf:"varint,3,opt,name=deposit_type,json=depositType,proto3,enum=ext.maps.booking.partner.v3.PriceType" json:"deposit_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
+}
+
+func (m *Deposit) Reset()         { *m = Deposit{} }
+func (m *Deposit) String() string { return proto.CompactTextString(m) }
+func (*Deposit) ProtoMessage()    {}
+func (*Deposit) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_Deposit.Size(m)
+}
+func (m *Deposit) XXX_DiscardUnknown() {
+	xxx_messageInfo_Deposit.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Deposit proto.InternalMessageInfo
+
+func (m *Deposit) GetDeposit() *Price {
 	if m != nil {
-		return m.RoomId
+		return m.Deposit
 	}
-	return ""
+	return nil
 }
 
-func (m *ResourceIds) GetPartySize() int32 {
+func (m *Deposit) GetMinAdvanceCancellationSec() int64 {
 	if m != nil {
-		return m.PartySize
+		return m.MinAdvanceCancellationSec
 	}
 	return 0
 }
 
-// [START tickettype_definition]
-// TicketType is used to differentiate among tickets (where a ticket can be a
-// spot on a raft trip, an admission to a museum, etc.) with different prices
-// and/or availabilities due to different user types or different service
-// attributes.
-type TicketType struct {
-	// The ticket id is used to differentiate among different ticket types of the
-	// same service, and is only expected to be unique within a service.
-	TicketTypeId string `protobuf:"bytes,1,opt,name=ticket_type_id,json=ticketTypeId" json:"ticket_type_id,omitempty"`
-	// This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc.
-	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription" json:"short_description,omitempty"`
-	// The price of a single ticket of this type, exclusive of any taxes. The tax
-	// rate of Service is applied to its tickets.
-	Price *Price `protobuf:"bytes,3,opt,name=price" json:"price,omitempty"`
-}
-
-func (m *TicketType) Reset()                    { *m = TicketType{} }
-func (m *TicketType) String() string            { return proto.CompactTextString(m) }
-func (*TicketType) ProtoMessage()               {}
-func (*TicketType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
-
-func (m *TicketType) GetTicketTypeId() string {
+func (m *Deposit) GetDepositType() PriceType {
 	if m != nil {
-		return m.TicketTypeId
+		return m.DepositType
 	}
-	return ""
+	return PriceType_FIXED_RATE_DEFAULT
 }
 
-func (m *TicketType) GetShortDescription() string {
-	if m != nil {
-		return m.ShortDescription
-	}
-	return ""
-}
-
-func (m *TicketType) GetPrice() *Price {
-	if m != nil {
-		return m.Price
-	}
-	return nil
-}
-
-// [START lineitem_definition]
-// A single item in an order--the booking of a single service in a single time
-// slot.
-type LineItem struct {
-	// ID of the merchant service. (required)
-	ServiceId string `protobuf:"bytes,1,opt,name=service_id,json=serviceId" json:"service_id,omitempty"`
+// An inventory slot
+type Slot struct {
+	// ID of the merchant for the slot (required)
+	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId,proto3" json:"merchant_id,omitempty"`
+	// ID of the merchant Service (required)
+	ServiceId string `protobuf:"bytes,2,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"`
 	// Start time of the appointment slot in seconds of UTC time since Unix epoch.
 	// (required)
-	StartSec int64 `protobuf:"varint,2,opt,name=start_sec,json=startSec" json:"start_sec,omitempty"`
-	// Duration of the appointment slot in seconds. (required)
-	DurationSec int64 `protobuf:"varint,3,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
-	// Number of tickets ordered by type.
-	Tickets []*LineItem_OrderedTickets `protobuf:"bytes,4,rep,name=tickets" json:"tickets,omitempty"`
-	// In handling CreateOrderRequest and CheckOrderFulfillabilityRequest,
-	// the total price (excluding taxes) of the item must be verified to guard
-	// against price changes. In CreateOrderResponse and
-	// CheckOrderFulfillabilityResponse, the price should be updated to the
-	// correct value if the value from the request was incorrect or outdated.
-	// (reqired)
-	Price *Price `protobuf:"bytes,5,opt,name=price" json:"price,omitempty"`
-	// Status of the line item. (required in CreateOrderResponse and
-	// ListOrdersResponse; should not be set in requests)
-	Status BookingStatus `protobuf:"varint,6,opt,name=status,enum=v3.BookingStatus" json:"status,omitempty"`
+	StartSec int64 `protobuf:"varint,3,opt,name=start_sec,json=startSec,proto3" json:"start_sec,omitempty"`
+	// Duration of the appointment slot (required)
+	DurationSec int64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
+	// Opaque tag that identifies the availability slot and matches the value
+	// provided in the availability feed (optional)
+	AvailabilityTag string `protobuf:"bytes,5,opt,name=availability_tag,json=availabilityTag,proto3" json:"availability_tag,omitempty"`
+	// The set of resources that disambiguates the appointment slot, e.g. by
+	// indicating the staff member and room selected by the user (optional)
+	Resources            *ResourceIds `protobuf:"bytes,6,opt,name=resources,proto3" json:"resources,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
 }
 
-func (m *LineItem) Reset()                    { *m = LineItem{} }
-func (m *LineItem) String() string            { return proto.CompactTextString(m) }
-func (*LineItem) ProtoMessage()               {}
-func (*LineItem) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
+func (m *Slot) Reset()         { *m = Slot{} }
+func (m *Slot) String() string { return proto.CompactTextString(m) }
+func (*Slot) ProtoMessage()    {}
+func (*Slot) Descriptor() ([]byte, []int) {
+	return fileDescriptor_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_Slot.Size(m)
+}
+func (m *Slot) XXX_DiscardUnknown() {
+	xxx_messageInfo_Slot.DiscardUnknown(m)
+}
 
-func (m *LineItem) GetServiceId() string {
+var xxx_messageInfo_Slot proto.InternalMessageInfo
+
+func (m *Slot) GetMerchantId() string {
+	if m != nil {
+		return m.MerchantId
+	}
+	return ""
+}
+
+func (m *Slot) GetServiceId() string {
 	if m != nil {
 		return m.ServiceId
 	}
 	return ""
 }
 
-func (m *LineItem) GetStartSec() int64 {
+func (m *Slot) GetStartSec() int64 {
 	if m != nil {
 		return m.StartSec
 	}
 	return 0
 }
 
-func (m *LineItem) GetDurationSec() int64 {
+func (m *Slot) GetDurationSec() int64 {
 	if m != nil {
 		return m.DurationSec
 	}
 	return 0
 }
 
-func (m *LineItem) GetTickets() []*LineItem_OrderedTickets {
+func (m *Slot) GetAvailabilityTag() string {
 	if m != nil {
-		return m.Tickets
-	}
-	return nil
-}
-
-func (m *LineItem) GetPrice() *Price {
-	if m != nil {
-		return m.Price
-	}
-	return nil
-}
-
-func (m *LineItem) GetStatus() BookingStatus {
-	if m != nil {
-		return m.Status
-	}
-	return BookingStatus_BOOKING_STATUS_UNSPECIFIED
-}
-
-type LineItem_OrderedTickets struct {
-	TicketId string `protobuf:"bytes,1,opt,name=ticket_id,json=ticketId" json:"ticket_id,omitempty"`
-	Count    int32  `protobuf:"varint,2,opt,name=count" json:"count,omitempty"`
-}
-
-func (m *LineItem_OrderedTickets) Reset()                    { *m = LineItem_OrderedTickets{} }
-func (m *LineItem_OrderedTickets) String() string            { return proto.CompactTextString(m) }
-func (*LineItem_OrderedTickets) ProtoMessage()               {}
-func (*LineItem_OrderedTickets) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24, 0} }
-
-func (m *LineItem_OrderedTickets) GetTicketId() string {
-	if m != nil {
-		return m.TicketId
+		return m.AvailabilityTag
 	}
 	return ""
 }
 
-func (m *LineItem_OrderedTickets) GetCount() int32 {
+func (m *Slot) GetResources() *ResourceIds {
 	if m != nil {
-		return m.Count
+		return m.Resources
 	}
-	return 0
+	return nil
 }
 
-// [START lineitemfulfillability_definition]
-// Fulfillability of a line item.
-type LineItemFulfillability struct {
-	// The line item of question. (required)
-	Item *LineItem `protobuf:"bytes,1,opt,name=item" json:"item,omitempty"`
+// 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)
-	Result LineItemFulfillability_ItemFulfillabilityResult `protobuf:"varint,2,opt,name=result,enum=v3.LineItemFulfillability_ItemFulfillabilityResult" json:"result,omitempty"`
-	// Additional description of the reason if the item is unfulfillable.
-	// (optional)
-	UnfulfillableReason string `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason" json:"unfulfillable_reason,omitempty"`
-	// Updated availability for this slot can be piggybacked in
-	// CheckOrderFulfillabilityResponse. (optional)
-	SpotsOpen int32 `protobuf:"varint,4,opt,name=spots_open,json=spotsOpen" json:"spots_open,omitempty"`
-	// Updated ticket types can be piggybacked in
-	// CheckOrderFulfillabilityResponse. If non-empty, all available ticket types
-	// for this slot with up-to-date prices should be listed without omitting any.
-	// (optional)
-	TicketType []*TicketType `protobuf:"bytes,5,rep,name=ticket_type,json=ticketType" json:"ticket_type,omitempty"`
+	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 *LineItemFulfillability) Reset()                    { *m = LineItemFulfillability{} }
-func (m *LineItemFulfillability) String() string            { return proto.CompactTextString(m) }
-func (*LineItemFulfillability) ProtoMessage()               {}
-func (*LineItemFulfillability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
-
-func (m *LineItemFulfillability) GetItem() *LineItem {
-	if m != nil {
-		return m.Item
-	}
-	return nil
+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_v3_e164fdd8b81531d4, []int{38}
 }
-
-func (m *LineItemFulfillability) GetResult() LineItemFulfillability_ItemFulfillabilityResult {
-	if m != nil {
-		return m.Result
-	}
-	return LineItemFulfillability_ITEM_FULFILLABILITY_RESULT_UNSPECIFIED
+func (m *UserInformation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UserInformation.Unmarshal(m, b)
 }
-
-func (m *LineItemFulfillability) GetUnfulfillableReason() string {
-	if m != nil {
-		return m.UnfulfillableReason
-	}
-	return ""
+func (m *UserInformation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UserInformation.Marshal(b, m, deterministic)
 }
-
-func (m *LineItemFulfillability) GetSpotsOpen() int32 {
-	if m != nil {
-		return m.SpotsOpen
-	}
-	return 0
+func (dst *UserInformation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UserInformation.Merge(dst, src)
 }
-
-func (m *LineItemFulfillability) GetTicketType() []*TicketType {
-	if m != nil {
-		return m.TicketType
-	}
-	return nil
+func (m *UserInformation) XXX_Size() int {
+	return xxx_messageInfo_UserInformation.Size(m)
 }
-
-// [START orderfulfillability_definition]
-type OrderFulfillability struct {
-	Result OrderFulfillability_OrderFulfillabilityResult `protobuf:"varint,1,opt,name=result,enum=v3.OrderFulfillability_OrderFulfillabilityResult" json:"result,omitempty"`
-	// Fulfillability results of all line items in this order (required).
-	ItemFulfillability []*LineItemFulfillability `protobuf:"bytes,2,rep,name=item_fulfillability,json=itemFulfillability" json:"item_fulfillability,omitempty"`
-	// Additional description of the reason if the item is unfulfillable.
-	// (optional)
-	UnfulfillableReason string `protobuf:"bytes,3,opt,name=unfulfillable_reason,json=unfulfillableReason" json:"unfulfillable_reason,omitempty"`
+func (m *UserInformation) XXX_DiscardUnknown() {
+	xxx_messageInfo_UserInformation.DiscardUnknown(m)
 }
 
-func (m *OrderFulfillability) Reset()                    { *m = OrderFulfillability{} }
-func (m *OrderFulfillability) String() string            { return proto.CompactTextString(m) }
-func (*OrderFulfillability) ProtoMessage()               {}
-func (*OrderFulfillability) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
+var xxx_messageInfo_UserInformation proto.InternalMessageInfo
 
-func (m *OrderFulfillability) GetResult() OrderFulfillability_OrderFulfillabilityResult {
-	if m != nil {
-		return m.Result
-	}
-	return OrderFulfillability_ORDER_FULFILLABILITY_RESULT_UNSPECIFIED
-}
-
-func (m *OrderFulfillability) GetItemFulfillability() []*LineItemFulfillability {
-	if m != nil {
-		return m.ItemFulfillability
-	}
-	return nil
-}
-
-func (m *OrderFulfillability) GetUnfulfillableReason() string {
-	if m != nil {
-		return m.UnfulfillableReason
-	}
-	return ""
-}
-
-// [START order_definition]
-// An order for service appointments with a merchant.
-type Order struct {
-	// ID of this order, chosen by the booking partner who handles the order
-	// (required in CreateOrderResponse and ListOrdersResponse, must not be set in
-	// CreateOrderRequest)
-	OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId" json:"order_id,omitempty"`
-	// Personal information of the user making the order (required)
-	UserInformation *UserInformation `protobuf:"bytes,2,opt,name=user_information,json=userInformation" json:"user_information,omitempty"`
-	// Information about payment transactions that relate to the order.
-	// (optional)
-	PaymentInformation *PaymentInformation `protobuf:"bytes,3,opt,name=payment_information,json=paymentInformation" json:"payment_information,omitempty"`
-	// The merchant that all services in this order belong to.
-	MerchantId string `protobuf:"bytes,4,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
-	// Line items in this order.
-	Item []*LineItem `protobuf:"bytes,5,rep,name=item" json:"item,omitempty"`
-}
-
-func (m *Order) Reset()                    { *m = Order{} }
-func (m *Order) String() string            { return proto.CompactTextString(m) }
-func (*Order) ProtoMessage()               {}
-func (*Order) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
-
-func (m *Order) GetOrderId() string {
-	if m != nil {
-		return m.OrderId
-	}
-	return ""
-}
-
-func (m *Order) GetUserInformation() *UserInformation {
-	if m != nil {
-		return m.UserInformation
-	}
-	return nil
-}
-
-func (m *Order) GetPaymentInformation() *PaymentInformation {
-	if m != nil {
-		return m.PaymentInformation
-	}
-	return nil
-}
-
-func (m *Order) GetMerchantId() string {
-	if m != nil {
-		return m.MerchantId
-	}
-	return ""
-}
-
-func (m *Order) GetItem() []*LineItem {
-	if m != nil {
-		return m.Item
-	}
-	return nil
-}
-
-// [START orderfailure_definition]
-// Status data that conveys why creating an order fails.
-// OrderFailure is intended to primarily capture business logic errors.
-type OrderFailure struct {
-	// The reason why the order failed. (required)
-	Cause OrderFailure_Cause `protobuf:"varint,1,opt,name=cause,enum=v3.OrderFailure_Cause" json:"cause,omitempty"`
-	// (required only if cause is ORDER_UNFULFILLABLE)
-	Fulfillability *OrderFulfillability `protobuf:"bytes,2,opt,name=fulfillability" json:"fulfillability,omitempty"`
-	// (required only if cause is PAYMENT_ERROR_CARD_TYPE_REJECTED)
-	RejectedCardType CreditCardType `protobuf:"varint,3,opt,name=rejected_card_type,json=rejectedCardType,enum=v3.CreditCardType" json:"rejected_card_type,omitempty"`
-	// This optional field is used for the partner to include additional
-	// information for debugging purpose only. (optional)
-	Description string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"`
-}
-
-func (m *OrderFailure) Reset()                    { *m = OrderFailure{} }
-func (m *OrderFailure) String() string            { return proto.CompactTextString(m) }
-func (*OrderFailure) ProtoMessage()               {}
-func (*OrderFailure) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
-
-func (m *OrderFailure) GetCause() OrderFailure_Cause {
-	if m != nil {
-		return m.Cause
-	}
-	return OrderFailure_CAUSE_UNSPECIFIED
-}
-
-func (m *OrderFailure) GetFulfillability() *OrderFulfillability {
-	if m != nil {
-		return m.Fulfillability
-	}
-	return nil
-}
-
-func (m *OrderFailure) GetRejectedCardType() CreditCardType {
-	if m != nil {
-		return m.RejectedCardType
-	}
-	return CreditCardType_CREDIT_CARD_TYPE_UNSPECIFIED
-}
-
-func (m *OrderFailure) GetDescription() string {
-	if m != nil {
-		return m.Description
-	}
-	return ""
-}
-
-// [START method_check_availability]
-// Request to check availability for a Slot.
-type CheckAvailabilityRequest struct {
-	// The appointment slot that is being checked (required)
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
-}
-
-func (m *CheckAvailabilityRequest) Reset()                    { *m = CheckAvailabilityRequest{} }
-func (m *CheckAvailabilityRequest) String() string            { return proto.CompactTextString(m) }
-func (*CheckAvailabilityRequest) ProtoMessage()               {}
-func (*CheckAvailabilityRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
-
-func (m *CheckAvailabilityRequest) GetSlot() *Slot {
-	if m != nil {
-		return m.Slot
-	}
-	return nil
-}
-
-// Response for the CheckAvailability RPC with the availability of the
-// appointment slot.
-type CheckAvailabilityResponse struct {
-	// The requested slot. (required)
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
-	// Number of available spots.
-	// 0 indicates that the appointment slot is not available. (required)
-	CountAvailable int32 `protobuf:"varint,2,opt,name=count_available,json=countAvailable" json:"count_available,omitempty"`
-	// The requirement to show the slots duration and/or endtime. This field will
-	// be ignored if the slot is unavailable. (optional)
-	DurationRequirement CheckAvailabilityResponse_DurationRequirement `protobuf:"varint,3,opt,name=duration_requirement,json=durationRequirement,enum=v3.CheckAvailabilityResponse_DurationRequirement" json:"duration_requirement,omitempty"`
-	// Optionally, the partner can return additional updated information about the
-	// availability for this merchant if this information is present when
-	// responding to the CheckAvailabilityRequest and if there is no negative
-	// impact on the CheckAvailability request latency.
-	// For instance an entire day of merchant availability for a superset of
-	// resources can be returned here.
-	AvailabilityUpdate *AvailabilityUpdate `protobuf:"bytes,4,opt,name=availability_update,json=availabilityUpdate" json:"availability_update,omitempty"`
-}
-
-func (m *CheckAvailabilityResponse) Reset()                    { *m = CheckAvailabilityResponse{} }
-func (m *CheckAvailabilityResponse) String() string            { return proto.CompactTextString(m) }
-func (*CheckAvailabilityResponse) ProtoMessage()               {}
-func (*CheckAvailabilityResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
-
-func (m *CheckAvailabilityResponse) GetSlot() *Slot {
-	if m != nil {
-		return m.Slot
-	}
-	return nil
-}
-
-func (m *CheckAvailabilityResponse) GetCountAvailable() int32 {
-	if m != nil {
-		return m.CountAvailable
-	}
-	return 0
-}
-
-func (m *CheckAvailabilityResponse) GetDurationRequirement() CheckAvailabilityResponse_DurationRequirement {
-	if m != nil {
-		return m.DurationRequirement
-	}
-	return CheckAvailabilityResponse_DURATION_REQUIREMENT_UNSPECIFIED
-}
-
-func (m *CheckAvailabilityResponse) GetAvailabilityUpdate() *AvailabilityUpdate {
-	if m != nil {
-		return m.AvailabilityUpdate
-	}
-	return nil
-}
-
-// [START method_get_booking_status]
-// Request to get booking status and prepayment status for a Booking.
-type GetBookingStatusRequest struct {
-	// ID of the existing booking (required)
-	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId" json:"booking_id,omitempty"`
-}
-
-func (m *GetBookingStatusRequest) Reset()                    { *m = GetBookingStatusRequest{} }
-func (m *GetBookingStatusRequest) String() string            { return proto.CompactTextString(m) }
-func (*GetBookingStatusRequest) ProtoMessage()               {}
-func (*GetBookingStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
-
-func (m *GetBookingStatusRequest) GetBookingId() string {
-	if m != nil {
-		return m.BookingId
-	}
-	return ""
-}
-
-// Response for the GetBookingStatus RPC with booking status and prepayment
-// status.
-type GetBookingStatusResponse struct {
-	// ID of the booking (required)
-	BookingId string `protobuf:"bytes,1,opt,name=booking_id,json=bookingId" json:"booking_id,omitempty"`
-	// Status of the booking (required)
-	BookingStatus BookingStatus `protobuf:"varint,2,opt,name=booking_status,json=bookingStatus,enum=v3.BookingStatus" json:"booking_status,omitempty"`
-	// Prepayment status of the booking (required)
-	PrepaymentStatus PrepaymentStatus `protobuf:"varint,3,opt,name=prepayment_status,json=prepaymentStatus,enum=v3.PrepaymentStatus" json:"prepayment_status,omitempty"`
-}
-
-func (m *GetBookingStatusResponse) Reset()                    { *m = GetBookingStatusResponse{} }
-func (m *GetBookingStatusResponse) String() string            { return proto.CompactTextString(m) }
-func (*GetBookingStatusResponse) ProtoMessage()               {}
-func (*GetBookingStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
-
-func (m *GetBookingStatusResponse) GetBookingId() string {
-	if m != nil {
-		return m.BookingId
-	}
-	return ""
-}
-
-func (m *GetBookingStatusResponse) GetBookingStatus() BookingStatus {
-	if m != nil {
-		return m.BookingStatus
-	}
-	return BookingStatus_BOOKING_STATUS_UNSPECIFIED
-}
-
-func (m *GetBookingStatusResponse) GetPrepaymentStatus() PrepaymentStatus {
-	if m != nil {
-		return m.PrepaymentStatus
-	}
-	return PrepaymentStatus_PREPAYMENT_STATUS_UNSPECIFIED
-}
-
-// [START method_check_order_fulfillability]
-// Request to check the fulfillability of an order.
-type CheckOrderFulfillabilityRequest struct {
-	// The merchant that this order is intended for. (required)
-	MerchantId string `protobuf:"bytes,1,opt,name=merchant_id,json=merchantId" json:"merchant_id,omitempty"`
-	// The line items in this order. All services requested must belong to the
-	// specified merchant. (required)
-	Item []*LineItem `protobuf:"bytes,2,rep,name=item" json:"item,omitempty"`
-}
-
-func (m *CheckOrderFulfillabilityRequest) Reset()         { *m = CheckOrderFulfillabilityRequest{} }
-func (m *CheckOrderFulfillabilityRequest) String() string { return proto.CompactTextString(m) }
-func (*CheckOrderFulfillabilityRequest) ProtoMessage()    {}
-func (*CheckOrderFulfillabilityRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{33}
-}
-
-func (m *CheckOrderFulfillabilityRequest) GetMerchantId() string {
-	if m != nil {
-		return m.MerchantId
-	}
-	return ""
-}
-
-func (m *CheckOrderFulfillabilityRequest) GetItem() []*LineItem {
-	if m != nil {
-		return m.Item
-	}
-	return nil
-}
-
-// Response for the CheckOrderfulfillabilityRequest.
-type CheckOrderFulfillabilityResponse struct {
-	// Fulfillability status of the order, potentially contains updated
-	// availabilities and prices of the requested line item. (required)
-	Fulfillability *OrderFulfillability `protobuf:"bytes,1,opt,name=fulfillability" json:"fulfillability,omitempty"`
-	// Total processing fees & taxes that need to be paid for this order.
-	// (required)
-	FeesAndTaxes *Price `protobuf:"bytes,2,opt,name=fees_and_taxes,json=feesAndTaxes" json:"fees_and_taxes,omitempty"`
-}
-
-func (m *CheckOrderFulfillabilityResponse) Reset()         { *m = CheckOrderFulfillabilityResponse{} }
-func (m *CheckOrderFulfillabilityResponse) String() string { return proto.CompactTextString(m) }
-func (*CheckOrderFulfillabilityResponse) ProtoMessage()    {}
-func (*CheckOrderFulfillabilityResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{34}
-}
-
-func (m *CheckOrderFulfillabilityResponse) GetFulfillability() *OrderFulfillability {
-	if m != nil {
-		return m.Fulfillability
-	}
-	return nil
-}
-
-func (m *CheckOrderFulfillabilityResponse) GetFeesAndTaxes() *Price {
-	if m != nil {
-		return m.FeesAndTaxes
-	}
-	return nil
-}
-
-// [START method_create_booking]
-// Request to create a Booking for an inventory slot. Consumes the lease if
-// provided.
-type CreateBookingRequest struct {
-	// The inventory slot that is being requested to make this booking.
-	// If lease_ref is provided, slot must match the lease; slot is provided for
-	// the partner to verify the lease information.
-	// If lease_ref is absent, then create the booking for the slot. (required)
-	Slot *Slot `protobuf:"bytes,1,opt,name=slot" json:"slot,omitempty"`
-	// The lease that is being confirmed to make this booking.
-	// If lease_ref is provided, then create the booking using the lease.
-	// (optional)
-	LeaseRef *LeaseReference `protobuf:"bytes,2,opt,name=lease_ref,json=leaseRef" json:"lease_ref,omitempty"`
-	// Personal information of the user making the appointment (required)
-	UserInformation *UserInformation `protobuf:"bytes,3,opt,name=user_information,json=userInformation" json:"user_information,omitempty"`
-	// Information about payments. When payment authorizations are handled by
-	// Google, if the booking request does not succeed, payment authorizations are
-	// automatically canceled. (optional)
-	PaymentInformation *PaymentInformation `protobuf:"bytes,4,opt,name=payment_information,json=paymentInformation" json:"payment_information,omitempty"`
-	// 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 *PaymentProcessingParameters `protobuf:"bytes,5,opt,name=payment_processing_parameters,json=paymentProcessingParameters" json:"payment_processing_parameters,omitempty"`
-	// Idempotency token for CreateBooking requests. (required)
-	IdempotencyToken string `protobuf:"bytes,6,opt,name=idempotency_token,json=idempotencyToken" json:"idempotency_token,omitempty"`
-	// A string from the user which contains any special requests or additional
-	// information that they would like to notify the merchant about. (optional)
-	AdditionalRequest string `protobuf:"bytes,7,opt,name=additional_request,json=additionalRequest" json:"additional_request,omitempty"`
-}
-
-func (m *CreateBookingRequest) Reset()                    { *m = CreateBookingRequest{} }
-func (m *CreateBookingRequest) String() string            { return proto.CompactTextString(m) }
-func (*CreateBookingRequest) ProtoMessage()               {}
-func (*CreateBookingRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
-
-func (m *CreateBookingRequest) GetSlot() *Slot {
-	if m != nil {
-		return m.Slot
-	}
-	return nil
-}
-
-func (m *CreateBookingRequest) GetLeaseRef() *LeaseReference {
-	if m != nil {
-		return m.LeaseRef
-	}
-	return nil
-}
-
-func (m *CreateBookingRequest) GetUserInformation() *UserInformation {
-	if m != nil {
-		return m.UserInformation
-	}
-	return nil
-}
-
-func (m *CreateBookingRequest) GetPaymentInformation() *PaymentInformation {
-	if m != nil {
-		return m.PaymentInformation
-	}
-	return nil
-}
-
-func (m *CreateBookingRequest) GetPaymentProcessingParameters() *PaymentProcessingParameters {
-	if m != nil {
-		return m.PaymentProcessingParameters
-	}
-	return nil
-}
-
-func (m *CreateBookingRequest) GetIdempotencyToken() string {
-	if m != nil {
-		return m.IdempotencyToken
-	}
-	return ""
-}
-
-func (m *CreateBookingRequest) GetAdditionalRequest() string {
-	if m != nil {
-		return m.AdditionalRequest
-	}
-	return ""
-}
-
-// Response with the created Booking for an inventory slot.
-type CreateBookingResponse struct {
-	// The created booking (required)
-	Booking *Booking `protobuf:"bytes,1,opt,name=booking" json:"booking,omitempty"`
-	// The updated user payment option used in this booking.
-	// If a new payment option was purchased to pay for the booking, this should
-	// be a newly created user payment option.
-	// If an already purchased user payment option was used for this booking,
-	// this should reflect an updated version of that user payment option.
-	// (optional)
-	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption" json:"user_payment_option,omitempty"`
-	// If creating a booking fails, this field should reflect the business logic
-	// error (e.g., slot has become unavailable) and all other fields in the
-	// CreateBookingResponse message are expected to be unset. (required if
-	// failure occurs)
-	BookingFailure *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure" json:"booking_failure,omitempty"`
-}
-
-func (m *CreateBookingResponse) Reset()                    { *m = CreateBookingResponse{} }
-func (m *CreateBookingResponse) String() string            { return proto.CompactTextString(m) }
-func (*CreateBookingResponse) ProtoMessage()               {}
-func (*CreateBookingResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
-
-func (m *CreateBookingResponse) GetBooking() *Booking {
-	if m != nil {
-		return m.Booking
-	}
-	return nil
-}
-
-func (m *CreateBookingResponse) GetUserPaymentOption() *UserPaymentOption {
-	if m != nil {
-		return m.UserPaymentOption
-	}
-	return nil
-}
-
-func (m *CreateBookingResponse) GetBookingFailure() *BookingFailure {
-	if m != nil {
-		return m.BookingFailure
-	}
-	return nil
-}
-
-// [START method_create_order]
-// Request to create an order.
-type CreateOrderRequest struct {
-	// The order to create. (required)
-	Order *Order `protobuf:"bytes,1,opt,name=order" json:"order,omitempty"`
-	// The parameters to be used if the payment is processed by the partner
-	// (i.e. order.payment_information.payment_processed_by is equal to
-	// PROCESSED_BY_PARTNER). (required if payment is processed by the partner)
-	PaymentProcessingParameters *PaymentProcessingParameters `protobuf:"bytes,2,opt,name=payment_processing_parameters,json=paymentProcessingParameters" json:"payment_processing_parameters,omitempty"`
-	// Idempotency token for CreateOrder requests. (required)
-	IdempotencyToken string `protobuf:"bytes,3,opt,name=idempotency_token,json=idempotencyToken" json:"idempotency_token,omitempty"`
-}
-
-func (m *CreateOrderRequest) Reset()                    { *m = CreateOrderRequest{} }
-func (m *CreateOrderRequest) String() string            { return proto.CompactTextString(m) }
-func (*CreateOrderRequest) ProtoMessage()               {}
-func (*CreateOrderRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
-
-func (m *CreateOrderRequest) GetOrder() *Order {
-	if m != nil {
-		return m.Order
-	}
-	return nil
-}
-
-func (m *CreateOrderRequest) GetPaymentProcessingParameters() *PaymentProcessingParameters {
-	if m != nil {
-		return m.PaymentProcessingParameters
-	}
-	return nil
-}
-
-func (m *CreateOrderRequest) GetIdempotencyToken() string {
-	if m != nil {
-		return m.IdempotencyToken
-	}
-	return ""
-}
-
-// Response for the CreateOrderRequest.
-type CreateOrderResponse struct {
-	// The order created. (required)
-	Order *Order `protobuf:"bytes,1,opt,name=order" json:"order,omitempty"`
-	// If creating an order fails, this field should reflect the business logic
-	// error (e.g., slot has become unavailable or price has changed) and all
-	// other fields in the CreateOrderResponse are expected to be unset. (required
-	// if failure occurs)
-	OrderFailure *OrderFailure `protobuf:"bytes,2,opt,name=order_failure,json=orderFailure" json:"order_failure,omitempty"`
-}
-
-func (m *CreateOrderResponse) Reset()                    { *m = CreateOrderResponse{} }
-func (m *CreateOrderResponse) String() string            { return proto.CompactTextString(m) }
-func (*CreateOrderResponse) ProtoMessage()               {}
-func (*CreateOrderResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
-
-func (m *CreateOrderResponse) GetOrder() *Order {
-	if m != nil {
-		return m.Order
-	}
-	return nil
-}
-
-func (m *CreateOrderResponse) GetOrderFailure() *OrderFailure {
-	if m != nil {
-		return m.OrderFailure
-	}
-	return nil
-}
-
-// [START method_create_lease]
-// Request to create a Leaese for a slot in the inventory.  The expiration time
-// in the returned Lease may be modified by the backend, e.g. if the requested
-// lease period is too long.
-type CreateLeaseRequest struct {
-	// The lease to be created with information about the appointment slot
-	// (required)
-	Lease *Lease `protobuf:"bytes,1,opt,name=lease" json:"lease,omitempty"`
-}
-
-func (m *CreateLeaseRequest) Reset()                    { *m = CreateLeaseRequest{} }
-func (m *CreateLeaseRequest) String() string            { return proto.CompactTextString(m) }
-func (*CreateLeaseRequest) ProtoMessage()               {}
-func (*CreateLeaseRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
-
-func (m *CreateLeaseRequest) GetLease() *Lease {
-	if m != nil {
-		return m.Lease
-	}
-	return nil
-}
-
-// Response for the CreateLease RPC with the created Lease.
-type CreateLeaseResponse struct {
-	// The created Lease (required)
-	Lease *Lease `protobuf:"bytes,1,opt,name=lease" json:"lease,omitempty"`
-	// If creating a lease fails, this field should reflect the business logic
-	// error (e.g., slot has become unavailable) and lease field is expected to be
-	// unset. (required if failure occurs)
-	BookingFailure *BookingFailure `protobuf:"bytes,2,opt,name=booking_failure,json=bookingFailure" json:"booking_failure,omitempty"`
-}
-
-func (m *CreateLeaseResponse) Reset()                    { *m = CreateLeaseResponse{} }
-func (m *CreateLeaseResponse) String() string            { return proto.CompactTextString(m) }
-func (*CreateLeaseResponse) ProtoMessage()               {}
-func (*CreateLeaseResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
-
-func (m *CreateLeaseResponse) GetLease() *Lease {
-	if m != nil {
-		return m.Lease
-	}
-	return nil
-}
-
-func (m *CreateLeaseResponse) GetBookingFailure() *BookingFailure {
-	if m != nil {
-		return m.BookingFailure
-	}
-	return nil
-}
-
-// [START method_list_bookings]
-// Request to list all bookings for a user
-type ListBookingsRequest struct {
-	// ID of the user (required)
-	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId" json:"user_id,omitempty"`
-}
-
-func (m *ListBookingsRequest) Reset()                    { *m = ListBookingsRequest{} }
-func (m *ListBookingsRequest) String() string            { return proto.CompactTextString(m) }
-func (*ListBookingsRequest) ProtoMessage()               {}
-func (*ListBookingsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
-
-func (m *ListBookingsRequest) GetUserId() string {
+func (m *UserInformation) GetUserId() string {
 	if m != nil {
 		return m.UserId
 	}
 	return ""
 }
 
-// Response for the ListBookings RPC with all bookings for the requested user.
-type ListBookingsResponse struct {
-	// All bookings of the user (required)
-	Bookings []*Booking `protobuf:"bytes,1,rep,name=bookings" json:"bookings,omitempty"`
-}
-
-func (m *ListBookingsResponse) Reset()                    { *m = ListBookingsResponse{} }
-func (m *ListBookingsResponse) String() string            { return proto.CompactTextString(m) }
-func (*ListBookingsResponse) ProtoMessage()               {}
-func (*ListBookingsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
-
-func (m *ListBookingsResponse) GetBookings() []*Booking {
+func (m *UserInformation) GetGivenName() string {
 	if m != nil {
-		return m.Bookings
-	}
-	return nil
-}
-
-// [START method_list_orders]
-// Request to list orders.
-type ListOrdersRequest struct {
-	// ID of the user (required only if order_id is not set).
-	UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId" json:"user_id,omitempty"`
-	// If set, return only the specified orders; otherwise, return all orders of
-	// the user. (required only if user_id is not set).
-	OrderId []string `protobuf:"bytes,2,rep,name=order_id,json=orderId" json:"order_id,omitempty"`
-}
-
-func (m *ListOrdersRequest) Reset()                    { *m = ListOrdersRequest{} }
-func (m *ListOrdersRequest) String() string            { return proto.CompactTextString(m) }
-func (*ListOrdersRequest) ProtoMessage()               {}
-func (*ListOrdersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
-
-func (m *ListOrdersRequest) GetUserId() string {
-	if m != nil {
-		return m.UserId
+		return m.GivenName
 	}
 	return ""
 }
 
-func (m *ListOrdersRequest) GetOrderId() []string {
+func (m *UserInformation) GetFamilyName() string {
 	if m != nil {
-		return m.OrderId
+		return m.FamilyName
+	}
+	return ""
+}
+
+func (m *UserInformation) GetAddress() *PostalAddress {
+	if m != nil {
+		return m.Address
 	}
 	return nil
 }
 
-// Response for the ListOrders RPC.
-type ListOrdersResponse struct {
-	// All requested orders (required)
-	Order []*Order `protobuf:"bytes,1,rep,name=order" json:"order,omitempty"`
-}
-
-func (m *ListOrdersResponse) Reset()                    { *m = ListOrdersResponse{} }
-func (m *ListOrdersResponse) String() string            { return proto.CompactTextString(m) }
-func (*ListOrdersResponse) ProtoMessage()               {}
-func (*ListOrdersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }
-
-func (m *ListOrdersResponse) GetOrder() []*Order {
+func (m *UserInformation) GetTelephone() string {
 	if m != nil {
-		return m.Order
+		return m.Telephone
 	}
-	return nil
+	return ""
 }
 
-// [START method_update_booking]
-// Request to update a Booking.
-type UpdateBookingRequest struct {
-	// The booking to be updated
-	// The following fields can be set in a booking:
-	// - status, to cancel a booking.
-	// - start_time and duration in the slot, to reschedule a booking. (required)
-	Booking *Booking `protobuf:"bytes,1,opt,name=booking" json:"booking,omitempty"`
-}
-
-func (m *UpdateBookingRequest) Reset()                    { *m = UpdateBookingRequest{} }
-func (m *UpdateBookingRequest) String() string            { return proto.CompactTextString(m) }
-func (*UpdateBookingRequest) ProtoMessage()               {}
-func (*UpdateBookingRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} }
-
-func (m *UpdateBookingRequest) GetBooking() *Booking {
+func (m *UserInformation) GetEmail() string {
 	if m != nil {
-		return m.Booking
+		return m.Email
 	}
-	return nil
+	return ""
 }
 
-// Response with the updated Booking.
-type UpdateBookingResponse struct {
-	// The updated booking (required)
-	Booking *Booking `protobuf:"bytes,1,opt,name=booking" json:"booking,omitempty"`
-	// The updated user payment option originally used to pay for this booking.
-	// This should be set if the UpdateBookingRequest results in a change to
-	// the UserPaymentOption.
-	// For instance, if the booking is canceled, the UserPaymentOption should
-	// reflect an additional credit to the user. In the case of a multi-use
-	// payment option, the current_count should be increased by one to
-	// allow the user to create another booking with this payment option. In the
-	// case of a single-use payment option, a new single-use user payment option
-	// should be returned. (required if altered in update)
-	UserPaymentOption *UserPaymentOption `protobuf:"bytes,2,opt,name=user_payment_option,json=userPaymentOption" json:"user_payment_option,omitempty"`
-	// If updating a booking fails, this field should reflect the business logic
-	// error (e.g., booking is not cancellable) (required if failure occurs)
-	BookingFailure *BookingFailure `protobuf:"bytes,3,opt,name=booking_failure,json=bookingFailure" json:"booking_failure,omitempty"`
+// 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 *UpdateBookingResponse) Reset()                    { *m = UpdateBookingResponse{} }
-func (m *UpdateBookingResponse) String() string            { return proto.CompactTextString(m) }
-func (*UpdateBookingResponse) ProtoMessage()               {}
-func (*UpdateBookingResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} }
+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_v3_e164fdd8b81531d4, []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_Size() int {
+	return xxx_messageInfo_PostalAddress.Size(m)
+}
+func (m *PostalAddress) XXX_DiscardUnknown() {
+	xxx_messageInfo_PostalAddress.DiscardUnknown(m)
+}
 
-func (m *UpdateBookingResponse) GetBooking() *Booking {
+var xxx_messageInfo_PostalAddress proto.InternalMessageInfo
+
+func (m *PostalAddress) GetCountry() string {
 	if m != nil {
-		return m.Booking
+		return m.Country
 	}
-	return nil
+	return ""
 }
 
-func (m *UpdateBookingResponse) GetUserPaymentOption() *UserPaymentOption {
+func (m *PostalAddress) GetLocality() string {
 	if m != nil {
-		return m.UserPaymentOption
+		return m.Locality
 	}
-	return nil
+	return ""
 }
 
-func (m *UpdateBookingResponse) GetBookingFailure() *BookingFailure {
+func (m *PostalAddress) GetRegion() string {
 	if m != nil {
-		return m.BookingFailure
+		return m.Region
 	}
-	return nil
+	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((*PostalAddress)(nil), "v3.PostalAddress")
-	proto.RegisterType((*GeoCoordinates)(nil), "v3.GeoCoordinates")
-	proto.RegisterType((*Price)(nil), "v3.Price")
-	proto.RegisterType((*TaxRate)(nil), "v3.TaxRate")
-	proto.RegisterType((*SchedulingRules)(nil), "v3.SchedulingRules")
-	proto.RegisterType((*IngestionQueuePayload)(nil), "v3.IngestionQueuePayload")
-	proto.RegisterType((*IngestionStatus)(nil), "v3.IngestionStatus")
-	proto.RegisterType((*TimeRange)(nil), "v3.TimeRange")
-	proto.RegisterType((*NoShowFee)(nil), "v3.NoShowFee")
-	proto.RegisterType((*Deposit)(nil), "v3.Deposit")
-	proto.RegisterType((*ActionLink)(nil), "v3.ActionLink")
-	proto.RegisterType((*Slot)(nil), "v3.Slot")
-	proto.RegisterType((*Lease)(nil), "v3.Lease")
-	proto.RegisterType((*LeaseReference)(nil), "v3.LeaseReference")
-	proto.RegisterType((*Booking)(nil), "v3.Booking")
-	proto.RegisterType((*UserInformation)(nil), "v3.UserInformation")
-	proto.RegisterType((*PaymentProcessingParameters)(nil), "v3.PaymentProcessingParameters")
-	proto.RegisterType((*UserPaymentOption)(nil), "v3.UserPaymentOption")
-	proto.RegisterType((*PaymentInformation)(nil), "v3.PaymentInformation")
-	proto.RegisterType((*BookingFailure)(nil), "v3.BookingFailure")
-	proto.RegisterType((*SlotAvailability)(nil), "v3.SlotAvailability")
-	proto.RegisterType((*AvailabilityUpdate)(nil), "v3.AvailabilityUpdate")
-	proto.RegisterType((*ResourceIds)(nil), "v3.ResourceIds")
-	proto.RegisterType((*TicketType)(nil), "v3.TicketType")
-	proto.RegisterType((*LineItem)(nil), "v3.LineItem")
-	proto.RegisterType((*LineItem_OrderedTickets)(nil), "v3.LineItem.OrderedTickets")
-	proto.RegisterType((*LineItemFulfillability)(nil), "v3.LineItemFulfillability")
-	proto.RegisterType((*OrderFulfillability)(nil), "v3.OrderFulfillability")
-	proto.RegisterType((*Order)(nil), "v3.Order")
-	proto.RegisterType((*OrderFailure)(nil), "v3.OrderFailure")
-	proto.RegisterType((*CheckAvailabilityRequest)(nil), "v3.CheckAvailabilityRequest")
-	proto.RegisterType((*CheckAvailabilityResponse)(nil), "v3.CheckAvailabilityResponse")
-	proto.RegisterType((*GetBookingStatusRequest)(nil), "v3.GetBookingStatusRequest")
-	proto.RegisterType((*GetBookingStatusResponse)(nil), "v3.GetBookingStatusResponse")
-	proto.RegisterType((*CheckOrderFulfillabilityRequest)(nil), "v3.CheckOrderFulfillabilityRequest")
-	proto.RegisterType((*CheckOrderFulfillabilityResponse)(nil), "v3.CheckOrderFulfillabilityResponse")
-	proto.RegisterType((*CreateBookingRequest)(nil), "v3.CreateBookingRequest")
-	proto.RegisterType((*CreateBookingResponse)(nil), "v3.CreateBookingResponse")
-	proto.RegisterType((*CreateOrderRequest)(nil), "v3.CreateOrderRequest")
-	proto.RegisterType((*CreateOrderResponse)(nil), "v3.CreateOrderResponse")
-	proto.RegisterType((*CreateLeaseRequest)(nil), "v3.CreateLeaseRequest")
-	proto.RegisterType((*CreateLeaseResponse)(nil), "v3.CreateLeaseResponse")
-	proto.RegisterType((*ListBookingsRequest)(nil), "v3.ListBookingsRequest")
-	proto.RegisterType((*ListBookingsResponse)(nil), "v3.ListBookingsResponse")
-	proto.RegisterType((*ListOrdersRequest)(nil), "v3.ListOrdersRequest")
-	proto.RegisterType((*ListOrdersResponse)(nil), "v3.ListOrdersResponse")
-	proto.RegisterType((*UpdateBookingRequest)(nil), "v3.UpdateBookingRequest")
-	proto.RegisterType((*UpdateBookingResponse)(nil), "v3.UpdateBookingResponse")
-	proto.RegisterEnum("v3.IngestionSource", IngestionSource_name, IngestionSource_value)
-	proto.RegisterEnum("v3.ContentType", ContentType_name, ContentType_value)
-	proto.RegisterEnum("v3.PriceType", PriceType_name, PriceType_value)
-	proto.RegisterEnum("v3.RequireCreditCard", RequireCreditCard_name, RequireCreditCard_value)
-	proto.RegisterEnum("v3.PaymentOptionType", PaymentOptionType_name, PaymentOptionType_value)
-	proto.RegisterEnum("v3.BookingStatus", BookingStatus_name, BookingStatus_value)
-	proto.RegisterEnum("v3.CreditCardType", CreditCardType_name, CreditCardType_value)
-	proto.RegisterEnum("v3.PrepaymentStatus", PrepaymentStatus_name, PrepaymentStatus_value)
-	proto.RegisterEnum("v3.IngestionStatus_Code", IngestionStatus_Code_name, IngestionStatus_Code_value)
-	proto.RegisterEnum("v3.PaymentProcessingParameters_PaymentProcessor", PaymentProcessingParameters_PaymentProcessor_name, PaymentProcessingParameters_PaymentProcessor_value)
-	proto.RegisterEnum("v3.PaymentInformation_PaymentProcessedBy", PaymentInformation_PaymentProcessedBy_name, PaymentInformation_PaymentProcessedBy_value)
-	proto.RegisterEnum("v3.BookingFailure_Cause", BookingFailure_Cause_name, BookingFailure_Cause_value)
-	proto.RegisterEnum("v3.LineItemFulfillability_ItemFulfillabilityResult", LineItemFulfillability_ItemFulfillabilityResult_name, LineItemFulfillability_ItemFulfillabilityResult_value)
-	proto.RegisterEnum("v3.OrderFulfillability_OrderFulfillabilityResult", OrderFulfillability_OrderFulfillabilityResult_name, OrderFulfillability_OrderFulfillabilityResult_value)
-	proto.RegisterEnum("v3.OrderFailure_Cause", OrderFailure_Cause_name, OrderFailure_Cause_value)
-	proto.RegisterEnum("v3.CheckAvailabilityResponse_DurationRequirement", CheckAvailabilityResponse_DurationRequirement_name, CheckAvailabilityResponse_DurationRequirement_value)
+	proto.RegisterType((*CheckAvailabilityRequest)(nil), "ext.maps.booking.partner.v3.CheckAvailabilityRequest")
+	proto.RegisterType((*CheckAvailabilityResponse)(nil), "ext.maps.booking.partner.v3.CheckAvailabilityResponse")
+	proto.RegisterType((*AvailabilityUpdate)(nil), "ext.maps.booking.partner.v3.AvailabilityUpdate")
+	proto.RegisterType((*SlotAvailability)(nil), "ext.maps.booking.partner.v3.SlotAvailability")
+	proto.RegisterType((*CheckOrderFulfillabilityRequest)(nil), "ext.maps.booking.partner.v3.CheckOrderFulfillabilityRequest")
+	proto.RegisterType((*CheckOrderFulfillabilityResponse)(nil), "ext.maps.booking.partner.v3.CheckOrderFulfillabilityResponse")
+	proto.RegisterType((*GetBookingStatusRequest)(nil), "ext.maps.booking.partner.v3.GetBookingStatusRequest")
+	proto.RegisterType((*GetBookingStatusResponse)(nil), "ext.maps.booking.partner.v3.GetBookingStatusResponse")
+	proto.RegisterType((*CreateBookingRequest)(nil), "ext.maps.booking.partner.v3.CreateBookingRequest")
+	proto.RegisterType((*CreateBookingResponse)(nil), "ext.maps.booking.partner.v3.CreateBookingResponse")
+	proto.RegisterType((*CreateLeaseRequest)(nil), "ext.maps.booking.partner.v3.CreateLeaseRequest")
+	proto.RegisterType((*CreateLeaseResponse)(nil), "ext.maps.booking.partner.v3.CreateLeaseResponse")
+	proto.RegisterType((*Lease)(nil), "ext.maps.booking.partner.v3.Lease")
+	proto.RegisterType((*LeaseReference)(nil), "ext.maps.booking.partner.v3.LeaseReference")
+	proto.RegisterType((*CreateOrderRequest)(nil), "ext.maps.booking.partner.v3.CreateOrderRequest")
+	proto.RegisterType((*CreateOrderResponse)(nil), "ext.maps.booking.partner.v3.CreateOrderResponse")
+	proto.RegisterType((*ListBookingsRequest)(nil), "ext.maps.booking.partner.v3.ListBookingsRequest")
+	proto.RegisterType((*ListBookingsResponse)(nil), "ext.maps.booking.partner.v3.ListBookingsResponse")
+	proto.RegisterType((*ListOrdersRequest)(nil), "ext.maps.booking.partner.v3.ListOrdersRequest")
+	proto.RegisterType((*ListOrdersRequest_OrderIds)(nil), "ext.maps.booking.partner.v3.ListOrdersRequest.OrderIds")
+	proto.RegisterType((*ListOrdersResponse)(nil), "ext.maps.booking.partner.v3.ListOrdersResponse")
+	proto.RegisterType((*UpdateBookingRequest)(nil), "ext.maps.booking.partner.v3.UpdateBookingRequest")
+	proto.RegisterType((*UpdateBookingResponse)(nil), "ext.maps.booking.partner.v3.UpdateBookingResponse")
+	proto.RegisterType((*Booking)(nil), "ext.maps.booking.partner.v3.Booking")
+	proto.RegisterType((*BookingFailure)(nil), "ext.maps.booking.partner.v3.BookingFailure")
+	proto.RegisterType((*Order)(nil), "ext.maps.booking.partner.v3.Order")
+	proto.RegisterType((*LineItem)(nil), "ext.maps.booking.partner.v3.LineItem")
+	proto.RegisterType((*LineItem_OrderedTickets)(nil), "ext.maps.booking.partner.v3.LineItem.OrderedTickets")
+	proto.RegisterType((*OrderFailure)(nil), "ext.maps.booking.partner.v3.OrderFailure")
+	proto.RegisterType((*OrderFulfillability)(nil), "ext.maps.booking.partner.v3.OrderFulfillability")
+	proto.RegisterType((*LineItemFulfillability)(nil), "ext.maps.booking.partner.v3.LineItemFulfillability")
+	proto.RegisterType((*LineItemFulfillability_UpdatedAvailability)(nil), "ext.maps.booking.partner.v3.LineItemFulfillability.UpdatedAvailability")
+	proto.RegisterType((*TicketType)(nil), "ext.maps.booking.partner.v3.TicketType")
+	proto.RegisterType((*ResourceIds)(nil), "ext.maps.booking.partner.v3.ResourceIds")
+	proto.RegisterType((*PaymentProcessingParameters)(nil), "ext.maps.booking.partner.v3.PaymentProcessingParameters")
+	proto.RegisterType((*UserPaymentOption)(nil), "ext.maps.booking.partner.v3.UserPaymentOption")
+	proto.RegisterType((*PaymentInformation)(nil), "ext.maps.booking.partner.v3.PaymentInformation")
+	proto.RegisterType((*Price)(nil), "ext.maps.booking.partner.v3.Price")
+	proto.RegisterType((*NoShowFee)(nil), "ext.maps.booking.partner.v3.NoShowFee")
+	proto.RegisterType((*Deposit)(nil), "ext.maps.booking.partner.v3.Deposit")
+	proto.RegisterType((*Slot)(nil), "ext.maps.booking.partner.v3.Slot")
+	proto.RegisterType((*UserInformation)(nil), "ext.maps.booking.partner.v3.UserInformation")
+	proto.RegisterType((*PostalAddress)(nil), "ext.maps.booking.partner.v3.PostalAddress")
+	proto.RegisterEnum("ext.maps.booking.partner.v3.BookingStatus", BookingStatus_name, BookingStatus_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.CreditCardType", CreditCardType_name, CreditCardType_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentOptionType", PaymentOptionType_name, PaymentOptionType_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PrepaymentStatus", PrepaymentStatus_name, PrepaymentStatus_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PriceType", PriceType_name, PriceType_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.CheckAvailabilityResponse_DurationRequirement", CheckAvailabilityResponse_DurationRequirement_name, CheckAvailabilityResponse_DurationRequirement_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.BookingFailure_Cause", BookingFailure_Cause_name, BookingFailure_Cause_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.OrderFailure_Cause", OrderFailure_Cause_name, OrderFailure_Cause_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.OrderFulfillability_OrderFulfillabilityResult", OrderFulfillability_OrderFulfillabilityResult_name, OrderFulfillability_OrderFulfillabilityResult_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.LineItemFulfillability_ItemFulfillabilityResult", LineItemFulfillability_ItemFulfillabilityResult_name, LineItemFulfillability_ItemFulfillabilityResult_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentProcessingParameters_PaymentProcessor", PaymentProcessingParameters_PaymentProcessor_name, PaymentProcessingParameters_PaymentProcessor_value)
+	proto.RegisterEnum("ext.maps.booking.partner.v3.PaymentInformation_PaymentProcessedBy", PaymentInformation_PaymentProcessedBy_name, PaymentInformation_PaymentProcessedBy_value)
 }
 
-func init() { proto.RegisterFile("v3.proto", fileDescriptor0) }
+func init() { proto.RegisterFile("v3.proto", fileDescriptor_v3_e164fdd8b81531d4) }
 
-var fileDescriptor0 = []byte{
-	// 3731 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5a, 0xcd, 0x73, 0x1b, 0xd9,
-	0x56, 0x9f, 0xd6, 0x87, 0x6d, 0x1d, 0xdb, 0x72, 0xfb, 0xda, 0xb1, 0x95, 0x38, 0x19, 0x3b, 0x3d,
-	0x33, 0x4c, 0xe2, 0xcc, 0x78, 0xde, 0x4b, 0xde, 0x54, 0x0d, 0x45, 0xc1, 0xd0, 0x6e, 0x5d, 0x67,
-	0x9a, 0xc8, 0x2d, 0xcd, 0x55, 0x2b, 0x99, 0xc0, 0xa2, 0xe9, 0xa8, 0xaf, 0x95, 0x26, 0x52, 0xb7,
-	0x5e, 0x77, 0xcb, 0x2f, 0x7e, 0x55, 0xaf, 0xea, 0x2d, 0xd9, 0x52, 0x50, 0xf5, 0x16, 0x14, 0x54,
-	0x41, 0x15, 0xb0, 0xa4, 0x58, 0xc0, 0x1f, 0x00, 0x0b, 0x8a, 0xa2, 0xf8, 0x07, 0x58, 0xc1, 0x3f,
-	0xc0, 0x86, 0x62, 0xc3, 0x8a, 0xba, 0x1f, 0xad, 0x6e, 0xb5, 0x24, 0x3b, 0x19, 0x60, 0xf1, 0x76,
-	0xba, 0xe7, 0x9c, 0xfb, 0x71, 0x3e, 0xee, 0x39, 0xbf, 0x73, 0x5b, 0xb0, 0x76, 0xf9, 0xe4, 0x64,
-	0x1c, 0x85, 0x49, 0x88, 0x4a, 0x97, 0x4f, 0xb4, 0xbf, 0x50, 0x60, 0xb3, 0x13, 0xc6, 0x89, 0x3b,
-	0xd4, 0x3d, 0x2f, 0xa2, 0x71, 0x8c, 0x1a, 0xb0, 0xda, 0x0f, 0x27, 0x41, 0x12, 0x5d, 0x35, 0x94,
-	0x23, 0xe5, 0x41, 0x8d, 0xa4, 0x43, 0x74, 0x07, 0xd6, 0x86, 0x61, 0xdf, 0x1d, 0xfa, 0xc9, 0x55,
-	0xa3, 0xc4, 0x59, 0xd3, 0x31, 0xda, 0x83, 0x95, 0x88, 0x0e, 0xfc, 0x30, 0x68, 0x94, 0x39, 0x47,
-	0x8e, 0xd0, 0x21, 0xac, 0x8f, 0xf9, 0xf2, 0x4e, 0x3f, 0xf4, 0x68, 0xa3, 0xc2, 0x99, 0x20, 0x48,
-	0x46, 0xe8, 0x51, 0xf4, 0x09, 0xd4, 0xe3, 0x24, 0xa2, 0x34, 0x71, 0x5c, 0x71, 0x80, 0x46, 0x95,
-	0xcb, 0x6c, 0x0a, 0xaa, 0x3c, 0x95, 0xf6, 0x13, 0xa8, 0x3f, 0xa5, 0xa1, 0x11, 0x86, 0x91, 0xe7,
-	0x07, 0x6e, 0x42, 0x63, 0x7e, 0x1a, 0x37, 0xf1, 0x93, 0x89, 0x47, 0xf9, 0x41, 0x15, 0x32, 0x1d,
-	0xa3, 0xbb, 0x50, 0x1b, 0x86, 0xc1, 0x40, 0x30, 0x4b, 0x9c, 0x99, 0x11, 0xd0, 0x23, 0x58, 0x4d,
-	0xf7, 0x62, 0x87, 0x5d, 0x7f, 0xbc, 0x7d, 0x72, 0xf9, 0xe4, 0x64, 0xc6, 0x0a, 0x24, 0x95, 0xd0,
-	0x7e, 0x06, 0xd5, 0x4e, 0xe4, 0xf7, 0x29, 0xba, 0x0f, 0x1b, 0x63, 0xf6, 0xc3, 0x19, 0xf9, 0xfd,
-	0x28, 0x8c, 0xf9, 0x9e, 0x65, 0xb2, 0xce, 0x69, 0xe7, 0x9c, 0x84, 0x3e, 0x82, 0xcd, 0xfe, 0x24,
-	0x8a, 0x68, 0xd0, 0xbf, 0x12, 0xea, 0x0a, 0x2b, 0x6d, 0xa4, 0x44, 0xae, 0xf0, 0x67, 0x80, 0xd8,
-	0x1c, 0x3f, 0x18, 0x38, 0xe1, 0x38, 0xf1, 0xc3, 0xc0, 0x49, 0xdc, 0x81, 0xb4, 0x9a, 0x2a, 0x39,
-	0x6d, 0xce, 0xb0, 0xdd, 0x81, 0x76, 0x02, 0xab, 0xb6, 0xfb, 0x96, 0xb8, 0x09, 0x65, 0xab, 0xf3,
-	0xad, 0x9d, 0x31, 0x8d, 0xfa, 0x34, 0x48, 0xf8, 0x09, 0xaa, 0x64, 0x83, 0x13, 0x3b, 0x82, 0xa6,
-	0xfd, 0xa7, 0x02, 0x5b, 0xdd, 0xfe, 0x6b, 0xea, 0x4d, 0x86, 0x7e, 0x30, 0x20, 0x93, 0x21, 0x8d,
-	0xd1, 0x09, 0xec, 0x8c, 0xfc, 0xc0, 0x71, 0xbd, 0x4b, 0x37, 0xe8, 0x53, 0xe7, 0x55, 0x18, 0xbe,
-	0xf1, 0x83, 0x81, 0x54, 0x60, 0x7b, 0xe4, 0x07, 0xba, 0xe0, 0x9c, 0x0a, 0x06, 0xfa, 0x1a, 0xee,
-	0xe6, 0xe5, 0xc3, 0x60, 0xe8, 0x07, 0xd4, 0xe9, 0xb3, 0x01, 0x5b, 0x94, 0x6b, 0x55, 0x26, 0xb7,
-	0xb3, 0x89, 0x6d, 0x2e, 0x61, 0xa4, 0x02, 0x48, 0x87, 0x5b, 0x43, 0x37, 0x49, 0xa7, 0x30, 0xaf,
-	0x84, 0x81, 0x73, 0x41, 0xa9, 0x34, 0x77, 0x8d, 0x9b, 0x9b, 0xd9, 0xed, 0xb4, 0xd4, 0x50, 0xc8,
-	0x0e, 0x93, 0x35, 0x72, 0xa2, 0x67, 0x94, 0x59, 0x09, 0x82, 0x30, 0x7e, 0x1d, 0xfe, 0x84, 0xcf,
-	0xab, 0x2c, 0x9a, 0x57, 0x13, 0x02, 0x67, 0x94, 0x6a, 0xfb, 0x70, 0xcb, 0x0c, 0x06, 0x34, 0x66,
-	0xb3, 0xbf, 0x9d, 0xd0, 0x09, 0xed, 0xb8, 0x57, 0xc3, 0xd0, 0xf5, 0xb4, 0x3f, 0xae, 0xc0, 0xd6,
-	0x94, 0xd3, 0x4d, 0xdc, 0x64, 0x12, 0xa3, 0xcf, 0xa0, 0xc2, 0x9d, 0xc3, 0xf4, 0xaf, 0x3f, 0x6e,
-	0xb0, 0x45, 0x0b, 0x22, 0x27, 0xcc, 0x51, 0x84, 0x4b, 0xa1, 0x87, 0xa0, 0x26, 0xfe, 0x88, 0xc6,
-	0x89, 0x3b, 0x1a, 0xa7, 0xae, 0x17, 0x06, 0xd8, 0x9a, 0xd2, 0xa5, 0xfb, 0x7f, 0x04, 0x7b, 0x7e,
-	0x90, 0xd0, 0x28, 0x70, 0x87, 0x0e, 0x8d, 0xa2, 0x30, 0x72, 0x3c, 0x9a, 0xb8, 0xfe, 0x30, 0x96,
-	0xde, 0xdd, 0x4d, 0xb9, 0x98, 0x31, 0x9b, 0x82, 0x87, 0x74, 0xb8, 0x37, 0x76, 0xa3, 0x24, 0xa0,
-	0x91, 0x73, 0xe9, 0xc7, 0xfe, 0xab, 0x21, 0x2d, 0x4c, 0x16, 0x77, 0xe6, 0x8e, 0x14, 0x7a, 0x2e,
-	0x64, 0xf2, 0x4b, 0x68, 0x7f, 0x5b, 0x82, 0x0a, 0x8f, 0x2d, 0x04, 0xf5, 0xae, 0xad, 0xdb, 0xbd,
-	0xae, 0xd3, 0xb3, 0x9e, 0x59, 0xed, 0x17, 0x96, 0xfa, 0x01, 0x6a, 0xc0, 0xae, 0xa4, 0x9d, 0x61,
-	0xdc, 0x74, 0x7a, 0x9d, 0x56, 0x5b, 0x6f, 0xe2, 0xa6, 0xaa, 0x14, 0x39, 0xd8, 0xfa, 0xb6, 0x87,
-	0x7b, 0xb8, 0xa9, 0x96, 0x90, 0x06, 0x1f, 0xe6, 0x39, 0x1d, 0xd2, 0x36, 0x70, 0xb7, 0x6b, 0x5a,
-	0x4f, 0x9d, 0xae, 0xad, 0x13, 0x1b, 0x37, 0xd5, 0x32, 0xfa, 0x18, 0x8e, 0x96, 0xc9, 0xf4, 0x0c,
-	0x03, 0x63, 0xb6, 0x47, 0x05, 0xdd, 0x87, 0x7b, 0x4b, 0xa4, 0xce, 0x74, 0xb3, 0x85, 0x9b, 0x6a,
-	0x15, 0xdd, 0x81, 0xbd, 0xbc, 0x48, 0xb3, 0xd7, 0x69, 0x99, 0x86, 0xce, 0x36, 0x59, 0x41, 0xb7,
-	0x60, 0x5b, 0xf2, 0xf4, 0x8e, 0xe9, 0x18, 0x7a, 0x8b, 0x4d, 0x61, 0x57, 0xe1, 0x30, 0x47, 0x5e,
-	0xb8, 0xf5, 0x05, 0x3a, 0x82, 0xbb, 0x8b, 0x85, 0xe4, 0xce, 0x03, 0x4d, 0x87, 0x9a, 0xed, 0x8f,
-	0x28, 0x71, 0x83, 0x01, 0x45, 0x07, 0x50, 0x7b, 0x45, 0x07, 0x7e, 0xe0, 0xc4, 0xb4, 0x2f, 0xef,
-	0xc6, 0x1a, 0x27, 0x74, 0x69, 0x1f, 0xed, 0xc3, 0x2a, 0x0d, 0x3c, 0xce, 0x12, 0xce, 0x5f, 0xa1,
-	0x81, 0xd7, 0xa5, 0x7d, 0x8d, 0x40, 0xcd, 0x0a, 0xbb, 0x22, 0x0c, 0xd1, 0x01, 0x94, 0x59, 0xb4,
-	0x2a, 0x85, 0x68, 0x25, 0x8c, 0x8a, 0x1e, 0xc0, 0xda, 0x05, 0xa5, 0x4e, 0x72, 0x35, 0x16, 0xf7,
-	0xa0, 0xfe, 0x78, 0x73, 0x2a, 0x61, 0x5f, 0x8d, 0x29, 0x59, 0xbd, 0xa0, 0xfc, 0x87, 0xf6, 0x67,
-	0x0a, 0xac, 0x36, 0xe9, 0x38, 0x8c, 0xfd, 0x04, 0x7d, 0x04, 0xab, 0x9e, 0xf8, 0x39, 0xbf, 0x6c,
-	0xca, 0x29, 0x5e, 0xd8, 0x99, 0x6b, 0x97, 0x1d, 0x39, 0x77, 0x61, 0xf3, 0xb7, 0x8d, 0xa9, 0xf7,
-	0x03, 0xd8, 0x90, 0x6b, 0x5d, 0x73, 0xbe, 0x75, 0x29, 0xc2, 0xcf, 0xe8, 0x03, 0xe8, 0x7d, 0x36,
-	0xbd, 0xe5, 0x07, 0x6f, 0x90, 0x0a, 0xe5, 0x49, 0x34, 0x94, 0xf5, 0x82, 0xfd, 0x14, 0xd9, 0x39,
-	0x18, 0x4c, 0xdc, 0x01, 0x9d, 0xd6, 0x0a, 0x39, 0x46, 0x9f, 0x03, 0x8a, 0x68, 0x9c, 0x44, 0x7e,
-	0x3f, 0xa1, 0x9e, 0x93, 0x16, 0x9b, 0xf2, 0x51, 0xf9, 0x41, 0x8d, 0x6c, 0x67, 0x1c, 0x43, 0x30,
-	0xb4, 0x7f, 0x53, 0xa0, 0xd2, 0x1d, 0x86, 0x09, 0xab, 0x25, 0x23, 0x1a, 0xf5, 0x5f, 0xbb, 0x41,
-	0xe2, 0xf8, 0x9e, 0xdc, 0x0d, 0x52, 0x92, 0xe9, 0xa1, 0x7b, 0x00, 0x31, 0x8d, 0x2e, 0x59, 0x92,
-	0xf6, 0x3d, 0xb9, 0x6d, 0x4d, 0x52, 0x4c, 0x8f, 0x79, 0x38, 0x4e, 0xdc, 0x28, 0xe1, 0x36, 0x29,
-	0x0b, 0x0f, 0x73, 0x02, 0x33, 0xc1, 0x7d, 0xd8, 0xf0, 0x26, 0x51, 0x66, 0xb3, 0x8a, 0x48, 0xef,
-	0x29, 0x8d, 0x89, 0x3c, 0x04, 0xd5, 0xbd, 0x74, 0xfd, 0xa1, 0xfb, 0xca, 0x67, 0x35, 0x8f, 0xe7,
-	0x6d, 0x51, 0xac, 0xb6, 0xf2, 0x74, 0xdb, 0x1d, 0xa0, 0xcf, 0xa1, 0x16, 0xd1, 0x38, 0x9c, 0x44,
-	0x7d, 0x1a, 0x37, 0x56, 0xb8, 0xe3, 0xb6, 0x98, 0x35, 0x89, 0x24, 0x9a, 0x5e, 0x4c, 0x32, 0x09,
-	0xed, 0xcf, 0x15, 0xa8, 0xb6, 0xa8, 0x1b, 0x53, 0x74, 0x1b, 0xd6, 0x86, 0xec, 0x47, 0xa6, 0xe0,
-	0x2a, 0x1f, 0x9b, 0x1e, 0xba, 0x0b, 0x95, 0x78, 0x18, 0x26, 0x5c, 0xaf, 0xf5, 0xc7, 0x6b, 0x6c,
-	0x39, 0x66, 0x16, 0xc2, 0xa9, 0xac, 0x8e, 0x4e, 0x62, 0x1a, 0x39, 0x11, 0xbd, 0xa0, 0xac, 0xd8,
-	0x50, 0x99, 0x74, 0x36, 0x19, 0x95, 0xa4, 0x44, 0xf4, 0xab, 0x70, 0x5b, 0xac, 0x4f, 0xdf, 0x8e,
-	0x7d, 0xa9, 0x2e, 0xcb, 0x63, 0x39, 0x9d, 0xf7, 0xb8, 0x00, 0x9e, 0xf2, 0xd9, 0x15, 0x61, 0xa1,
-	0xfe, 0x08, 0xea, 0xfc, 0x8c, 0xd9, 0x62, 0xcb, 0x0f, 0xab, 0xfd, 0xb7, 0x02, 0xab, 0x69, 0x3d,
-	0xb9, 0x07, 0x20, 0x6b, 0x4e, 0x26, 0x58, 0x93, 0x94, 0x1b, 0xf5, 0xfa, 0x0d, 0x50, 0xb9, 0x5e,
-	0x7e, 0x70, 0x11, 0x46, 0x23, 0x7e, 0x20, 0x59, 0x46, 0x76, 0x98, 0x64, 0x2f, 0xa6, 0x91, 0x99,
-	0xb1, 0xc8, 0xd6, 0x64, 0x96, 0x80, 0x1e, 0xc2, 0x4a, 0xcc, 0x93, 0x3a, 0xd7, 0xae, 0x2e, 0x6a,
-	0xbd, 0x3c, 0x99, 0xc8, 0xf6, 0x44, 0x0a, 0xa0, 0xa7, 0xb0, 0x33, 0x76, 0xaf, 0x46, 0x94, 0x85,
-	0x57, 0x6e, 0xb7, 0x2a, 0xdf, 0x6d, 0x8f, 0x5f, 0x06, 0xc1, 0xce, 0x6f, 0x88, 0xc6, 0x73, 0x34,
-	0xed, 0x9f, 0x15, 0xd8, 0x2a, 0x1c, 0x8c, 0x65, 0x10, 0xa1, 0x47, 0x6a, 0x81, 0x15, 0x7e, 0x52,
-	0x1e, 0xb4, 0x03, 0xff, 0x92, 0x06, 0x4e, 0xe0, 0x8e, 0xd2, 0xbb, 0x52, 0xe3, 0x14, 0xcb, 0x1d,
-	0x51, 0x16, 0xf4, 0x17, 0xee, 0xc8, 0x1f, 0x5e, 0x09, 0xbe, 0x70, 0x2a, 0x08, 0x12, 0x17, 0xc8,
-	0xa1, 0x99, 0xca, 0x4d, 0x68, 0x86, 0x01, 0xa3, 0x84, 0x0e, 0xe9, 0xf8, 0x75, 0x18, 0x50, 0x19,
-	0xbb, 0x19, 0x01, 0xed, 0x42, 0x95, 0x8e, 0x5c, 0x7f, 0xc8, 0x23, 0xb6, 0x46, 0xc4, 0x40, 0xfb,
-	0x45, 0x19, 0x0e, 0xa4, 0xe2, 0x9d, 0x28, 0xec, 0xd3, 0x38, 0xf6, 0x83, 0x41, 0xc7, 0x8d, 0xdc,
-	0x11, 0x4d, 0x68, 0x14, 0x23, 0x02, 0xb5, 0xb1, 0xa0, 0x87, 0x91, 0x2c, 0xaa, 0x3f, 0xc8, 0x19,
-	0x6b, 0xd1, 0x9c, 0x02, 0x2f, 0x8c, 0x44, 0x41, 0x9f, 0x2e, 0x83, 0x7e, 0x04, 0xbb, 0xa9, 0x2b,
-	0x46, 0x34, 0x79, 0x1d, 0x7a, 0x4e, 0x12, 0xbe, 0xa1, 0x81, 0x30, 0x0f, 0x17, 0x4e, 0xed, 0x7e,
-	0xce, 0xd9, 0x36, 0xe3, 0xb2, 0x52, 0x3a, 0x09, 0xc6, 0x6e, 0x14, 0x53, 0xcf, 0x59, 0x38, 0x5d,
-	0x68, 0x7c, 0x27, 0x15, 0xea, 0xcc, 0x2f, 0xd1, 0x80, 0xd5, 0x4b, 0x1a, 0xc5, 0x19, 0x90, 0x4d,
-	0x87, 0xe8, 0x11, 0x6c, 0xa7, 0x6b, 0x66, 0xea, 0x56, 0x24, 0x6c, 0x2b, 0xa8, 0xa3, 0x79, 0xa0,
-	0x16, 0x55, 0x64, 0xa5, 0xb0, 0xa3, 0xbf, 0x3c, 0xc7, 0x96, 0x9d, 0x16, 0xa3, 0x36, 0x71, 0x7a,
-	0x56, 0xb7, 0x83, 0x0d, 0xf3, 0xcc, 0xc4, 0x4d, 0xf5, 0x03, 0xb4, 0x0b, 0x6a, 0xc6, 0xea, 0xda,
-	0xc4, 0xec, 0x60, 0x55, 0x41, 0xfb, 0xb0, 0x93, 0x51, 0x4f, 0x89, 0x6e, 0x5a, 0x36, 0xc1, 0x58,
-	0x2d, 0x69, 0xff, 0x54, 0x82, 0x6d, 0x16, 0x67, 0x72, 0x2b, 0x81, 0x1a, 0xd1, 0x13, 0xd8, 0xe3,
-	0x91, 0x96, 0x9e, 0x56, 0xa2, 0xcc, 0x69, 0xe0, 0xed, 0x4c, 0x8a, 0x53, 0x4c, 0x0f, 0x7d, 0x01,
-	0xbb, 0x97, 0xee, 0xd0, 0xf7, 0x1c, 0x91, 0x21, 0xa7, 0x29, 0x41, 0x94, 0x8e, 0x6d, 0xce, 0xeb,
-	0x32, 0x96, 0xcc, 0x06, 0xe8, 0x11, 0x20, 0x31, 0x81, 0xd5, 0xc5, 0xa9, 0xb8, 0xc8, 0xaa, 0x5b,
-	0x9c, 0x83, 0x03, 0x2f, 0x15, 0x7e, 0x08, 0x15, 0x5e, 0x57, 0xc4, 0x15, 0xbc, 0x95, 0x8b, 0x0e,
-	0x89, 0x74, 0x59, 0x7d, 0xe1, 0x22, 0x2c, 0x8f, 0x85, 0x91, 0x3f, 0xf0, 0x03, 0xde, 0x32, 0x4c,
-	0x82, 0x84, 0x3b, 0xad, 0x4a, 0x36, 0x53, 0x2a, 0x2f, 0x0b, 0x19, 0xd4, 0x4e, 0xa4, 0xd4, 0x8a,
-	0x00, 0xc3, 0x92, 0x28, 0x84, 0x8e, 0x33, 0x97, 0x65, 0x46, 0x58, 0x15, 0x19, 0x7b, 0x3c, 0x6b,
-	0x00, 0xed, 0x4f, 0xab, 0x80, 0xe6, 0xaf, 0x37, 0xd2, 0x61, 0x7b, 0x1c, 0xd1, 0x74, 0x15, 0x99,
-	0x49, 0x44, 0x90, 0xef, 0x8a, 0xf2, 0x98, 0x32, 0x65, 0x32, 0x51, 0xc7, 0x05, 0x0a, 0x83, 0x85,
-	0xe9, 0xfc, 0x24, 0x72, 0x83, 0xd8, 0xed, 0xa7, 0x47, 0x11, 0x97, 0x3d, 0x8d, 0x74, 0x3b, 0x63,
-	0x9a, 0x1e, 0x3a, 0x84, 0x2a, 0x6f, 0x2d, 0xe6, 0x30, 0x33, 0x11, 0x74, 0xf4, 0x00, 0x20, 0x71,
-	0xdf, 0x3a, 0xee, 0x88, 0xab, 0x5f, 0x44, 0xc8, 0xa4, 0x96, 0xb8, 0x6f, 0x75, 0xce, 0x43, 0xbf,
-	0x93, 0x5d, 0x26, 0x19, 0xb9, 0xd4, 0x73, 0x5e, 0x5d, 0x71, 0xc3, 0xd6, 0x1f, 0x3f, 0x5c, 0x9c,
-	0xd8, 0x0a, 0x57, 0x94, 0x7a, 0xa7, 0x57, 0xd3, 0x3b, 0x97, 0xa3, 0xa1, 0xcf, 0x16, 0xd9, 0x98,
-	0xe7, 0x8f, 0x6f, 0x3e, 0x98, 0xb3, 0x32, 0xfa, 0x72, 0x69, 0x6c, 0xae, 0xca, 0x29, 0x0b, 0xa3,
-	0xf3, 0x93, 0x0c, 0x05, 0xad, 0x71, 0x45, 0xd7, 0xd9, 0xa1, 0x25, 0x46, 0xca, 0x70, 0xd0, 0xe7,
-	0xb0, 0x1e, 0x84, 0xce, 0xb4, 0x6b, 0xa8, 0x71, 0x51, 0x8e, 0x62, 0xa6, 0x18, 0x8d, 0x75, 0x0d,
-	0x29, 0x5c, 0xfb, 0x02, 0xea, 0x17, 0x94, 0xc6, 0x8e, 0xcb, 0x22, 0xd8, 0x7d, 0x4b, 0xe3, 0x06,
-	0x14, 0xad, 0xb8, 0xc1, 0x04, 0xf4, 0xc0, 0xb3, 0x19, 0x5b, 0x1b, 0x4d, 0x43, 0x24, 0x6f, 0x81,
-	0x8f, 0xe1, 0xa8, 0x70, 0xaf, 0x71, 0xd3, 0x39, 0x7d, 0x59, 0xb8, 0xda, 0xd9, 0x25, 0x16, 0xdc,
-	0xa7, 0xed, 0xf6, 0xd3, 0x16, 0x16, 0x28, 0x7c, 0x86, 0xd1, 0xd1, 0x89, 0x6d, 0x61, 0xa2, 0x96,
-	0x4e, 0x37, 0x00, 0xa6, 0xf5, 0xc8, 0xd3, 0x7e, 0xbf, 0x02, 0x75, 0x59, 0xb7, 0xce, 0x5c, 0x7f,
-	0x38, 0x89, 0x28, 0x3a, 0x81, 0x6a, 0xdf, 0x9d, 0xc4, 0x33, 0xad, 0xcc, 0xac, 0xc8, 0x89, 0xc1,
-	0xf8, 0x44, 0x88, 0xa1, 0xdf, 0x64, 0xc0, 0xeb, 0xf7, 0xa8, 0x80, 0x5d, 0x6e, 0xe4, 0x09, 0xb0,
-	0x57, 0xe2, 0x93, 0x11, 0x9b, 0x6c, 0x44, 0xd4, 0xf3, 0x13, 0xc3, 0x8d, 0x3c, 0x7e, 0x23, 0xd5,
-	0x54, 0x3a, 0xa5, 0xa0, 0x23, 0x58, 0xf7, 0x68, 0xdc, 0x8f, 0xfc, 0x71, 0x92, 0xa5, 0xc8, 0x3c,
-	0x49, 0xfb, 0xf7, 0x12, 0x54, 0xf9, 0xa6, 0x0c, 0xbb, 0x1b, 0x7a, 0xaf, 0x8b, 0xe7, 0x73, 0x5c,
-	0xb7, 0xd5, 0xb6, 0x9d, 0x9e, 0xa5, 0x3f, 0xd7, 0xcd, 0x96, 0x7e, 0xca, 0xad, 0x70, 0x08, 0x07,
-	0x9c, 0xaa, 0xb7, 0x08, 0xd6, 0x9b, 0x2f, 0x9d, 0xd3, 0x76, 0xfb, 0x99, 0x34, 0x63, 0x97, 0x19,
-	0x03, 0x6d, 0xc3, 0x66, 0x0b, 0xeb, 0x5d, 0xec, 0xe0, 0xef, 0x3a, 0x26, 0xe1, 0x1d, 0xc8, 0x21,
-	0x1c, 0xb4, 0x7b, 0x76, 0xd7, 0x6c, 0x62, 0xc7, 0xd0, 0x2d, 0x03, 0xb7, 0x5a, 0xba, 0x6d, 0xb6,
-	0x2d, 0xe7, 0x85, 0x69, 0x35, 0xdb, 0x2f, 0xd4, 0x4a, 0xde, 0x33, 0x98, 0x90, 0x36, 0x71, 0x0c,
-	0x9d, 0x34, 0x1d, 0xfb, 0x65, 0x07, 0x3b, 0x04, 0xff, 0x16, 0x36, 0x6c, 0xde, 0x7f, 0x1c, 0xc2,
-	0xc1, 0x02, 0xa9, 0x26, 0x36, 0x5a, 0xa6, 0xc5, 0x9b, 0x90, 0xbb, 0xd0, 0x48, 0x05, 0xda, 0x1d,
-	0xbe, 0x83, 0xd5, 0xb6, 0x9d, 0xe7, 0x7a, 0xcb, 0x6c, 0xaa, 0xab, 0xec, 0x60, 0x33, 0xd3, 0xd5,
-	0x35, 0xd6, 0x3e, 0xb1, 0x53, 0xb3, 0x53, 0x31, 0x49, 0x66, 0x83, 0xd9, 0x05, 0xd4, 0x1a, 0xba,
-	0x07, 0xb7, 0x99, 0x8e, 0xac, 0x1f, 0x49, 0x75, 0x96, 0x4a, 0xe0, 0xa6, 0x0a, 0xe8, 0x00, 0xf6,
-	0x53, 0x36, 0x5b, 0x22, 0xd5, 0x8f, 0x19, 0x6b, 0x5d, 0x7b, 0x09, 0x2a, 0x43, 0x48, 0x7a, 0x0e,
-	0x74, 0x4e, 0x51, 0x94, 0xb2, 0x10, 0x45, 0x7d, 0x0a, 0x5b, 0x3c, 0x4d, 0x3a, 0x12, 0xa8, 0x0e,
-	0x85, 0xdb, 0xab, 0xa4, 0xce, 0xc9, 0x7a, 0x4a, 0xd5, 0x5e, 0x00, 0xca, 0x2f, 0xdb, 0x1b, 0x7b,
-	0x6e, 0x42, 0x59, 0x16, 0x64, 0xcb, 0x38, 0x79, 0x98, 0xdb, 0x50, 0x8e, 0xca, 0x0f, 0xd6, 0x45,
-	0x16, 0x2c, 0x9e, 0x86, 0xa8, 0x71, 0x81, 0xa2, 0xfd, 0x2e, 0xac, 0xe7, 0xc0, 0x2f, 0x83, 0x8e,
-	0x71, 0xe2, 0x5e, 0x5c, 0xe4, 0xa0, 0x23, 0x1f, 0x9b, 0x1e, 0x43, 0x4a, 0x51, 0x18, 0x8e, 0xb2,
-	0x04, 0xb9, 0xc2, 0x86, 0x02, 0x29, 0xb1, 0x26, 0xf8, 0xca, 0x89, 0xfd, 0x9f, 0x8a, 0xbc, 0x58,
-	0x25, 0x35, 0x4e, 0xe9, 0xfa, 0x3f, 0xa5, 0xda, 0xcf, 0x15, 0x00, 0xdb, 0xef, 0xbf, 0xa1, 0xbc,
-	0x43, 0x41, 0x1f, 0x43, 0x3d, 0xe1, 0x23, 0x1e, 0xe5, 0xd9, 0x3e, 0x1b, 0xc9, 0x54, 0xc6, 0xf4,
-	0x58, 0x55, 0x8f, 0x5f, 0x87, 0x51, 0xe2, 0xe4, 0xc3, 0x5a, 0x6c, 0xab, 0x72, 0x46, 0x33, 0xa3,
-	0xdf, 0x98, 0x93, 0xb5, 0xbf, 0x29, 0xc1, 0x5a, 0xcb, 0x0f, 0xa8, 0x99, 0xd0, 0x51, 0xa1, 0x1b,
-	0x51, 0xae, 0xed, 0x46, 0x4a, 0x37, 0x74, 0x23, 0xe5, 0xf9, 0x6e, 0xe4, 0x4b, 0x58, 0x15, 0x9a,
-	0x30, 0xdc, 0xc7, 0x3c, 0x71, 0xc0, 0x8e, 0x93, 0xee, 0x7e, 0xd2, 0x8e, 0x3c, 0x1a, 0x51, 0x4f,
-	0x18, 0x24, 0x26, 0xa9, 0x6c, 0xa6, 0x43, 0x75, 0x49, 0x5d, 0xc9, 0x00, 0xf3, 0xca, 0x0d, 0x80,
-	0xf9, 0x8e, 0x01, 0xf5, 0xd9, 0x6d, 0x98, 0x52, 0xd2, 0xe8, 0x53, 0x95, 0xd7, 0x04, 0xc1, 0xf4,
-	0x18, 0xbc, 0x14, 0xb5, 0x5a, 0x84, 0x9e, 0x18, 0x68, 0xff, 0x5a, 0x86, 0xbd, 0xf4, 0xd4, 0x67,
-	0x93, 0xe1, 0x85, 0x3f, 0x9c, 0xc6, 0xf4, 0x11, 0x54, 0xfc, 0x84, 0x8e, 0x64, 0x4c, 0x6f, 0xe4,
-	0xf5, 0x23, 0x9c, 0x83, 0x9e, 0xc1, 0x4a, 0x44, 0xe3, 0xc9, 0x30, 0x91, 0x59, 0xec, 0x49, 0x5e,
-	0x66, 0x76, 0xb5, 0x93, 0x79, 0x12, 0xe1, 0x53, 0x89, 0x5c, 0x02, 0xfd, 0x10, 0x76, 0x27, 0xc1,
-	0x45, 0x2a, 0x31, 0xa4, 0x4e, 0x44, 0xdd, 0x78, 0x9a, 0xe5, 0x76, 0x66, 0x78, 0x84, 0xb3, 0xb8,
-	0x8f, 0xc7, 0x61, 0x12, 0x3b, 0xe1, 0x98, 0x06, 0xbc, 0x08, 0x57, 0x49, 0x8d, 0x53, 0xda, 0x63,
-	0x1a, 0xa0, 0x2f, 0x60, 0x3d, 0x17, 0x83, 0x8d, 0x2a, 0xf7, 0x53, 0x9d, 0x9d, 0x31, 0x0b, 0x54,
-	0x02, 0x59, 0x40, 0x6a, 0xff, 0xa2, 0x40, 0x63, 0xd9, 0x39, 0xd1, 0x31, 0xfc, 0x8a, 0x69, 0xe3,
-	0x73, 0xe7, 0xac, 0xd7, 0x3a, 0x33, 0x59, 0x32, 0x30, 0x5b, 0xa6, 0xfd, 0xd2, 0x21, 0xb8, 0xdb,
-	0x6b, 0xd9, 0x85, 0x2c, 0xbb, 0x05, 0xeb, 0x86, 0x6e, 0xa5, 0xa2, 0xaa, 0xb2, 0x30, 0xed, 0x96,
-	0x58, 0x86, 0xec, 0x59, 0xd3, 0xf5, 0x5a, 0xd8, 0xb1, 0x4d, 0xe3, 0x19, 0xb6, 0x1d, 0xa3, 0x7d,
-	0x7e, 0x6a, 0x5a, 0x3c, 0x9d, 0xaa, 0x65, 0xb4, 0x03, 0x5b, 0xa6, 0x65, 0xb4, 0x09, 0xc1, 0x06,
-	0xab, 0x71, 0xa6, 0x81, 0xd5, 0x0a, 0xfa, 0x08, 0x0e, 0xf9, 0x69, 0x66, 0xe7, 0xb7, 0xed, 0x6f,
-	0x30, 0x71, 0x08, 0xd6, 0xbb, 0x6d, 0x4b, 0xad, 0x6a, 0x7f, 0x59, 0x86, 0x1d, 0x1e, 0x22, 0x05,
-	0xcf, 0x9a, 0x53, 0xbf, 0x89, 0xd2, 0xf5, 0x43, 0x66, 0x93, 0x05, 0x82, 0x8b, 0x68, 0x05, 0xaf,
-	0x3d, 0x83, 0x1d, 0x16, 0x0a, 0xce, 0xc5, 0x8c, 0x50, 0xa3, 0xc4, 0x6d, 0x7d, 0x67, 0x79, 0x3c,
-	0x10, 0xe4, 0xcf, 0x47, 0xdc, 0xfb, 0x87, 0x80, 0xf6, 0x0f, 0x0a, 0xdc, 0x5e, 0x7a, 0x4a, 0xf4,
-	0x08, 0x3e, 0x6d, 0x93, 0x26, 0x26, 0xdf, 0xcf, 0x69, 0x07, 0xb0, 0x3f, 0x6b, 0x5e, 0x56, 0x92,
-	0x1c, 0x66, 0x76, 0xb5, 0x84, 0x3e, 0x81, 0xfb, 0xb3, 0xcc, 0x2e, 0x26, 0xcf, 0x4d, 0x03, 0x17,
-	0x9c, 0xf7, 0x31, 0x1c, 0x89, 0x13, 0x5c, 0xe3, 0xa8, 0x8a, 0xf6, 0x1f, 0x0a, 0x54, 0xb9, 0x16,
-	0x2c, 0x33, 0x87, 0xec, 0x47, 0x2e, 0x33, 0xf3, 0xb1, 0xe9, 0x2d, 0xec, 0xc5, 0x4b, 0xef, 0xd1,
-	0x8b, 0x2f, 0x69, 0xb0, 0xcb, 0xef, 0xdb, 0x60, 0x17, 0x5f, 0x82, 0x2a, 0x73, 0x2f, 0x41, 0x69,
-	0xe6, 0x10, 0x37, 0x6e, 0x41, 0xe6, 0xd0, 0xfe, 0xab, 0x04, 0x1b, 0xc2, 0x6d, 0x12, 0x4c, 0x7d,
-	0x36, 0x0b, 0xa6, 0xf6, 0xb2, 0x88, 0x5c, 0x04, 0xa5, 0xbe, 0x86, 0xfa, 0x5c, 0xc0, 0x31, 0x2d,
-	0xf6, 0x97, 0x04, 0x32, 0x29, 0x88, 0x2f, 0xc1, 0x62, 0xe5, 0xef, 0x8f, 0xc5, 0x2a, 0xf3, 0x58,
-	0xec, 0x0f, 0x94, 0x1b, 0xb0, 0xd8, 0x3e, 0xec, 0x2c, 0x88, 0x0d, 0x55, 0x79, 0x27, 0xe4, 0x54,
-	0xba, 0x09, 0x39, 0x95, 0xe7, 0xb1, 0x51, 0x45, 0xfb, 0x0a, 0x1a, 0xc6, 0x6b, 0xda, 0x7f, 0x33,
-	0x03, 0x17, 0xe8, 0x8f, 0x27, 0x34, 0x4e, 0xae, 0xc7, 0x30, 0xda, 0xcf, 0xcb, 0x70, 0x7b, 0xc1,
-	0xd4, 0x78, 0x1c, 0x06, 0x31, 0xfd, 0x3f, 0xc2, 0x3f, 0xc8, 0x83, 0xdd, 0x69, 0xe1, 0x8d, 0xe8,
-	0x8f, 0x27, 0x7e, 0x44, 0x59, 0xf0, 0x49, 0xc7, 0xf0, 0x34, 0xb5, 0xf4, 0x0c, 0x27, 0x4d, 0x39,
-	0x93, 0x64, 0x13, 0xc9, 0x8e, 0x37, 0x4f, 0x64, 0x17, 0x61, 0xe6, 0x25, 0x71, 0xc2, 0x61, 0x96,
-	0x6c, 0xe2, 0x78, 0xe4, 0xcd, 0x83, 0x30, 0x82, 0xdc, 0x39, 0x9a, 0x36, 0x82, 0x9d, 0x05, 0x9b,
-	0x32, 0xf7, 0x35, 0x7b, 0x44, 0xa0, 0x61, 0x82, 0xbf, 0xed, 0x99, 0x04, 0x73, 0x27, 0xcc, 0x7a,
-	0xbf, 0x01, 0xbb, 0xcd, 0x36, 0x87, 0x97, 0xdd, 0x6f, 0xda, 0x2f, 0x9c, 0x74, 0x86, 0xaa, 0xa0,
-	0x3d, 0x40, 0xe7, 0xbd, 0x6e, 0x91, 0x5e, 0xd2, 0xbe, 0x82, 0xfd, 0xa7, 0x34, 0x99, 0x05, 0x03,
-	0xd2, 0x77, 0xd7, 0x3f, 0xf2, 0x69, 0x7f, 0xa7, 0x40, 0x63, 0x7e, 0xaa, 0xf4, 0xdd, 0x0d, 0x0f,
-	0x84, 0x5f, 0x41, 0x3d, 0x65, 0x4b, 0x64, 0x52, 0x5a, 0x86, 0x4c, 0x36, 0x5f, 0xe5, 0x87, 0x8b,
-	0xbb, 0xf7, 0xf2, 0xfb, 0x74, 0xef, 0x9a, 0x07, 0x87, 0xdc, 0xe1, 0x0b, 0x53, 0xbc, 0x50, 0xfd,
-	0xc6, 0x77, 0xe9, 0x34, 0x1b, 0x95, 0x96, 0x66, 0xa3, 0x3f, 0x52, 0xe0, 0x68, 0xf9, 0x36, 0xd2,
-	0x4c, 0xf3, 0x39, 0x47, 0x79, 0xbf, 0x9c, 0x33, 0xdf, 0xf0, 0x96, 0xae, 0x6f, 0x78, 0xff, 0xba,
-	0x0c, 0xbb, 0x46, 0x44, 0xdd, 0x24, 0xfd, 0x36, 0xf8, 0x4e, 0x37, 0x15, 0x7d, 0x01, 0x35, 0xf1,
-	0x2e, 0x1c, 0xd1, 0x0b, 0xb9, 0x05, 0x4f, 0x69, 0xb3, 0xcf, 0xc7, 0x44, 0x3c, 0x1e, 0x13, 0x7a,
-	0xf1, 0xbf, 0x7e, 0xe4, 0x5d, 0x52, 0x58, 0x2a, 0xef, 0x5d, 0x58, 0xfa, 0x70, 0xaf, 0xf0, 0x54,
-	0xc2, 0xa2, 0x6e, 0x3c, 0x7d, 0xb8, 0x94, 0xa8, 0xf9, 0xf0, 0x86, 0xf7, 0x4d, 0x72, 0x30, 0xbe,
-	0xe6, 0xc1, 0xf4, 0x11, 0x6c, 0xfb, 0x1e, 0x1d, 0x8d, 0xc3, 0x84, 0x7f, 0x29, 0x16, 0x4f, 0x93,
-	0xe2, 0xc9, 0x55, 0xcd, 0x31, 0xc4, 0x83, 0xe4, 0xe7, 0x80, 0x5c, 0xcf, 0xf3, 0xd9, 0xe9, 0xdc,
-	0x21, 0x4f, 0x49, 0x34, 0x4e, 0xe4, 0x23, 0xd6, 0x76, 0xc6, 0x91, 0x8e, 0xd1, 0xfe, 0x5e, 0x81,
-	0x5b, 0x05, 0x8f, 0xc9, 0xe8, 0xf9, 0x04, 0x56, 0xf3, 0x5f, 0x7e, 0xe5, 0x1b, 0x4a, 0x2a, 0x95,
-	0xf2, 0x10, 0x86, 0x9d, 0x05, 0x2f, 0x34, 0xd2, 0x8b, 0xb7, 0x52, 0x6f, 0xcc, 0x3c, 0xd0, 0x90,
-	0xed, 0xb9, 0x37, 0x1b, 0xf4, 0x6b, 0xb0, 0x95, 0xde, 0xd9, 0x0b, 0x51, 0x3f, 0xa5, 0x43, 0xd1,
-	0xfc, 0x23, 0x05, 0x49, 0xaf, 0xb7, 0x1c, 0x6b, 0xff, 0xa8, 0x00, 0x12, 0x4a, 0xf0, 0xa8, 0xce,
-	0xee, 0x59, 0x95, 0x23, 0x91, 0xfc, 0x97, 0x30, 0x21, 0x20, 0xe8, 0x37, 0x7b, 0xaf, 0xf4, 0xff,
-	0xe5, 0xbd, 0xf2, 0x62, 0xef, 0xb1, 0xfc, 0x3c, 0xa3, 0x88, 0xf4, 0xc5, 0x8d, 0x9a, 0x7c, 0x09,
-	0x9b, 0x02, 0x84, 0xa5, 0xc6, 0x13, 0x27, 0x57, 0x8b, 0xa0, 0x84, 0x6c, 0x84, 0xb9, 0x91, 0xf6,
-	0x65, 0x6a, 0x37, 0x79, 0xd3, 0xa6, 0x76, 0xe3, 0x37, 0x2d, 0xbf, 0x9b, 0x10, 0x10, 0x74, 0x2d,
-	0x4e, 0x4f, 0x29, 0xa7, 0x65, 0xa7, 0xbc, 0x76, 0xde, 0x22, 0x27, 0x97, 0xde, 0xd9, 0xc9, 0x27,
-	0xb0, 0xd3, 0xf2, 0xe3, 0xb4, 0x22, 0x4c, 0xeb, 0xc8, 0xb2, 0xef, 0x24, 0xda, 0xd7, 0xb0, 0x3b,
-	0x2b, 0x2f, 0x4f, 0xf9, 0x29, 0xac, 0xc9, 0x95, 0x63, 0xf9, 0x24, 0x31, 0x13, 0xd8, 0x53, 0xa6,
-	0xf6, 0x14, 0xb6, 0xd9, 0x02, 0xdc, 0x7c, 0x37, 0x6e, 0x37, 0x03, 0x83, 0x4b, 0xfc, 0xd3, 0x64,
-	0x0a, 0x83, 0x99, 0x95, 0xf3, 0x0b, 0xcd, 0xfb, 0xb4, 0xbc, 0xc8, 0xa7, 0xda, 0xaf, 0xc3, 0xae,
-	0xa8, 0xda, 0x85, 0x5c, 0xfa, 0x6e, 0x17, 0x93, 0xdf, 0xec, 0xc2, 0xfc, 0x5f, 0xba, 0x9b, 0x7d,
-	0x7c, 0x96, 0xff, 0x3b, 0x06, 0x7f, 0x0c, 0xe2, 0xff, 0x59, 0x68, 0xf7, 0x88, 0x81, 0x73, 0xff,
-	0x59, 0xd8, 0x82, 0x75, 0x49, 0x3b, 0xc3, 0xfc, 0xaf, 0x0a, 0x75, 0x00, 0x49, 0xd0, 0x3b, 0xa6,
-	0x5a, 0x3a, 0xfe, 0x2b, 0x05, 0xd6, 0x8d, 0x30, 0x48, 0x68, 0x20, 0x1e, 0x7b, 0x76, 0x60, 0xcb,
-	0x68, 0x5b, 0xb6, 0xc0, 0x38, 0xe9, 0x2a, 0xbb, 0xa0, 0xa6, 0xc4, 0x73, 0x4c, 0x8c, 0x6f, 0x74,
-	0xcb, 0x56, 0x95, 0xbc, 0xa8, 0x6c, 0x98, 0xd4, 0x12, 0x83, 0x42, 0x29, 0x51, 0xb6, 0xc7, 0xbc,
-	0x4d, 0x53, 0xcb, 0xe8, 0x0e, 0xec, 0xa5, 0x9c, 0xc2, 0x1b, 0x5e, 0x05, 0x69, 0xf0, 0xe1, 0x62,
-	0xde, 0x74, 0xe5, 0xea, 0xf1, 0x13, 0xa8, 0x4d, 0x3f, 0xa1, 0x33, 0x5c, 0x75, 0x66, 0x7e, 0x87,
-	0x9b, 0x0e, 0xd1, 0x6d, 0xec, 0x34, 0xf1, 0x99, 0xde, 0x6b, 0xd9, 0xea, 0x07, 0x4c, 0xbd, 0x0e,
-	0x26, 0x4e, 0x07, 0x13, 0xd6, 0x8d, 0x29, 0xc7, 0x3f, 0x83, 0x6d, 0x09, 0xe7, 0xb2, 0x2e, 0x80,
-	0x35, 0xdc, 0x12, 0xcb, 0x39, 0x06, 0xc1, 0x4d, 0xd3, 0x16, 0x70, 0x7b, 0x16, 0xd3, 0x2d, 0x11,
-	0x32, 0xda, 0x56, 0xd3, 0x64, 0x27, 0xd3, 0x59, 0x5b, 0xf9, 0x21, 0xdc, 0x59, 0x24, 0xa4, 0xb7,
-	0x5e, 0xe8, 0x2f, 0xbb, 0x6a, 0xe9, 0xf8, 0x17, 0x0a, 0x6c, 0xcf, 0x7d, 0x9f, 0x61, 0x4b, 0x17,
-	0xb4, 0xe4, 0xfd, 0xc0, 0xec, 0xfe, 0xf7, 0xe0, 0x76, 0xd1, 0x14, 0xa6, 0xf5, 0xb4, 0x85, 0x9d,
-	0x5e, 0x97, 0xf5, 0x15, 0xf3, 0x4f, 0xa9, 0xe7, 0xbd, 0x96, 0x6d, 0x72, 0x6e, 0x09, 0x1d, 0xc1,
-	0xdd, 0x02, 0xb7, 0x67, 0xb5, 0xcc, 0x73, 0xd3, 0xc6, 0x4d, 0x2e, 0x51, 0x3e, 0xfe, 0x43, 0x05,
-	0x36, 0x67, 0x10, 0x1f, 0xd3, 0x25, 0x7d, 0x28, 0x9d, 0xfe, 0xf5, 0x25, 0x7f, 0xa0, 0x4d, 0xa8,
-	0x19, 0x6d, 0xeb, 0xcc, 0x24, 0xe7, 0x3c, 0x90, 0xee, 0xc3, 0xbd, 0x0e, 0xb6, 0x9a, 0x4c, 0x3c,
-	0x8d, 0x09, 0x47, 0xf2, 0x25, 0xc8, 0x45, 0x1b, 0xb0, 0x26, 0x9e, 0x5b, 0x79, 0x0b, 0xb3, 0x0e,
-	0xab, 0x56, 0x9b, 0x03, 0x61, 0xb5, 0xc2, 0xda, 0x28, 0x39, 0x70, 0x3a, 0xd8, 0xd2, 0x5b, 0xe6,
-	0x6f, 0xe3, 0xa6, 0x5a, 0x3d, 0x1e, 0x43, 0x7d, 0xb6, 0x5b, 0x63, 0x9a, 0xe4, 0x2d, 0xbb, 0xc0,
-	0x50, 0x6b, 0x50, 0x79, 0x6e, 0x76, 0x75, 0x11, 0xdb, 0xe7, 0x7a, 0xd7, 0xc6, 0x84, 0x89, 0xaa,
-	0x25, 0x16, 0xb6, 0xfa, 0x39, 0x26, 0xa6, 0xa1, 0x5b, 0x0e, 0xfe, 0xae, 0x43, 0x70, 0xb7, 0xab,
-	0x96, 0xd9, 0xa9, 0x9a, 0x66, 0xd7, 0x68, 0x3f, 0xc7, 0x44, 0xad, 0x1c, 0xff, 0x89, 0x02, 0x6a,
-	0x11, 0xbc, 0x72, 0xdd, 0x08, 0x4e, 0x2d, 0xb8, 0xd0, 0x1a, 0xfc, 0x2b, 0x04, 0xce, 0x7d, 0xae,
-	0x78, 0x6e, 0x8a, 0xff, 0x02, 0x1d, 0xc0, 0x7e, 0x8e, 0xc1, 0x7a, 0x82, 0x29, 0xb3, 0x54, 0x98,
-	0x45, 0xf0, 0x59, 0xcf, 0x6a, 0x72, 0xe3, 0xcc, 0x32, 0x84, 0xc6, 0xb8, 0xa9, 0x56, 0x5e, 0xad,
-	0xf0, 0x7f, 0x18, 0x3e, 0xf9, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x84, 0x9d, 0xca, 0x4f, 0x6d,
-	0x28, 0x00, 0x00,
+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,
 }