# Copyright 2015 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

require 'date'
require 'google/apis/core/base_service'
require 'google/apis/core/json_representation'
require 'google/apis/core/hashable'
require 'google/apis/errors'

module Google
  module Apis
    module AdexchangebuyerV1_4
      
      # Configuration data for an Ad Exchange buyer account.
      class Account
        include Google::Apis::Core::Hashable
      
        # When this is false, bid requests that include a deal ID for a private auction
        # or preferred deal are always sent to your bidder. When true, all active
        # pretargeting configs will be applied to private auctions and preferred deals.
        # Programmatic Guaranteed deals (when enabled) are always sent to your bidder.
        # Corresponds to the JSON property `applyPretargetingToNonGuaranteedDeals`
        # @return [Boolean]
        attr_accessor :apply_pretargeting_to_non_guaranteed_deals
        alias_method :apply_pretargeting_to_non_guaranteed_deals?, :apply_pretargeting_to_non_guaranteed_deals
      
        # Your bidder locations that have distinct URLs.
        # Corresponds to the JSON property `bidderLocation`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::Account::BidderLocation>]
        attr_accessor :bidder_location
      
        # The nid parameter value used in cookie match requests. Please contact your
        # technical account manager if you need to change this.
        # Corresponds to the JSON property `cookieMatchingNid`
        # @return [String]
        attr_accessor :cookie_matching_nid
      
        # The base URL used in cookie match requests.
        # Corresponds to the JSON property `cookieMatchingUrl`
        # @return [String]
        attr_accessor :cookie_matching_url
      
        # Account id.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The maximum number of active creatives that an account can have, where a
        # creative is active if it was inserted or bid with in the last 30 days. Please
        # contact your technical account manager if you need to change this.
        # Corresponds to the JSON property `maximumActiveCreatives`
        # @return [Fixnum]
        attr_accessor :maximum_active_creatives
      
        # The sum of all bidderLocation.maximumQps values cannot exceed this. Please
        # contact your technical account manager if you need to change this.
        # Corresponds to the JSON property `maximumTotalQps`
        # @return [Fixnum]
        attr_accessor :maximum_total_qps
      
        # The number of creatives that this account inserted or bid with in the last 30
        # days.
        # Corresponds to the JSON property `numberActiveCreatives`
        # @return [Fixnum]
        attr_accessor :number_active_creatives
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @apply_pretargeting_to_non_guaranteed_deals = args[:apply_pretargeting_to_non_guaranteed_deals] if args.key?(:apply_pretargeting_to_non_guaranteed_deals)
          @bidder_location = args[:bidder_location] if args.key?(:bidder_location)
          @cookie_matching_nid = args[:cookie_matching_nid] if args.key?(:cookie_matching_nid)
          @cookie_matching_url = args[:cookie_matching_url] if args.key?(:cookie_matching_url)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @maximum_active_creatives = args[:maximum_active_creatives] if args.key?(:maximum_active_creatives)
          @maximum_total_qps = args[:maximum_total_qps] if args.key?(:maximum_total_qps)
          @number_active_creatives = args[:number_active_creatives] if args.key?(:number_active_creatives)
        end
        
        # 
        class BidderLocation
          include Google::Apis::Core::Hashable
        
          # The protocol that the bidder endpoint is using. OpenRTB protocols with prefix
          # PROTOCOL_OPENRTB_PROTOBUF use proto buffer, otherwise use JSON.  Allowed
          # values:
          # - PROTOCOL_ADX
          # - PROTOCOL_OPENRTB_2_2
          # - PROTOCOL_OPENRTB_2_3
          # - PROTOCOL_OPENRTB_2_4
          # - PROTOCOL_OPENRTB_2_5
          # - PROTOCOL_OPENRTB_PROTOBUF_2_3
          # - PROTOCOL_OPENRTB_PROTOBUF_2_4
          # - PROTOCOL_OPENRTB_PROTOBUF_2_5
          # Corresponds to the JSON property `bidProtocol`
          # @return [String]
          attr_accessor :bid_protocol
        
          # The maximum queries per second the Ad Exchange will send.
          # Corresponds to the JSON property `maximumQps`
          # @return [Fixnum]
          attr_accessor :maximum_qps
        
          # The geographical region the Ad Exchange should send requests from. Only used
          # by some quota systems, but always setting the value is recommended. Allowed
          # values:
          # - ASIA
          # - EUROPE
          # - US_EAST
          # - US_WEST
          # Corresponds to the JSON property `region`
          # @return [String]
          attr_accessor :region
        
          # The URL to which the Ad Exchange will send bid requests.
          # Corresponds to the JSON property `url`
          # @return [String]
          attr_accessor :url
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @bid_protocol = args[:bid_protocol] if args.key?(:bid_protocol)
            @maximum_qps = args[:maximum_qps] if args.key?(:maximum_qps)
            @region = args[:region] if args.key?(:region)
            @url = args[:url] if args.key?(:url)
          end
        end
      end
      
      # An account feed lists Ad Exchange buyer accounts that the user has access to.
      # Each entry in the feed corresponds to a single buyer account.
      class AccountsList
        include Google::Apis::Core::Hashable
      
        # A list of accounts.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::Account>]
        attr_accessor :items
      
        # Resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
        end
      end
      
      # 
      class AddOrderDealsRequest
        include Google::Apis::Core::Hashable
      
        # The list of deals to add
        # Corresponds to the JSON property `deals`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::MarketplaceDeal>]
        attr_accessor :deals
      
        # The last known proposal revision number.
        # Corresponds to the JSON property `proposalRevisionNumber`
        # @return [Fixnum]
        attr_accessor :proposal_revision_number
      
        # Indicates an optional action to take on the proposal
        # Corresponds to the JSON property `updateAction`
        # @return [String]
        attr_accessor :update_action
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @deals = args[:deals] if args.key?(:deals)
          @proposal_revision_number = args[:proposal_revision_number] if args.key?(:proposal_revision_number)
          @update_action = args[:update_action] if args.key?(:update_action)
        end
      end
      
      # 
      class AddOrderDealsResponse
        include Google::Apis::Core::Hashable
      
        # List of deals added (in the same proposal as passed in the request)
        # Corresponds to the JSON property `deals`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::MarketplaceDeal>]
        attr_accessor :deals
      
        # The updated revision number for the proposal.
        # Corresponds to the JSON property `proposalRevisionNumber`
        # @return [Fixnum]
        attr_accessor :proposal_revision_number
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @deals = args[:deals] if args.key?(:deals)
          @proposal_revision_number = args[:proposal_revision_number] if args.key?(:proposal_revision_number)
        end
      end
      
      # 
      class AddOrderNotesRequest
        include Google::Apis::Core::Hashable
      
        # The list of notes to add.
        # Corresponds to the JSON property `notes`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::MarketplaceNote>]
        attr_accessor :notes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @notes = args[:notes] if args.key?(:notes)
        end
      end
      
      # 
      class AddOrderNotesResponse
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `notes`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::MarketplaceNote>]
        attr_accessor :notes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @notes = args[:notes] if args.key?(:notes)
        end
      end
      
      # The configuration data for an Ad Exchange billing info.
      class BillingInfo
        include Google::Apis::Core::Hashable
      
        # Account id.
        # Corresponds to the JSON property `accountId`
        # @return [Fixnum]
        attr_accessor :account_id
      
        # Account name.
        # Corresponds to the JSON property `accountName`
        # @return [String]
        attr_accessor :account_name
      
        # A list of adgroup IDs associated with this particular account. These IDs may
        # show up as part of a realtime bidding BidRequest, which indicates a bid
        # request for this account.
        # Corresponds to the JSON property `billingId`
        # @return [Array<String>]
        attr_accessor :billing_id
      
        # Resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @account_name = args[:account_name] if args.key?(:account_name)
          @billing_id = args[:billing_id] if args.key?(:billing_id)
          @kind = args[:kind] if args.key?(:kind)
        end
      end
      
      # A billing info feed lists Billing Info the Ad Exchange buyer account has
      # access to. Each entry in the feed corresponds to a single billing info.
      class BillingInfoList
        include Google::Apis::Core::Hashable
      
        # A list of billing info relevant for your account.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::BillingInfo>]
        attr_accessor :items
      
        # Resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
        end
      end
      
      # The configuration data for Ad Exchange RTB - Budget API.
      class Budget
        include Google::Apis::Core::Hashable
      
        # The id of the account. This is required for get and update requests.
        # Corresponds to the JSON property `accountId`
        # @return [Fixnum]
        attr_accessor :account_id
      
        # The billing id to determine which adgroup to provide budget information for.
        # This is required for get and update requests.
        # Corresponds to the JSON property `billingId`
        # @return [Fixnum]
        attr_accessor :billing_id
      
        # The daily budget amount in unit amount of the account currency to apply for
        # the billingId provided. This is required for update requests.
        # Corresponds to the JSON property `budgetAmount`
        # @return [Fixnum]
        attr_accessor :budget_amount
      
        # The currency code for the buyer. This cannot be altered here.
        # Corresponds to the JSON property `currencyCode`
        # @return [String]
        attr_accessor :currency_code
      
        # The unique id that describes this item.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # The kind of the resource, i.e. "adexchangebuyer#budget".
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @billing_id = args[:billing_id] if args.key?(:billing_id)
          @budget_amount = args[:budget_amount] if args.key?(:budget_amount)
          @currency_code = args[:currency_code] if args.key?(:currency_code)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
        end
      end
      
      # 
      class Buyer
        include Google::Apis::Core::Hashable
      
        # Adx account id of the buyer.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
        end
      end
      
      # 
      class ContactInformation
        include Google::Apis::Core::Hashable
      
        # Email address of the contact.
        # Corresponds to the JSON property `email`
        # @return [String]
        attr_accessor :email
      
        # The name of the contact.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @email = args[:email] if args.key?(:email)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # 
      class CreateOrdersRequest
        include Google::Apis::Core::Hashable
      
        # The list of proposals to create.
        # Corresponds to the JSON property `proposals`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::Proposal>]
        attr_accessor :proposals
      
        # Web property id of the seller creating these orders
        # Corresponds to the JSON property `webPropertyCode`
        # @return [String]
        attr_accessor :web_property_code
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @proposals = args[:proposals] if args.key?(:proposals)
          @web_property_code = args[:web_property_code] if args.key?(:web_property_code)
        end
      end
      
      # 
      class CreateOrdersResponse
        include Google::Apis::Core::Hashable
      
        # The list of proposals successfully created.
        # Corresponds to the JSON property `proposals`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::Proposal>]
        attr_accessor :proposals
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @proposals = args[:proposals] if args.key?(:proposals)
        end
      end
      
      # A creative and its classification data.
      class Creative
        include Google::Apis::Core::Hashable
      
        # The HTML snippet that displays the ad when inserted in the web page. If set,
        # videoURL, videoVastXML, and nativeAd should not be set.
        # Corresponds to the JSON property `HTMLSnippet`
        # @return [String]
        attr_accessor :html_snippet
      
        # Account id.
        # Corresponds to the JSON property `accountId`
        # @return [Fixnum]
        attr_accessor :account_id
      
        # The link to the Ad Preferences page. This is only supported for native ads.
        # Corresponds to the JSON property `adChoicesDestinationUrl`
        # @return [String]
        attr_accessor :ad_choices_destination_url
      
        # 
        # Corresponds to the JSON property `adTechnologyProviders`
        # @return [Google::Apis::AdexchangebuyerV1_4::Creative::AdTechnologyProviders]
        attr_accessor :ad_technology_providers
      
        # Detected advertiser id, if any. Read-only. This field should not be set in
        # requests.
        # Corresponds to the JSON property `advertiserId`
        # @return [Array<Fixnum>]
        attr_accessor :advertiser_id
      
        # The name of the company being advertised in the creative. A list of
        # advertisers is provided in the advertisers.txt file.
        # Corresponds to the JSON property `advertiserName`
        # @return [String]
        attr_accessor :advertiser_name
      
        # The agency id for this creative.
        # Corresponds to the JSON property `agencyId`
        # @return [Fixnum]
        attr_accessor :agency_id
      
        # The last upload timestamp of this creative if it was uploaded via API. Read-
        # only. The value of this field is generated, and will be ignored for uploads. (
        # formatted RFC 3339 timestamp).
        # Corresponds to the JSON property `apiUploadTimestamp`
        # @return [DateTime]
        attr_accessor :api_upload_timestamp
      
        # List of buyer selectable attributes for the ads that may be shown from this
        # snippet. Each attribute is represented by an integer as defined in  buyer-
        # declarable-creative-attributes.txt.
        # Corresponds to the JSON property `attribute`
        # @return [Array<Fixnum>]
        attr_accessor :attribute
      
        # A buyer-specific id identifying the creative in this ad.
        # Corresponds to the JSON property `buyerCreativeId`
        # @return [String]
        attr_accessor :buyer_creative_id
      
        # The set of destination urls for the snippet.
        # Corresponds to the JSON property `clickThroughUrl`
        # @return [Array<String>]
        attr_accessor :click_through_url
      
        # Shows any corrections that were applied to this creative. Read-only. This
        # field should not be set in requests.
        # Corresponds to the JSON property `corrections`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::Creative::Correction>]
        attr_accessor :corrections
      
        # Creative status identity type that the creative item applies to. Ad Exchange
        # real-time bidding is migrating to the sizeless creative verification.
        # Originally, Ad Exchange assigned creative verification status to a unique
        # combination of a buyer creative ID and creative dimensions. Post-migration, a
        # single verification status will be assigned at the buyer creative ID level.
        # This field allows to distinguish whether a given creative status applies to a
        # unique combination of a buyer creative ID and creative dimensions, or to a
        # buyer creative ID as a whole.
        # Corresponds to the JSON property `creativeStatusIdentityType`
        # @return [String]
        attr_accessor :creative_status_identity_type
      
        # Top-level deals status. Read-only. This field should not be set in requests.
        # If disapproved, an entry for auctionType=DIRECT_DEALS (or ALL) in
        # servingRestrictions will also exist. Note that this may be nuanced with other
        # contextual restrictions, in which case it may be preferable to read from
        # servingRestrictions directly.
        # Corresponds to the JSON property `dealsStatus`
        # @return [String]
        attr_accessor :deals_status
      
        # Detected domains for this creative. Read-only. This field should not be set in
        # requests.
        # Corresponds to the JSON property `detectedDomains`
        # @return [Array<String>]
        attr_accessor :detected_domains
      
        # The filtering reasons for the creative. Read-only. This field should not be
        # set in requests.
        # Corresponds to the JSON property `filteringReasons`
        # @return [Google::Apis::AdexchangebuyerV1_4::Creative::FilteringReasons]
        attr_accessor :filtering_reasons
      
        # Ad height.
        # Corresponds to the JSON property `height`
        # @return [Fixnum]
        attr_accessor :height
      
        # The set of urls to be called to record an impression.
        # Corresponds to the JSON property `impressionTrackingUrl`
        # @return [Array<String>]
        attr_accessor :impression_tracking_url
      
        # Resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Detected languages for this creative. Read-only. This field should not be set
        # in requests.
        # Corresponds to the JSON property `languages`
        # @return [Array<String>]
        attr_accessor :languages
      
        # If nativeAd is set, HTMLSnippet, videoVastXML, and the videoURL outside of
        # nativeAd should not be set. (The videoURL inside nativeAd can be set.)
        # Corresponds to the JSON property `nativeAd`
        # @return [Google::Apis::AdexchangebuyerV1_4::Creative::NativeAd]
        attr_accessor :native_ad
      
        # Top-level open auction status. Read-only. This field should not be set in
        # requests. If disapproved, an entry for auctionType=OPEN_AUCTION (or ALL) in
        # servingRestrictions will also exist. Note that this may be nuanced with other
        # contextual restrictions, in which case it may be preferable to read from
        # ServingRestrictions directly.
        # Corresponds to the JSON property `openAuctionStatus`
        # @return [String]
        attr_accessor :open_auction_status
      
        # Detected product categories, if any. Each category is represented by an
        # integer as defined in  ad-product-categories.txt. Read-only. This field should
        # not be set in requests.
        # Corresponds to the JSON property `productCategories`
        # @return [Array<Fixnum>]
        attr_accessor :product_categories
      
        # All restricted categories for the ads that may be shown from this snippet.
        # Each category is represented by an integer as defined in the  ad-restricted-
        # categories.txt.
        # Corresponds to the JSON property `restrictedCategories`
        # @return [Array<Fixnum>]
        attr_accessor :restricted_categories
      
        # Detected sensitive categories, if any. Each category is represented by an
        # integer as defined in  ad-sensitive-categories.txt. Read-only. This field
        # should not be set in requests.
        # Corresponds to the JSON property `sensitiveCategories`
        # @return [Array<Fixnum>]
        attr_accessor :sensitive_categories
      
        # The granular status of this ad in specific contexts. A context here relates to
        # where something ultimately serves (for example, a physical location, a
        # platform, an HTTPS vs HTTP request, or the type of auction). Read-only. This
        # field should not be set in requests. See the examples in the Creatives guide
        # for more details.
        # Corresponds to the JSON property `servingRestrictions`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::Creative::ServingRestriction>]
        attr_accessor :serving_restrictions
      
        # List of vendor types for the ads that may be shown from this snippet. Each
        # vendor type is represented by an integer as defined in vendors.txt.
        # Corresponds to the JSON property `vendorType`
        # @return [Array<Fixnum>]
        attr_accessor :vendor_type
      
        # The version for this creative. Read-only. This field should not be set in
        # requests.
        # Corresponds to the JSON property `version`
        # @return [Fixnum]
        attr_accessor :version
      
        # The URL to fetch a video ad. If set, HTMLSnippet, videoVastXML, and nativeAd
        # should not be set. Note, this is different from resource.native_ad.video_url
        # above.
        # Corresponds to the JSON property `videoURL`
        # @return [String]
        attr_accessor :video_url
      
        # The contents of a VAST document for a video ad. This document should conform
        # to the VAST 2.0 or 3.0 standard. If set, HTMLSnippet, videoURL, and nativeAd
        # and should not be set.
        # Corresponds to the JSON property `videoVastXML`
        # @return [String]
        attr_accessor :video_vast_xml
      
        # Ad width.
        # Corresponds to the JSON property `width`
        # @return [Fixnum]
        attr_accessor :width
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @html_snippet = args[:html_snippet] if args.key?(:html_snippet)
          @account_id = args[:account_id] if args.key?(:account_id)
          @ad_choices_destination_url = args[:ad_choices_destination_url] if args.key?(:ad_choices_destination_url)
          @ad_technology_providers = args[:ad_technology_providers] if args.key?(:ad_technology_providers)
          @advertiser_id = args[:advertiser_id] if args.key?(:advertiser_id)
          @advertiser_name = args[:advertiser_name] if args.key?(:advertiser_name)
          @agency_id = args[:agency_id] if args.key?(:agency_id)
          @api_upload_timestamp = args[:api_upload_timestamp] if args.key?(:api_upload_timestamp)
          @attribute = args[:attribute] if args.key?(:attribute)
          @buyer_creative_id = args[:buyer_creative_id] if args.key?(:buyer_creative_id)
          @click_through_url = args[:click_through_url] if args.key?(:click_through_url)
          @corrections = args[:corrections] if args.key?(:corrections)
          @creative_status_identity_type = args[:creative_status_identity_type] if args.key?(:creative_status_identity_type)
          @deals_status = args[:deals_status] if args.key?(:deals_status)
          @detected_domains = args[:detected_domains] if args.key?(:detected_domains)
          @filtering_reasons = args[:filtering_reasons] if args.key?(:filtering_reasons)
          @height = args[:height] if args.key?(:height)
          @impression_tracking_url = args[:impression_tracking_url] if args.key?(:impression_tracking_url)
          @kind = args[:kind] if args.key?(:kind)
          @languages = args[:languages] if args.key?(:languages)
          @native_ad = args[:native_ad] if args.key?(:native_ad)
          @open_auction_status = args[:open_auction_status] if args.key?(:open_auction_status)
          @product_categories = args[:product_categories] if args.key?(:product_categories)
          @restricted_categories = args[:restricted_categories] if args.key?(:restricted_categories)
          @sensitive_categories = args[:sensitive_categories] if args.key?(:sensitive_categories)
          @serving_restrictions = args[:serving_restrictions] if args.key?(:serving_restrictions)
          @vendor_type = args[:vendor_type] if args.key?(:vendor_type)
          @version = args[:version] if args.key?(:version)
          @video_url = args[:video_url] if args.key?(:video_url)
          @video_vast_xml = args[:video_vast_xml] if args.key?(:video_vast_xml)
          @width = args[:width] if args.key?(:width)
        end
        
        # 
        class AdTechnologyProviders
          include Google::Apis::Core::Hashable
        
          # The detected ad technology provider IDs for this creative. See https://storage.
          # googleapis.com/adx-rtb-dictionaries/providers.csv for mapping of provider ID
          # to provided name, a privacy policy URL, and a list of domains which can be
          # attributed to the provider. If this creative contains provider IDs that are
          # outside of those listed in the `BidRequest.adslot.consented_providers_settings.
          # consented_providers` field on the  Authorized Buyers Real-Time Bidding
          # protocol or the `BidRequest.user.ext.consented_providers_settings.
          # consented_providers` field on the OpenRTB protocol, a bid submitted for a
          # European Economic Area (EEA) user with this creative is not compliant with the
          # GDPR policies as mentioned in the "Third-party Ad Technology Vendors" section
          # of Authorized Buyers Program Guidelines.
          # Corresponds to the JSON property `detectedProviderIds`
          # @return [Array<Fixnum>]
          attr_accessor :detected_provider_ids
        
          # Whether the creative contains an unidentified ad technology provider. If true,
          # a bid submitted for a European Economic Area (EEA) user with this creative is
          # not compliant with the GDPR policies as mentioned in the "Third-party Ad
          # Technology Vendors" section of Authorized Buyers Program Guidelines.
          # Corresponds to the JSON property `hasUnidentifiedProvider`
          # @return [Boolean]
          attr_accessor :has_unidentified_provider
          alias_method :has_unidentified_provider?, :has_unidentified_provider
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @detected_provider_ids = args[:detected_provider_ids] if args.key?(:detected_provider_ids)
            @has_unidentified_provider = args[:has_unidentified_provider] if args.key?(:has_unidentified_provider)
          end
        end
        
        # 
        class Correction
          include Google::Apis::Core::Hashable
        
          # All known serving contexts containing serving status information.
          # Corresponds to the JSON property `contexts`
          # @return [Array<Google::Apis::AdexchangebuyerV1_4::Creative::Correction::Context>]
          attr_accessor :contexts
        
          # Additional details about the correction.
          # Corresponds to the JSON property `details`
          # @return [Array<String>]
          attr_accessor :details
        
          # The type of correction that was applied to the creative.
          # Corresponds to the JSON property `reason`
          # @return [String]
          attr_accessor :reason
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @contexts = args[:contexts] if args.key?(:contexts)
            @details = args[:details] if args.key?(:details)
            @reason = args[:reason] if args.key?(:reason)
          end
          
          # 
          class Context
            include Google::Apis::Core::Hashable
          
            # Only set when contextType=AUCTION_TYPE. Represents the auction types this
            # correction applies to.
            # Corresponds to the JSON property `auctionType`
            # @return [Array<String>]
            attr_accessor :auction_type
          
            # The type of context (e.g., location, platform, auction type, SSL-ness).
            # Corresponds to the JSON property `contextType`
            # @return [String]
            attr_accessor :context_type
          
            # Only set when contextType=LOCATION. Represents the geo criterias this
            # correction applies to.
            # Corresponds to the JSON property `geoCriteriaId`
            # @return [Array<Fixnum>]
            attr_accessor :geo_criteria_id
          
            # Only set when contextType=PLATFORM. Represents the platforms this correction
            # applies to.
            # Corresponds to the JSON property `platform`
            # @return [Array<String>]
            attr_accessor :platform
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @auction_type = args[:auction_type] if args.key?(:auction_type)
              @context_type = args[:context_type] if args.key?(:context_type)
              @geo_criteria_id = args[:geo_criteria_id] if args.key?(:geo_criteria_id)
              @platform = args[:platform] if args.key?(:platform)
            end
          end
        end
        
        # The filtering reasons for the creative. Read-only. This field should not be
        # set in requests.
        class FilteringReasons
          include Google::Apis::Core::Hashable
        
          # The date in ISO 8601 format for the data. The data is collected from 00:00:00
          # to 23:59:59 in PST.
          # Corresponds to the JSON property `date`
          # @return [String]
          attr_accessor :date
        
          # The filtering reasons.
          # Corresponds to the JSON property `reasons`
          # @return [Array<Google::Apis::AdexchangebuyerV1_4::Creative::FilteringReasons::Reason>]
          attr_accessor :reasons
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @date = args[:date] if args.key?(:date)
            @reasons = args[:reasons] if args.key?(:reasons)
          end
          
          # 
          class Reason
            include Google::Apis::Core::Hashable
          
            # The number of times the creative was filtered for the status. The count is
            # aggregated across all publishers on the exchange.
            # Corresponds to the JSON property `filteringCount`
            # @return [Fixnum]
            attr_accessor :filtering_count
          
            # The filtering status code as defined in  creative-status-codes.txt.
            # Corresponds to the JSON property `filteringStatus`
            # @return [Fixnum]
            attr_accessor :filtering_status
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @filtering_count = args[:filtering_count] if args.key?(:filtering_count)
              @filtering_status = args[:filtering_status] if args.key?(:filtering_status)
            end
          end
        end
        
        # If nativeAd is set, HTMLSnippet, videoVastXML, and the videoURL outside of
        # nativeAd should not be set. (The videoURL inside nativeAd can be set.)
        class NativeAd
          include Google::Apis::Core::Hashable
        
          # 
          # Corresponds to the JSON property `advertiser`
          # @return [String]
          attr_accessor :advertiser
        
          # The app icon, for app download ads.
          # Corresponds to the JSON property `appIcon`
          # @return [Google::Apis::AdexchangebuyerV1_4::Creative::NativeAd::AppIcon]
          attr_accessor :app_icon
        
          # A long description of the ad.
          # Corresponds to the JSON property `body`
          # @return [String]
          attr_accessor :body
        
          # A label for the button that the user is supposed to click.
          # Corresponds to the JSON property `callToAction`
          # @return [String]
          attr_accessor :call_to_action
        
          # The URL that the browser/SDK will load when the user clicks the ad.
          # Corresponds to the JSON property `clickLinkUrl`
          # @return [String]
          attr_accessor :click_link_url
        
          # The URL to use for click tracking.
          # Corresponds to the JSON property `clickTrackingUrl`
          # @return [String]
          attr_accessor :click_tracking_url
        
          # A short title for the ad.
          # Corresponds to the JSON property `headline`
          # @return [String]
          attr_accessor :headline
        
          # A large image.
          # Corresponds to the JSON property `image`
          # @return [Google::Apis::AdexchangebuyerV1_4::Creative::NativeAd::Image]
          attr_accessor :image
        
          # The URLs are called when the impression is rendered.
          # Corresponds to the JSON property `impressionTrackingUrl`
          # @return [Array<String>]
          attr_accessor :impression_tracking_url
        
          # A smaller image, for the advertiser logo.
          # Corresponds to the JSON property `logo`
          # @return [Google::Apis::AdexchangebuyerV1_4::Creative::NativeAd::Logo]
          attr_accessor :logo
        
          # The price of the promoted app including the currency info.
          # Corresponds to the JSON property `price`
          # @return [String]
          attr_accessor :price
        
          # The app rating in the app store. Must be in the range [0-5].
          # Corresponds to the JSON property `starRating`
          # @return [Float]
          attr_accessor :star_rating
        
          # The URL of the XML VAST for a native ad. Note this is a separate field from
          # resource.video_url.
          # Corresponds to the JSON property `videoURL`
          # @return [String]
          attr_accessor :video_url
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @advertiser = args[:advertiser] if args.key?(:advertiser)
            @app_icon = args[:app_icon] if args.key?(:app_icon)
            @body = args[:body] if args.key?(:body)
            @call_to_action = args[:call_to_action] if args.key?(:call_to_action)
            @click_link_url = args[:click_link_url] if args.key?(:click_link_url)
            @click_tracking_url = args[:click_tracking_url] if args.key?(:click_tracking_url)
            @headline = args[:headline] if args.key?(:headline)
            @image = args[:image] if args.key?(:image)
            @impression_tracking_url = args[:impression_tracking_url] if args.key?(:impression_tracking_url)
            @logo = args[:logo] if args.key?(:logo)
            @price = args[:price] if args.key?(:price)
            @star_rating = args[:star_rating] if args.key?(:star_rating)
            @video_url = args[:video_url] if args.key?(:video_url)
          end
          
          # The app icon, for app download ads.
          class AppIcon
            include Google::Apis::Core::Hashable
          
            # 
            # Corresponds to the JSON property `height`
            # @return [Fixnum]
            attr_accessor :height
          
            # 
            # Corresponds to the JSON property `url`
            # @return [String]
            attr_accessor :url
          
            # 
            # Corresponds to the JSON property `width`
            # @return [Fixnum]
            attr_accessor :width
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @height = args[:height] if args.key?(:height)
              @url = args[:url] if args.key?(:url)
              @width = args[:width] if args.key?(:width)
            end
          end
          
          # A large image.
          class Image
            include Google::Apis::Core::Hashable
          
            # 
            # Corresponds to the JSON property `height`
            # @return [Fixnum]
            attr_accessor :height
          
            # 
            # Corresponds to the JSON property `url`
            # @return [String]
            attr_accessor :url
          
            # 
            # Corresponds to the JSON property `width`
            # @return [Fixnum]
            attr_accessor :width
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @height = args[:height] if args.key?(:height)
              @url = args[:url] if args.key?(:url)
              @width = args[:width] if args.key?(:width)
            end
          end
          
          # A smaller image, for the advertiser logo.
          class Logo
            include Google::Apis::Core::Hashable
          
            # 
            # Corresponds to the JSON property `height`
            # @return [Fixnum]
            attr_accessor :height
          
            # 
            # Corresponds to the JSON property `url`
            # @return [String]
            attr_accessor :url
          
            # 
            # Corresponds to the JSON property `width`
            # @return [Fixnum]
            attr_accessor :width
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @height = args[:height] if args.key?(:height)
              @url = args[:url] if args.key?(:url)
              @width = args[:width] if args.key?(:width)
            end
          end
        end
        
        # 
        class ServingRestriction
          include Google::Apis::Core::Hashable
        
          # All known contexts/restrictions.
          # Corresponds to the JSON property `contexts`
          # @return [Array<Google::Apis::AdexchangebuyerV1_4::Creative::ServingRestriction::Context>]
          attr_accessor :contexts
        
          # The reasons for disapproval within this restriction, if any. Note that not all
          # disapproval reasons may be categorized, so it is possible for the creative to
          # have a status of DISAPPROVED or CONDITIONALLY_APPROVED with an empty list for
          # disapproval_reasons. In this case, please reach out to your TAM to help debug
          # the issue.
          # Corresponds to the JSON property `disapprovalReasons`
          # @return [Array<Google::Apis::AdexchangebuyerV1_4::Creative::ServingRestriction::DisapprovalReason>]
          attr_accessor :disapproval_reasons
        
          # Why the creative is ineligible to serve in this context (e.g., it has been
          # explicitly disapproved or is pending review).
          # Corresponds to the JSON property `reason`
          # @return [String]
          attr_accessor :reason
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @contexts = args[:contexts] if args.key?(:contexts)
            @disapproval_reasons = args[:disapproval_reasons] if args.key?(:disapproval_reasons)
            @reason = args[:reason] if args.key?(:reason)
          end
          
          # 
          class Context
            include Google::Apis::Core::Hashable
          
            # Only set when contextType=AUCTION_TYPE. Represents the auction types this
            # restriction applies to.
            # Corresponds to the JSON property `auctionType`
            # @return [Array<String>]
            attr_accessor :auction_type
          
            # The type of context (e.g., location, platform, auction type, SSL-ness).
            # Corresponds to the JSON property `contextType`
            # @return [String]
            attr_accessor :context_type
          
            # Only set when contextType=LOCATION. Represents the geo criterias this
            # restriction applies to. Impressions are considered to match a context if
            # either the user location or publisher location matches a given geoCriteriaId.
            # Corresponds to the JSON property `geoCriteriaId`
            # @return [Array<Fixnum>]
            attr_accessor :geo_criteria_id
          
            # Only set when contextType=PLATFORM. Represents the platforms this restriction
            # applies to.
            # Corresponds to the JSON property `platform`
            # @return [Array<String>]
            attr_accessor :platform
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @auction_type = args[:auction_type] if args.key?(:auction_type)
              @context_type = args[:context_type] if args.key?(:context_type)
              @geo_criteria_id = args[:geo_criteria_id] if args.key?(:geo_criteria_id)
              @platform = args[:platform] if args.key?(:platform)
            end
          end
          
          # 
          class DisapprovalReason
            include Google::Apis::Core::Hashable
          
            # Additional details about the reason for disapproval.
            # Corresponds to the JSON property `details`
            # @return [Array<String>]
            attr_accessor :details
          
            # The categorized reason for disapproval.
            # Corresponds to the JSON property `reason`
            # @return [String]
            attr_accessor :reason
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @details = args[:details] if args.key?(:details)
              @reason = args[:reason] if args.key?(:reason)
            end
          end
        end
      end
      
      # The external deal ids associated with a creative.
      class CreativeDealIds
        include Google::Apis::Core::Hashable
      
        # A list of external deal ids and ARC approval status.
        # Corresponds to the JSON property `dealStatuses`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::CreativeDealIds::DealStatus>]
        attr_accessor :deal_statuses
      
        # Resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @deal_statuses = args[:deal_statuses] if args.key?(:deal_statuses)
          @kind = args[:kind] if args.key?(:kind)
        end
        
        # 
        class DealStatus
          include Google::Apis::Core::Hashable
        
          # ARC approval status.
          # Corresponds to the JSON property `arcStatus`
          # @return [String]
          attr_accessor :arc_status
        
          # External deal ID.
          # Corresponds to the JSON property `dealId`
          # @return [Fixnum]
          attr_accessor :deal_id
        
          # Publisher ID.
          # Corresponds to the JSON property `webPropertyId`
          # @return [Fixnum]
          attr_accessor :web_property_id
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @arc_status = args[:arc_status] if args.key?(:arc_status)
            @deal_id = args[:deal_id] if args.key?(:deal_id)
            @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
          end
        end
      end
      
      # The creatives feed lists the active creatives for the Ad Exchange buyer
      # accounts that the user has access to. Each entry in the feed corresponds to a
      # single creative.
      class CreativesList
        include Google::Apis::Core::Hashable
      
        # A list of creatives.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::Creative>]
        attr_accessor :items
      
        # Resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Continuation token used to page through creatives. To retrieve the next page
        # of results, set the next request's "pageToken" value to this.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class DealServingMetadata
        include Google::Apis::Core::Hashable
      
        # True if alcohol ads are allowed for this deal (read-only). This field is only
        # populated when querying for finalized orders using the method
        # GetFinalizedOrderDeals
        # Corresponds to the JSON property `alcoholAdsAllowed`
        # @return [Boolean]
        attr_accessor :alcohol_ads_allowed
        alias_method :alcohol_ads_allowed?, :alcohol_ads_allowed
      
        # Tracks which parties (if any) have paused a deal. The deal is considered
        # paused if has_buyer_paused || has_seller_paused. Each of the has_buyer_paused
        # or the has_seller_paused bits can be set independently.
        # Corresponds to the JSON property `dealPauseStatus`
        # @return [Google::Apis::AdexchangebuyerV1_4::DealServingMetadataDealPauseStatus]
        attr_accessor :deal_pause_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @alcohol_ads_allowed = args[:alcohol_ads_allowed] if args.key?(:alcohol_ads_allowed)
          @deal_pause_status = args[:deal_pause_status] if args.key?(:deal_pause_status)
        end
      end
      
      # Tracks which parties (if any) have paused a deal. The deal is considered
      # paused if has_buyer_paused || has_seller_paused. Each of the has_buyer_paused
      # or the has_seller_paused bits can be set independently.
      class DealServingMetadataDealPauseStatus
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `buyerPauseReason`
        # @return [String]
        attr_accessor :buyer_pause_reason
      
        # If the deal is paused, records which party paused the deal first.
        # Corresponds to the JSON property `firstPausedBy`
        # @return [String]
        attr_accessor :first_paused_by
      
        # 
        # Corresponds to the JSON property `hasBuyerPaused`
        # @return [Boolean]
        attr_accessor :has_buyer_paused
        alias_method :has_buyer_paused?, :has_buyer_paused
      
        # 
        # Corresponds to the JSON property `hasSellerPaused`
        # @return [Boolean]
        attr_accessor :has_seller_paused
        alias_method :has_seller_paused?, :has_seller_paused
      
        # 
        # Corresponds to the JSON property `sellerPauseReason`
        # @return [String]
        attr_accessor :seller_pause_reason
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @buyer_pause_reason = args[:buyer_pause_reason] if args.key?(:buyer_pause_reason)
          @first_paused_by = args[:first_paused_by] if args.key?(:first_paused_by)
          @has_buyer_paused = args[:has_buyer_paused] if args.key?(:has_buyer_paused)
          @has_seller_paused = args[:has_seller_paused] if args.key?(:has_seller_paused)
          @seller_pause_reason = args[:seller_pause_reason] if args.key?(:seller_pause_reason)
        end
      end
      
      # 
      class DealTerms
        include Google::Apis::Core::Hashable
      
        # Visibility of the URL in bid requests.
        # Corresponds to the JSON property `brandingType`
        # @return [String]
        attr_accessor :branding_type
      
        # Indicates that this ExternalDealId exists under at least two different
        # AdxInventoryDeals. Currently, the only case that the same ExternalDealId will
        # exist is programmatic cross sell case.
        # Corresponds to the JSON property `crossListedExternalDealIdType`
        # @return [String]
        attr_accessor :cross_listed_external_deal_id_type
      
        # Description for the proposed terms of the deal.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Non-binding estimate of the estimated gross spend for this deal Can be set by
        # buyer or seller.
        # Corresponds to the JSON property `estimatedGrossSpend`
        # @return [Google::Apis::AdexchangebuyerV1_4::Price]
        attr_accessor :estimated_gross_spend
      
        # Non-binding estimate of the impressions served per day Can be set by buyer or
        # seller.
        # Corresponds to the JSON property `estimatedImpressionsPerDay`
        # @return [Fixnum]
        attr_accessor :estimated_impressions_per_day
      
        # The terms for guaranteed fixed price deals.
        # Corresponds to the JSON property `guaranteedFixedPriceTerms`
        # @return [Google::Apis::AdexchangebuyerV1_4::DealTermsGuaranteedFixedPriceTerms]
        attr_accessor :guaranteed_fixed_price_terms
      
        # The terms for non-guaranteed auction deals.
        # Corresponds to the JSON property `nonGuaranteedAuctionTerms`
        # @return [Google::Apis::AdexchangebuyerV1_4::DealTermsNonGuaranteedAuctionTerms]
        attr_accessor :non_guaranteed_auction_terms
      
        # The terms for non-guaranteed fixed price deals.
        # Corresponds to the JSON property `nonGuaranteedFixedPriceTerms`
        # @return [Google::Apis::AdexchangebuyerV1_4::DealTermsNonGuaranteedFixedPriceTerms]
        attr_accessor :non_guaranteed_fixed_price_terms
      
        # The terms for rubicon non-guaranteed deals.
        # Corresponds to the JSON property `rubiconNonGuaranteedTerms`
        # @return [Google::Apis::AdexchangebuyerV1_4::DealTermsRubiconNonGuaranteedTerms]
        attr_accessor :rubicon_non_guaranteed_terms
      
        # For deals with Cost Per Day billing, defines the timezone used to mark the
        # boundaries of a day (buyer-readonly)
        # Corresponds to the JSON property `sellerTimeZone`
        # @return [String]
        attr_accessor :seller_time_zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @branding_type = args[:branding_type] if args.key?(:branding_type)
          @cross_listed_external_deal_id_type = args[:cross_listed_external_deal_id_type] if args.key?(:cross_listed_external_deal_id_type)
          @description = args[:description] if args.key?(:description)
          @estimated_gross_spend = args[:estimated_gross_spend] if args.key?(:estimated_gross_spend)
          @estimated_impressions_per_day = args[:estimated_impressions_per_day] if args.key?(:estimated_impressions_per_day)
          @guaranteed_fixed_price_terms = args[:guaranteed_fixed_price_terms] if args.key?(:guaranteed_fixed_price_terms)
          @non_guaranteed_auction_terms = args[:non_guaranteed_auction_terms] if args.key?(:non_guaranteed_auction_terms)
          @non_guaranteed_fixed_price_terms = args[:non_guaranteed_fixed_price_terms] if args.key?(:non_guaranteed_fixed_price_terms)
          @rubicon_non_guaranteed_terms = args[:rubicon_non_guaranteed_terms] if args.key?(:rubicon_non_guaranteed_terms)
          @seller_time_zone = args[:seller_time_zone] if args.key?(:seller_time_zone)
        end
      end
      
      # 
      class DealTermsGuaranteedFixedPriceTerms
        include Google::Apis::Core::Hashable
      
        # External billing info for this Deal. This field is relevant when external
        # billing info such as price has a different currency code than DFP/AdX.
        # Corresponds to the JSON property `billingInfo`
        # @return [Google::Apis::AdexchangebuyerV1_4::DealTermsGuaranteedFixedPriceTermsBillingInfo]
        attr_accessor :billing_info
      
        # Fixed price for the specified buyer.
        # Corresponds to the JSON property `fixedPrices`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::PricePerBuyer>]
        attr_accessor :fixed_prices
      
        # Guaranteed impressions as a percentage. This is the percentage of guaranteed
        # looks that the buyer is guaranteeing to buy.
        # Corresponds to the JSON property `guaranteedImpressions`
        # @return [Fixnum]
        attr_accessor :guaranteed_impressions
      
        # Count of guaranteed looks. Required for deal, optional for product. For CPD
        # deals, buyer changes to guaranteed_looks will be ignored.
        # Corresponds to the JSON property `guaranteedLooks`
        # @return [Fixnum]
        attr_accessor :guaranteed_looks
      
        # Count of minimum daily looks for a CPD deal. For CPD deals, buyer should
        # negotiate on this field instead of guaranteed_looks.
        # Corresponds to the JSON property `minimumDailyLooks`
        # @return [Fixnum]
        attr_accessor :minimum_daily_looks
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @billing_info = args[:billing_info] if args.key?(:billing_info)
          @fixed_prices = args[:fixed_prices] if args.key?(:fixed_prices)
          @guaranteed_impressions = args[:guaranteed_impressions] if args.key?(:guaranteed_impressions)
          @guaranteed_looks = args[:guaranteed_looks] if args.key?(:guaranteed_looks)
          @minimum_daily_looks = args[:minimum_daily_looks] if args.key?(:minimum_daily_looks)
        end
      end
      
      # 
      class DealTermsGuaranteedFixedPriceTermsBillingInfo
        include Google::Apis::Core::Hashable
      
        # The timestamp (in ms since epoch) when the original reservation price for the
        # deal was first converted to DFP currency. This is used to convert the
        # contracted price into buyer's currency without discrepancy.
        # Corresponds to the JSON property `currencyConversionTimeMs`
        # @return [Fixnum]
        attr_accessor :currency_conversion_time_ms
      
        # The DFP line item id associated with this deal. For features like CPD, buyers
        # can retrieve the DFP line item for billing reconciliation.
        # Corresponds to the JSON property `dfpLineItemId`
        # @return [Fixnum]
        attr_accessor :dfp_line_item_id
      
        # The original contracted quantity (# impressions) for this deal. To ensure
        # delivery, sometimes the publisher will book the deal with a impression buffer,
        # such that guaranteed_looks is greater than the contracted quantity. However
        # clients are billed using the original contracted quantity.
        # Corresponds to the JSON property `originalContractedQuantity`
        # @return [Fixnum]
        attr_accessor :original_contracted_quantity
      
        # The original reservation price for the deal, if the currency code is different
        # from the one used in negotiation.
        # Corresponds to the JSON property `price`
        # @return [Google::Apis::AdexchangebuyerV1_4::Price]
        attr_accessor :price
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @currency_conversion_time_ms = args[:currency_conversion_time_ms] if args.key?(:currency_conversion_time_ms)
          @dfp_line_item_id = args[:dfp_line_item_id] if args.key?(:dfp_line_item_id)
          @original_contracted_quantity = args[:original_contracted_quantity] if args.key?(:original_contracted_quantity)
          @price = args[:price] if args.key?(:price)
        end
      end
      
      # 
      class DealTermsNonGuaranteedAuctionTerms
        include Google::Apis::Core::Hashable
      
        # True if open auction buyers are allowed to compete with invited buyers in this
        # private auction (buyer-readonly).
        # Corresponds to the JSON property `autoOptimizePrivateAuction`
        # @return [Boolean]
        attr_accessor :auto_optimize_private_auction
        alias_method :auto_optimize_private_auction?, :auto_optimize_private_auction
      
        # Reserve price for the specified buyer.
        # Corresponds to the JSON property `reservePricePerBuyers`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::PricePerBuyer>]
        attr_accessor :reserve_price_per_buyers
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auto_optimize_private_auction = args[:auto_optimize_private_auction] if args.key?(:auto_optimize_private_auction)
          @reserve_price_per_buyers = args[:reserve_price_per_buyers] if args.key?(:reserve_price_per_buyers)
        end
      end
      
      # 
      class DealTermsNonGuaranteedFixedPriceTerms
        include Google::Apis::Core::Hashable
      
        # Fixed price for the specified buyer.
        # Corresponds to the JSON property `fixedPrices`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::PricePerBuyer>]
        attr_accessor :fixed_prices
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @fixed_prices = args[:fixed_prices] if args.key?(:fixed_prices)
        end
      end
      
      # 
      class DealTermsRubiconNonGuaranteedTerms
        include Google::Apis::Core::Hashable
      
        # Optional price for Rubicon priority access in the auction.
        # Corresponds to the JSON property `priorityPrice`
        # @return [Google::Apis::AdexchangebuyerV1_4::Price]
        attr_accessor :priority_price
      
        # Optional price for Rubicon standard access in the auction.
        # Corresponds to the JSON property `standardPrice`
        # @return [Google::Apis::AdexchangebuyerV1_4::Price]
        attr_accessor :standard_price
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @priority_price = args[:priority_price] if args.key?(:priority_price)
          @standard_price = args[:standard_price] if args.key?(:standard_price)
        end
      end
      
      # 
      class DeleteOrderDealsRequest
        include Google::Apis::Core::Hashable
      
        # List of deals to delete for a given proposal
        # Corresponds to the JSON property `dealIds`
        # @return [Array<String>]
        attr_accessor :deal_ids
      
        # The last known proposal revision number.
        # Corresponds to the JSON property `proposalRevisionNumber`
        # @return [Fixnum]
        attr_accessor :proposal_revision_number
      
        # Indicates an optional action to take on the proposal
        # Corresponds to the JSON property `updateAction`
        # @return [String]
        attr_accessor :update_action
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @deal_ids = args[:deal_ids] if args.key?(:deal_ids)
          @proposal_revision_number = args[:proposal_revision_number] if args.key?(:proposal_revision_number)
          @update_action = args[:update_action] if args.key?(:update_action)
        end
      end
      
      # 
      class DeleteOrderDealsResponse
        include Google::Apis::Core::Hashable
      
        # List of deals deleted (in the same proposal as passed in the request)
        # Corresponds to the JSON property `deals`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::MarketplaceDeal>]
        attr_accessor :deals
      
        # The updated revision number for the proposal.
        # Corresponds to the JSON property `proposalRevisionNumber`
        # @return [Fixnum]
        attr_accessor :proposal_revision_number
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @deals = args[:deals] if args.key?(:deals)
          @proposal_revision_number = args[:proposal_revision_number] if args.key?(:proposal_revision_number)
        end
      end
      
      # 
      class DeliveryControl
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `creativeBlockingLevel`
        # @return [String]
        attr_accessor :creative_blocking_level
      
        # 
        # Corresponds to the JSON property `deliveryRateType`
        # @return [String]
        attr_accessor :delivery_rate_type
      
        # 
        # Corresponds to the JSON property `frequencyCaps`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::DeliveryControlFrequencyCap>]
        attr_accessor :frequency_caps
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creative_blocking_level = args[:creative_blocking_level] if args.key?(:creative_blocking_level)
          @delivery_rate_type = args[:delivery_rate_type] if args.key?(:delivery_rate_type)
          @frequency_caps = args[:frequency_caps] if args.key?(:frequency_caps)
        end
      end
      
      # 
      class DeliveryControlFrequencyCap
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `maxImpressions`
        # @return [Fixnum]
        attr_accessor :max_impressions
      
        # 
        # Corresponds to the JSON property `numTimeUnits`
        # @return [Fixnum]
        attr_accessor :num_time_units
      
        # 
        # Corresponds to the JSON property `timeUnitType`
        # @return [String]
        attr_accessor :time_unit_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max_impressions = args[:max_impressions] if args.key?(:max_impressions)
          @num_time_units = args[:num_time_units] if args.key?(:num_time_units)
          @time_unit_type = args[:time_unit_type] if args.key?(:time_unit_type)
        end
      end
      
      # This message carries publisher provided breakdown. E.g. `dimension_type: '
      # COUNTRY', [`dimension_value: `id: 1, name: 'US'``, `dimension_value: `id: 2,
      # name: 'UK'``]`
      class Dimension
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `dimensionType`
        # @return [String]
        attr_accessor :dimension_type
      
        # 
        # Corresponds to the JSON property `dimensionValues`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::DimensionDimensionValue>]
        attr_accessor :dimension_values
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @dimension_type = args[:dimension_type] if args.key?(:dimension_type)
          @dimension_values = args[:dimension_values] if args.key?(:dimension_values)
        end
      end
      
      # Value of the dimension.
      class DimensionDimensionValue
        include Google::Apis::Core::Hashable
      
        # Id of the dimension.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Name of the dimension mainly for debugging purposes, except for the case of
        # CREATIVE_SIZE. For CREATIVE_SIZE, strings are used instead of ids.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Percent of total impressions for a dimension type. e.g. `dimension_type: '
        # GENDER', [`dimension_value: `id: 1, name: 'MALE', percentage: 60``]` Gender
        # MALE is 60% of all impressions which have gender.
        # Corresponds to the JSON property `percentage`
        # @return [Fixnum]
        attr_accessor :percentage
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @name = args[:name] if args.key?(:name)
          @percentage = args[:percentage] if args.key?(:percentage)
        end
      end
      
      # 
      class EditAllOrderDealsRequest
        include Google::Apis::Core::Hashable
      
        # List of deals to edit. Service may perform 3 different operations based on
        # comparison of deals in this list vs deals already persisted in database: 1.
        # Add new deal to proposal If a deal in this list does not exist in the proposal,
        # the service will create a new deal and add it to the proposal. Validation
        # will follow AddOrderDealsRequest. 2. Update existing deal in the proposal If a
        # deal in this list already exist in the proposal, the service will update that
        # existing deal to this new deal in the request. Validation will follow
        # UpdateOrderDealsRequest. 3. Delete deals from the proposal (just need the id)
        # If a existing deal in the proposal is not present in this list, the service
        # will delete that deal from the proposal. Validation will follow
        # DeleteOrderDealsRequest.
        # Corresponds to the JSON property `deals`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::MarketplaceDeal>]
        attr_accessor :deals
      
        # Represents a proposal in the marketplace. A proposal is the unit of
        # negotiation between a seller and a buyer and contains deals which are served.
        # Each field in a proposal can have one of the following setting:
        # (readonly) - It is an error to try and set this field. (buyer-readonly) - Only
        # the seller can set this field. (seller-readonly) - Only the buyer can set this
        # field. (updatable) - The field is updatable at all times by either buyer or
        # the seller.
        # Corresponds to the JSON property `proposal`
        # @return [Google::Apis::AdexchangebuyerV1_4::Proposal]
        attr_accessor :proposal
      
        # The last known revision number for the proposal.
        # Corresponds to the JSON property `proposalRevisionNumber`
        # @return [Fixnum]
        attr_accessor :proposal_revision_number
      
        # Indicates an optional action to take on the proposal
        # Corresponds to the JSON property `updateAction`
        # @return [String]
        attr_accessor :update_action
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @deals = args[:deals] if args.key?(:deals)
          @proposal = args[:proposal] if args.key?(:proposal)
          @proposal_revision_number = args[:proposal_revision_number] if args.key?(:proposal_revision_number)
          @update_action = args[:update_action] if args.key?(:update_action)
        end
      end
      
      # 
      class EditAllOrderDealsResponse
        include Google::Apis::Core::Hashable
      
        # List of all deals in the proposal after edit.
        # Corresponds to the JSON property `deals`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::MarketplaceDeal>]
        attr_accessor :deals
      
        # The latest revision number after the update has been applied.
        # Corresponds to the JSON property `orderRevisionNumber`
        # @return [Fixnum]
        attr_accessor :order_revision_number
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @deals = args[:deals] if args.key?(:deals)
          @order_revision_number = args[:order_revision_number] if args.key?(:order_revision_number)
        end
      end
      
      # 
      class GetOffersResponse
        include Google::Apis::Core::Hashable
      
        # The returned list of products.
        # Corresponds to the JSON property `products`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::Product>]
        attr_accessor :products
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @products = args[:products] if args.key?(:products)
        end
      end
      
      # 
      class GetOrderDealsResponse
        include Google::Apis::Core::Hashable
      
        # List of deals for the proposal
        # Corresponds to the JSON property `deals`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::MarketplaceDeal>]
        attr_accessor :deals
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @deals = args[:deals] if args.key?(:deals)
        end
      end
      
      # 
      class GetOrderNotesResponse
        include Google::Apis::Core::Hashable
      
        # The list of matching notes. The notes for a proposal are ordered from oldest
        # to newest. If the notes span multiple proposals, they will be grouped by
        # proposal, with the notes for the most recently modified proposal appearing
        # first.
        # Corresponds to the JSON property `notes`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::MarketplaceNote>]
        attr_accessor :notes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @notes = args[:notes] if args.key?(:notes)
        end
      end
      
      # 
      class GetOrdersResponse
        include Google::Apis::Core::Hashable
      
        # The list of matching proposals.
        # Corresponds to the JSON property `proposals`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::Proposal>]
        attr_accessor :proposals
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @proposals = args[:proposals] if args.key?(:proposals)
        end
      end
      
      # 
      class GetPublisherProfilesByAccountIdResponse
        include Google::Apis::Core::Hashable
      
        # Profiles for the requested publisher
        # Corresponds to the JSON property `profiles`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::PublisherProfileApiProto>]
        attr_accessor :profiles
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @profiles = args[:profiles] if args.key?(:profiles)
        end
      end
      
      # A proposal can contain multiple deals. A deal contains the terms and targeting
      # information that is used for serving.
      class MarketplaceDeal
        include Google::Apis::Core::Hashable
      
        # Buyer private data (hidden from seller).
        # Corresponds to the JSON property `buyerPrivateData`
        # @return [Google::Apis::AdexchangebuyerV1_4::PrivateData]
        attr_accessor :buyer_private_data
      
        # The time (ms since epoch) of the deal creation. (readonly)
        # Corresponds to the JSON property `creationTimeMs`
        # @return [Fixnum]
        attr_accessor :creation_time_ms
      
        # Specifies the creative pre-approval policy (buyer-readonly)
        # Corresponds to the JSON property `creativePreApprovalPolicy`
        # @return [String]
        attr_accessor :creative_pre_approval_policy
      
        # Specifies whether the creative is safeFrame compatible (buyer-readonly)
        # Corresponds to the JSON property `creativeSafeFrameCompatibility`
        # @return [String]
        attr_accessor :creative_safe_frame_compatibility
      
        # A unique deal-id for the deal (readonly).
        # Corresponds to the JSON property `dealId`
        # @return [String]
        attr_accessor :deal_id
      
        # Metadata about the serving status of this deal (readonly, writes via custom
        # actions)
        # Corresponds to the JSON property `dealServingMetadata`
        # @return [Google::Apis::AdexchangebuyerV1_4::DealServingMetadata]
        attr_accessor :deal_serving_metadata
      
        # The set of fields around delivery control that are interesting for a buyer to
        # see but are non-negotiable. These are set by the publisher. This message is
        # assigned an id of 100 since some day we would want to model this as a protobuf
        # extension.
        # Corresponds to the JSON property `deliveryControl`
        # @return [Google::Apis::AdexchangebuyerV1_4::DeliveryControl]
        attr_accessor :delivery_control
      
        # The external deal id assigned to this deal once the deal is finalized. This is
        # the deal-id that shows up in serving/reporting etc. (readonly)
        # Corresponds to the JSON property `externalDealId`
        # @return [String]
        attr_accessor :external_deal_id
      
        # Proposed flight end time of the deal (ms since epoch) This will generally be
        # stored in a granularity of a second. (updatable)
        # Corresponds to the JSON property `flightEndTimeMs`
        # @return [Fixnum]
        attr_accessor :flight_end_time_ms
      
        # Proposed flight start time of the deal (ms since epoch) This will generally be
        # stored in a granularity of a second. (updatable)
        # Corresponds to the JSON property `flightStartTimeMs`
        # @return [Fixnum]
        attr_accessor :flight_start_time_ms
      
        # Description for the deal terms. (buyer-readonly)
        # Corresponds to the JSON property `inventoryDescription`
        # @return [String]
        attr_accessor :inventory_description
      
        # Indicates whether the current deal is a RFP template. RFP template is created
        # by buyer and not based on seller created products.
        # Corresponds to the JSON property `isRfpTemplate`
        # @return [Boolean]
        attr_accessor :is_rfp_template
        alias_method :is_rfp_template?, :is_rfp_template
      
        # True, if the buyside inventory setup is complete for this deal. (readonly,
        # except via OrderSetupCompleted action)
        # Corresponds to the JSON property `isSetupComplete`
        # @return [Boolean]
        attr_accessor :is_setup_complete
        alias_method :is_setup_complete?, :is_setup_complete
      
        # Identifies what kind of resource this is. Value: the fixed string "
        # adexchangebuyer#marketplaceDeal".
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The time (ms since epoch) when the deal was last updated. (readonly)
        # Corresponds to the JSON property `lastUpdateTimeMs`
        # @return [Fixnum]
        attr_accessor :last_update_time_ms
      
        # 
        # Corresponds to the JSON property `makegoodRequestedReason`
        # @return [String]
        attr_accessor :makegood_requested_reason
      
        # The name of the deal. (updatable)
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The product-id from which this deal was created. (readonly, except on create)
        # Corresponds to the JSON property `productId`
        # @return [String]
        attr_accessor :product_id
      
        # The revision number of the product that the deal was created from (readonly,
        # except on create)
        # Corresponds to the JSON property `productRevisionNumber`
        # @return [Fixnum]
        attr_accessor :product_revision_number
      
        # Specifies the creative source for programmatic deals, PUBLISHER means creative
        # is provided by seller and ADVERTISR means creative is provided by buyer. (
        # buyer-readonly)
        # Corresponds to the JSON property `programmaticCreativeSource`
        # @return [String]
        attr_accessor :programmatic_creative_source
      
        # 
        # Corresponds to the JSON property `proposalId`
        # @return [String]
        attr_accessor :proposal_id
      
        # Optional Seller contact information for the deal (buyer-readonly)
        # Corresponds to the JSON property `sellerContacts`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::ContactInformation>]
        attr_accessor :seller_contacts
      
        # The shared targeting visible to buyers and sellers. Each shared targeting
        # entity is AND'd together. (updatable)
        # Corresponds to the JSON property `sharedTargetings`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::SharedTargeting>]
        attr_accessor :shared_targetings
      
        # The syndication product associated with the deal. (readonly, except on create)
        # Corresponds to the JSON property `syndicationProduct`
        # @return [String]
        attr_accessor :syndication_product
      
        # The negotiable terms of the deal. (updatable)
        # Corresponds to the JSON property `terms`
        # @return [Google::Apis::AdexchangebuyerV1_4::DealTerms]
        attr_accessor :terms
      
        # 
        # Corresponds to the JSON property `webPropertyCode`
        # @return [String]
        attr_accessor :web_property_code
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @buyer_private_data = args[:buyer_private_data] if args.key?(:buyer_private_data)
          @creation_time_ms = args[:creation_time_ms] if args.key?(:creation_time_ms)
          @creative_pre_approval_policy = args[:creative_pre_approval_policy] if args.key?(:creative_pre_approval_policy)
          @creative_safe_frame_compatibility = args[:creative_safe_frame_compatibility] if args.key?(:creative_safe_frame_compatibility)
          @deal_id = args[:deal_id] if args.key?(:deal_id)
          @deal_serving_metadata = args[:deal_serving_metadata] if args.key?(:deal_serving_metadata)
          @delivery_control = args[:delivery_control] if args.key?(:delivery_control)
          @external_deal_id = args[:external_deal_id] if args.key?(:external_deal_id)
          @flight_end_time_ms = args[:flight_end_time_ms] if args.key?(:flight_end_time_ms)
          @flight_start_time_ms = args[:flight_start_time_ms] if args.key?(:flight_start_time_ms)
          @inventory_description = args[:inventory_description] if args.key?(:inventory_description)
          @is_rfp_template = args[:is_rfp_template] if args.key?(:is_rfp_template)
          @is_setup_complete = args[:is_setup_complete] if args.key?(:is_setup_complete)
          @kind = args[:kind] if args.key?(:kind)
          @last_update_time_ms = args[:last_update_time_ms] if args.key?(:last_update_time_ms)
          @makegood_requested_reason = args[:makegood_requested_reason] if args.key?(:makegood_requested_reason)
          @name = args[:name] if args.key?(:name)
          @product_id = args[:product_id] if args.key?(:product_id)
          @product_revision_number = args[:product_revision_number] if args.key?(:product_revision_number)
          @programmatic_creative_source = args[:programmatic_creative_source] if args.key?(:programmatic_creative_source)
          @proposal_id = args[:proposal_id] if args.key?(:proposal_id)
          @seller_contacts = args[:seller_contacts] if args.key?(:seller_contacts)
          @shared_targetings = args[:shared_targetings] if args.key?(:shared_targetings)
          @syndication_product = args[:syndication_product] if args.key?(:syndication_product)
          @terms = args[:terms] if args.key?(:terms)
          @web_property_code = args[:web_property_code] if args.key?(:web_property_code)
        end
      end
      
      # 
      class MarketplaceDealParty
        include Google::Apis::Core::Hashable
      
        # The buyer/seller associated with the deal. One of buyer/seller is specified
        # for a deal-party.
        # Corresponds to the JSON property `buyer`
        # @return [Google::Apis::AdexchangebuyerV1_4::Buyer]
        attr_accessor :buyer
      
        # The buyer/seller associated with the deal. One of buyer/seller is specified
        # for a deal party.
        # Corresponds to the JSON property `seller`
        # @return [Google::Apis::AdexchangebuyerV1_4::Seller]
        attr_accessor :seller
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @buyer = args[:buyer] if args.key?(:buyer)
          @seller = args[:seller] if args.key?(:seller)
        end
      end
      
      # 
      class MarketplaceLabel
        include Google::Apis::Core::Hashable
      
        # The accountId of the party that created the label.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id
      
        # The creation time (in ms since epoch) for the label.
        # Corresponds to the JSON property `createTimeMs`
        # @return [Fixnum]
        attr_accessor :create_time_ms
      
        # Information about the party that created the label.
        # Corresponds to the JSON property `deprecatedMarketplaceDealParty`
        # @return [Google::Apis::AdexchangebuyerV1_4::MarketplaceDealParty]
        attr_accessor :deprecated_marketplace_deal_party
      
        # The label to use.
        # Corresponds to the JSON property `label`
        # @return [String]
        attr_accessor :label
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @create_time_ms = args[:create_time_ms] if args.key?(:create_time_ms)
          @deprecated_marketplace_deal_party = args[:deprecated_marketplace_deal_party] if args.key?(:deprecated_marketplace_deal_party)
          @label = args[:label] if args.key?(:label)
        end
      end
      
      # A proposal is associated with a bunch of notes which may optionally be
      # associated with a deal and/or revision number.
      class MarketplaceNote
        include Google::Apis::Core::Hashable
      
        # The role of the person (buyer/seller) creating the note. (readonly)
        # Corresponds to the JSON property `creatorRole`
        # @return [String]
        attr_accessor :creator_role
      
        # Notes can optionally be associated with a deal. (readonly, except on create)
        # Corresponds to the JSON property `dealId`
        # @return [String]
        attr_accessor :deal_id
      
        # Identifies what kind of resource this is. Value: the fixed string "
        # adexchangebuyer#marketplaceNote".
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The actual note to attach. (readonly, except on create)
        # Corresponds to the JSON property `note`
        # @return [String]
        attr_accessor :note
      
        # The unique id for the note. (readonly)
        # Corresponds to the JSON property `noteId`
        # @return [String]
        attr_accessor :note_id
      
        # The proposalId that a note is attached to. (readonly)
        # Corresponds to the JSON property `proposalId`
        # @return [String]
        attr_accessor :proposal_id
      
        # If the note is associated with a proposal revision number, then store that
        # here. (readonly, except on create)
        # Corresponds to the JSON property `proposalRevisionNumber`
        # @return [Fixnum]
        attr_accessor :proposal_revision_number
      
        # The timestamp (ms since epoch) that this note was created. (readonly)
        # Corresponds to the JSON property `timestampMs`
        # @return [Fixnum]
        attr_accessor :timestamp_ms
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creator_role = args[:creator_role] if args.key?(:creator_role)
          @deal_id = args[:deal_id] if args.key?(:deal_id)
          @kind = args[:kind] if args.key?(:kind)
          @note = args[:note] if args.key?(:note)
          @note_id = args[:note_id] if args.key?(:note_id)
          @proposal_id = args[:proposal_id] if args.key?(:proposal_id)
          @proposal_revision_number = args[:proposal_revision_number] if args.key?(:proposal_revision_number)
          @timestamp_ms = args[:timestamp_ms] if args.key?(:timestamp_ms)
        end
      end
      
      # 
      class MobileApplication
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `appStore`
        # @return [String]
        attr_accessor :app_store
      
        # 
        # Corresponds to the JSON property `externalAppId`
        # @return [String]
        attr_accessor :external_app_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @app_store = args[:app_store] if args.key?(:app_store)
          @external_app_id = args[:external_app_id] if args.key?(:external_app_id)
        end
      end
      
      # The configuration data for an Ad Exchange performance report list.
      class PerformanceReport
        include Google::Apis::Core::Hashable
      
        # The number of bid responses with an ad.
        # Corresponds to the JSON property `bidRate`
        # @return [Float]
        attr_accessor :bid_rate
      
        # The number of bid requests sent to your bidder.
        # Corresponds to the JSON property `bidRequestRate`
        # @return [Float]
        attr_accessor :bid_request_rate
      
        # Rate of various prefiltering statuses per match. Please refer to the callout-
        # status-codes.txt file for different statuses.
        # Corresponds to the JSON property `calloutStatusRate`
        # @return [Array<Object>]
        attr_accessor :callout_status_rate
      
        # Average QPS for cookie matcher operations.
        # Corresponds to the JSON property `cookieMatcherStatusRate`
        # @return [Array<Object>]
        attr_accessor :cookie_matcher_status_rate
      
        # Rate of ads with a given status. Please refer to the creative-status-codes.txt
        # file for different statuses.
        # Corresponds to the JSON property `creativeStatusRate`
        # @return [Array<Object>]
        attr_accessor :creative_status_rate
      
        # The number of bid responses that were filtered due to a policy violation or
        # other errors.
        # Corresponds to the JSON property `filteredBidRate`
        # @return [Float]
        attr_accessor :filtered_bid_rate
      
        # Average QPS for hosted match operations.
        # Corresponds to the JSON property `hostedMatchStatusRate`
        # @return [Array<Object>]
        attr_accessor :hosted_match_status_rate
      
        # The number of potential queries based on your pretargeting settings.
        # Corresponds to the JSON property `inventoryMatchRate`
        # @return [Float]
        attr_accessor :inventory_match_rate
      
        # Resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The 50th percentile round trip latency(ms) as perceived from Google servers
        # for the duration period covered by the report.
        # Corresponds to the JSON property `latency50thPercentile`
        # @return [Float]
        attr_accessor :latency_50th_percentile
      
        # The 85th percentile round trip latency(ms) as perceived from Google servers
        # for the duration period covered by the report.
        # Corresponds to the JSON property `latency85thPercentile`
        # @return [Float]
        attr_accessor :latency_85th_percentile
      
        # The 95th percentile round trip latency(ms) as perceived from Google servers
        # for the duration period covered by the report.
        # Corresponds to the JSON property `latency95thPercentile`
        # @return [Float]
        attr_accessor :latency_95th_percentile
      
        # Rate of various quota account statuses per quota check.
        # Corresponds to the JSON property `noQuotaInRegion`
        # @return [Float]
        attr_accessor :no_quota_in_region
      
        # Rate of various quota account statuses per quota check.
        # Corresponds to the JSON property `outOfQuota`
        # @return [Float]
        attr_accessor :out_of_quota
      
        # Average QPS for pixel match requests from clients.
        # Corresponds to the JSON property `pixelMatchRequests`
        # @return [Float]
        attr_accessor :pixel_match_requests
      
        # Average QPS for pixel match responses from clients.
        # Corresponds to the JSON property `pixelMatchResponses`
        # @return [Float]
        attr_accessor :pixel_match_responses
      
        # The configured quota limits for this account.
        # Corresponds to the JSON property `quotaConfiguredLimit`
        # @return [Float]
        attr_accessor :quota_configured_limit
      
        # The throttled quota limits for this account.
        # Corresponds to the JSON property `quotaThrottledLimit`
        # @return [Float]
        attr_accessor :quota_throttled_limit
      
        # The trading location of this data.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # The number of properly formed bid responses received by our servers within the
        # deadline.
        # Corresponds to the JSON property `successfulRequestRate`
        # @return [Float]
        attr_accessor :successful_request_rate
      
        # The unix timestamp of the starting time of this performance data.
        # Corresponds to the JSON property `timestamp`
        # @return [Fixnum]
        attr_accessor :timestamp
      
        # The number of bid responses that were unsuccessful due to timeouts, incorrect
        # formatting, etc.
        # Corresponds to the JSON property `unsuccessfulRequestRate`
        # @return [Float]
        attr_accessor :unsuccessful_request_rate
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bid_rate = args[:bid_rate] if args.key?(:bid_rate)
          @bid_request_rate = args[:bid_request_rate] if args.key?(:bid_request_rate)
          @callout_status_rate = args[:callout_status_rate] if args.key?(:callout_status_rate)
          @cookie_matcher_status_rate = args[:cookie_matcher_status_rate] if args.key?(:cookie_matcher_status_rate)
          @creative_status_rate = args[:creative_status_rate] if args.key?(:creative_status_rate)
          @filtered_bid_rate = args[:filtered_bid_rate] if args.key?(:filtered_bid_rate)
          @hosted_match_status_rate = args[:hosted_match_status_rate] if args.key?(:hosted_match_status_rate)
          @inventory_match_rate = args[:inventory_match_rate] if args.key?(:inventory_match_rate)
          @kind = args[:kind] if args.key?(:kind)
          @latency_50th_percentile = args[:latency_50th_percentile] if args.key?(:latency_50th_percentile)
          @latency_85th_percentile = args[:latency_85th_percentile] if args.key?(:latency_85th_percentile)
          @latency_95th_percentile = args[:latency_95th_percentile] if args.key?(:latency_95th_percentile)
          @no_quota_in_region = args[:no_quota_in_region] if args.key?(:no_quota_in_region)
          @out_of_quota = args[:out_of_quota] if args.key?(:out_of_quota)
          @pixel_match_requests = args[:pixel_match_requests] if args.key?(:pixel_match_requests)
          @pixel_match_responses = args[:pixel_match_responses] if args.key?(:pixel_match_responses)
          @quota_configured_limit = args[:quota_configured_limit] if args.key?(:quota_configured_limit)
          @quota_throttled_limit = args[:quota_throttled_limit] if args.key?(:quota_throttled_limit)
          @region = args[:region] if args.key?(:region)
          @successful_request_rate = args[:successful_request_rate] if args.key?(:successful_request_rate)
          @timestamp = args[:timestamp] if args.key?(:timestamp)
          @unsuccessful_request_rate = args[:unsuccessful_request_rate] if args.key?(:unsuccessful_request_rate)
        end
      end
      
      # The configuration data for an Ad Exchange performance report list.
      class PerformanceReportList
        include Google::Apis::Core::Hashable
      
        # Resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A list of performance reports relevant for the account.
        # Corresponds to the JSON property `performanceReport`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::PerformanceReport>]
        attr_accessor :performance_report
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @kind = args[:kind] if args.key?(:kind)
          @performance_report = args[:performance_report] if args.key?(:performance_report)
        end
      end
      
      # 
      class PretargetingConfig
        include Google::Apis::Core::Hashable
      
        # The id for billing purposes, provided for reference. Leave this field blank
        # for insert requests; the id will be generated automatically.
        # Corresponds to the JSON property `billingId`
        # @return [Fixnum]
        attr_accessor :billing_id
      
        # The config id; generated automatically. Leave this field blank for insert
        # requests.
        # Corresponds to the JSON property `configId`
        # @return [Fixnum]
        attr_accessor :config_id
      
        # The name of the config. Must be unique. Required for all requests.
        # Corresponds to the JSON property `configName`
        # @return [String]
        attr_accessor :config_name
      
        # List must contain exactly one of PRETARGETING_CREATIVE_TYPE_HTML or
        # PRETARGETING_CREATIVE_TYPE_VIDEO.
        # Corresponds to the JSON property `creativeType`
        # @return [Array<String>]
        attr_accessor :creative_type
      
        # Requests which allow one of these (width, height) pairs will match. All pairs
        # must be supported ad dimensions.
        # Corresponds to the JSON property `dimensions`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::PretargetingConfig::Dimension>]
        attr_accessor :dimensions
      
        # Requests with any of these content labels will not match. Values are from
        # content-labels.txt in the downloadable files section.
        # Corresponds to the JSON property `excludedContentLabels`
        # @return [Array<Fixnum>]
        attr_accessor :excluded_content_labels
      
        # Requests containing any of these geo criteria ids will not match.
        # Corresponds to the JSON property `excludedGeoCriteriaIds`
        # @return [Array<Fixnum>]
        attr_accessor :excluded_geo_criteria_ids
      
        # Requests containing any of these placements will not match.
        # Corresponds to the JSON property `excludedPlacements`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::PretargetingConfig::ExcludedPlacement>]
        attr_accessor :excluded_placements
      
        # Requests containing any of these users list ids will not match.
        # Corresponds to the JSON property `excludedUserLists`
        # @return [Array<Fixnum>]
        attr_accessor :excluded_user_lists
      
        # Requests containing any of these vertical ids will not match. Values are from
        # the publisher-verticals.txt file in the downloadable files section.
        # Corresponds to the JSON property `excludedVerticals`
        # @return [Array<Fixnum>]
        attr_accessor :excluded_verticals
      
        # Requests containing any of these geo criteria ids will match.
        # Corresponds to the JSON property `geoCriteriaIds`
        # @return [Array<Fixnum>]
        attr_accessor :geo_criteria_ids
      
        # Whether this config is active. Required for all requests.
        # Corresponds to the JSON property `isActive`
        # @return [Boolean]
        attr_accessor :is_active
        alias_method :is_active?, :is_active
      
        # The kind of the resource, i.e. "adexchangebuyer#pretargetingConfig".
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Request containing any of these language codes will match.
        # Corresponds to the JSON property `languages`
        # @return [Array<String>]
        attr_accessor :languages
      
        # The maximum QPS allocated to this pretargeting configuration, used for
        # pretargeting-level QPS limits. By default, this is not set, which indicates
        # that there is no QPS limit at the configuration level (a global or account-
        # level limit may still be imposed).
        # Corresponds to the JSON property `maximumQps`
        # @return [Fixnum]
        attr_accessor :maximum_qps
      
        # Requests where the predicted viewability is below the specified decile will
        # not match. E.g. if the buyer sets this value to 5, requests from slots where
        # the predicted viewability is below 50% will not match. If the predicted
        # viewability is unknown this field will be ignored.
        # Corresponds to the JSON property `minimumViewabilityDecile`
        # @return [Fixnum]
        attr_accessor :minimum_viewability_decile
      
        # Requests containing any of these mobile carrier ids will match. Values are
        # from mobile-carriers.csv in the downloadable files section.
        # Corresponds to the JSON property `mobileCarriers`
        # @return [Array<Fixnum>]
        attr_accessor :mobile_carriers
      
        # Requests containing any of these mobile device ids will match. Values are from
        # mobile-devices.csv in the downloadable files section.
        # Corresponds to the JSON property `mobileDevices`
        # @return [Array<Fixnum>]
        attr_accessor :mobile_devices
      
        # Requests containing any of these mobile operating system version ids will
        # match. Values are from mobile-os.csv in the downloadable files section.
        # Corresponds to the JSON property `mobileOperatingSystemVersions`
        # @return [Array<Fixnum>]
        attr_accessor :mobile_operating_system_versions
      
        # Requests containing any of these placements will match.
        # Corresponds to the JSON property `placements`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::PretargetingConfig::Placement>]
        attr_accessor :placements
      
        # Requests matching any of these platforms will match. Possible values are
        # PRETARGETING_PLATFORM_MOBILE, PRETARGETING_PLATFORM_DESKTOP, and
        # PRETARGETING_PLATFORM_TABLET.
        # Corresponds to the JSON property `platforms`
        # @return [Array<String>]
        attr_accessor :platforms
      
        # Creative attributes should be declared here if all creatives corresponding to
        # this pretargeting configuration have that creative attribute. Values are from
        # pretargetable-creative-attributes.txt in the downloadable files section.
        # Corresponds to the JSON property `supportedCreativeAttributes`
        # @return [Array<Fixnum>]
        attr_accessor :supported_creative_attributes
      
        # Requests containing the specified type of user data will match. Possible
        # values are HOSTED_MATCH_DATA, which means the request is cookie-targetable and
        # has a match in the buyer's hosted match table, and COOKIE_OR_IDFA, which means
        # the request has either a targetable cookie or an iOS IDFA.
        # Corresponds to the JSON property `userIdentifierDataRequired`
        # @return [Array<String>]
        attr_accessor :user_identifier_data_required
      
        # Requests containing any of these user list ids will match.
        # Corresponds to the JSON property `userLists`
        # @return [Array<Fixnum>]
        attr_accessor :user_lists
      
        # Requests that allow any of these vendor ids will match. Values are from
        # vendors.txt in the downloadable files section.
        # Corresponds to the JSON property `vendorTypes`
        # @return [Array<Fixnum>]
        attr_accessor :vendor_types
      
        # Requests containing any of these vertical ids will match.
        # Corresponds to the JSON property `verticals`
        # @return [Array<Fixnum>]
        attr_accessor :verticals
      
        # Video requests satisfying any of these player size constraints will match.
        # Corresponds to the JSON property `videoPlayerSizes`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::PretargetingConfig::VideoPlayerSize>]
        attr_accessor :video_player_sizes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @billing_id = args[:billing_id] if args.key?(:billing_id)
          @config_id = args[:config_id] if args.key?(:config_id)
          @config_name = args[:config_name] if args.key?(:config_name)
          @creative_type = args[:creative_type] if args.key?(:creative_type)
          @dimensions = args[:dimensions] if args.key?(:dimensions)
          @excluded_content_labels = args[:excluded_content_labels] if args.key?(:excluded_content_labels)
          @excluded_geo_criteria_ids = args[:excluded_geo_criteria_ids] if args.key?(:excluded_geo_criteria_ids)
          @excluded_placements = args[:excluded_placements] if args.key?(:excluded_placements)
          @excluded_user_lists = args[:excluded_user_lists] if args.key?(:excluded_user_lists)
          @excluded_verticals = args[:excluded_verticals] if args.key?(:excluded_verticals)
          @geo_criteria_ids = args[:geo_criteria_ids] if args.key?(:geo_criteria_ids)
          @is_active = args[:is_active] if args.key?(:is_active)
          @kind = args[:kind] if args.key?(:kind)
          @languages = args[:languages] if args.key?(:languages)
          @maximum_qps = args[:maximum_qps] if args.key?(:maximum_qps)
          @minimum_viewability_decile = args[:minimum_viewability_decile] if args.key?(:minimum_viewability_decile)
          @mobile_carriers = args[:mobile_carriers] if args.key?(:mobile_carriers)
          @mobile_devices = args[:mobile_devices] if args.key?(:mobile_devices)
          @mobile_operating_system_versions = args[:mobile_operating_system_versions] if args.key?(:mobile_operating_system_versions)
          @placements = args[:placements] if args.key?(:placements)
          @platforms = args[:platforms] if args.key?(:platforms)
          @supported_creative_attributes = args[:supported_creative_attributes] if args.key?(:supported_creative_attributes)
          @user_identifier_data_required = args[:user_identifier_data_required] if args.key?(:user_identifier_data_required)
          @user_lists = args[:user_lists] if args.key?(:user_lists)
          @vendor_types = args[:vendor_types] if args.key?(:vendor_types)
          @verticals = args[:verticals] if args.key?(:verticals)
          @video_player_sizes = args[:video_player_sizes] if args.key?(:video_player_sizes)
        end
        
        # 
        class Dimension
          include Google::Apis::Core::Hashable
        
          # Height in pixels.
          # Corresponds to the JSON property `height`
          # @return [Fixnum]
          attr_accessor :height
        
          # Width in pixels.
          # Corresponds to the JSON property `width`
          # @return [Fixnum]
          attr_accessor :width
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @height = args[:height] if args.key?(:height)
            @width = args[:width] if args.key?(:width)
          end
        end
        
        # 
        class ExcludedPlacement
          include Google::Apis::Core::Hashable
        
          # The value of the placement. Interpretation depends on the placement type, e.g.
          # URL for a site placement, channel name for a channel placement, app id for a
          # mobile app placement.
          # Corresponds to the JSON property `token`
          # @return [String]
          attr_accessor :token
        
          # The type of the placement.
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @token = args[:token] if args.key?(:token)
            @type = args[:type] if args.key?(:type)
          end
        end
        
        # 
        class Placement
          include Google::Apis::Core::Hashable
        
          # The value of the placement. Interpretation depends on the placement type, e.g.
          # URL for a site placement, channel name for a channel placement, app id for a
          # mobile app placement.
          # Corresponds to the JSON property `token`
          # @return [String]
          attr_accessor :token
        
          # The type of the placement.
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @token = args[:token] if args.key?(:token)
            @type = args[:type] if args.key?(:type)
          end
        end
        
        # 
        class VideoPlayerSize
          include Google::Apis::Core::Hashable
        
          # The type of aspect ratio. Leave this field blank to match all aspect ratios.
          # Corresponds to the JSON property `aspectRatio`
          # @return [String]
          attr_accessor :aspect_ratio
        
          # The minimum player height in pixels. Leave this field blank to match any
          # player height.
          # Corresponds to the JSON property `minHeight`
          # @return [Fixnum]
          attr_accessor :min_height
        
          # The minimum player width in pixels. Leave this field blank to match any player
          # width.
          # Corresponds to the JSON property `minWidth`
          # @return [Fixnum]
          attr_accessor :min_width
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @aspect_ratio = args[:aspect_ratio] if args.key?(:aspect_ratio)
            @min_height = args[:min_height] if args.key?(:min_height)
            @min_width = args[:min_width] if args.key?(:min_width)
          end
        end
      end
      
      # 
      class PretargetingConfigList
        include Google::Apis::Core::Hashable
      
        # A list of pretargeting configs
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::PretargetingConfig>]
        attr_accessor :items
      
        # Resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
        end
      end
      
      # 
      class Price
        include Google::Apis::Core::Hashable
      
        # The price value in micros.
        # Corresponds to the JSON property `amountMicros`
        # @return [Float]
        attr_accessor :amount_micros
      
        # The currency code for the price.
        # Corresponds to the JSON property `currencyCode`
        # @return [String]
        attr_accessor :currency_code
      
        # In case of CPD deals, the expected CPM in micros.
        # Corresponds to the JSON property `expectedCpmMicros`
        # @return [Float]
        attr_accessor :expected_cpm_micros
      
        # The pricing type for the deal/product.
        # Corresponds to the JSON property `pricingType`
        # @return [String]
        attr_accessor :pricing_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @amount_micros = args[:amount_micros] if args.key?(:amount_micros)
          @currency_code = args[:currency_code] if args.key?(:currency_code)
          @expected_cpm_micros = args[:expected_cpm_micros] if args.key?(:expected_cpm_micros)
          @pricing_type = args[:pricing_type] if args.key?(:pricing_type)
        end
      end
      
      # Used to specify pricing rules for buyers. Each PricePerBuyer in a product can
      # become [0,1] deals. To check if there is a PricePerBuyer for a particular
      # buyer we look for the most specific matching rule - we first look for a rule
      # matching the buyer and otherwise look for a matching rule where no buyer is
      # set.
      class PricePerBuyer
        include Google::Apis::Core::Hashable
      
        # Optional access type for this buyer.
        # Corresponds to the JSON property `auctionTier`
        # @return [String]
        attr_accessor :auction_tier
      
        # Reference to the buyer that will get billed.
        # Corresponds to the JSON property `billedBuyer`
        # @return [Google::Apis::AdexchangebuyerV1_4::Buyer]
        attr_accessor :billed_buyer
      
        # The buyer who will pay this price. If unset, all buyers can pay this price (if
        # the advertisers match, and there's no more specific rule matching the buyer).
        # Corresponds to the JSON property `buyer`
        # @return [Google::Apis::AdexchangebuyerV1_4::Buyer]
        attr_accessor :buyer
      
        # The specified price
        # Corresponds to the JSON property `price`
        # @return [Google::Apis::AdexchangebuyerV1_4::Price]
        attr_accessor :price
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auction_tier = args[:auction_tier] if args.key?(:auction_tier)
          @billed_buyer = args[:billed_buyer] if args.key?(:billed_buyer)
          @buyer = args[:buyer] if args.key?(:buyer)
          @price = args[:price] if args.key?(:price)
        end
      end
      
      # 
      class PrivateData
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `referenceId`
        # @return [String]
        attr_accessor :reference_id
      
        # 
        # Corresponds to the JSON property `referencePayload`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :reference_payload
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @reference_id = args[:reference_id] if args.key?(:reference_id)
          @reference_payload = args[:reference_payload] if args.key?(:reference_payload)
        end
      end
      
      # A product is segment of inventory that a seller wishes to sell. It is
      # associated with certain terms and targeting information which helps buyer know
      # more about the inventory. Each field in a product can have one of the
      # following setting:
      # (readonly) - It is an error to try and set this field. (buyer-readonly) - Only
      # the seller can set this field. (seller-readonly) - Only the buyer can set this
      # field. (updatable) - The field is updatable at all times by either buyer or
      # the seller.
      class Product
        include Google::Apis::Core::Hashable
      
        # The billed buyer corresponding to the buyer that created the offer. (readonly,
        # except on create)
        # Corresponds to the JSON property `billedBuyer`
        # @return [Google::Apis::AdexchangebuyerV1_4::Buyer]
        attr_accessor :billed_buyer
      
        # The buyer that created the offer if this is a buyer initiated offer (readonly,
        # except on create)
        # Corresponds to the JSON property `buyer`
        # @return [Google::Apis::AdexchangebuyerV1_4::Buyer]
        attr_accessor :buyer
      
        # Creation time in ms. since epoch (readonly)
        # Corresponds to the JSON property `creationTimeMs`
        # @return [Fixnum]
        attr_accessor :creation_time_ms
      
        # Optional contact information for the creator of this product. (buyer-readonly)
        # Corresponds to the JSON property `creatorContacts`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::ContactInformation>]
        attr_accessor :creator_contacts
      
        # The role that created the offer. Set to BUYER for buyer initiated offers.
        # Corresponds to the JSON property `creatorRole`
        # @return [String]
        attr_accessor :creator_role
      
        # The set of fields around delivery control that are interesting for a buyer to
        # see but are non-negotiable. These are set by the publisher. This message is
        # assigned an id of 100 since some day we would want to model this as a protobuf
        # extension.
        # Corresponds to the JSON property `deliveryControl`
        # @return [Google::Apis::AdexchangebuyerV1_4::DeliveryControl]
        attr_accessor :delivery_control
      
        # The proposed end time for the deal (ms since epoch) (buyer-readonly)
        # Corresponds to the JSON property `flightEndTimeMs`
        # @return [Fixnum]
        attr_accessor :flight_end_time_ms
      
        # Inventory availability dates. (times are in ms since epoch) The granularity is
        # generally in the order of seconds. (buyer-readonly)
        # Corresponds to the JSON property `flightStartTimeMs`
        # @return [Fixnum]
        attr_accessor :flight_start_time_ms
      
        # If the creator has already signed off on the product, then the buyer can
        # finalize the deal by accepting the product as is. When copying to a proposal,
        # if any of the terms are changed, then auto_finalize is automatically set to
        # false.
        # Corresponds to the JSON property `hasCreatorSignedOff`
        # @return [Boolean]
        attr_accessor :has_creator_signed_off
        alias_method :has_creator_signed_off?, :has_creator_signed_off
      
        # What exchange will provide this inventory (readonly, except on create).
        # Corresponds to the JSON property `inventorySource`
        # @return [String]
        attr_accessor :inventory_source
      
        # Identifies what kind of resource this is. Value: the fixed string "
        # adexchangebuyer#product".
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Optional List of labels for the product (optional, buyer-readonly).
        # Corresponds to the JSON property `labels`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::MarketplaceLabel>]
        attr_accessor :labels
      
        # Time of last update in ms. since epoch (readonly)
        # Corresponds to the JSON property `lastUpdateTimeMs`
        # @return [Fixnum]
        attr_accessor :last_update_time_ms
      
        # Optional legacy offer id if this offer is a preferred deal offer.
        # Corresponds to the JSON property `legacyOfferId`
        # @return [String]
        attr_accessor :legacy_offer_id
      
        # Marketplace publisher profile Id. This Id differs from the regular
        # publisher_profile_id in that 1. This is a new id, the old Id will be
        # deprecated in 2017. 2. This id uniquely identifies a publisher profile by
        # itself.
        # Corresponds to the JSON property `marketplacePublisherProfileId`
        # @return [String]
        attr_accessor :marketplace_publisher_profile_id
      
        # The name for this product as set by the seller. (buyer-readonly)
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Optional private auction id if this offer is a private auction offer.
        # Corresponds to the JSON property `privateAuctionId`
        # @return [String]
        attr_accessor :private_auction_id
      
        # The unique id for the product (readonly)
        # Corresponds to the JSON property `productId`
        # @return [String]
        attr_accessor :product_id
      
        # Id of the publisher profile for a given seller. A (seller.account_id,
        # publisher_profile_id) pair uniquely identifies a publisher profile. Buyers can
        # call the PublisherProfiles::List endpoint to get a list of publisher profiles
        # for a given seller.
        # Corresponds to the JSON property `publisherProfileId`
        # @return [String]
        attr_accessor :publisher_profile_id
      
        # This message carries publisher provided forecasting information.
        # Corresponds to the JSON property `publisherProvidedForecast`
        # @return [Google::Apis::AdexchangebuyerV1_4::PublisherProvidedForecast]
        attr_accessor :publisher_provided_forecast
      
        # The revision number of the product. (readonly)
        # Corresponds to the JSON property `revisionNumber`
        # @return [Fixnum]
        attr_accessor :revision_number
      
        # Information about the seller that created this product (readonly, except on
        # create)
        # Corresponds to the JSON property `seller`
        # @return [Google::Apis::AdexchangebuyerV1_4::Seller]
        attr_accessor :seller
      
        # Targeting that is shared between the buyer and the seller. Each targeting
        # criteria has a specified key and for each key there is a list of inclusion
        # value or exclusion values. (buyer-readonly)
        # Corresponds to the JSON property `sharedTargetings`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::SharedTargeting>]
        attr_accessor :shared_targetings
      
        # The state of the product. (buyer-readonly)
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # The syndication product associated with the deal. (readonly, except on create)
        # Corresponds to the JSON property `syndicationProduct`
        # @return [String]
        attr_accessor :syndication_product
      
        # The negotiable terms of the deal (buyer-readonly)
        # Corresponds to the JSON property `terms`
        # @return [Google::Apis::AdexchangebuyerV1_4::DealTerms]
        attr_accessor :terms
      
        # The web property code for the seller. This field is meant to be copied over as
        # is when creating deals.
        # Corresponds to the JSON property `webPropertyCode`
        # @return [String]
        attr_accessor :web_property_code
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @billed_buyer = args[:billed_buyer] if args.key?(:billed_buyer)
          @buyer = args[:buyer] if args.key?(:buyer)
          @creation_time_ms = args[:creation_time_ms] if args.key?(:creation_time_ms)
          @creator_contacts = args[:creator_contacts] if args.key?(:creator_contacts)
          @creator_role = args[:creator_role] if args.key?(:creator_role)
          @delivery_control = args[:delivery_control] if args.key?(:delivery_control)
          @flight_end_time_ms = args[:flight_end_time_ms] if args.key?(:flight_end_time_ms)
          @flight_start_time_ms = args[:flight_start_time_ms] if args.key?(:flight_start_time_ms)
          @has_creator_signed_off = args[:has_creator_signed_off] if args.key?(:has_creator_signed_off)
          @inventory_source = args[:inventory_source] if args.key?(:inventory_source)
          @kind = args[:kind] if args.key?(:kind)
          @labels = args[:labels] if args.key?(:labels)
          @last_update_time_ms = args[:last_update_time_ms] if args.key?(:last_update_time_ms)
          @legacy_offer_id = args[:legacy_offer_id] if args.key?(:legacy_offer_id)
          @marketplace_publisher_profile_id = args[:marketplace_publisher_profile_id] if args.key?(:marketplace_publisher_profile_id)
          @name = args[:name] if args.key?(:name)
          @private_auction_id = args[:private_auction_id] if args.key?(:private_auction_id)
          @product_id = args[:product_id] if args.key?(:product_id)
          @publisher_profile_id = args[:publisher_profile_id] if args.key?(:publisher_profile_id)
          @publisher_provided_forecast = args[:publisher_provided_forecast] if args.key?(:publisher_provided_forecast)
          @revision_number = args[:revision_number] if args.key?(:revision_number)
          @seller = args[:seller] if args.key?(:seller)
          @shared_targetings = args[:shared_targetings] if args.key?(:shared_targetings)
          @state = args[:state] if args.key?(:state)
          @syndication_product = args[:syndication_product] if args.key?(:syndication_product)
          @terms = args[:terms] if args.key?(:terms)
          @web_property_code = args[:web_property_code] if args.key?(:web_property_code)
        end
      end
      
      # Represents a proposal in the marketplace. A proposal is the unit of
      # negotiation between a seller and a buyer and contains deals which are served.
      # Each field in a proposal can have one of the following setting:
      # (readonly) - It is an error to try and set this field. (buyer-readonly) - Only
      # the seller can set this field. (seller-readonly) - Only the buyer can set this
      # field. (updatable) - The field is updatable at all times by either buyer or
      # the seller.
      class Proposal
        include Google::Apis::Core::Hashable
      
        # Reference to the buyer that will get billed for this proposal. (readonly)
        # Corresponds to the JSON property `billedBuyer`
        # @return [Google::Apis::AdexchangebuyerV1_4::Buyer]
        attr_accessor :billed_buyer
      
        # Reference to the buyer on the proposal. (readonly, except on create)
        # Corresponds to the JSON property `buyer`
        # @return [Google::Apis::AdexchangebuyerV1_4::Buyer]
        attr_accessor :buyer
      
        # Optional contact information of the buyer. (seller-readonly)
        # Corresponds to the JSON property `buyerContacts`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::ContactInformation>]
        attr_accessor :buyer_contacts
      
        # Private data for buyer. (hidden from seller).
        # Corresponds to the JSON property `buyerPrivateData`
        # @return [Google::Apis::AdexchangebuyerV1_4::PrivateData]
        attr_accessor :buyer_private_data
      
        # IDs of DBM advertisers permission to this proposal.
        # Corresponds to the JSON property `dbmAdvertiserIds`
        # @return [Array<String>]
        attr_accessor :dbm_advertiser_ids
      
        # When an proposal is in an accepted state, indicates whether the buyer has
        # signed off. Once both sides have signed off on a deal, the proposal can be
        # finalized by the seller. (seller-readonly)
        # Corresponds to the JSON property `hasBuyerSignedOff`
        # @return [Boolean]
        attr_accessor :has_buyer_signed_off
        alias_method :has_buyer_signed_off?, :has_buyer_signed_off
      
        # When an proposal is in an accepted state, indicates whether the buyer has
        # signed off Once both sides have signed off on a deal, the proposal can be
        # finalized by the seller. (buyer-readonly)
        # Corresponds to the JSON property `hasSellerSignedOff`
        # @return [Boolean]
        attr_accessor :has_seller_signed_off
        alias_method :has_seller_signed_off?, :has_seller_signed_off
      
        # What exchange will provide this inventory (readonly, except on create).
        # Corresponds to the JSON property `inventorySource`
        # @return [String]
        attr_accessor :inventory_source
      
        # True if the proposal is being renegotiated (readonly).
        # Corresponds to the JSON property `isRenegotiating`
        # @return [Boolean]
        attr_accessor :is_renegotiating
        alias_method :is_renegotiating?, :is_renegotiating
      
        # True, if the buyside inventory setup is complete for this proposal. (readonly,
        # except via OrderSetupCompleted action) Deprecated in favor of deal level setup
        # complete flag.
        # Corresponds to the JSON property `isSetupComplete`
        # @return [Boolean]
        attr_accessor :is_setup_complete
        alias_method :is_setup_complete?, :is_setup_complete
      
        # Identifies what kind of resource this is. Value: the fixed string "
        # adexchangebuyer#proposal".
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # List of labels associated with the proposal. (readonly)
        # Corresponds to the JSON property `labels`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::MarketplaceLabel>]
        attr_accessor :labels
      
        # The role of the last user that either updated the proposal or left a comment. (
        # readonly)
        # Corresponds to the JSON property `lastUpdaterOrCommentorRole`
        # @return [String]
        attr_accessor :last_updater_or_commentor_role
      
        # The name for the proposal (updatable)
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Optional negotiation id if this proposal is a preferred deal proposal.
        # Corresponds to the JSON property `negotiationId`
        # @return [String]
        attr_accessor :negotiation_id
      
        # Indicates whether the buyer/seller created the proposal.(readonly)
        # Corresponds to the JSON property `originatorRole`
        # @return [String]
        attr_accessor :originator_role
      
        # Optional private auction id if this proposal is a private auction proposal.
        # Corresponds to the JSON property `privateAuctionId`
        # @return [String]
        attr_accessor :private_auction_id
      
        # The unique id of the proposal. (readonly).
        # Corresponds to the JSON property `proposalId`
        # @return [String]
        attr_accessor :proposal_id
      
        # The current state of the proposal. (readonly)
        # Corresponds to the JSON property `proposalState`
        # @return [String]
        attr_accessor :proposal_state
      
        # The revision number for the proposal (readonly).
        # Corresponds to the JSON property `revisionNumber`
        # @return [Fixnum]
        attr_accessor :revision_number
      
        # The time (ms since epoch) when the proposal was last revised (readonly).
        # Corresponds to the JSON property `revisionTimeMs`
        # @return [Fixnum]
        attr_accessor :revision_time_ms
      
        # Reference to the seller on the proposal. (readonly, except on create)
        # Corresponds to the JSON property `seller`
        # @return [Google::Apis::AdexchangebuyerV1_4::Seller]
        attr_accessor :seller
      
        # Optional contact information of the seller (buyer-readonly).
        # Corresponds to the JSON property `sellerContacts`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::ContactInformation>]
        attr_accessor :seller_contacts
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @billed_buyer = args[:billed_buyer] if args.key?(:billed_buyer)
          @buyer = args[:buyer] if args.key?(:buyer)
          @buyer_contacts = args[:buyer_contacts] if args.key?(:buyer_contacts)
          @buyer_private_data = args[:buyer_private_data] if args.key?(:buyer_private_data)
          @dbm_advertiser_ids = args[:dbm_advertiser_ids] if args.key?(:dbm_advertiser_ids)
          @has_buyer_signed_off = args[:has_buyer_signed_off] if args.key?(:has_buyer_signed_off)
          @has_seller_signed_off = args[:has_seller_signed_off] if args.key?(:has_seller_signed_off)
          @inventory_source = args[:inventory_source] if args.key?(:inventory_source)
          @is_renegotiating = args[:is_renegotiating] if args.key?(:is_renegotiating)
          @is_setup_complete = args[:is_setup_complete] if args.key?(:is_setup_complete)
          @kind = args[:kind] if args.key?(:kind)
          @labels = args[:labels] if args.key?(:labels)
          @last_updater_or_commentor_role = args[:last_updater_or_commentor_role] if args.key?(:last_updater_or_commentor_role)
          @name = args[:name] if args.key?(:name)
          @negotiation_id = args[:negotiation_id] if args.key?(:negotiation_id)
          @originator_role = args[:originator_role] if args.key?(:originator_role)
          @private_auction_id = args[:private_auction_id] if args.key?(:private_auction_id)
          @proposal_id = args[:proposal_id] if args.key?(:proposal_id)
          @proposal_state = args[:proposal_state] if args.key?(:proposal_state)
          @revision_number = args[:revision_number] if args.key?(:revision_number)
          @revision_time_ms = args[:revision_time_ms] if args.key?(:revision_time_ms)
          @seller = args[:seller] if args.key?(:seller)
          @seller_contacts = args[:seller_contacts] if args.key?(:seller_contacts)
        end
      end
      
      # 
      class PublisherProfileApiProto
        include Google::Apis::Core::Hashable
      
        # Publisher provided info on its audience.
        # Corresponds to the JSON property `audience`
        # @return [String]
        attr_accessor :audience
      
        # A pitch statement for the buyer
        # Corresponds to the JSON property `buyerPitchStatement`
        # @return [String]
        attr_accessor :buyer_pitch_statement
      
        # Direct contact for the publisher profile.
        # Corresponds to the JSON property `directContact`
        # @return [String]
        attr_accessor :direct_contact
      
        # Exchange where this publisher profile is from. E.g. AdX, Rubicon etc...
        # Corresponds to the JSON property `exchange`
        # @return [String]
        attr_accessor :exchange
      
        # Link to publisher's Google+ page.
        # Corresponds to the JSON property `googlePlusLink`
        # @return [String]
        attr_accessor :google_plus_link
      
        # True, if this is the parent profile, which represents all domains owned by the
        # publisher.
        # Corresponds to the JSON property `isParent`
        # @return [Boolean]
        attr_accessor :is_parent
        alias_method :is_parent?, :is_parent
      
        # True, if this profile is published. Deprecated for state.
        # Corresponds to the JSON property `isPublished`
        # @return [Boolean]
        attr_accessor :is_published
        alias_method :is_published?, :is_published
      
        # Identifies what kind of resource this is. Value: the fixed string "
        # adexchangebuyer#publisherProfileApiProto".
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The url to the logo for the publisher.
        # Corresponds to the JSON property `logoUrl`
        # @return [String]
        attr_accessor :logo_url
      
        # The url for additional marketing and sales materials.
        # Corresponds to the JSON property `mediaKitLink`
        # @return [String]
        attr_accessor :media_kit_link
      
        # 
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Publisher provided overview.
        # Corresponds to the JSON property `overview`
        # @return [String]
        attr_accessor :overview
      
        # The pair of (seller.account_id, profile_id) uniquely identifies a publisher
        # profile for a given publisher.
        # Corresponds to the JSON property `profileId`
        # @return [Fixnum]
        attr_accessor :profile_id
      
        # Programmatic contact for the publisher profile.
        # Corresponds to the JSON property `programmaticContact`
        # @return [String]
        attr_accessor :programmatic_contact
      
        # The list of app IDs represented in this pubisher profile. Empty if this is a
        # parent profile. Deprecated in favor of publisher_app.
        # Corresponds to the JSON property `publisherAppIds`
        # @return [Array<Fixnum>]
        attr_accessor :publisher_app_ids
      
        # The list of apps represented in this pubisher profile. Empty if this is a
        # parent profile.
        # Corresponds to the JSON property `publisherApps`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::MobileApplication>]
        attr_accessor :publisher_apps
      
        # The list of domains represented in this publisher profile. Empty if this is a
        # parent profile.
        # Corresponds to the JSON property `publisherDomains`
        # @return [Array<String>]
        attr_accessor :publisher_domains
      
        # Unique Id for publisher profile.
        # Corresponds to the JSON property `publisherProfileId`
        # @return [String]
        attr_accessor :publisher_profile_id
      
        # This message carries publisher provided forecasting information.
        # Corresponds to the JSON property `publisherProvidedForecast`
        # @return [Google::Apis::AdexchangebuyerV1_4::PublisherProvidedForecast]
        attr_accessor :publisher_provided_forecast
      
        # Link to publisher rate card
        # Corresponds to the JSON property `rateCardInfoLink`
        # @return [String]
        attr_accessor :rate_card_info_link
      
        # Link for a sample content page.
        # Corresponds to the JSON property `samplePageLink`
        # @return [String]
        attr_accessor :sample_page_link
      
        # Seller of the publisher profile.
        # Corresponds to the JSON property `seller`
        # @return [Google::Apis::AdexchangebuyerV1_4::Seller]
        attr_accessor :seller
      
        # State of the publisher profile.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # Publisher provided key metrics and rankings.
        # Corresponds to the JSON property `topHeadlines`
        # @return [Array<String>]
        attr_accessor :top_headlines
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @audience = args[:audience] if args.key?(:audience)
          @buyer_pitch_statement = args[:buyer_pitch_statement] if args.key?(:buyer_pitch_statement)
          @direct_contact = args[:direct_contact] if args.key?(:direct_contact)
          @exchange = args[:exchange] if args.key?(:exchange)
          @google_plus_link = args[:google_plus_link] if args.key?(:google_plus_link)
          @is_parent = args[:is_parent] if args.key?(:is_parent)
          @is_published = args[:is_published] if args.key?(:is_published)
          @kind = args[:kind] if args.key?(:kind)
          @logo_url = args[:logo_url] if args.key?(:logo_url)
          @media_kit_link = args[:media_kit_link] if args.key?(:media_kit_link)
          @name = args[:name] if args.key?(:name)
          @overview = args[:overview] if args.key?(:overview)
          @profile_id = args[:profile_id] if args.key?(:profile_id)
          @programmatic_contact = args[:programmatic_contact] if args.key?(:programmatic_contact)
          @publisher_app_ids = args[:publisher_app_ids] if args.key?(:publisher_app_ids)
          @publisher_apps = args[:publisher_apps] if args.key?(:publisher_apps)
          @publisher_domains = args[:publisher_domains] if args.key?(:publisher_domains)
          @publisher_profile_id = args[:publisher_profile_id] if args.key?(:publisher_profile_id)
          @publisher_provided_forecast = args[:publisher_provided_forecast] if args.key?(:publisher_provided_forecast)
          @rate_card_info_link = args[:rate_card_info_link] if args.key?(:rate_card_info_link)
          @sample_page_link = args[:sample_page_link] if args.key?(:sample_page_link)
          @seller = args[:seller] if args.key?(:seller)
          @state = args[:state] if args.key?(:state)
          @top_headlines = args[:top_headlines] if args.key?(:top_headlines)
        end
      end
      
      # This message carries publisher provided forecasting information.
      class PublisherProvidedForecast
        include Google::Apis::Core::Hashable
      
        # Publisher provided dimensions. E.g. geo, sizes etc...
        # Corresponds to the JSON property `dimensions`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::Dimension>]
        attr_accessor :dimensions
      
        # Publisher provided weekly impressions.
        # Corresponds to the JSON property `weeklyImpressions`
        # @return [Fixnum]
        attr_accessor :weekly_impressions
      
        # Publisher provided weekly uniques.
        # Corresponds to the JSON property `weeklyUniques`
        # @return [Fixnum]
        attr_accessor :weekly_uniques
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @dimensions = args[:dimensions] if args.key?(:dimensions)
          @weekly_impressions = args[:weekly_impressions] if args.key?(:weekly_impressions)
          @weekly_uniques = args[:weekly_uniques] if args.key?(:weekly_uniques)
        end
      end
      
      # 
      class Seller
        include Google::Apis::Core::Hashable
      
        # The unique id for the seller. The seller fills in this field. The seller
        # account id is then available to buyer in the product.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id
      
        # Optional sub-account id for the seller.
        # Corresponds to the JSON property `subAccountId`
        # @return [String]
        attr_accessor :sub_account_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @sub_account_id = args[:sub_account_id] if args.key?(:sub_account_id)
        end
      end
      
      # 
      class SharedTargeting
        include Google::Apis::Core::Hashable
      
        # The list of values to exclude from targeting. Each value is AND'd together.
        # Corresponds to the JSON property `exclusions`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::TargetingValue>]
        attr_accessor :exclusions
      
        # The list of value to include as part of the targeting. Each value is OR'd
        # together.
        # Corresponds to the JSON property `inclusions`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::TargetingValue>]
        attr_accessor :inclusions
      
        # The key representing the shared targeting criterion.
        # Corresponds to the JSON property `key`
        # @return [String]
        attr_accessor :key
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @exclusions = args[:exclusions] if args.key?(:exclusions)
          @inclusions = args[:inclusions] if args.key?(:inclusions)
          @key = args[:key] if args.key?(:key)
        end
      end
      
      # 
      class TargetingValue
        include Google::Apis::Core::Hashable
      
        # Next Id: 7
        # Corresponds to the JSON property `creativeSizeValue`
        # @return [Google::Apis::AdexchangebuyerV1_4::TargetingValueCreativeSize]
        attr_accessor :creative_size_value
      
        # The daypart targeting to include / exclude. Filled in when the key is
        # GOOG_DAYPART_TARGETING.
        # Corresponds to the JSON property `dayPartTargetingValue`
        # @return [Google::Apis::AdexchangebuyerV1_4::TargetingValueDayPartTargeting]
        attr_accessor :day_part_targeting_value
      
        # 
        # Corresponds to the JSON property `demogAgeCriteriaValue`
        # @return [Google::Apis::AdexchangebuyerV1_4::TargetingValueDemogAgeCriteria]
        attr_accessor :demog_age_criteria_value
      
        # 
        # Corresponds to the JSON property `demogGenderCriteriaValue`
        # @return [Google::Apis::AdexchangebuyerV1_4::TargetingValueDemogGenderCriteria]
        attr_accessor :demog_gender_criteria_value
      
        # The long value to exclude/include.
        # Corresponds to the JSON property `longValue`
        # @return [Fixnum]
        attr_accessor :long_value
      
        # 
        # Corresponds to the JSON property `requestPlatformTargetingValue`
        # @return [Google::Apis::AdexchangebuyerV1_4::TargetingValueRequestPlatformTargeting]
        attr_accessor :request_platform_targeting_value
      
        # The string value to exclude/include.
        # Corresponds to the JSON property `stringValue`
        # @return [String]
        attr_accessor :string_value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creative_size_value = args[:creative_size_value] if args.key?(:creative_size_value)
          @day_part_targeting_value = args[:day_part_targeting_value] if args.key?(:day_part_targeting_value)
          @demog_age_criteria_value = args[:demog_age_criteria_value] if args.key?(:demog_age_criteria_value)
          @demog_gender_criteria_value = args[:demog_gender_criteria_value] if args.key?(:demog_gender_criteria_value)
          @long_value = args[:long_value] if args.key?(:long_value)
          @request_platform_targeting_value = args[:request_platform_targeting_value] if args.key?(:request_platform_targeting_value)
          @string_value = args[:string_value] if args.key?(:string_value)
        end
      end
      
      # Next Id: 7
      class TargetingValueCreativeSize
        include Google::Apis::Core::Hashable
      
        # The formats allowed by the publisher.
        # Corresponds to the JSON property `allowedFormats`
        # @return [Array<String>]
        attr_accessor :allowed_formats
      
        # For video size type, the list of companion sizes.
        # Corresponds to the JSON property `companionSizes`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::TargetingValueSize>]
        attr_accessor :companion_sizes
      
        # The Creative size type.
        # Corresponds to the JSON property `creativeSizeType`
        # @return [String]
        attr_accessor :creative_size_type
      
        # The native template for native ad.
        # Corresponds to the JSON property `nativeTemplate`
        # @return [String]
        attr_accessor :native_template
      
        # For regular or video creative size type, specifies the size of the creative.
        # Corresponds to the JSON property `size`
        # @return [Google::Apis::AdexchangebuyerV1_4::TargetingValueSize]
        attr_accessor :size
      
        # The skippable ad type for video size.
        # Corresponds to the JSON property `skippableAdType`
        # @return [String]
        attr_accessor :skippable_ad_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @allowed_formats = args[:allowed_formats] if args.key?(:allowed_formats)
          @companion_sizes = args[:companion_sizes] if args.key?(:companion_sizes)
          @creative_size_type = args[:creative_size_type] if args.key?(:creative_size_type)
          @native_template = args[:native_template] if args.key?(:native_template)
          @size = args[:size] if args.key?(:size)
          @skippable_ad_type = args[:skippable_ad_type] if args.key?(:skippable_ad_type)
        end
      end
      
      # 
      class TargetingValueDayPartTargeting
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `dayParts`
        # @return [Array<Google::Apis::AdexchangebuyerV1_4::TargetingValueDayPartTargetingDayPart>]
        attr_accessor :day_parts
      
        # 
        # Corresponds to the JSON property `timeZoneType`
        # @return [String]
        attr_accessor :time_zone_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @day_parts = args[:day_parts] if args.key?(:day_parts)
          @time_zone_type = args[:time_zone_type] if args.key?(:time_zone_type)
        end
      end
      
      # 
      class TargetingValueDayPartTargetingDayPart
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `dayOfWeek`
        # @return [String]
        attr_accessor :day_of_week
      
        # 
        # Corresponds to the JSON property `endHour`
        # @return [Fixnum]
        attr_accessor :end_hour
      
        # 
        # Corresponds to the JSON property `endMinute`
        # @return [Fixnum]
        attr_accessor :end_minute
      
        # 
        # Corresponds to the JSON property `startHour`
        # @return [Fixnum]
        attr_accessor :start_hour
      
        # 
        # Corresponds to the JSON property `startMinute`
        # @return [Fixnum]
        attr_accessor :start_minute
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @day_of_week = args[:day_of_week] if args.key?(:day_of_week)
          @end_hour = args[:end_hour] if args.key?(:end_hour)
          @end_minute = args[:end_minute] if args.key?(:end_minute)
          @start_hour = args[:start_hour] if args.key?(:start_hour)
          @start_minute = args[:start_minute] if args.key?(:start_minute)
        end
      end
      
      # 
      class TargetingValueDemogAgeCriteria
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `demogAgeCriteriaIds`
        # @return [Array<String>]
        attr_accessor :demog_age_criteria_ids
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @demog_age_criteria_ids = args[:demog_age_criteria_ids] if args.key?(:demog_age_criteria_ids)
        end
      end
      
      # 
      class TargetingValueDemogGenderCriteria
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `demogGenderCriteriaIds`
        # @return [Array<String>]
        attr_accessor :demog_gender_criteria_ids
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @demog_gender_criteria_ids = args[:demog_gender_criteria_ids] if args.key?(:demog_gender_criteria_ids)
        end
      end
      
      # 
      class TargetingValueRequestPlatformTargeting
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `requestPlatforms`
        # @return [Array<String>]
        attr_accessor :request_platforms
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @request_platforms = args[:request_platforms] if args.key?(:request_platforms)
        end
      end
      
      # 
      class TargetingValueSize
        include Google::Apis::Core::Hashable
      
        # The height of the creative.
        # Corresponds to the JSON property `height`
        # @return [Fixnum]
        attr_accessor :height
      
        # The width of the creative.
        # Corresponds to the JSON property `width`
        # @return [Fixnum]
        attr_accessor :width
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @height = args[:height] if args.key?(:height)
          @width = args[:width] if args.key?(:width)
        end
      end
      
      # 
      class UpdatePrivateAuctionProposalRequest
        include Google::Apis::Core::Hashable
      
        # The externalDealId of the deal to be updated.
        # Corresponds to the JSON property `externalDealId`
        # @return [String]
        attr_accessor :external_deal_id
      
        # A proposal is associated with a bunch of notes which may optionally be
        # associated with a deal and/or revision number.
        # Corresponds to the JSON property `note`
        # @return [Google::Apis::AdexchangebuyerV1_4::MarketplaceNote]
        attr_accessor :note
      
        # The current revision number of the proposal to be updated.
        # Corresponds to the JSON property `proposalRevisionNumber`
        # @return [Fixnum]
        attr_accessor :proposal_revision_number
      
        # The proposed action on the private auction proposal.
        # Corresponds to the JSON property `updateAction`
        # @return [String]
        attr_accessor :update_action
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @external_deal_id = args[:external_deal_id] if args.key?(:external_deal_id)
          @note = args[:note] if args.key?(:note)
          @proposal_revision_number = args[:proposal_revision_number] if args.key?(:proposal_revision_number)
          @update_action = args[:update_action] if args.key?(:update_action)
        end
      end
    end
  end
end
