diff --git a/googleapis/cloud/talent/v4beta1/batch.pb.go b/googleapis/cloud/talent/v4beta1/batch.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..5b20fa7e4da414f1c7f21e8781f77d851015531d
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/batch.pb.go
@@ -0,0 +1,43 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/batch.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import _ "github.com/golang/protobuf/ptypes/timestamp"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import _ "google.golang.org/genproto/googleapis/rpc/status"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/batch.proto", fileDescriptor_batch_e40bc7b5c76520cb)
+}
+
+var fileDescriptor_batch_e40bc7b5c76520cb = []byte{
+	// 200 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0xcf, 0xb1, 0x6a, 0xc3, 0x30,
+	0x10, 0x06, 0x60, 0xda, 0x42, 0x07, 0x8f, 0x5d, 0x0a, 0x6e, 0xc1, 0x53, 0xe9, 0xa6, 0xa3, 0xb4,
+	0x5b, 0xa7, 0xba, 0x2f, 0x60, 0x48, 0xa6, 0x6c, 0x27, 0x45, 0x51, 0x14, 0x64, 0x9d, 0xb0, 0xce,
+	0x21, 0xcf, 0x93, 0x27, 0x0d, 0x96, 0x6e, 0x0c, 0x1e, 0x0f, 0x7d, 0x77, 0xff, 0xaf, 0xe6, 0xd3,
+	0x11, 0xb9, 0x60, 0xc1, 0x04, 0x9a, 0xf7, 0xc0, 0x18, 0x6c, 0x64, 0x38, 0xff, 0x68, 0xcb, 0xf8,
+	0x05, 0x1a, 0xd9, 0x1c, 0x55, 0x9a, 0x88, 0xe9, 0xe5, 0xad, 0x42, 0x55, 0xa0, 0xaa, 0x50, 0x09,
+	0x6c, 0xdf, 0xe5, 0x0a, 0x26, 0x0f, 0x18, 0x23, 0x31, 0xb2, 0xa7, 0x98, 0xeb, 0x6a, 0xfb, 0xb1,
+	0x96, 0x71, 0x22, 0x2d, 0xac, 0x13, 0x56, 0x26, 0x3d, 0x1f, 0x80, 0xfd, 0x68, 0x33, 0xe3, 0x98,
+	0x04, 0xbc, 0x0a, 0x98, 0x92, 0x81, 0xcc, 0xc8, 0xb3, 0x04, 0xf4, 0x97, 0xa6, 0x33, 0x34, 0xaa,
+	0x95, 0x86, 0x7d, 0xd3, 0x2f, 0x7f, 0x19, 0x16, 0x3e, 0x3c, 0xec, 0xfe, 0x84, 0x3a, 0x0a, 0x18,
+	0x9d, 0xa2, 0xc9, 0x81, 0xb3, 0xb1, 0x1c, 0x83, 0xfa, 0x84, 0xc9, 0xe7, 0xbb, 0x85, 0x7f, 0xeb,
+	0x78, 0x7d, 0x7c, 0xfa, 0xdf, 0x6e, 0xf4, 0x73, 0xd9, 0xf9, 0xbe, 0x05, 0x00, 0x00, 0xff, 0xff,
+	0xc8, 0xd6, 0xac, 0x65, 0x47, 0x01, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/talent/v4beta1/common.pb.go b/googleapis/cloud/talent/v4beta1/common.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..891df47c9276395d3a07e9f8c74d2669afc1f6e7
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/common.pb.go
@@ -0,0 +1,1919 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/common.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import timestamp "github.com/golang/protobuf/ptypes/timestamp"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import latlng "google.golang.org/genproto/googleapis/type/latlng"
+import money "google.golang.org/genproto/googleapis/type/money"
+import postaladdress "google.golang.org/genproto/googleapis/type/postaladdress"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// An enum that represents the size of the company.
+type CompanySize int32
+
+const (
+	// Default value if the size isn't specified.
+	CompanySize_COMPANY_SIZE_UNSPECIFIED CompanySize = 0
+	// The company has less than 50 employees.
+	CompanySize_MINI CompanySize = 1
+	// The company has between 50 and 99 employees.
+	CompanySize_SMALL CompanySize = 2
+	// The company has between 100 and 499 employees.
+	CompanySize_SMEDIUM CompanySize = 3
+	// The company has between 500 and 999 employees.
+	CompanySize_MEDIUM CompanySize = 4
+	// The company has between 1,000 and 4,999 employees.
+	CompanySize_BIG CompanySize = 5
+	// The company has between 5,000 and 9,999 employees.
+	CompanySize_BIGGER CompanySize = 6
+	// The company has 10,000 or more employees.
+	CompanySize_GIANT CompanySize = 7
+)
+
+var CompanySize_name = map[int32]string{
+	0: "COMPANY_SIZE_UNSPECIFIED",
+	1: "MINI",
+	2: "SMALL",
+	3: "SMEDIUM",
+	4: "MEDIUM",
+	5: "BIG",
+	6: "BIGGER",
+	7: "GIANT",
+}
+var CompanySize_value = map[string]int32{
+	"COMPANY_SIZE_UNSPECIFIED": 0,
+	"MINI":                     1,
+	"SMALL":                    2,
+	"SMEDIUM":                  3,
+	"MEDIUM":                   4,
+	"BIG":                      5,
+	"BIGGER":                   6,
+	"GIANT":                    7,
+}
+
+func (x CompanySize) String() string {
+	return proto.EnumName(CompanySize_name, int32(x))
+}
+func (CompanySize) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{0}
+}
+
+// An enum that represents employee benefits included with the job.
+type JobBenefit int32
+
+const (
+	// Default value if the type isn't specified.
+	JobBenefit_JOB_BENEFIT_UNSPECIFIED JobBenefit = 0
+	// The job includes access to programs that support child care, such
+	// as daycare.
+	JobBenefit_CHILD_CARE JobBenefit = 1
+	// The job includes dental services covered by a dental
+	// insurance plan.
+	JobBenefit_DENTAL JobBenefit = 2
+	// The job offers specific benefits to domestic partners.
+	JobBenefit_DOMESTIC_PARTNER JobBenefit = 3
+	// The job allows for a flexible work schedule.
+	JobBenefit_FLEXIBLE_HOURS JobBenefit = 4
+	// The job includes health services covered by a medical insurance plan.
+	JobBenefit_MEDICAL JobBenefit = 5
+	// The job includes a life insurance plan provided by the employer or
+	// available for purchase by the employee.
+	JobBenefit_LIFE_INSURANCE JobBenefit = 6
+	// The job allows for a leave of absence to a parent to care for a newborn
+	// child.
+	JobBenefit_PARENTAL_LEAVE JobBenefit = 7
+	// The job includes a workplace retirement plan provided by the
+	// employer or available for purchase by the employee.
+	JobBenefit_RETIREMENT_PLAN JobBenefit = 8
+	// The job allows for paid time off due to illness.
+	JobBenefit_SICK_DAYS JobBenefit = 9
+	// The job includes paid time off for vacation.
+	JobBenefit_VACATION JobBenefit = 10
+	// The job includes vision services covered by a vision
+	// insurance plan.
+	JobBenefit_VISION JobBenefit = 11
+)
+
+var JobBenefit_name = map[int32]string{
+	0:  "JOB_BENEFIT_UNSPECIFIED",
+	1:  "CHILD_CARE",
+	2:  "DENTAL",
+	3:  "DOMESTIC_PARTNER",
+	4:  "FLEXIBLE_HOURS",
+	5:  "MEDICAL",
+	6:  "LIFE_INSURANCE",
+	7:  "PARENTAL_LEAVE",
+	8:  "RETIREMENT_PLAN",
+	9:  "SICK_DAYS",
+	10: "VACATION",
+	11: "VISION",
+}
+var JobBenefit_value = map[string]int32{
+	"JOB_BENEFIT_UNSPECIFIED": 0,
+	"CHILD_CARE":              1,
+	"DENTAL":                  2,
+	"DOMESTIC_PARTNER":        3,
+	"FLEXIBLE_HOURS":          4,
+	"MEDICAL":                 5,
+	"LIFE_INSURANCE":          6,
+	"PARENTAL_LEAVE":          7,
+	"RETIREMENT_PLAN":         8,
+	"SICK_DAYS":               9,
+	"VACATION":                10,
+	"VISION":                  11,
+}
+
+func (x JobBenefit) String() string {
+	return proto.EnumName(JobBenefit_name, int32(x))
+}
+func (JobBenefit) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{1}
+}
+
+// Educational degree level defined in International Standard Classification
+// of Education (ISCED).
+type DegreeType int32
+
+const (
+	// Default value. Represents no degree, or early childhood education.
+	// Maps to ISCED code 0.
+	// Ex) Kindergarten
+	DegreeType_DEGREE_TYPE_UNSPECIFIED DegreeType = 0
+	// Primary education which is typically the first stage of compulsory
+	// education. ISCED code 1.
+	// Ex) Elementary school
+	DegreeType_PRIMARY_EDUCATION DegreeType = 1
+	// Lower secondary education; First stage of secondary education building on
+	// primary education, typically with a more subject-oriented curriculum.
+	// ISCED code 2.
+	// Ex) Middle school
+	DegreeType_LOWER_SECONDARY_EDUCATION DegreeType = 2
+	// Middle education; Second/final stage of secondary education preparing for
+	// tertiary education and/or providing skills relevant to employment.
+	// Usually with an increased range of subject options and streams. ISCED
+	// code 3.
+	// Ex) High school
+	DegreeType_UPPER_SECONDARY_EDUCATION DegreeType = 3
+	// Adult Remedial Education; Programmes providing learning experiences that
+	// build on secondary education and prepare for labour market entry and/or
+	// tertiary education. The content is broader than secondary but not as
+	// complex as tertiary education. ISCED code 4.
+	DegreeType_ADULT_REMEDIAL_EDUCATION DegreeType = 4
+	// Associate's or equivalent; Short first tertiary programmes that are
+	// typically practically-based, occupationally-specific and prepare for
+	// labour market entry. These programmes may also provide a pathway to other
+	// tertiary programmes. ISCED code 5.
+	DegreeType_ASSOCIATES_OR_EQUIVALENT DegreeType = 5
+	// Bachelor's or equivalent; Programmes designed to provide intermediate
+	// academic and/or professional knowledge, skills and competencies leading
+	// to a first tertiary degree or equivalent qualification. ISCED code 6.
+	DegreeType_BACHELORS_OR_EQUIVALENT DegreeType = 6
+	// Master's or equivalent; Programmes designed to provide advanced academic
+	// and/or professional knowledge, skills and competencies leading to a
+	// second tertiary degree or equivalent qualification. ISCED code 7.
+	DegreeType_MASTERS_OR_EQUIVALENT DegreeType = 7
+	// Doctoral or equivalent; Programmes designed primarily to lead to an
+	// advanced research qualification, usually concluding with the submission
+	// and defense of a substantive dissertation of publishable quality based on
+	// original research. ISCED code 8.
+	DegreeType_DOCTORAL_OR_EQUIVALENT DegreeType = 8
+)
+
+var DegreeType_name = map[int32]string{
+	0: "DEGREE_TYPE_UNSPECIFIED",
+	1: "PRIMARY_EDUCATION",
+	2: "LOWER_SECONDARY_EDUCATION",
+	3: "UPPER_SECONDARY_EDUCATION",
+	4: "ADULT_REMEDIAL_EDUCATION",
+	5: "ASSOCIATES_OR_EQUIVALENT",
+	6: "BACHELORS_OR_EQUIVALENT",
+	7: "MASTERS_OR_EQUIVALENT",
+	8: "DOCTORAL_OR_EQUIVALENT",
+}
+var DegreeType_value = map[string]int32{
+	"DEGREE_TYPE_UNSPECIFIED":   0,
+	"PRIMARY_EDUCATION":         1,
+	"LOWER_SECONDARY_EDUCATION": 2,
+	"UPPER_SECONDARY_EDUCATION": 3,
+	"ADULT_REMEDIAL_EDUCATION":  4,
+	"ASSOCIATES_OR_EQUIVALENT":  5,
+	"BACHELORS_OR_EQUIVALENT":   6,
+	"MASTERS_OR_EQUIVALENT":     7,
+	"DOCTORAL_OR_EQUIVALENT":    8,
+}
+
+func (x DegreeType) String() string {
+	return proto.EnumName(DegreeType_name, int32(x))
+}
+func (DegreeType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{2}
+}
+
+// An enum that represents the employment type of a job.
+type EmploymentType int32
+
+const (
+	// The default value if the employment type isn't specified.
+	EmploymentType_EMPLOYMENT_TYPE_UNSPECIFIED EmploymentType = 0
+	// The job requires working a number of hours that constitute full
+	// time employment, typically 40 or more hours per week.
+	EmploymentType_FULL_TIME EmploymentType = 1
+	// The job entails working fewer hours than a full time job,
+	// typically less than 40 hours a week.
+	EmploymentType_PART_TIME EmploymentType = 2
+	// The job is offered as a contracted, as opposed to a salaried employee,
+	// position.
+	EmploymentType_CONTRACTOR EmploymentType = 3
+	// The job is offered as a contracted position with the understanding
+	// that it's converted into a full-time position at the end of the
+	// contract. Jobs of this type are also returned by a search for
+	// [EmploymentType.CONTRACTOR][google.cloud.talent.v4beta1.EmploymentType.CONTRACTOR] jobs.
+	EmploymentType_CONTRACT_TO_HIRE EmploymentType = 4
+	// The job is offered as a temporary employment opportunity, usually
+	// a short-term engagement.
+	EmploymentType_TEMPORARY EmploymentType = 5
+	// The job is a fixed-term opportunity for students or entry-level job
+	// seekers to obtain on-the-job training, typically offered as a summer
+	// position.
+	EmploymentType_INTERN EmploymentType = 6
+	// The is an opportunity for an individual to volunteer, where there's no
+	// expectation of compensation for the provided services.
+	EmploymentType_VOLUNTEER EmploymentType = 7
+	// The job requires an employee to work on an as-needed basis with a
+	// flexible schedule.
+	EmploymentType_PER_DIEM EmploymentType = 8
+	// The job involves employing people in remote areas and flying them
+	// temporarily to the work site instead of relocating employees and their
+	// families permanently.
+	EmploymentType_FLY_IN_FLY_OUT EmploymentType = 9
+	// The job does not fit any of the other listed types.
+	EmploymentType_OTHER_EMPLOYMENT_TYPE EmploymentType = 10
+)
+
+var EmploymentType_name = map[int32]string{
+	0:  "EMPLOYMENT_TYPE_UNSPECIFIED",
+	1:  "FULL_TIME",
+	2:  "PART_TIME",
+	3:  "CONTRACTOR",
+	4:  "CONTRACT_TO_HIRE",
+	5:  "TEMPORARY",
+	6:  "INTERN",
+	7:  "VOLUNTEER",
+	8:  "PER_DIEM",
+	9:  "FLY_IN_FLY_OUT",
+	10: "OTHER_EMPLOYMENT_TYPE",
+}
+var EmploymentType_value = map[string]int32{
+	"EMPLOYMENT_TYPE_UNSPECIFIED": 0,
+	"FULL_TIME":                   1,
+	"PART_TIME":                   2,
+	"CONTRACTOR":                  3,
+	"CONTRACT_TO_HIRE":            4,
+	"TEMPORARY":                   5,
+	"INTERN":                      6,
+	"VOLUNTEER":                   7,
+	"PER_DIEM":                    8,
+	"FLY_IN_FLY_OUT":              9,
+	"OTHER_EMPLOYMENT_TYPE":       10,
+}
+
+func (x EmploymentType) String() string {
+	return proto.EnumName(EmploymentType_name, int32(x))
+}
+func (EmploymentType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{3}
+}
+
+// An enum that represents the required experience level required for the job.
+type JobLevel int32
+
+const (
+	// The default value if the level isn't specified.
+	JobLevel_JOB_LEVEL_UNSPECIFIED JobLevel = 0
+	// Entry-level individual contributors, typically with less than 2 years of
+	// experience in a similar role. Includes interns.
+	JobLevel_ENTRY_LEVEL JobLevel = 1
+	// Experienced individual contributors, typically with 2+ years of
+	// experience in a similar role.
+	JobLevel_EXPERIENCED JobLevel = 2
+	// Entry- to mid-level managers responsible for managing a team of people.
+	JobLevel_MANAGER JobLevel = 3
+	// Senior-level managers responsible for managing teams of managers.
+	JobLevel_DIRECTOR JobLevel = 4
+	// Executive-level managers and above, including C-level positions.
+	JobLevel_EXECUTIVE JobLevel = 5
+)
+
+var JobLevel_name = map[int32]string{
+	0: "JOB_LEVEL_UNSPECIFIED",
+	1: "ENTRY_LEVEL",
+	2: "EXPERIENCED",
+	3: "MANAGER",
+	4: "DIRECTOR",
+	5: "EXECUTIVE",
+}
+var JobLevel_value = map[string]int32{
+	"JOB_LEVEL_UNSPECIFIED": 0,
+	"ENTRY_LEVEL":           1,
+	"EXPERIENCED":           2,
+	"MANAGER":               3,
+	"DIRECTOR":              4,
+	"EXECUTIVE":             5,
+}
+
+func (x JobLevel) String() string {
+	return proto.EnumName(JobLevel_name, int32(x))
+}
+func (JobLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{4}
+}
+
+// An enum that represents the categorization or primary focus of specific
+// role. This value is different than the "industry" associated with a role,
+// which is related to the categorization of the company listing the job.
+type JobCategory int32
+
+const (
+	// The default value if the category isn't specified.
+	JobCategory_JOB_CATEGORY_UNSPECIFIED JobCategory = 0
+	// An accounting and finance job, such as an Accountant.
+	JobCategory_ACCOUNTING_AND_FINANCE JobCategory = 1
+	// An administrative and office job, such as an Administrative Assistant.
+	JobCategory_ADMINISTRATIVE_AND_OFFICE JobCategory = 2
+	// An advertising and marketing job, such as Marketing Manager.
+	JobCategory_ADVERTISING_AND_MARKETING JobCategory = 3
+	// An animal care job, such as Veterinarian.
+	JobCategory_ANIMAL_CARE JobCategory = 4
+	// An art, fashion, or design job, such as Designer.
+	JobCategory_ART_FASHION_AND_DESIGN JobCategory = 5
+	// A business operations job, such as Business Operations Manager.
+	JobCategory_BUSINESS_OPERATIONS JobCategory = 6
+	// A cleaning and facilities job, such as Custodial Staff.
+	JobCategory_CLEANING_AND_FACILITIES JobCategory = 7
+	// A computer and IT job, such as Systems Administrator.
+	JobCategory_COMPUTER_AND_IT JobCategory = 8
+	// A construction job, such as General Laborer.
+	JobCategory_CONSTRUCTION JobCategory = 9
+	// A customer service job, such s Cashier.
+	JobCategory_CUSTOMER_SERVICE JobCategory = 10
+	// An education job, such as School Teacher.
+	JobCategory_EDUCATION JobCategory = 11
+	// An entertainment and travel job, such as Flight Attendant.
+	JobCategory_ENTERTAINMENT_AND_TRAVEL JobCategory = 12
+	// A farming or outdoor job, such as Park Ranger.
+	JobCategory_FARMING_AND_OUTDOORS JobCategory = 13
+	// A healthcare job, such as Registered Nurse.
+	JobCategory_HEALTHCARE JobCategory = 14
+	// A human resources job, such as Human Resources Director.
+	JobCategory_HUMAN_RESOURCES JobCategory = 15
+	// An installation, maintenance, or repair job, such as Electrician.
+	JobCategory_INSTALLATION_MAINTENANCE_AND_REPAIR JobCategory = 16
+	// A legal job, such as Law Clerk.
+	JobCategory_LEGAL JobCategory = 17
+	// A management job, often used in conjunction with another category,
+	// such as Store Manager.
+	JobCategory_MANAGEMENT JobCategory = 18
+	// A manufacturing or warehouse job, such as Assembly Technician.
+	JobCategory_MANUFACTURING_AND_WAREHOUSE JobCategory = 19
+	// A media, communications, or writing job, such as Media Relations.
+	JobCategory_MEDIA_COMMUNICATIONS_AND_WRITING JobCategory = 20
+	// An oil, gas or mining job, such as Offshore Driller.
+	JobCategory_OIL_GAS_AND_MINING JobCategory = 21
+	// A personal care and services job, such as Hair Stylist.
+	JobCategory_PERSONAL_CARE_AND_SERVICES JobCategory = 22
+	// A protective services job, such as Security Guard.
+	JobCategory_PROTECTIVE_SERVICES JobCategory = 23
+	// A real estate job, such as Buyer's Agent.
+	JobCategory_REAL_ESTATE JobCategory = 24
+	// A restaurant and hospitality job, such as Restaurant Server.
+	JobCategory_RESTAURANT_AND_HOSPITALITY JobCategory = 25
+	// A sales and/or retail job, such Sales Associate.
+	JobCategory_SALES_AND_RETAIL JobCategory = 26
+	// A science and engineering job, such as Lab Technician.
+	JobCategory_SCIENCE_AND_ENGINEERING JobCategory = 27
+	// A social services or non-profit job, such as Case Worker.
+	JobCategory_SOCIAL_SERVICES_AND_NON_PROFIT JobCategory = 28
+	// A sports, fitness, or recreation job, such as Personal Trainer.
+	JobCategory_SPORTS_FITNESS_AND_RECREATION JobCategory = 29
+	// A transportation or logistics job, such as Truck Driver.
+	JobCategory_TRANSPORTATION_AND_LOGISTICS JobCategory = 30
+)
+
+var JobCategory_name = map[int32]string{
+	0:  "JOB_CATEGORY_UNSPECIFIED",
+	1:  "ACCOUNTING_AND_FINANCE",
+	2:  "ADMINISTRATIVE_AND_OFFICE",
+	3:  "ADVERTISING_AND_MARKETING",
+	4:  "ANIMAL_CARE",
+	5:  "ART_FASHION_AND_DESIGN",
+	6:  "BUSINESS_OPERATIONS",
+	7:  "CLEANING_AND_FACILITIES",
+	8:  "COMPUTER_AND_IT",
+	9:  "CONSTRUCTION",
+	10: "CUSTOMER_SERVICE",
+	11: "EDUCATION",
+	12: "ENTERTAINMENT_AND_TRAVEL",
+	13: "FARMING_AND_OUTDOORS",
+	14: "HEALTHCARE",
+	15: "HUMAN_RESOURCES",
+	16: "INSTALLATION_MAINTENANCE_AND_REPAIR",
+	17: "LEGAL",
+	18: "MANAGEMENT",
+	19: "MANUFACTURING_AND_WAREHOUSE",
+	20: "MEDIA_COMMUNICATIONS_AND_WRITING",
+	21: "OIL_GAS_AND_MINING",
+	22: "PERSONAL_CARE_AND_SERVICES",
+	23: "PROTECTIVE_SERVICES",
+	24: "REAL_ESTATE",
+	25: "RESTAURANT_AND_HOSPITALITY",
+	26: "SALES_AND_RETAIL",
+	27: "SCIENCE_AND_ENGINEERING",
+	28: "SOCIAL_SERVICES_AND_NON_PROFIT",
+	29: "SPORTS_FITNESS_AND_RECREATION",
+	30: "TRANSPORTATION_AND_LOGISTICS",
+}
+var JobCategory_value = map[string]int32{
+	"JOB_CATEGORY_UNSPECIFIED":            0,
+	"ACCOUNTING_AND_FINANCE":              1,
+	"ADMINISTRATIVE_AND_OFFICE":           2,
+	"ADVERTISING_AND_MARKETING":           3,
+	"ANIMAL_CARE":                         4,
+	"ART_FASHION_AND_DESIGN":              5,
+	"BUSINESS_OPERATIONS":                 6,
+	"CLEANING_AND_FACILITIES":             7,
+	"COMPUTER_AND_IT":                     8,
+	"CONSTRUCTION":                        9,
+	"CUSTOMER_SERVICE":                    10,
+	"EDUCATION":                           11,
+	"ENTERTAINMENT_AND_TRAVEL":            12,
+	"FARMING_AND_OUTDOORS":                13,
+	"HEALTHCARE":                          14,
+	"HUMAN_RESOURCES":                     15,
+	"INSTALLATION_MAINTENANCE_AND_REPAIR": 16,
+	"LEGAL":                               17,
+	"MANAGEMENT":                          18,
+	"MANUFACTURING_AND_WAREHOUSE":         19,
+	"MEDIA_COMMUNICATIONS_AND_WRITING":    20,
+	"OIL_GAS_AND_MINING":                  21,
+	"PERSONAL_CARE_AND_SERVICES":          22,
+	"PROTECTIVE_SERVICES":                 23,
+	"REAL_ESTATE":                         24,
+	"RESTAURANT_AND_HOSPITALITY":          25,
+	"SALES_AND_RETAIL":                    26,
+	"SCIENCE_AND_ENGINEERING":             27,
+	"SOCIAL_SERVICES_AND_NON_PROFIT":      28,
+	"SPORTS_FITNESS_AND_RECREATION":       29,
+	"TRANSPORTATION_AND_LOGISTICS":        30,
+}
+
+func (x JobCategory) String() string {
+	return proto.EnumName(JobCategory_name, int32(x))
+}
+func (JobCategory) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{5}
+}
+
+// An enum that represents the job posting region. In most cases, job postings
+// don't need to specify a region. If a region is given, jobs are
+// eligible for searches in the specified region.
+type PostingRegion int32
+
+const (
+	// If the region is unspecified, the job is only returned if it
+	// matches the [LocationFilter][google.cloud.talent.v4beta1.LocationFilter].
+	PostingRegion_POSTING_REGION_UNSPECIFIED PostingRegion = 0
+	// In addition to exact location matching, job posting is returned when the
+	// [LocationFilter][google.cloud.talent.v4beta1.LocationFilter] in the search query is in the same administrative area
+	// as the returned job posting. For example, if a `ADMINISTRATIVE_AREA` job
+	// is posted in "CA, USA", it's returned if [LocationFilter][google.cloud.talent.v4beta1.LocationFilter] has
+	// "Mountain View".
+	//
+	// Administrative area refers to top-level administrative subdivision of this
+	// country. For example, US state, IT region, UK constituent nation and
+	// JP prefecture.
+	PostingRegion_ADMINISTRATIVE_AREA PostingRegion = 1
+	// In addition to exact location matching, job is returned when
+	// [LocationFilter][google.cloud.talent.v4beta1.LocationFilter] in search query is in the same country as this job.
+	// For example, if a `NATION_WIDE` job is posted in "USA", it's
+	// returned if [LocationFilter][google.cloud.talent.v4beta1.LocationFilter] has 'Mountain View'.
+	PostingRegion_NATION PostingRegion = 2
+	// Job allows employees to work remotely (telecommute).
+	// If [locations][] are provided with this value, the job is
+	// considered as having a location, but telecommuting is allowed.
+	PostingRegion_TELECOMMUTE PostingRegion = 3
+)
+
+var PostingRegion_name = map[int32]string{
+	0: "POSTING_REGION_UNSPECIFIED",
+	1: "ADMINISTRATIVE_AREA",
+	2: "NATION",
+	3: "TELECOMMUTE",
+}
+var PostingRegion_value = map[string]int32{
+	"POSTING_REGION_UNSPECIFIED": 0,
+	"ADMINISTRATIVE_AREA":        1,
+	"NATION":                     2,
+	"TELECOMMUTE":                3,
+}
+
+func (x PostingRegion) String() string {
+	return proto.EnumName(PostingRegion_name, int32(x))
+}
+func (PostingRegion) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{6}
+}
+
+// An enum that represents who has view access to the resource.
+type Visibility int32
+
+const (
+	// Default value.
+	Visibility_VISIBILITY_UNSPECIFIED Visibility = 0
+	// The resource is only visible to the GCP account who owns it.
+	Visibility_ACCOUNT_ONLY Visibility = 1
+	// The resource is visible to the owner and may be visible to other
+	// applications and processes at Google.
+	Visibility_SHARED_WITH_GOOGLE Visibility = 2
+	// The resource is visible to the owner and may be visible to all other API
+	// clients.
+	Visibility_SHARED_WITH_PUBLIC Visibility = 3
+)
+
+var Visibility_name = map[int32]string{
+	0: "VISIBILITY_UNSPECIFIED",
+	1: "ACCOUNT_ONLY",
+	2: "SHARED_WITH_GOOGLE",
+	3: "SHARED_WITH_PUBLIC",
+}
+var Visibility_value = map[string]int32{
+	"VISIBILITY_UNSPECIFIED": 0,
+	"ACCOUNT_ONLY":           1,
+	"SHARED_WITH_GOOGLE":     2,
+	"SHARED_WITH_PUBLIC":     3,
+}
+
+func (x Visibility) String() string {
+	return proto.EnumName(Visibility_name, int32(x))
+}
+func (Visibility) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{7}
+}
+
+// Enum that represents the usage of the contact information.
+type ContactInfoUsage int32
+
+const (
+	// Default value.
+	ContactInfoUsage_CONTACT_INFO_USAGE_UNSPECIFIED ContactInfoUsage = 0
+	// Personal use.
+	ContactInfoUsage_PERSONAL ContactInfoUsage = 1
+	// Work use.
+	ContactInfoUsage_WORK ContactInfoUsage = 2
+	// School use.
+	ContactInfoUsage_SCHOOL ContactInfoUsage = 3
+)
+
+var ContactInfoUsage_name = map[int32]string{
+	0: "CONTACT_INFO_USAGE_UNSPECIFIED",
+	1: "PERSONAL",
+	2: "WORK",
+	3: "SCHOOL",
+}
+var ContactInfoUsage_value = map[string]int32{
+	"CONTACT_INFO_USAGE_UNSPECIFIED": 0,
+	"PERSONAL":                       1,
+	"WORK":                           2,
+	"SCHOOL":                         3,
+}
+
+func (x ContactInfoUsage) String() string {
+	return proto.EnumName(ContactInfoUsage_name, int32(x))
+}
+func (ContactInfoUsage) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{8}
+}
+
+// Input only.
+//
+// Option for HTML content sanitization on user input fields, for example, job
+// description. By setting this option, user can determine whether and how
+// sanitization is performed on these fields.
+type HtmlSanitization int32
+
+const (
+	// Default value.
+	HtmlSanitization_HTML_SANITIZATION_UNSPECIFIED HtmlSanitization = 0
+	// Disables sanitization on HTML input.
+	HtmlSanitization_HTML_SANITIZATION_DISABLED HtmlSanitization = 1
+	// Sanitizes HTML input, only accepts bold, italic, ordered list, and
+	// unordered list markup tags.
+	HtmlSanitization_SIMPLE_FORMATTING_ONLY HtmlSanitization = 2
+)
+
+var HtmlSanitization_name = map[int32]string{
+	0: "HTML_SANITIZATION_UNSPECIFIED",
+	1: "HTML_SANITIZATION_DISABLED",
+	2: "SIMPLE_FORMATTING_ONLY",
+}
+var HtmlSanitization_value = map[string]int32{
+	"HTML_SANITIZATION_UNSPECIFIED": 0,
+	"HTML_SANITIZATION_DISABLED":    1,
+	"SIMPLE_FORMATTING_ONLY":        2,
+}
+
+func (x HtmlSanitization) String() string {
+	return proto.EnumName(HtmlSanitization_name, int32(x))
+}
+func (HtmlSanitization) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{9}
+}
+
+// An enum which represents the type of a location.
+type Location_LocationType int32
+
+const (
+	// Default value if the type isn't specified.
+	Location_LOCATION_TYPE_UNSPECIFIED Location_LocationType = 0
+	// A country level location.
+	Location_COUNTRY Location_LocationType = 1
+	// A state or equivalent level location.
+	Location_ADMINISTRATIVE_AREA Location_LocationType = 2
+	// A county or equivalent level location.
+	Location_SUB_ADMINISTRATIVE_AREA Location_LocationType = 3
+	// A city or equivalent level location.
+	Location_LOCALITY Location_LocationType = 4
+	// A postal code level location.
+	Location_POSTAL_CODE Location_LocationType = 5
+	// A sublocality is a subdivision of a locality, for example a city borough,
+	// ward, or arrondissement. Sublocalities are usually recognized by a local
+	// political authority. For example, Manhattan and Brooklyn are recognized
+	// as boroughs by the City of New York, and are therefore modeled as
+	// sublocalities.
+	Location_SUB_LOCALITY Location_LocationType = 6
+	// A district or equivalent level location.
+	Location_SUB_LOCALITY_1 Location_LocationType = 7
+	// A smaller district or equivalent level display.
+	Location_SUB_LOCALITY_2 Location_LocationType = 8
+	// A neighborhood level location.
+	Location_NEIGHBORHOOD Location_LocationType = 9
+	// A street address level location.
+	Location_STREET_ADDRESS Location_LocationType = 10
+)
+
+var Location_LocationType_name = map[int32]string{
+	0:  "LOCATION_TYPE_UNSPECIFIED",
+	1:  "COUNTRY",
+	2:  "ADMINISTRATIVE_AREA",
+	3:  "SUB_ADMINISTRATIVE_AREA",
+	4:  "LOCALITY",
+	5:  "POSTAL_CODE",
+	6:  "SUB_LOCALITY",
+	7:  "SUB_LOCALITY_1",
+	8:  "SUB_LOCALITY_2",
+	9:  "NEIGHBORHOOD",
+	10: "STREET_ADDRESS",
+}
+var Location_LocationType_value = map[string]int32{
+	"LOCATION_TYPE_UNSPECIFIED": 0,
+	"COUNTRY":                   1,
+	"ADMINISTRATIVE_AREA":       2,
+	"SUB_ADMINISTRATIVE_AREA":   3,
+	"LOCALITY":                  4,
+	"POSTAL_CODE":               5,
+	"SUB_LOCALITY":              6,
+	"SUB_LOCALITY_1":            7,
+	"SUB_LOCALITY_2":            8,
+	"NEIGHBORHOOD":              9,
+	"STREET_ADDRESS":            10,
+}
+
+func (x Location_LocationType) String() string {
+	return proto.EnumName(Location_LocationType_name, int32(x))
+}
+func (Location_LocationType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{1, 0}
+}
+
+// An enumeration describing an API access portal and exposure mechanism.
+type DeviceInfo_DeviceType int32
+
+const (
+	// The device type isn't specified.
+	DeviceInfo_DEVICE_TYPE_UNSPECIFIED DeviceInfo_DeviceType = 0
+	// A desktop web browser, such as, Chrome, Firefox, Safari, or Internet
+	// Explorer)
+	DeviceInfo_WEB DeviceInfo_DeviceType = 1
+	// A mobile device web browser, such as a phone or tablet with a Chrome
+	// browser.
+	DeviceInfo_MOBILE_WEB DeviceInfo_DeviceType = 2
+	// An Android device native application.
+	DeviceInfo_ANDROID DeviceInfo_DeviceType = 3
+	// An iOS device native application.
+	DeviceInfo_IOS DeviceInfo_DeviceType = 4
+	// A bot, as opposed to a device operated by human beings, such as a web
+	// crawler.
+	DeviceInfo_BOT DeviceInfo_DeviceType = 5
+	// Other devices types.
+	DeviceInfo_OTHER DeviceInfo_DeviceType = 6
+)
+
+var DeviceInfo_DeviceType_name = map[int32]string{
+	0: "DEVICE_TYPE_UNSPECIFIED",
+	1: "WEB",
+	2: "MOBILE_WEB",
+	3: "ANDROID",
+	4: "IOS",
+	5: "BOT",
+	6: "OTHER",
+}
+var DeviceInfo_DeviceType_value = map[string]int32{
+	"DEVICE_TYPE_UNSPECIFIED": 0,
+	"WEB":                     1,
+	"MOBILE_WEB":              2,
+	"ANDROID":                 3,
+	"IOS":                     4,
+	"BOT":                     5,
+	"OTHER":                   6,
+}
+
+func (x DeviceInfo_DeviceType) String() string {
+	return proto.EnumName(DeviceInfo_DeviceType_name, int32(x))
+}
+func (DeviceInfo_DeviceType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{4, 0}
+}
+
+// The type of compensation.
+//
+// For compensation amounts specified in non-monetary amounts,
+// describe the compensation scheme in the [CompensationEntry.description][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.description].
+//
+// For example, tipping format is described in
+// [CompensationEntry.description][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.description] (for example, “expect 15-20% tips based
+// on customer bill.”) and an estimate of the tips provided in
+// [CompensationEntry.amount][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.amount] or [CompensationEntry.range][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.range] ($10 per hour).
+//
+// For example, equity is described in [CompensationEntry.description][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.description]
+// (for example, “1% - 2% equity vesting over 4 years, 1 year cliff”) and
+// value estimated in [CompensationEntry.amount][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.amount] or
+// [CompensationEntry.range][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.range]. If no value estimate is possible, units are
+// [CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED][google.cloud.talent.v4beta1.CompensationInfo.CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED] and then further
+// clarified in [CompensationEntry.description][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.description] field.
+type CompensationInfo_CompensationType int32
+
+const (
+	// Default value.
+	CompensationInfo_COMPENSATION_TYPE_UNSPECIFIED CompensationInfo_CompensationType = 0
+	// Base compensation: Refers to the fixed amount of money paid to an
+	// employee by an employer in return for work performed. Base compensation
+	// does not include benefits, bonuses or any other potential compensation
+	// from an employer.
+	CompensationInfo_BASE CompensationInfo_CompensationType = 1
+	// Bonus.
+	CompensationInfo_BONUS CompensationInfo_CompensationType = 2
+	// Signing bonus.
+	CompensationInfo_SIGNING_BONUS CompensationInfo_CompensationType = 3
+	// Equity.
+	CompensationInfo_EQUITY CompensationInfo_CompensationType = 4
+	// Profit sharing.
+	CompensationInfo_PROFIT_SHARING CompensationInfo_CompensationType = 5
+	// Commission.
+	CompensationInfo_COMMISSIONS CompensationInfo_CompensationType = 6
+	// Tips.
+	CompensationInfo_TIPS CompensationInfo_CompensationType = 7
+	// Other compensation type.
+	CompensationInfo_OTHER_COMPENSATION_TYPE CompensationInfo_CompensationType = 8
+)
+
+var CompensationInfo_CompensationType_name = map[int32]string{
+	0: "COMPENSATION_TYPE_UNSPECIFIED",
+	1: "BASE",
+	2: "BONUS",
+	3: "SIGNING_BONUS",
+	4: "EQUITY",
+	5: "PROFIT_SHARING",
+	6: "COMMISSIONS",
+	7: "TIPS",
+	8: "OTHER_COMPENSATION_TYPE",
+}
+var CompensationInfo_CompensationType_value = map[string]int32{
+	"COMPENSATION_TYPE_UNSPECIFIED": 0,
+	"BASE":                          1,
+	"BONUS":                         2,
+	"SIGNING_BONUS":                 3,
+	"EQUITY":                        4,
+	"PROFIT_SHARING":                5,
+	"COMMISSIONS":                   6,
+	"TIPS":                          7,
+	"OTHER_COMPENSATION_TYPE":       8,
+}
+
+func (x CompensationInfo_CompensationType) String() string {
+	return proto.EnumName(CompensationInfo_CompensationType_name, int32(x))
+}
+func (CompensationInfo_CompensationType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{7, 0}
+}
+
+// Pay frequency.
+type CompensationInfo_CompensationUnit int32
+
+const (
+	// Default value.
+	CompensationInfo_COMPENSATION_UNIT_UNSPECIFIED CompensationInfo_CompensationUnit = 0
+	// Hourly.
+	CompensationInfo_HOURLY CompensationInfo_CompensationUnit = 1
+	// Daily.
+	CompensationInfo_DAILY CompensationInfo_CompensationUnit = 2
+	// Weekly
+	CompensationInfo_WEEKLY CompensationInfo_CompensationUnit = 3
+	// Monthly.
+	CompensationInfo_MONTHLY CompensationInfo_CompensationUnit = 4
+	// Yearly.
+	CompensationInfo_YEARLY CompensationInfo_CompensationUnit = 5
+	// One time.
+	CompensationInfo_ONE_TIME CompensationInfo_CompensationUnit = 6
+	// Other compensation units.
+	CompensationInfo_OTHER_COMPENSATION_UNIT CompensationInfo_CompensationUnit = 7
+)
+
+var CompensationInfo_CompensationUnit_name = map[int32]string{
+	0: "COMPENSATION_UNIT_UNSPECIFIED",
+	1: "HOURLY",
+	2: "DAILY",
+	3: "WEEKLY",
+	4: "MONTHLY",
+	5: "YEARLY",
+	6: "ONE_TIME",
+	7: "OTHER_COMPENSATION_UNIT",
+}
+var CompensationInfo_CompensationUnit_value = map[string]int32{
+	"COMPENSATION_UNIT_UNSPECIFIED": 0,
+	"HOURLY":                        1,
+	"DAILY":                         2,
+	"WEEKLY":                        3,
+	"MONTHLY":                       4,
+	"YEARLY":                        5,
+	"ONE_TIME":                      6,
+	"OTHER_COMPENSATION_UNIT":       7,
+}
+
+func (x CompensationInfo_CompensationUnit) String() string {
+	return proto.EnumName(CompensationInfo_CompensationUnit_name, int32(x))
+}
+func (CompensationInfo_CompensationUnit) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{7, 1}
+}
+
+// Message representing a period of time between two timestamps.
+type TimestampRange struct {
+	// Begin of the period.
+	StartTime *timestamp.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
+	// End of the period.
+	EndTime              *timestamp.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *TimestampRange) Reset()         { *m = TimestampRange{} }
+func (m *TimestampRange) String() string { return proto.CompactTextString(m) }
+func (*TimestampRange) ProtoMessage()    {}
+func (*TimestampRange) Descriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{0}
+}
+func (m *TimestampRange) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TimestampRange.Unmarshal(m, b)
+}
+func (m *TimestampRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TimestampRange.Marshal(b, m, deterministic)
+}
+func (dst *TimestampRange) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TimestampRange.Merge(dst, src)
+}
+func (m *TimestampRange) XXX_Size() int {
+	return xxx_messageInfo_TimestampRange.Size(m)
+}
+func (m *TimestampRange) XXX_DiscardUnknown() {
+	xxx_messageInfo_TimestampRange.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TimestampRange proto.InternalMessageInfo
+
+func (m *TimestampRange) GetStartTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.StartTime
+	}
+	return nil
+}
+
+func (m *TimestampRange) GetEndTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.EndTime
+	}
+	return nil
+}
+
+// Output only.
+//
+// A resource that represents a location with full geographic information.
+type Location struct {
+	// The type of a location, which corresponds to the address lines field of
+	// [PostalAddress][]. For example, "Downtown, Atlanta, GA, USA" has a type of
+	// [LocationType#NEIGHBORHOOD][], and "Kansas City, KS, USA" has a type of
+	// [LocationType#LOCALITY][].
+	LocationType Location_LocationType `protobuf:"varint,1,opt,name=location_type,json=locationType,proto3,enum=google.cloud.talent.v4beta1.Location_LocationType" json:"location_type,omitempty"`
+	// Postal address of the location that includes human readable information,
+	// such as postal delivery and payments addresses. Given a postal address,
+	// a postal service can deliver items to a premises, P.O. Box, or other
+	// delivery location.
+	PostalAddress *postaladdress.PostalAddress `protobuf:"bytes,2,opt,name=postal_address,json=postalAddress,proto3" json:"postal_address,omitempty"`
+	// An object representing a latitude/longitude pair.
+	LatLng *latlng.LatLng `protobuf:"bytes,3,opt,name=lat_lng,json=latLng,proto3" json:"lat_lng,omitempty"`
+	// Radius in miles of the job location. This value is derived from the
+	// location bounding box in which a circle with the specified radius
+	// centered from [LatLng][] covers the area associated with the job location.
+	// For example, currently, "Mountain View, CA, USA" has a radius of
+	// 6.17 miles.
+	RadiusMiles          float64  `protobuf:"fixed64,4,opt,name=radius_miles,json=radiusMiles,proto3" json:"radius_miles,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Location) Reset()         { *m = Location{} }
+func (m *Location) String() string { return proto.CompactTextString(m) }
+func (*Location) ProtoMessage()    {}
+func (*Location) Descriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{1}
+}
+func (m *Location) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Location.Unmarshal(m, b)
+}
+func (m *Location) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Location.Marshal(b, m, deterministic)
+}
+func (dst *Location) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Location.Merge(dst, src)
+}
+func (m *Location) XXX_Size() int {
+	return xxx_messageInfo_Location.Size(m)
+}
+func (m *Location) XXX_DiscardUnknown() {
+	xxx_messageInfo_Location.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Location proto.InternalMessageInfo
+
+func (m *Location) GetLocationType() Location_LocationType {
+	if m != nil {
+		return m.LocationType
+	}
+	return Location_LOCATION_TYPE_UNSPECIFIED
+}
+
+func (m *Location) GetPostalAddress() *postaladdress.PostalAddress {
+	if m != nil {
+		return m.PostalAddress
+	}
+	return nil
+}
+
+func (m *Location) GetLatLng() *latlng.LatLng {
+	if m != nil {
+		return m.LatLng
+	}
+	return nil
+}
+
+func (m *Location) GetRadiusMiles() float64 {
+	if m != nil {
+		return m.RadiusMiles
+	}
+	return 0
+}
+
+// Input only.
+//
+// Meta information related to the job searcher or entity
+// conducting the job search. This information is used to improve the
+// performance of the service.
+type RequestMetadata struct {
+	// Required if [allow_missing_ids][google.cloud.talent.v4beta1.RequestMetadata.allow_missing_ids] is unset or `false`.
+	//
+	// The client-defined scope or source of the service call, which typically
+	// is the domain on
+	// which the service has been implemented and is currently being run.
+	//
+	// For example, if the service is being run by client <em>Foo, Inc.</em>, on
+	// job board www.foo.com and career site www.bar.com, then this field is
+	// set to "foo.com" for use on the job board, and "bar.com" for use on the
+	// career site.
+	//
+	// Note that any improvements to the model for a particular tenant site rely
+	// on this field being set correctly to a unique domain.
+	//
+	// The maximum number of allowed characters is 255.
+	Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"`
+	// Required if [allow_missing_ids][google.cloud.talent.v4beta1.RequestMetadata.allow_missing_ids] is unset or `false`.
+	//
+	// A unique session identification string. A session is defined as the
+	// duration of an end user's interaction with the service over a certain
+	// period.
+	// Obfuscate this field for privacy concerns before
+	// providing it to the service.
+	//
+	// Note that any improvements to the model for a particular tenant site rely
+	// on this field being set correctly to a unique session ID.
+	//
+	// The maximum number of allowed characters is 255.
+	SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+	// Required if [allow_missing_ids][google.cloud.talent.v4beta1.RequestMetadata.allow_missing_ids] is unset or `false`.
+	//
+	// A unique user identification string, as determined by the client.
+	// To have the strongest positive impact on search quality
+	// make sure the client-level is unique.
+	// Obfuscate this field for privacy concerns before
+	// providing it to the service.
+	//
+	// Note that any improvements to the model for a particular tenant site rely
+	// on this field being set correctly to a unique user ID.
+	//
+	// The maximum number of allowed characters is 255.
+	UserId string `protobuf:"bytes,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
+	// Optional.
+	//
+	// If set to `true`, [domain][google.cloud.talent.v4beta1.RequestMetadata.domain], [session_id][google.cloud.talent.v4beta1.RequestMetadata.session_id] and [user_id][google.cloud.talent.v4beta1.RequestMetadata.user_id] are optional.
+	// Only set when any of these fields isn't available for some reason. It
+	// is highly recommended not to set this field and provide accurate
+	// [domain][google.cloud.talent.v4beta1.RequestMetadata.domain], [session_id][google.cloud.talent.v4beta1.RequestMetadata.session_id] and [user_id][google.cloud.talent.v4beta1.RequestMetadata.user_id] for the best service experience.
+	AllowMissingIds bool `protobuf:"varint,4,opt,name=allow_missing_ids,json=allowMissingIds,proto3" json:"allow_missing_ids,omitempty"`
+	// Optional.
+	//
+	// The type of device used by the job seeker at the time of the call to the
+	// service.
+	DeviceInfo           *DeviceInfo `protobuf:"bytes,5,opt,name=device_info,json=deviceInfo,proto3" json:"device_info,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *RequestMetadata) Reset()         { *m = RequestMetadata{} }
+func (m *RequestMetadata) String() string { return proto.CompactTextString(m) }
+func (*RequestMetadata) ProtoMessage()    {}
+func (*RequestMetadata) Descriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{2}
+}
+func (m *RequestMetadata) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RequestMetadata.Unmarshal(m, b)
+}
+func (m *RequestMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RequestMetadata.Marshal(b, m, deterministic)
+}
+func (dst *RequestMetadata) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RequestMetadata.Merge(dst, src)
+}
+func (m *RequestMetadata) XXX_Size() int {
+	return xxx_messageInfo_RequestMetadata.Size(m)
+}
+func (m *RequestMetadata) XXX_DiscardUnknown() {
+	xxx_messageInfo_RequestMetadata.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RequestMetadata proto.InternalMessageInfo
+
+func (m *RequestMetadata) GetDomain() string {
+	if m != nil {
+		return m.Domain
+	}
+	return ""
+}
+
+func (m *RequestMetadata) GetSessionId() string {
+	if m != nil {
+		return m.SessionId
+	}
+	return ""
+}
+
+func (m *RequestMetadata) GetUserId() string {
+	if m != nil {
+		return m.UserId
+	}
+	return ""
+}
+
+func (m *RequestMetadata) GetAllowMissingIds() bool {
+	if m != nil {
+		return m.AllowMissingIds
+	}
+	return false
+}
+
+func (m *RequestMetadata) GetDeviceInfo() *DeviceInfo {
+	if m != nil {
+		return m.DeviceInfo
+	}
+	return nil
+}
+
+// Output only.
+//
+// Additional information returned to client, such as debugging information.
+type ResponseMetadata struct {
+	// A unique id associated with this call.
+	// This id is logged for tracking purposes.
+	RequestId            string   `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ResponseMetadata) Reset()         { *m = ResponseMetadata{} }
+func (m *ResponseMetadata) String() string { return proto.CompactTextString(m) }
+func (*ResponseMetadata) ProtoMessage()    {}
+func (*ResponseMetadata) Descriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{3}
+}
+func (m *ResponseMetadata) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ResponseMetadata.Unmarshal(m, b)
+}
+func (m *ResponseMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ResponseMetadata.Marshal(b, m, deterministic)
+}
+func (dst *ResponseMetadata) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ResponseMetadata.Merge(dst, src)
+}
+func (m *ResponseMetadata) XXX_Size() int {
+	return xxx_messageInfo_ResponseMetadata.Size(m)
+}
+func (m *ResponseMetadata) XXX_DiscardUnknown() {
+	xxx_messageInfo_ResponseMetadata.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ResponseMetadata proto.InternalMessageInfo
+
+func (m *ResponseMetadata) GetRequestId() string {
+	if m != nil {
+		return m.RequestId
+	}
+	return ""
+}
+
+// Device information collected from the job seeker, candidate, or
+// other entity conducting the job search. Providing this information improves
+// the quality of the search results across devices.
+type DeviceInfo struct {
+	// Optional.
+	//
+	// Type of the device.
+	DeviceType DeviceInfo_DeviceType `protobuf:"varint,1,opt,name=device_type,json=deviceType,proto3,enum=google.cloud.talent.v4beta1.DeviceInfo_DeviceType" json:"device_type,omitempty"`
+	// Optional.
+	//
+	// A device-specific ID. The ID must be a unique identifier that
+	// distinguishes the device from other devices.
+	Id                   string   `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeviceInfo) Reset()         { *m = DeviceInfo{} }
+func (m *DeviceInfo) String() string { return proto.CompactTextString(m) }
+func (*DeviceInfo) ProtoMessage()    {}
+func (*DeviceInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{4}
+}
+func (m *DeviceInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceInfo.Unmarshal(m, b)
+}
+func (m *DeviceInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceInfo.Marshal(b, m, deterministic)
+}
+func (dst *DeviceInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceInfo.Merge(dst, src)
+}
+func (m *DeviceInfo) XXX_Size() int {
+	return xxx_messageInfo_DeviceInfo.Size(m)
+}
+func (m *DeviceInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceInfo proto.InternalMessageInfo
+
+func (m *DeviceInfo) GetDeviceType() DeviceInfo_DeviceType {
+	if m != nil {
+		return m.DeviceType
+	}
+	return DeviceInfo_DEVICE_TYPE_UNSPECIFIED
+}
+
+func (m *DeviceInfo) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+// Custom attribute values that are either filterable or non-filterable.
+type CustomAttribute struct {
+	// Optional but exactly one of [string_values][google.cloud.talent.v4beta1.CustomAttribute.string_values] or [long_values][google.cloud.talent.v4beta1.CustomAttribute.long_values] must
+	// be specified.
+	//
+	// This field is used to perform a string match (`CASE_SENSITIVE_MATCH` or
+	// `CASE_INSENSITIVE_MATCH`) search.
+	// For filterable `string_value`s, a maximum total number of 200 values
+	// is allowed, with each `string_value` has a byte size of no more than
+	// 255B. For unfilterable `string_values`, the maximum total byte size of
+	// unfilterable `string_values` is 50KB.
+	//
+	// Empty string isn't allowed.
+	StringValues []string `protobuf:"bytes,1,rep,name=string_values,json=stringValues,proto3" json:"string_values,omitempty"`
+	// Optional but exactly one of [string_values][google.cloud.talent.v4beta1.CustomAttribute.string_values] or [long_values][google.cloud.talent.v4beta1.CustomAttribute.long_values] must
+	// be specified.
+	//
+	// This field is used to perform number range search.
+	// (`EQ`, `GT`, `GE`, `LE`, `LT`) over filterable `long_value`.
+	//
+	// Currently at most 1 [long_values][google.cloud.talent.v4beta1.CustomAttribute.long_values] is supported.
+	LongValues []int64 `protobuf:"varint,2,rep,packed,name=long_values,json=longValues,proto3" json:"long_values,omitempty"`
+	// Optional.
+	//
+	// If the `filterable` flag is true, custom field values are searchable.
+	// If false, values are not searchable.
+	//
+	// Default is false.
+	Filterable           bool     `protobuf:"varint,3,opt,name=filterable,proto3" json:"filterable,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CustomAttribute) Reset()         { *m = CustomAttribute{} }
+func (m *CustomAttribute) String() string { return proto.CompactTextString(m) }
+func (*CustomAttribute) ProtoMessage()    {}
+func (*CustomAttribute) Descriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{5}
+}
+func (m *CustomAttribute) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CustomAttribute.Unmarshal(m, b)
+}
+func (m *CustomAttribute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CustomAttribute.Marshal(b, m, deterministic)
+}
+func (dst *CustomAttribute) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CustomAttribute.Merge(dst, src)
+}
+func (m *CustomAttribute) XXX_Size() int {
+	return xxx_messageInfo_CustomAttribute.Size(m)
+}
+func (m *CustomAttribute) XXX_DiscardUnknown() {
+	xxx_messageInfo_CustomAttribute.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CustomAttribute proto.InternalMessageInfo
+
+func (m *CustomAttribute) GetStringValues() []string {
+	if m != nil {
+		return m.StringValues
+	}
+	return nil
+}
+
+func (m *CustomAttribute) GetLongValues() []int64 {
+	if m != nil {
+		return m.LongValues
+	}
+	return nil
+}
+
+func (m *CustomAttribute) GetFilterable() bool {
+	if m != nil {
+		return m.Filterable
+	}
+	return false
+}
+
+// Output only.
+//
+// Spell check result.
+type SpellingCorrection struct {
+	// Indicates if the query was corrected by the spell checker.
+	Corrected bool `protobuf:"varint,1,opt,name=corrected,proto3" json:"corrected,omitempty"`
+	// Correction output consisting of the corrected keyword string.
+	CorrectedText string `protobuf:"bytes,2,opt,name=corrected_text,json=correctedText,proto3" json:"corrected_text,omitempty"`
+	// Corrected output with html tags to highlight the corrected words.
+	// Corrected words are called out with the "<b><i>...</i></b>" html tags.
+	//
+	// For example, the user input query is "software enginear", where the second
+	// word, "enginear," is incorrect. It should be "engineer". When spelling
+	// correction is enabled, this value is
+	// "software <b><i>engineer</i></b>".
+	CorrectedHtml        string   `protobuf:"bytes,3,opt,name=corrected_html,json=correctedHtml,proto3" json:"corrected_html,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SpellingCorrection) Reset()         { *m = SpellingCorrection{} }
+func (m *SpellingCorrection) String() string { return proto.CompactTextString(m) }
+func (*SpellingCorrection) ProtoMessage()    {}
+func (*SpellingCorrection) Descriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{6}
+}
+func (m *SpellingCorrection) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SpellingCorrection.Unmarshal(m, b)
+}
+func (m *SpellingCorrection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SpellingCorrection.Marshal(b, m, deterministic)
+}
+func (dst *SpellingCorrection) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SpellingCorrection.Merge(dst, src)
+}
+func (m *SpellingCorrection) XXX_Size() int {
+	return xxx_messageInfo_SpellingCorrection.Size(m)
+}
+func (m *SpellingCorrection) XXX_DiscardUnknown() {
+	xxx_messageInfo_SpellingCorrection.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SpellingCorrection proto.InternalMessageInfo
+
+func (m *SpellingCorrection) GetCorrected() bool {
+	if m != nil {
+		return m.Corrected
+	}
+	return false
+}
+
+func (m *SpellingCorrection) GetCorrectedText() string {
+	if m != nil {
+		return m.CorrectedText
+	}
+	return ""
+}
+
+func (m *SpellingCorrection) GetCorrectedHtml() string {
+	if m != nil {
+		return m.CorrectedHtml
+	}
+	return ""
+}
+
+// Job compensation details.
+type CompensationInfo struct {
+	// Optional.
+	//
+	// Job compensation information.
+	//
+	// At most one entry can be of type
+	// [CompensationInfo.CompensationType.BASE][google.cloud.talent.v4beta1.CompensationInfo.CompensationType.BASE], which is
+	// referred as ** base compensation entry ** for the job.
+	Entries []*CompensationInfo_CompensationEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"`
+	// Output only. Annualized base compensation range. Computed as
+	// base compensation entry's [CompensationEntry.compensation][] times
+	// [CompensationEntry.expected_units_per_year][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.expected_units_per_year].
+	//
+	// See [CompensationEntry][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry] for explanation on compensation annualization.
+	AnnualizedBaseCompensationRange *CompensationInfo_CompensationRange `protobuf:"bytes,2,opt,name=annualized_base_compensation_range,json=annualizedBaseCompensationRange,proto3" json:"annualized_base_compensation_range,omitempty"`
+	// Output only. Annualized total compensation range. Computed as
+	// all compensation entries' [CompensationEntry.compensation][] times
+	// [CompensationEntry.expected_units_per_year][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.expected_units_per_year].
+	//
+	// See [CompensationEntry][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry] for explanation on compensation annualization.
+	AnnualizedTotalCompensationRange *CompensationInfo_CompensationRange `protobuf:"bytes,3,opt,name=annualized_total_compensation_range,json=annualizedTotalCompensationRange,proto3" json:"annualized_total_compensation_range,omitempty"`
+	XXX_NoUnkeyedLiteral             struct{}                            `json:"-"`
+	XXX_unrecognized                 []byte                              `json:"-"`
+	XXX_sizecache                    int32                               `json:"-"`
+}
+
+func (m *CompensationInfo) Reset()         { *m = CompensationInfo{} }
+func (m *CompensationInfo) String() string { return proto.CompactTextString(m) }
+func (*CompensationInfo) ProtoMessage()    {}
+func (*CompensationInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{7}
+}
+func (m *CompensationInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CompensationInfo.Unmarshal(m, b)
+}
+func (m *CompensationInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CompensationInfo.Marshal(b, m, deterministic)
+}
+func (dst *CompensationInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CompensationInfo.Merge(dst, src)
+}
+func (m *CompensationInfo) XXX_Size() int {
+	return xxx_messageInfo_CompensationInfo.Size(m)
+}
+func (m *CompensationInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_CompensationInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompensationInfo proto.InternalMessageInfo
+
+func (m *CompensationInfo) GetEntries() []*CompensationInfo_CompensationEntry {
+	if m != nil {
+		return m.Entries
+	}
+	return nil
+}
+
+func (m *CompensationInfo) GetAnnualizedBaseCompensationRange() *CompensationInfo_CompensationRange {
+	if m != nil {
+		return m.AnnualizedBaseCompensationRange
+	}
+	return nil
+}
+
+func (m *CompensationInfo) GetAnnualizedTotalCompensationRange() *CompensationInfo_CompensationRange {
+	if m != nil {
+		return m.AnnualizedTotalCompensationRange
+	}
+	return nil
+}
+
+// A compensation entry that represents one component of compensation, such
+// as base pay, bonus, or other compensation type.
+//
+// Annualization: One compensation entry can be annualized if
+// - it contains valid [amount][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.amount] or [range][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.range].
+// - and its [expected_units_per_year][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.expected_units_per_year] is set or can be derived.
+// Its annualized range is determined as ([amount][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.amount] or [range][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.range]) times
+// [expected_units_per_year][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.expected_units_per_year].
+type CompensationInfo_CompensationEntry struct {
+	// Optional.
+	//
+	// Compensation type.
+	//
+	// Default is [CompensationUnit.OTHER_COMPENSATION_TYPE][].
+	Type CompensationInfo_CompensationType `protobuf:"varint,1,opt,name=type,proto3,enum=google.cloud.talent.v4beta1.CompensationInfo_CompensationType" json:"type,omitempty"`
+	// Optional.
+	//
+	// Frequency of the specified amount.
+	//
+	// Default is [CompensationUnit.OTHER_COMPENSATION_UNIT][google.cloud.talent.v4beta1.CompensationInfo.CompensationUnit.OTHER_COMPENSATION_UNIT].
+	Unit CompensationInfo_CompensationUnit `protobuf:"varint,2,opt,name=unit,proto3,enum=google.cloud.talent.v4beta1.CompensationInfo_CompensationUnit" json:"unit,omitempty"`
+	// Optional.
+	//
+	// Compensation amount. It could be a fixed amount or a floating range.
+	//
+	// Types that are valid to be assigned to CompensationAmount:
+	//	*CompensationInfo_CompensationEntry_Amount
+	//	*CompensationInfo_CompensationEntry_Range
+	CompensationAmount isCompensationInfo_CompensationEntry_CompensationAmount `protobuf_oneof:"compensation_amount"`
+	// Optional.
+	//
+	// Compensation description.  For example, could
+	// indicate equity terms or provide additional context to an estimated
+	// bonus.
+	Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
+	// Optional.
+	//
+	// Expected number of units paid each year. If not specified, when
+	// [Job.employment_types][google.cloud.talent.v4beta1.Job.employment_types] is FULLTIME, a default value is inferred
+	// based on [unit][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry.unit]. Default values:
+	// - HOURLY: 2080
+	// - DAILY: 260
+	// - WEEKLY: 52
+	// - MONTHLY: 12
+	// - ANNUAL: 1
+	ExpectedUnitsPerYear *wrappers.DoubleValue `protobuf:"bytes,6,opt,name=expected_units_per_year,json=expectedUnitsPerYear,proto3" json:"expected_units_per_year,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *CompensationInfo_CompensationEntry) Reset()         { *m = CompensationInfo_CompensationEntry{} }
+func (m *CompensationInfo_CompensationEntry) String() string { return proto.CompactTextString(m) }
+func (*CompensationInfo_CompensationEntry) ProtoMessage()    {}
+func (*CompensationInfo_CompensationEntry) Descriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{7, 0}
+}
+func (m *CompensationInfo_CompensationEntry) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CompensationInfo_CompensationEntry.Unmarshal(m, b)
+}
+func (m *CompensationInfo_CompensationEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CompensationInfo_CompensationEntry.Marshal(b, m, deterministic)
+}
+func (dst *CompensationInfo_CompensationEntry) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CompensationInfo_CompensationEntry.Merge(dst, src)
+}
+func (m *CompensationInfo_CompensationEntry) XXX_Size() int {
+	return xxx_messageInfo_CompensationInfo_CompensationEntry.Size(m)
+}
+func (m *CompensationInfo_CompensationEntry) XXX_DiscardUnknown() {
+	xxx_messageInfo_CompensationInfo_CompensationEntry.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompensationInfo_CompensationEntry proto.InternalMessageInfo
+
+func (m *CompensationInfo_CompensationEntry) GetType() CompensationInfo_CompensationType {
+	if m != nil {
+		return m.Type
+	}
+	return CompensationInfo_COMPENSATION_TYPE_UNSPECIFIED
+}
+
+func (m *CompensationInfo_CompensationEntry) GetUnit() CompensationInfo_CompensationUnit {
+	if m != nil {
+		return m.Unit
+	}
+	return CompensationInfo_COMPENSATION_UNIT_UNSPECIFIED
+}
+
+type isCompensationInfo_CompensationEntry_CompensationAmount interface {
+	isCompensationInfo_CompensationEntry_CompensationAmount()
+}
+
+type CompensationInfo_CompensationEntry_Amount struct {
+	Amount *money.Money `protobuf:"bytes,3,opt,name=amount,proto3,oneof"`
+}
+
+type CompensationInfo_CompensationEntry_Range struct {
+	Range *CompensationInfo_CompensationRange `protobuf:"bytes,4,opt,name=range,proto3,oneof"`
+}
+
+func (*CompensationInfo_CompensationEntry_Amount) isCompensationInfo_CompensationEntry_CompensationAmount() {
+}
+
+func (*CompensationInfo_CompensationEntry_Range) isCompensationInfo_CompensationEntry_CompensationAmount() {
+}
+
+func (m *CompensationInfo_CompensationEntry) GetCompensationAmount() isCompensationInfo_CompensationEntry_CompensationAmount {
+	if m != nil {
+		return m.CompensationAmount
+	}
+	return nil
+}
+
+func (m *CompensationInfo_CompensationEntry) GetAmount() *money.Money {
+	if x, ok := m.GetCompensationAmount().(*CompensationInfo_CompensationEntry_Amount); ok {
+		return x.Amount
+	}
+	return nil
+}
+
+func (m *CompensationInfo_CompensationEntry) GetRange() *CompensationInfo_CompensationRange {
+	if x, ok := m.GetCompensationAmount().(*CompensationInfo_CompensationEntry_Range); ok {
+		return x.Range
+	}
+	return nil
+}
+
+func (m *CompensationInfo_CompensationEntry) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+func (m *CompensationInfo_CompensationEntry) GetExpectedUnitsPerYear() *wrappers.DoubleValue {
+	if m != nil {
+		return m.ExpectedUnitsPerYear
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CompensationInfo_CompensationEntry) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CompensationInfo_CompensationEntry_OneofMarshaler, _CompensationInfo_CompensationEntry_OneofUnmarshaler, _CompensationInfo_CompensationEntry_OneofSizer, []interface{}{
+		(*CompensationInfo_CompensationEntry_Amount)(nil),
+		(*CompensationInfo_CompensationEntry_Range)(nil),
+	}
+}
+
+func _CompensationInfo_CompensationEntry_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CompensationInfo_CompensationEntry)
+	// compensation_amount
+	switch x := m.CompensationAmount.(type) {
+	case *CompensationInfo_CompensationEntry_Amount:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Amount); err != nil {
+			return err
+		}
+	case *CompensationInfo_CompensationEntry_Range:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Range); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("CompensationInfo_CompensationEntry.CompensationAmount has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CompensationInfo_CompensationEntry_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CompensationInfo_CompensationEntry)
+	switch tag {
+	case 3: // compensation_amount.amount
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(money.Money)
+		err := b.DecodeMessage(msg)
+		m.CompensationAmount = &CompensationInfo_CompensationEntry_Amount{msg}
+		return true, err
+	case 4: // compensation_amount.range
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CompensationInfo_CompensationRange)
+		err := b.DecodeMessage(msg)
+		m.CompensationAmount = &CompensationInfo_CompensationEntry_Range{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CompensationInfo_CompensationEntry_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CompensationInfo_CompensationEntry)
+	// compensation_amount
+	switch x := m.CompensationAmount.(type) {
+	case *CompensationInfo_CompensationEntry_Amount:
+		s := proto.Size(x.Amount)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *CompensationInfo_CompensationEntry_Range:
+		s := proto.Size(x.Range)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Compensation range.
+type CompensationInfo_CompensationRange struct {
+	// Optional.
+	//
+	// The maximum amount of compensation. If left empty, the value is set
+	// to a maximal compensation value and the currency code is set to
+	// match the [currency code][google.type.Money.currency_code] of
+	// min_compensation.
+	MaxCompensation *money.Money `protobuf:"bytes,2,opt,name=max_compensation,json=maxCompensation,proto3" json:"max_compensation,omitempty"`
+	// Optional.
+	//
+	// The minimum amount of compensation. If left empty, the value is set
+	// to zero and the currency code is set to match the
+	// [currency code][google.type.Money.currency_code] of max_compensation.
+	MinCompensation      *money.Money `protobuf:"bytes,1,opt,name=min_compensation,json=minCompensation,proto3" json:"min_compensation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *CompensationInfo_CompensationRange) Reset()         { *m = CompensationInfo_CompensationRange{} }
+func (m *CompensationInfo_CompensationRange) String() string { return proto.CompactTextString(m) }
+func (*CompensationInfo_CompensationRange) ProtoMessage()    {}
+func (*CompensationInfo_CompensationRange) Descriptor() ([]byte, []int) {
+	return fileDescriptor_common_432ea1deab49335a, []int{7, 1}
+}
+func (m *CompensationInfo_CompensationRange) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CompensationInfo_CompensationRange.Unmarshal(m, b)
+}
+func (m *CompensationInfo_CompensationRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CompensationInfo_CompensationRange.Marshal(b, m, deterministic)
+}
+func (dst *CompensationInfo_CompensationRange) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CompensationInfo_CompensationRange.Merge(dst, src)
+}
+func (m *CompensationInfo_CompensationRange) XXX_Size() int {
+	return xxx_messageInfo_CompensationInfo_CompensationRange.Size(m)
+}
+func (m *CompensationInfo_CompensationRange) XXX_DiscardUnknown() {
+	xxx_messageInfo_CompensationInfo_CompensationRange.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompensationInfo_CompensationRange proto.InternalMessageInfo
+
+func (m *CompensationInfo_CompensationRange) GetMaxCompensation() *money.Money {
+	if m != nil {
+		return m.MaxCompensation
+	}
+	return nil
+}
+
+func (m *CompensationInfo_CompensationRange) GetMinCompensation() *money.Money {
+	if m != nil {
+		return m.MinCompensation
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*TimestampRange)(nil), "google.cloud.talent.v4beta1.TimestampRange")
+	proto.RegisterType((*Location)(nil), "google.cloud.talent.v4beta1.Location")
+	proto.RegisterType((*RequestMetadata)(nil), "google.cloud.talent.v4beta1.RequestMetadata")
+	proto.RegisterType((*ResponseMetadata)(nil), "google.cloud.talent.v4beta1.ResponseMetadata")
+	proto.RegisterType((*DeviceInfo)(nil), "google.cloud.talent.v4beta1.DeviceInfo")
+	proto.RegisterType((*CustomAttribute)(nil), "google.cloud.talent.v4beta1.CustomAttribute")
+	proto.RegisterType((*SpellingCorrection)(nil), "google.cloud.talent.v4beta1.SpellingCorrection")
+	proto.RegisterType((*CompensationInfo)(nil), "google.cloud.talent.v4beta1.CompensationInfo")
+	proto.RegisterType((*CompensationInfo_CompensationEntry)(nil), "google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry")
+	proto.RegisterType((*CompensationInfo_CompensationRange)(nil), "google.cloud.talent.v4beta1.CompensationInfo.CompensationRange")
+	proto.RegisterEnum("google.cloud.talent.v4beta1.CompanySize", CompanySize_name, CompanySize_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.JobBenefit", JobBenefit_name, JobBenefit_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.DegreeType", DegreeType_name, DegreeType_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.EmploymentType", EmploymentType_name, EmploymentType_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.JobLevel", JobLevel_name, JobLevel_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.JobCategory", JobCategory_name, JobCategory_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.PostingRegion", PostingRegion_name, PostingRegion_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.Visibility", Visibility_name, Visibility_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.ContactInfoUsage", ContactInfoUsage_name, ContactInfoUsage_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.HtmlSanitization", HtmlSanitization_name, HtmlSanitization_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.Location_LocationType", Location_LocationType_name, Location_LocationType_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.DeviceInfo_DeviceType", DeviceInfo_DeviceType_name, DeviceInfo_DeviceType_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.CompensationInfo_CompensationType", CompensationInfo_CompensationType_name, CompensationInfo_CompensationType_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.CompensationInfo_CompensationUnit", CompensationInfo_CompensationUnit_name, CompensationInfo_CompensationUnit_value)
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/common.proto", fileDescriptor_common_432ea1deab49335a)
+}
+
+var fileDescriptor_common_432ea1deab49335a = []byte{
+	// 2556 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xcd, 0x6f, 0xe3, 0xc8,
+	0x95, 0x1f, 0x59, 0xb6, 0x6c, 0x3d, 0x7f, 0x55, 0xb3, 0x3f, 0xec, 0x71, 0x7f, 0x79, 0x3c, 0xbb,
+	0x98, 0x86, 0x31, 0xb0, 0x31, 0xbd, 0xbb, 0x87, 0xc5, 0x62, 0x77, 0x51, 0x22, 0x4b, 0x52, 0x75,
+	0x93, 0x2c, 0xa5, 0xaa, 0x68, 0x8f, 0xfa, 0x42, 0xd0, 0x16, 0x5b, 0x61, 0x40, 0x91, 0x1a, 0x91,
+	0xee, 0x69, 0xcf, 0x29, 0xc8, 0x39, 0x18, 0x20, 0xf7, 0x9c, 0xf2, 0x3f, 0xe4, 0x92, 0x7f, 0x21,
+	0x97, 0xdc, 0x72, 0x09, 0x10, 0x20, 0xb7, 0x9c, 0xf2, 0x2f, 0x04, 0xaf, 0x48, 0xdb, 0xf2, 0x47,
+	0x77, 0x82, 0xcc, 0x9c, 0xc4, 0x7a, 0x5f, 0xf5, 0xea, 0xbd, 0x5f, 0xbd, 0xf7, 0x4a, 0xf0, 0x62,
+	0x9c, 0xe7, 0xe3, 0x34, 0x3e, 0x3c, 0x4d, 0xf3, 0xb3, 0xd1, 0x61, 0x19, 0xa5, 0x71, 0x56, 0x1e,
+	0xbe, 0xfb, 0xcf, 0x93, 0xb8, 0x8c, 0xbe, 0x3a, 0x3c, 0xcd, 0x27, 0x93, 0x3c, 0x3b, 0x98, 0xce,
+	0xf2, 0x32, 0xb7, 0x1e, 0x57, 0x92, 0x07, 0x46, 0xf2, 0xa0, 0x92, 0x3c, 0xa8, 0x25, 0x77, 0x9e,
+	0xd4, 0x66, 0xa2, 0x69, 0x72, 0x18, 0x65, 0x59, 0x5e, 0x46, 0x65, 0x92, 0x67, 0x45, 0xa5, 0xba,
+	0xf3, 0xbc, 0xe6, 0x9a, 0xd5, 0xc9, 0xd9, 0xdb, 0xc3, 0x32, 0x99, 0xc4, 0x45, 0x19, 0x4d, 0xa6,
+	0xb5, 0xc0, 0xb3, 0x9b, 0x02, 0xdf, 0xce, 0xa2, 0xe9, 0x34, 0x9e, 0x5d, 0x18, 0xd8, 0xae, 0xf9,
+	0xe5, 0xf9, 0x34, 0x3e, 0x4c, 0xa3, 0x32, 0xcd, 0xc6, 0x35, 0x67, 0x6b, 0x9e, 0x33, 0xc9, 0xb3,
+	0xf8, 0xbc, 0x66, 0xec, 0xce, 0x33, 0xa6, 0x79, 0x51, 0x46, 0x69, 0x18, 0x8d, 0x46, 0xb3, 0xb8,
+	0xa8, 0x8d, 0xee, 0xfd, 0xa2, 0x01, 0x1b, 0xfa, 0xc2, 0x11, 0x19, 0x65, 0xe3, 0xd8, 0xfa, 0x6f,
+	0x80, 0xa2, 0x8c, 0x66, 0x65, 0x88, 0x0e, 0x6e, 0x37, 0x76, 0x1b, 0x2f, 0x56, 0x5f, 0xee, 0x1c,
+	0xd4, 0x07, 0xbf, 0x70, 0xee, 0xe0, 0x4a, 0xa9, 0x6d, 0xa4, 0x71, 0x6d, 0xfd, 0x17, 0xac, 0xc4,
+	0xd9, 0xa8, 0x52, 0x5c, 0xf8, 0x87, 0x8a, 0xcb, 0x71, 0x36, 0xc2, 0xd5, 0xde, 0x5f, 0x9b, 0xb0,
+	0xe2, 0xe6, 0xa7, 0x26, 0x5c, 0xd6, 0x31, 0xac, 0xa7, 0xf5, 0x77, 0x88, 0x7e, 0x1b, 0x0f, 0x36,
+	0x5e, 0xbe, 0x3c, 0xf8, 0x48, 0xe8, 0x0f, 0x2e, 0xb4, 0x2f, 0x3f, 0xf4, 0xf9, 0x34, 0x96, 0x6b,
+	0xe9, 0xdc, 0xca, 0xa2, 0xb0, 0x71, 0x3d, 0x04, 0x37, 0x5d, 0xc4, 0xdd, 0x0e, 0x06, 0x46, 0x84,
+	0x56, 0x12, 0x72, 0x7d, 0x3a, 0xbf, 0xb4, 0xbe, 0x84, 0xe5, 0x34, 0x2a, 0xc3, 0x34, 0x1b, 0x6f,
+	0x37, 0x8d, 0xee, 0xfd, 0x6b, 0xba, 0x6e, 0x54, 0xba, 0xd9, 0x58, 0xb6, 0x52, 0xf3, 0x6b, 0x7d,
+	0x06, 0x6b, 0xb3, 0x68, 0x94, 0x9c, 0x15, 0xe1, 0x24, 0x49, 0xe3, 0x62, 0x7b, 0x71, 0xb7, 0xf1,
+	0xa2, 0x21, 0x57, 0x2b, 0x9a, 0x87, 0xa4, 0xbd, 0xbf, 0x35, 0x60, 0x6d, 0xde, 0x65, 0xeb, 0x29,
+	0x7c, 0xea, 0x0a, 0x9b, 0x6a, 0x2e, 0xfc, 0x50, 0x0f, 0x07, 0x2c, 0x0c, 0x7c, 0x35, 0x60, 0x36,
+	0xef, 0x72, 0xe6, 0x90, 0x4f, 0xac, 0x55, 0x58, 0xb6, 0x45, 0xe0, 0x6b, 0x39, 0x24, 0x0d, 0x6b,
+	0x0b, 0xee, 0x53, 0xc7, 0xe3, 0x3e, 0x57, 0x5a, 0x52, 0xcd, 0x8f, 0x58, 0x48, 0x25, 0xa3, 0x64,
+	0xc1, 0x7a, 0x0c, 0x5b, 0x2a, 0xe8, 0x84, 0x77, 0x31, 0x9b, 0xd6, 0x1a, 0xac, 0xe0, 0x0e, 0x2e,
+	0xd7, 0x43, 0xb2, 0x68, 0x6d, 0xc2, 0xea, 0x40, 0x28, 0x4d, 0xdd, 0xd0, 0x16, 0x0e, 0x23, 0x4b,
+	0x16, 0x81, 0x35, 0xd4, 0xbd, 0x14, 0x69, 0x59, 0x16, 0x6c, 0xcc, 0x53, 0xc2, 0xaf, 0xc8, 0xf2,
+	0x2d, 0xda, 0x4b, 0xb2, 0x82, 0x9a, 0x3e, 0xe3, 0xbd, 0x7e, 0x47, 0xc8, 0xbe, 0x10, 0x0e, 0x69,
+	0x1b, 0x29, 0x2d, 0x19, 0xd3, 0x21, 0x75, 0x1c, 0xc9, 0x94, 0x22, 0xb0, 0xf7, 0xc7, 0x06, 0x6c,
+	0xca, 0xf8, 0x9b, 0xb3, 0xb8, 0x28, 0xbd, 0xb8, 0x8c, 0x46, 0x51, 0x19, 0x59, 0x8f, 0xa0, 0x35,
+	0xca, 0x27, 0x51, 0x92, 0x99, 0x5c, 0xb7, 0x65, 0xbd, 0xb2, 0x9e, 0x02, 0x14, 0x71, 0x51, 0x20,
+	0x12, 0x92, 0x91, 0xc9, 0x56, 0x5b, 0xb6, 0x6b, 0x0a, 0x1f, 0x59, 0x5b, 0xb0, 0x7c, 0x56, 0xc4,
+	0x33, 0xe4, 0x35, 0x2b, 0x3d, 0x5c, 0xf2, 0x91, 0xb5, 0x0f, 0xf7, 0xa2, 0x34, 0xcd, 0xbf, 0x0d,
+	0x27, 0x49, 0x51, 0x24, 0xd9, 0x38, 0x4c, 0x46, 0x55, 0xf4, 0x57, 0xe4, 0xa6, 0x61, 0x78, 0x15,
+	0x9d, 0x8f, 0x0a, 0xab, 0x0f, 0xab, 0xa3, 0xf8, 0x5d, 0x72, 0x1a, 0x87, 0x49, 0xf6, 0x36, 0xdf,
+	0x5e, 0x32, 0x69, 0xfd, 0xe2, 0xa3, 0x60, 0x73, 0x8c, 0x3c, 0xcf, 0xde, 0xe6, 0x12, 0x46, 0x97,
+	0xdf, 0x7b, 0x5f, 0x01, 0x91, 0x71, 0x31, 0xcd, 0xb3, 0x22, 0xbe, 0x3c, 0xd9, 0x53, 0x80, 0x59,
+	0x75, 0x58, 0xf4, 0xb2, 0x3a, 0x5d, 0xbb, 0xa6, 0xf0, 0xd1, 0xde, 0x9f, 0x1b, 0x00, 0x57, 0xd6,
+	0x2c, 0x75, 0xe9, 0xcb, 0x3f, 0x0d, 0xfc, 0x2b, 0xed, 0xfa, 0xd3, 0x00, 0xbf, 0x76, 0xcb, 0x20,
+	0x6a, 0x03, 0x16, 0x2e, 0x83, 0xb7, 0x90, 0x8c, 0xf6, 0xd2, 0x8b, 0x2d, 0x0d, 0xf7, 0x31, 0x6c,
+	0x39, 0xec, 0x88, 0xdb, 0xec, 0x2e, 0xb4, 0x2d, 0x43, 0xf3, 0x98, 0x75, 0x48, 0xc3, 0xda, 0x00,
+	0xf0, 0x44, 0x87, 0xbb, 0x2c, 0xc4, 0xf5, 0x02, 0xc2, 0x90, 0xfa, 0x8e, 0x14, 0xdc, 0x21, 0x4d,
+	0x94, 0xe2, 0x42, 0x91, 0x45, 0xfc, 0xe8, 0x08, 0x4d, 0x96, 0xac, 0x36, 0x2c, 0x09, 0xdd, 0x67,
+	0x92, 0xb4, 0xf6, 0xbe, 0x85, 0x4d, 0xfb, 0xac, 0x28, 0xf3, 0x09, 0x2d, 0xcb, 0x59, 0x72, 0x72,
+	0x56, 0xc6, 0xd6, 0xe7, 0xb0, 0x5e, 0x94, 0x33, 0x4c, 0xcb, 0xbb, 0x28, 0x3d, 0x8b, 0x8b, 0xed,
+	0xc6, 0x6e, 0xf3, 0x45, 0x5b, 0xae, 0x55, 0xc4, 0x23, 0x43, 0xb3, 0x9e, 0xc3, 0x6a, 0x9a, 0x5f,
+	0x89, 0x2c, 0xec, 0x36, 0x5f, 0x34, 0x25, 0x20, 0xa9, 0x16, 0x78, 0x06, 0xf0, 0x36, 0x49, 0xcb,
+	0x78, 0x16, 0x9d, 0xa4, 0xb1, 0xc9, 0xff, 0x8a, 0x9c, 0xa3, 0xec, 0xfd, 0xbc, 0x01, 0x96, 0x9a,
+	0xc6, 0x69, 0x9a, 0x64, 0x63, 0x3b, 0x9f, 0xcd, 0xe2, 0x53, 0x53, 0x5d, 0x9e, 0x40, 0xfb, 0xb4,
+	0x5a, 0xc5, 0x55, 0x3e, 0x56, 0xe4, 0x15, 0xc1, 0xfa, 0x77, 0xd8, 0xb8, 0x5c, 0x84, 0x65, 0xfc,
+	0xbe, 0xac, 0xe3, 0xb6, 0x7e, 0x49, 0xd5, 0xf1, 0xfb, 0xf2, 0xba, 0xd8, 0x4f, 0xcb, 0x49, 0x5a,
+	0xe3, 0xef, 0x4a, 0xac, 0x5f, 0x4e, 0xd2, 0xbd, 0xdf, 0x03, 0x10, 0x3b, 0x9f, 0x4c, 0xe3, 0xac,
+	0x30, 0x17, 0xdc, 0xe4, 0x78, 0x08, 0xcb, 0x71, 0x56, 0xce, 0x92, 0xfa, 0xdc, 0xab, 0x2f, 0xff,
+	0xff, 0xa3, 0xf9, 0xbd, 0xa9, 0x7f, 0x8d, 0xc0, 0xb2, 0x72, 0x76, 0x2e, 0x2f, 0xec, 0x59, 0xbf,
+	0x6c, 0xc0, 0x5e, 0x94, 0x65, 0x67, 0x51, 0x9a, 0x7c, 0x17, 0x8f, 0xc2, 0x93, 0xa8, 0x88, 0xc3,
+	0xd3, 0x39, 0xf1, 0x70, 0x86, 0xf5, 0xbd, 0xae, 0x7a, 0x3f, 0x60, 0x5b, 0xd3, 0x26, 0xe4, 0xf3,
+	0xab, 0xad, 0x3a, 0x51, 0x11, 0xdf, 0x12, 0xb0, 0xbe, 0x6f, 0xc0, 0xe7, 0x73, 0xee, 0x94, 0x39,
+	0x96, 0xde, 0x3b, 0xfc, 0x69, 0xfe, 0x38, 0xfe, 0xec, 0x5e, 0xed, 0xa5, 0x71, 0xab, 0x5b, 0x12,
+	0x3b, 0x7f, 0x68, 0xc2, 0xbd, 0x5b, 0xe1, 0xb3, 0x24, 0x2c, 0xce, 0xdd, 0xb6, 0xff, 0xfb, 0xd7,
+	0xdd, 0x30, 0x37, 0xcf, 0xd8, 0x42, 0x9b, 0x67, 0x59, 0x52, 0xa1, 0xe7, 0x07, 0xd9, 0x0c, 0xb2,
+	0xa4, 0x94, 0xc6, 0x96, 0xf5, 0x25, 0xb4, 0xa2, 0x49, 0x7e, 0x96, 0x95, 0x75, 0xc0, 0xac, 0x6b,
+	0xad, 0xc7, 0xc3, 0xae, 0xdf, 0xff, 0x44, 0xd6, 0x32, 0xd6, 0x31, 0x2c, 0x55, 0xd1, 0x5d, 0xfc,
+	0x51, 0xa2, 0xdb, 0xff, 0x44, 0x56, 0xf6, 0xac, 0x5d, 0xac, 0x51, 0xc5, 0xe9, 0x2c, 0x99, 0x22,
+	0xd3, 0xd4, 0xcb, 0xb6, 0x9c, 0x27, 0x59, 0x0a, 0xb6, 0xe2, 0xf7, 0xd3, 0xea, 0x72, 0xa0, 0xe7,
+	0x45, 0x38, 0x8d, 0x67, 0xe1, 0x79, 0x1c, 0xcd, 0xb6, 0x5b, 0xc6, 0x99, 0x27, 0xb7, 0x66, 0x02,
+	0x27, 0x3f, 0x3b, 0x49, 0x63, 0x73, 0xb3, 0xe5, 0x83, 0x0b, 0x65, 0x3c, 0x7b, 0x31, 0x88, 0x67,
+	0xc3, 0x38, 0x9a, 0x75, 0x1e, 0xc2, 0xfd, 0x6b, 0xd0, 0xa9, 0x8e, 0xb9, 0xf3, 0xab, 0xc6, 0xf5,
+	0x94, 0x56, 0xc8, 0xfb, 0x5f, 0x20, 0x93, 0xe8, 0xfd, 0x35, 0xac, 0xd5, 0xa8, 0xbf, 0x23, 0x68,
+	0x72, 0x73, 0x12, 0xbd, 0x9f, 0xb7, 0x61, 0xd4, 0x93, 0xec, 0xba, 0x7a, 0xe3, 0x23, 0xea, 0x49,
+	0x36, 0xaf, 0xbe, 0xf7, 0xdb, 0xc6, 0xf5, 0x6b, 0x6f, 0xea, 0xec, 0x67, 0xf0, 0xd4, 0x16, 0xde,
+	0x80, 0xf9, 0xea, 0x83, 0xbd, 0x7d, 0x05, 0x16, 0x3b, 0x54, 0x31, 0xd2, 0xc0, 0xfa, 0xd9, 0x11,
+	0x7e, 0xa0, 0xc8, 0x82, 0x75, 0x0f, 0xd6, 0x15, 0xef, 0xf9, 0xdc, 0xef, 0x85, 0x15, 0xa9, 0x69,
+	0x01, 0xb4, 0xd8, 0x4f, 0x82, 0xaa, 0x7d, 0x5b, 0xb0, 0x31, 0x90, 0xa2, 0xcb, 0x75, 0xa8, 0xfa,
+	0x54, 0x72, 0xbf, 0x47, 0x96, 0xb0, 0xa5, 0xdb, 0xc2, 0xf3, 0xb8, 0x52, 0x5c, 0xf8, 0x8a, 0xb4,
+	0xd0, 0xb0, 0xe6, 0x03, 0x45, 0x96, 0xb1, 0xda, 0x9b, 0xc2, 0x1c, 0xde, 0xf2, 0x85, 0xac, 0xec,
+	0xfd, 0xfa, 0x86, 0xdf, 0x18, 0xff, 0x5b, 0x7e, 0x07, 0x3e, 0xd7, 0x37, 0xfc, 0x06, 0x68, 0xf5,
+	0x45, 0x20, 0xdd, 0x61, 0xe5, 0xb9, 0x43, 0xb9, 0x3b, 0x24, 0x0b, 0x48, 0x3e, 0x66, 0xec, 0xb5,
+	0x3b, 0x24, 0x4d, 0xec, 0x17, 0x9e, 0xf0, 0x75, 0xdf, 0x45, 0x9f, 0x01, 0x5a, 0x43, 0x46, 0x51,
+	0x7e, 0x09, 0x87, 0x11, 0xe1, 0xb3, 0x50, 0x73, 0x8f, 0x91, 0xd6, 0x07, 0xdc, 0xc3, 0x2d, 0xc9,
+	0xf2, 0xfe, 0x39, 0xac, 0xa2, 0x77, 0x51, 0x76, 0xae, 0x92, 0xef, 0x62, 0xeb, 0x09, 0x6c, 0xa3,
+	0x14, 0xf5, 0x87, 0xa1, 0xe2, 0x6f, 0xee, 0x88, 0x25, 0xce, 0x3e, 0x95, 0x47, 0xca, 0xa3, 0xae,
+	0x5b, 0x75, 0x2d, 0xe5, 0x31, 0x87, 0x07, 0x5e, 0x15, 0xc5, 0xfa, 0xbb, 0x6a, 0x5c, 0x1c, 0x43,
+	0x07, 0xd0, 0xea, 0xf0, 0x5e, 0x0f, 0x3b, 0x17, 0x2a, 0xf6, 0x38, 0xf5, 0x71, 0xeb, 0xbf, 0x34,
+	0x00, 0x5e, 0xe5, 0x27, 0x9d, 0x38, 0x8b, 0xdf, 0x26, 0x25, 0xba, 0xf9, 0x4a, 0x74, 0xc2, 0x0e,
+	0xf3, 0x59, 0xf7, 0x56, 0x34, 0x36, 0x00, 0xec, 0x3e, 0x77, 0x9d, 0xd0, 0xa6, 0x12, 0x73, 0x09,
+	0xd0, 0x72, 0x98, 0xaf, 0x29, 0x3a, 0xf0, 0x00, 0x88, 0x23, 0x3c, 0xa6, 0x34, 0xb7, 0xc3, 0x01,
+	0x95, 0xda, 0x67, 0x92, 0x34, 0x31, 0x87, 0x5d, 0x97, 0x7d, 0xcd, 0x3b, 0x2e, 0x0b, 0x31, 0x90,
+	0xd8, 0x4a, 0x31, 0x60, 0xcc, 0xe1, 0x36, 0x75, 0xc9, 0x12, 0x0a, 0xb8, 0xbc, 0xcb, 0x42, 0xee,
+	0xab, 0x40, 0x52, 0xdf, 0x66, 0xd5, 0x50, 0x36, 0xa0, 0xd2, 0x18, 0x0e, 0x5d, 0x46, 0x8f, 0x18,
+	0x59, 0xb6, 0xee, 0xc3, 0xa6, 0x64, 0x9a, 0x4b, 0xe6, 0x31, 0x5f, 0x87, 0x03, 0x97, 0xfa, 0x64,
+	0xc5, 0x5a, 0x87, 0xb6, 0xe2, 0xf6, 0xeb, 0xd0, 0xa1, 0x43, 0x45, 0xda, 0x18, 0xf0, 0x23, 0x5a,
+	0xcd, 0x97, 0x04, 0xd0, 0xb9, 0x23, 0x8e, 0x30, 0x21, 0xab, 0xfb, 0xdf, 0x2f, 0xe0, 0x60, 0x30,
+	0x9e, 0xc5, 0x73, 0x83, 0x41, 0x4f, 0xb2, 0x3b, 0x07, 0x83, 0x87, 0x70, 0x6f, 0x20, 0xb9, 0x47,
+	0xe5, 0x30, 0x64, 0x4e, 0x50, 0x9b, 0x6b, 0x54, 0xc3, 0xeb, 0x31, 0x93, 0xa1, 0x62, 0xb6, 0xf0,
+	0x9d, 0xeb, 0xec, 0x05, 0x64, 0x07, 0x83, 0xc1, 0x07, 0xd8, 0x4d, 0xcc, 0x28, 0x75, 0x02, 0x57,
+	0x87, 0x78, 0x00, 0x87, 0x53, 0x77, 0x8e, 0xbb, 0x68, 0xb8, 0x4a, 0x09, 0x9b, 0x53, 0xcd, 0x54,
+	0x28, 0x64, 0x88, 0x77, 0xe0, 0x88, 0xba, 0xcc, 0xc7, 0x89, 0xe3, 0x31, 0x6c, 0x75, 0xa8, 0xdd,
+	0x67, 0xae, 0x90, 0x37, 0x99, 0x2d, 0xeb, 0x53, 0x78, 0xe8, 0x51, 0xa5, 0xd9, 0x2d, 0xd6, 0xb2,
+	0xb5, 0x03, 0x8f, 0x1c, 0x61, 0x6b, 0x21, 0xa9, 0x7b, 0x83, 0xb7, 0xb2, 0xff, 0xa7, 0x06, 0x6c,
+	0xb0, 0xc9, 0x34, 0xcd, 0xcf, 0x27, 0x71, 0x56, 0x9a, 0xa0, 0x3c, 0x87, 0xc7, 0xcc, 0x1b, 0xb8,
+	0x62, 0x68, 0x22, 0x7c, 0x47, 0x60, 0xd6, 0xa1, 0xdd, 0x0d, 0x5c, 0xb7, 0x02, 0x74, 0x03, 0x97,
+	0x98, 0xe7, 0x6a, 0xb9, 0x60, 0xb0, 0x21, 0x7c, 0x2d, 0x29, 0xee, 0x48, 0x9a, 0x88, 0x87, 0x8b,
+	0x75, 0xa8, 0x45, 0xd8, 0xe7, 0x92, 0x91, 0x45, 0x54, 0xd2, 0xcc, 0x1b, 0x08, 0x49, 0xe5, 0xb0,
+	0xc2, 0x24, 0xf7, 0x35, 0x93, 0x3e, 0x69, 0x21, 0xeb, 0x48, 0xb8, 0x81, 0xaf, 0x19, 0x93, 0x64,
+	0x19, 0x93, 0x89, 0xe1, 0x74, 0x38, 0xf3, 0xc8, 0x4a, 0x85, 0xa3, 0x61, 0xc8, 0xfd, 0x10, 0x7f,
+	0x44, 0xa0, 0x49, 0x1b, 0x8f, 0x5e, 0xdd, 0xa8, 0x1b, 0x6e, 0x13, 0xd8, 0xff, 0x06, 0x56, 0x5e,
+	0xe5, 0x27, 0x6e, 0xfc, 0x2e, 0x4e, 0x51, 0x0c, 0x11, 0xed, 0xb2, 0x23, 0xe6, 0xde, 0x38, 0xd1,
+	0x26, 0xac, 0x32, 0x7c, 0x6f, 0x54, 0x4c, 0xd2, 0x30, 0x84, 0xaf, 0x07, 0x4c, 0x72, 0xe6, 0xdb,
+	0xcc, 0xa9, 0xae, 0x95, 0x47, 0x7d, 0xda, 0x33, 0x60, 0x5e, 0x83, 0x15, 0x87, 0x4b, 0x66, 0x0e,
+	0x68, 0x8e, 0xc2, 0xbe, 0x66, 0x76, 0x80, 0xef, 0x0f, 0xb2, 0xb4, 0xff, 0xbb, 0x16, 0xac, 0xbe,
+	0xca, 0x4f, 0xec, 0xa8, 0x8c, 0xc7, 0xf9, 0xec, 0x1c, 0x73, 0x8a, 0xdb, 0xda, 0x54, 0xb3, 0x9e,
+	0x90, 0xc3, 0x1b, 0x3b, 0xef, 0xc0, 0x23, 0x6a, 0x9b, 0xd7, 0x0e, 0x56, 0x3f, 0xea, 0x3b, 0x61,
+	0x97, 0xfb, 0x06, 0xfe, 0x06, 0x69, 0x37, 0x5f, 0x37, 0xbe, 0x13, 0x8a, 0x6e, 0x97, 0xdb, 0xac,
+	0x42, 0x1a, 0x75, 0x8e, 0x98, 0xd4, 0x5c, 0x5d, 0xe8, 0x7a, 0x54, 0xbe, 0x66, 0x68, 0x89, 0x34,
+	0xf1, 0x08, 0xd4, 0xe7, 0x1e, 0x3e, 0x7a, 0xa8, 0x09, 0x39, 0x6e, 0x25, 0x75, 0xd8, 0xa5, 0xaa,
+	0x8f, 0x15, 0x07, 0xe5, 0x1d, 0x86, 0x75, 0x97, 0x2c, 0xe1, 0x2b, 0xab, 0x13, 0x28, 0xee, 0x33,
+	0xa5, 0x42, 0x31, 0x60, 0xd2, 0x00, 0x52, 0x55, 0xd5, 0xca, 0x76, 0x19, 0xf5, 0x2f, 0xbd, 0xa3,
+	0x36, 0x77, 0xb9, 0xe6, 0x4c, 0x55, 0x77, 0x11, 0xcb, 0x53, 0xa0, 0x99, 0x34, 0x4c, 0xae, 0xab,
+	0x17, 0x92, 0x2d, 0x7c, 0xa5, 0x65, 0x60, 0x1b, 0x54, 0xb7, 0x0d, 0x02, 0x02, 0xa5, 0x85, 0x67,
+	0x6e, 0x85, 0xc4, 0x41, 0x9c, 0x80, 0x09, 0xdb, 0x25, 0xf4, 0x57, 0x31, 0x4c, 0x0c, 0x11, 0xa0,
+	0x29, 0xf7, 0x4d, 0x06, 0xd1, 0xa0, 0x96, 0x14, 0xf3, 0xb1, 0x66, 0x6d, 0xc3, 0x83, 0x2e, 0x95,
+	0xde, 0x85, 0x17, 0x22, 0xd0, 0x8e, 0x10, 0x52, 0x91, 0x75, 0x84, 0x5b, 0x9f, 0x51, 0x57, 0xf7,
+	0xcd, 0x29, 0x37, 0xd0, 0xa7, 0x7e, 0xe0, 0x51, 0x3f, 0x94, 0x4c, 0x89, 0x40, 0xda, 0x4c, 0x91,
+	0x4d, 0xeb, 0x0b, 0xf8, 0x9c, 0xfb, 0xf8, 0x00, 0x74, 0xab, 0x6a, 0xeb, 0x51, 0x44, 0x9b, 0x89,
+	0xb3, 0xb1, 0x27, 0xd9, 0x80, 0x72, 0x49, 0x08, 0xd6, 0x43, 0x97, 0xf5, 0xa8, 0x4b, 0xee, 0x99,
+	0xe7, 0x80, 0xc9, 0x38, 0x7a, 0x43, 0x2c, 0xbc, 0x16, 0x1e, 0xf5, 0x83, 0x2e, 0xb5, 0x75, 0x20,
+	0x2f, 0x1c, 0x39, 0xa6, 0x92, 0xf5, 0x45, 0xa0, 0x18, 0xb9, 0x6f, 0xfd, 0x1b, 0xec, 0x9a, 0x2b,
+	0x8d, 0x85, 0xdd, 0x0b, 0x7c, 0x5e, 0x1d, 0x4d, 0x55, 0x72, 0x92, 0x9b, 0xb4, 0x3c, 0xb0, 0x1e,
+	0x81, 0x25, 0xb8, 0x1b, 0xf6, 0x68, 0xc5, 0xc0, 0xf4, 0xfa, 0x3d, 0xf2, 0xd0, 0x7a, 0x06, 0x3b,
+	0x03, 0x26, 0x95, 0xf0, 0xeb, 0x84, 0x19, 0x6e, 0x1d, 0x2d, 0x45, 0x1e, 0x61, 0x86, 0x06, 0x52,
+	0x68, 0x66, 0x1b, 0x20, 0x5c, 0x32, 0xb6, 0x30, 0xcf, 0x92, 0x61, 0x1d, 0x51, 0x9a, 0x6a, 0x46,
+	0xb6, 0xd1, 0x92, 0xc4, 0x05, 0x96, 0xd1, 0x2a, 0x8c, 0x7d, 0xa1, 0x06, 0x5c, 0x57, 0x4f, 0xdd,
+	0x4f, 0x31, 0x1d, 0x8a, 0xba, 0x4c, 0xd5, 0x27, 0xd7, 0x94, 0xbb, 0x64, 0xc7, 0x3c, 0xa7, 0x6d,
+	0x03, 0x77, 0x43, 0x67, 0x7e, 0x8f, 0xfb, 0x8c, 0x99, 0x6e, 0xfb, 0xd8, 0xda, 0x83, 0x67, 0xa6,
+	0x2a, 0xb9, 0x97, 0x1b, 0x1b, 0x21, 0x5f, 0xf8, 0x61, 0xd5, 0x99, 0xc9, 0x13, 0x6c, 0xa2, 0x6a,
+	0x20, 0xa4, 0x56, 0x61, 0x97, 0x6b, 0x03, 0xa4, 0xca, 0xbe, 0x2d, 0x59, 0x95, 0xe3, 0xa7, 0xd6,
+	0x2e, 0x3c, 0xd1, 0x92, 0xfa, 0x46, 0xac, 0x4a, 0x04, 0x8a, 0xb8, 0xa2, 0xc7, 0xb1, 0x5b, 0x28,
+	0xf2, 0x6c, 0x3f, 0x86, 0xf5, 0x41, 0x5e, 0x94, 0x49, 0x36, 0x96, 0xf1, 0x18, 0xc7, 0x14, 0x0c,
+	0x8b, 0x50, 0xe6, 0x72, 0x48, 0xd6, 0xab, 0x3a, 0xe5, 0xfc, 0xfd, 0xf9, 0xc0, 0xdf, 0x03, 0xa6,
+	0x25, 0xf9, 0x17, 0x35, 0x79, 0x13, 0x56, 0x35, 0x73, 0x99, 0xc9, 0x8b, 0x66, 0xa4, 0xb9, 0xff,
+	0x33, 0x80, 0xa3, 0xa4, 0x48, 0x4e, 0x92, 0x34, 0x29, 0xcf, 0xf1, 0x62, 0x60, 0x83, 0xe8, 0x70,
+	0xf3, 0xca, 0xbf, 0x6e, 0x9f, 0xc0, 0x5a, 0x7d, 0x3f, 0x43, 0xe1, 0x9b, 0xee, 0xff, 0x08, 0x2c,
+	0x1c, 0x43, 0x98, 0x13, 0x1e, 0x73, 0xdd, 0x0f, 0x7b, 0x42, 0xf4, 0x5c, 0xbc, 0x8e, 0x37, 0xe8,
+	0x83, 0xa0, 0xe3, 0x72, 0x9b, 0x34, 0xf7, 0xdf, 0xe0, 0xc0, 0x91, 0x95, 0xd1, 0x69, 0x89, 0x53,
+	0x67, 0x50, 0x44, 0xe3, 0x18, 0xe3, 0x89, 0x35, 0x11, 0x4b, 0x22, 0xf7, 0xbb, 0x22, 0x0c, 0x14,
+	0xed, 0xdd, 0xac, 0xb2, 0x55, 0xdd, 0x33, 0x80, 0x20, 0x0d, 0xec, 0xf5, 0xc7, 0x42, 0xbe, 0xae,
+	0x46, 0x0e, 0x65, 0xf7, 0x85, 0x70, 0x49, 0x73, 0xff, 0x1b, 0x20, 0xf8, 0x08, 0x53, 0x51, 0x96,
+	0x94, 0xc9, 0x77, 0xd5, 0x60, 0xf7, 0x19, 0x3c, 0xed, 0x6b, 0xcf, 0x0d, 0x15, 0xf5, 0xb9, 0xe6,
+	0x6f, 0x2e, 0xc6, 0x8b, 0x79, 0xd3, 0xcf, 0x60, 0xe7, 0xb6, 0x88, 0xc3, 0x15, 0xed, 0xb8, 0xcc,
+	0x21, 0x0d, 0x0c, 0x88, 0xe2, 0xde, 0xc0, 0x65, 0x61, 0x57, 0x48, 0x8f, 0x6a, 0x13, 0x7e, 0x73,
+	0xfc, 0x85, 0xce, 0x39, 0x3c, 0x3f, 0xcd, 0x27, 0x1f, 0x9b, 0xb4, 0x3b, 0x38, 0xc2, 0x4c, 0xf2,
+	0x6c, 0x80, 0x83, 0xef, 0xa0, 0xf1, 0x86, 0xd6, 0xb2, 0xe3, 0x3c, 0x8d, 0xb2, 0xf1, 0x41, 0x3e,
+	0x1b, 0x1f, 0x8e, 0xe3, 0xcc, 0x8c, 0xc5, 0x87, 0x15, 0x2b, 0x9a, 0x26, 0xc5, 0x9d, 0xff, 0x4b,
+	0xfe, 0x4f, 0xb5, 0xfc, 0xcd, 0x42, 0xd3, 0xd6, 0xea, 0xa4, 0x65, 0x74, 0xfe, 0xe3, 0xef, 0x01,
+	0x00, 0x00, 0xff, 0xff, 0x31, 0x20, 0xd4, 0xe7, 0xca, 0x14, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/talent/v4beta1/company.pb.go b/googleapis/cloud/talent/v4beta1/company.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b9d9c5f7f1f78f22241ab3fb2e357d9331a69bd5
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/company.pb.go
@@ -0,0 +1,360 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/company.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum that represents how user data owned by the company is used.
+type Company_DataLearningType int32
+
+const (
+	// Default value.
+	Company_DATA_LEARNING_TYPE_UNSPECIFIED Company_DataLearningType = 0
+	// Data owned by this company is used to improve search/recommendation
+	// quality across companies.
+	Company_AGGREGATED Company_DataLearningType = 1
+	// Data owned by this company is used to improve search/recommendation
+	// quality for this company only.
+	Company_ISOLATED Company_DataLearningType = 2
+)
+
+var Company_DataLearningType_name = map[int32]string{
+	0: "DATA_LEARNING_TYPE_UNSPECIFIED",
+	1: "AGGREGATED",
+	2: "ISOLATED",
+}
+var Company_DataLearningType_value = map[string]int32{
+	"DATA_LEARNING_TYPE_UNSPECIFIED": 0,
+	"AGGREGATED":                     1,
+	"ISOLATED":                       2,
+}
+
+func (x Company_DataLearningType) String() string {
+	return proto.EnumName(Company_DataLearningType_name, int32(x))
+}
+func (Company_DataLearningType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_company_dbd4fb882d58cdba, []int{0, 0}
+}
+
+// A Company resource represents a company in the service. A company is the
+// entity that owns job postings, that is, the hiring entity responsible for
+// employing applicants for the job position.
+type Company struct {
+	// Required during company update.
+	//
+	// The resource name for a company. This is generated by the service when a
+	// company is created.
+	//
+	// The format is "projects/{project_id}/companies/{company_id}", for example,
+	// "projects/api-test-project/companies/foo".
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Required.
+	//
+	// The display name of the company, for example, "Google, LLC".
+	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
+	// Required.
+	//
+	// Client side company identifier, used to uniquely identify the
+	// company.
+	//
+	// The maximum number of allowed characters is 255.
+	ExternalId string `protobuf:"bytes,3,opt,name=external_id,json=externalId,proto3" json:"external_id,omitempty"`
+	// Optional.
+	//
+	// The employer's company size.
+	Size CompanySize `protobuf:"varint,4,opt,name=size,proto3,enum=google.cloud.talent.v4beta1.CompanySize" json:"size,omitempty"`
+	// Optional.
+	//
+	// The street address of the company's main headquarters, which may be
+	// different from the job location. The service attempts
+	// to geolocate the provided address, and populates a more specific
+	// location wherever possible in [DerivedInfo.headquarters_location][google.cloud.talent.v4beta1.Company.DerivedInfo.headquarters_location].
+	HeadquartersAddress string `protobuf:"bytes,5,opt,name=headquarters_address,json=headquartersAddress,proto3" json:"headquarters_address,omitempty"`
+	// Optional.
+	//
+	// Set to true if it is the hiring agency that post jobs for other
+	// employers.
+	//
+	// Defaults to false if not provided.
+	HiringAgency bool `protobuf:"varint,6,opt,name=hiring_agency,json=hiringAgency,proto3" json:"hiring_agency,omitempty"`
+	// Optional.
+	//
+	// Equal Employment Opportunity legal disclaimer text to be
+	// associated with all jobs, and typically to be displayed in all
+	// roles.
+	//
+	// The maximum number of allowed characters is 500.
+	EeoText string `protobuf:"bytes,7,opt,name=eeo_text,json=eeoText,proto3" json:"eeo_text,omitempty"`
+	// Optional.
+	//
+	// The URI representing the company's primary web site or home page,
+	// for example, "https://www.google.com".
+	//
+	// The maximum number of allowed characters is 255.
+	WebsiteUri string `protobuf:"bytes,8,opt,name=website_uri,json=websiteUri,proto3" json:"website_uri,omitempty"`
+	// Optional.
+	//
+	// The URI to employer's career site or careers page on the employer's web
+	// site, for example, "https://careers.google.com".
+	CareerSiteUri string `protobuf:"bytes,9,opt,name=career_site_uri,json=careerSiteUri,proto3" json:"career_site_uri,omitempty"`
+	// Optional.
+	//
+	// A URI that hosts the employer's company logo.
+	ImageUri string `protobuf:"bytes,10,opt,name=image_uri,json=imageUri,proto3" json:"image_uri,omitempty"`
+	// Optional.
+	//
+	// A list of keys of filterable [Job.custom_attributes][google.cloud.talent.v4beta1.Job.custom_attributes], whose
+	// corresponding `string_values` are used in keyword search. Jobs with
+	// `string_values` under these specified field keys are returned if any
+	// of the values matches the search keyword. Custom field values with
+	// parenthesis, brackets and special symbols won't be properly searchable,
+	// and those keyword queries need to be surrounded by quotes.
+	KeywordSearchableJobCustomAttributes []string `protobuf:"bytes,11,rep,name=keyword_searchable_job_custom_attributes,json=keywordSearchableJobCustomAttributes,proto3" json:"keyword_searchable_job_custom_attributes,omitempty"`
+	// Output only. Derived details about the company.
+	DerivedInfo *Company_DerivedInfo `protobuf:"bytes,12,opt,name=derived_info,json=derivedInfo,proto3" json:"derived_info,omitempty"`
+	// Output only. Indicates whether a company is flagged to be suspended from
+	// public availability by the service when job content appears suspicious,
+	// abusive, or spammy.
+	Suspended bool `protobuf:"varint,13,opt,name=suspended,proto3" json:"suspended,omitempty"`
+	// Optional.
+	//
+	// Indicates whether data owned by this company may be used to provide product
+	// improvements across other companies.
+	//
+	// Defaults behavior is [DataLearningType.ISOLATED][google.cloud.talent.v4beta1.Company.DataLearningType.ISOLATED] if it's unset.
+	LearningType         Company_DataLearningType `protobuf:"varint,14,opt,name=learning_type,json=learningType,proto3,enum=google.cloud.talent.v4beta1.Company_DataLearningType" json:"learning_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *Company) Reset()         { *m = Company{} }
+func (m *Company) String() string { return proto.CompactTextString(m) }
+func (*Company) ProtoMessage()    {}
+func (*Company) Descriptor() ([]byte, []int) {
+	return fileDescriptor_company_dbd4fb882d58cdba, []int{0}
+}
+func (m *Company) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Company.Unmarshal(m, b)
+}
+func (m *Company) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Company.Marshal(b, m, deterministic)
+}
+func (dst *Company) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Company.Merge(dst, src)
+}
+func (m *Company) XXX_Size() int {
+	return xxx_messageInfo_Company.Size(m)
+}
+func (m *Company) XXX_DiscardUnknown() {
+	xxx_messageInfo_Company.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Company proto.InternalMessageInfo
+
+func (m *Company) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *Company) GetDisplayName() string {
+	if m != nil {
+		return m.DisplayName
+	}
+	return ""
+}
+
+func (m *Company) GetExternalId() string {
+	if m != nil {
+		return m.ExternalId
+	}
+	return ""
+}
+
+func (m *Company) GetSize() CompanySize {
+	if m != nil {
+		return m.Size
+	}
+	return CompanySize_COMPANY_SIZE_UNSPECIFIED
+}
+
+func (m *Company) GetHeadquartersAddress() string {
+	if m != nil {
+		return m.HeadquartersAddress
+	}
+	return ""
+}
+
+func (m *Company) GetHiringAgency() bool {
+	if m != nil {
+		return m.HiringAgency
+	}
+	return false
+}
+
+func (m *Company) GetEeoText() string {
+	if m != nil {
+		return m.EeoText
+	}
+	return ""
+}
+
+func (m *Company) GetWebsiteUri() string {
+	if m != nil {
+		return m.WebsiteUri
+	}
+	return ""
+}
+
+func (m *Company) GetCareerSiteUri() string {
+	if m != nil {
+		return m.CareerSiteUri
+	}
+	return ""
+}
+
+func (m *Company) GetImageUri() string {
+	if m != nil {
+		return m.ImageUri
+	}
+	return ""
+}
+
+func (m *Company) GetKeywordSearchableJobCustomAttributes() []string {
+	if m != nil {
+		return m.KeywordSearchableJobCustomAttributes
+	}
+	return nil
+}
+
+func (m *Company) GetDerivedInfo() *Company_DerivedInfo {
+	if m != nil {
+		return m.DerivedInfo
+	}
+	return nil
+}
+
+func (m *Company) GetSuspended() bool {
+	if m != nil {
+		return m.Suspended
+	}
+	return false
+}
+
+func (m *Company) GetLearningType() Company_DataLearningType {
+	if m != nil {
+		return m.LearningType
+	}
+	return Company_DATA_LEARNING_TYPE_UNSPECIFIED
+}
+
+// Derived details about the company.
+type Company_DerivedInfo struct {
+	// A structured headquarters location of the company, resolved from
+	// [Company.hq_location][] if provided.
+	HeadquartersLocation *Location `protobuf:"bytes,1,opt,name=headquarters_location,json=headquartersLocation,proto3" json:"headquarters_location,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
+}
+
+func (m *Company_DerivedInfo) Reset()         { *m = Company_DerivedInfo{} }
+func (m *Company_DerivedInfo) String() string { return proto.CompactTextString(m) }
+func (*Company_DerivedInfo) ProtoMessage()    {}
+func (*Company_DerivedInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_company_dbd4fb882d58cdba, []int{0, 0}
+}
+func (m *Company_DerivedInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Company_DerivedInfo.Unmarshal(m, b)
+}
+func (m *Company_DerivedInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Company_DerivedInfo.Marshal(b, m, deterministic)
+}
+func (dst *Company_DerivedInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Company_DerivedInfo.Merge(dst, src)
+}
+func (m *Company_DerivedInfo) XXX_Size() int {
+	return xxx_messageInfo_Company_DerivedInfo.Size(m)
+}
+func (m *Company_DerivedInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_Company_DerivedInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Company_DerivedInfo proto.InternalMessageInfo
+
+func (m *Company_DerivedInfo) GetHeadquartersLocation() *Location {
+	if m != nil {
+		return m.HeadquartersLocation
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Company)(nil), "google.cloud.talent.v4beta1.Company")
+	proto.RegisterType((*Company_DerivedInfo)(nil), "google.cloud.talent.v4beta1.Company.DerivedInfo")
+	proto.RegisterEnum("google.cloud.talent.v4beta1.Company_DataLearningType", Company_DataLearningType_name, Company_DataLearningType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/company.proto", fileDescriptor_company_dbd4fb882d58cdba)
+}
+
+var fileDescriptor_company_dbd4fb882d58cdba = []byte{
+	// 623 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdd, 0x6e, 0xd3, 0x30,
+	0x14, 0xc7, 0xc9, 0x36, 0xb6, 0xd6, 0x6d, 0xc7, 0x64, 0x86, 0x14, 0xb6, 0x89, 0x95, 0xf1, 0xa1,
+	0x70, 0x93, 0xb2, 0x01, 0x57, 0x70, 0x93, 0xb5, 0xa5, 0x2a, 0xaa, 0x4a, 0x95, 0x64, 0x48, 0xec,
+	0xc6, 0x72, 0x92, 0xb3, 0xcc, 0x90, 0xda, 0xc1, 0x76, 0xb6, 0x75, 0x97, 0x3c, 0x0a, 0x4f, 0xc6,
+	0xa3, 0xa0, 0x3a, 0xd9, 0x17, 0x42, 0x63, 0x77, 0x39, 0xff, 0xf3, 0xfb, 0xfb, 0x1c, 0x9f, 0x1c,
+	0xa3, 0x57, 0xa9, 0x10, 0x69, 0x06, 0x9d, 0x38, 0x13, 0x45, 0xd2, 0xd1, 0x34, 0x03, 0xae, 0x3b,
+	0x27, 0x6f, 0x23, 0xd0, 0x74, 0xb7, 0x13, 0x8b, 0x69, 0x4e, 0xf9, 0xcc, 0xcd, 0xa5, 0xd0, 0x02,
+	0x6f, 0x96, 0xa8, 0x6b, 0x50, 0xb7, 0x44, 0xdd, 0x0a, 0xdd, 0xd8, 0xaa, 0xce, 0xa1, 0x39, 0xeb,
+	0x50, 0xce, 0x85, 0xa6, 0x9a, 0x09, 0xae, 0x4a, 0xeb, 0x86, 0xf3, 0x9f, 0x2a, 0x53, 0xc1, 0x4b,
+	0x72, 0xe7, 0xf7, 0x32, 0x5a, 0xe9, 0x96, 0x65, 0x31, 0x46, 0x4b, 0x9c, 0x4e, 0xc1, 0xb6, 0xda,
+	0x96, 0x53, 0xf7, 0xcd, 0x37, 0x7e, 0x8a, 0x9a, 0x09, 0x53, 0x79, 0x46, 0x67, 0xc4, 0xe4, 0x16,
+	0x4c, 0xae, 0x51, 0x69, 0xe3, 0x39, 0xb2, 0x8d, 0x1a, 0x70, 0xa6, 0x41, 0x72, 0x9a, 0x11, 0x96,
+	0xd8, 0x8b, 0x86, 0x40, 0x17, 0xd2, 0x30, 0xc1, 0x1f, 0xd0, 0x92, 0x62, 0xe7, 0x60, 0x2f, 0xb5,
+	0x2d, 0x67, 0x75, 0xcf, 0x71, 0x6f, 0xb9, 0x97, 0x5b, 0xf5, 0x12, 0xb0, 0x73, 0xf0, 0x8d, 0x0b,
+	0xef, 0xa2, 0xf5, 0x63, 0xa0, 0xc9, 0x8f, 0x82, 0x4a, 0x0d, 0x52, 0x11, 0x9a, 0x24, 0x12, 0x94,
+	0xb2, 0xef, 0x9b, 0x3a, 0x0f, 0xaf, 0xe7, 0xbc, 0x32, 0x85, 0x9f, 0xa1, 0xd6, 0x31, 0x93, 0x8c,
+	0xa7, 0x84, 0xa6, 0xc0, 0xe3, 0x99, 0xbd, 0xdc, 0xb6, 0x9c, 0x9a, 0xdf, 0x2c, 0x45, 0xcf, 0x68,
+	0xf8, 0x31, 0xaa, 0x01, 0x08, 0xa2, 0xe1, 0x4c, 0xdb, 0x2b, 0xe6, 0xac, 0x15, 0x00, 0x11, 0xc2,
+	0x99, 0x9e, 0xdf, 0xe8, 0x14, 0x22, 0xc5, 0x34, 0x90, 0x42, 0x32, 0xbb, 0x56, 0xde, 0xa8, 0x92,
+	0x0e, 0x24, 0xc3, 0x2f, 0xd1, 0x83, 0x98, 0x4a, 0x00, 0x49, 0x2e, 0xa1, 0xba, 0x81, 0x5a, 0xa5,
+	0x1c, 0x54, 0xdc, 0x26, 0xaa, 0xb3, 0x29, 0x4d, 0x4b, 0x02, 0x19, 0xa2, 0x66, 0x84, 0x79, 0xf2,
+	0x0b, 0x72, 0xbe, 0xc3, 0xec, 0x54, 0xc8, 0x84, 0x28, 0xa0, 0x32, 0x3e, 0xa6, 0x51, 0x06, 0xe4,
+	0x9b, 0x88, 0x48, 0x5c, 0x28, 0x2d, 0xa6, 0x84, 0x6a, 0x2d, 0x59, 0x54, 0x68, 0x50, 0x76, 0xa3,
+	0xbd, 0xe8, 0xd4, 0xfd, 0xe7, 0x15, 0x1f, 0x5c, 0xe2, 0x9f, 0x44, 0xd4, 0x35, 0xb0, 0x77, 0xc9,
+	0xe2, 0x00, 0x35, 0x13, 0x90, 0xec, 0x04, 0x12, 0xc2, 0xf8, 0x91, 0xb0, 0x9b, 0x6d, 0xcb, 0x69,
+	0xec, 0xbd, 0xbe, 0xcb, 0xd8, 0xdd, 0x5e, 0x69, 0x1c, 0xf2, 0x23, 0xe1, 0x37, 0x92, 0xab, 0x00,
+	0x6f, 0xa1, 0xba, 0x2a, 0x54, 0x0e, 0x3c, 0x81, 0xc4, 0x6e, 0x99, 0x71, 0x5e, 0x09, 0xf8, 0x10,
+	0xb5, 0x32, 0xa0, 0x92, 0xcf, 0x47, 0xae, 0x67, 0x39, 0xd8, 0xab, 0xe6, 0x57, 0xbf, 0xbb, 0x5b,
+	0x4d, 0xaa, 0xe9, 0xa8, 0x72, 0x87, 0xb3, 0x1c, 0xfc, 0x66, 0x76, 0x2d, 0xda, 0x60, 0xa8, 0x71,
+	0xad, 0x2b, 0x7c, 0x88, 0x1e, 0xdd, 0x58, 0x87, 0x4c, 0xc4, 0x66, 0xf5, 0xcd, 0xd6, 0x36, 0xf6,
+	0x5e, 0xdc, 0x5a, 0x72, 0x54, 0xc1, 0xfe, 0x8d, 0x95, 0xba, 0x50, 0x77, 0x42, 0xb4, 0xf6, 0x77,
+	0x33, 0x78, 0x07, 0x3d, 0xe9, 0x79, 0xa1, 0x47, 0x46, 0x7d, 0xcf, 0x1f, 0x0f, 0xc7, 0x03, 0x12,
+	0x7e, 0x9d, 0xf4, 0xc9, 0xc1, 0x38, 0x98, 0xf4, 0xbb, 0xc3, 0x8f, 0xc3, 0x7e, 0x6f, 0xed, 0x1e,
+	0x5e, 0x45, 0xc8, 0x1b, 0x0c, 0xfc, 0xfe, 0xc0, 0x0b, 0xfb, 0xbd, 0x35, 0x0b, 0x37, 0x51, 0x6d,
+	0x18, 0x7c, 0x1e, 0x99, 0x68, 0x61, 0xff, 0xa7, 0x85, 0xb6, 0x63, 0x31, 0xbd, 0xad, 0xb1, 0xfd,
+	0xf5, 0x6a, 0x18, 0x3e, 0x28, 0x51, 0xc8, 0x18, 0x26, 0xf3, 0xc7, 0x39, 0xb1, 0x0e, 0xbd, 0xca,
+	0x94, 0x8a, 0x8c, 0xf2, 0xd4, 0x15, 0x32, 0xed, 0xa4, 0xc0, 0xcd, 0xd3, 0xed, 0x94, 0x29, 0x9a,
+	0x33, 0xf5, 0xcf, 0x77, 0xfe, 0xbe, 0x0c, 0x7f, 0x2d, 0x2c, 0x76, 0xc3, 0x20, 0x5a, 0x36, 0x9e,
+	0x37, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x27, 0xc2, 0xa8, 0x56, 0x80, 0x04, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/talent/v4beta1/company_service.pb.go b/googleapis/cloud/talent/v4beta1/company_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..9506612229bca9804672944b1ffdd35e51ea7cad
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/company_service.pb.go
@@ -0,0 +1,666 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/company_service.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import empty "github.com/golang/protobuf/ptypes/empty"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Input only.
+//
+// The Request of the CreateCompany method.
+type CreateCompanyRequest struct {
+	// Required.
+	//
+	// Resource name of the project under which the company is created.
+	//
+	// The format is "projects/{project_id}", for example,
+	// "projects/api-test-project".
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Required.
+	//
+	// The company to be created.
+	Company              *Company `protobuf:"bytes,2,opt,name=company,proto3" json:"company,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateCompanyRequest) Reset()         { *m = CreateCompanyRequest{} }
+func (m *CreateCompanyRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateCompanyRequest) ProtoMessage()    {}
+func (*CreateCompanyRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_company_service_a9bae875d0b19058, []int{0}
+}
+func (m *CreateCompanyRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateCompanyRequest.Unmarshal(m, b)
+}
+func (m *CreateCompanyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateCompanyRequest.Marshal(b, m, deterministic)
+}
+func (dst *CreateCompanyRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateCompanyRequest.Merge(dst, src)
+}
+func (m *CreateCompanyRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateCompanyRequest.Size(m)
+}
+func (m *CreateCompanyRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateCompanyRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateCompanyRequest proto.InternalMessageInfo
+
+func (m *CreateCompanyRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *CreateCompanyRequest) GetCompany() *Company {
+	if m != nil {
+		return m.Company
+	}
+	return nil
+}
+
+// Input only.
+//
+// Request for getting a company by name.
+type GetCompanyRequest struct {
+	// Required.
+	//
+	// The resource name of the company to be retrieved.
+	//
+	// The format is "projects/{project_id}/companies/{company_id}", for example,
+	// "projects/api-test-project/companies/foo".
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetCompanyRequest) Reset()         { *m = GetCompanyRequest{} }
+func (m *GetCompanyRequest) String() string { return proto.CompactTextString(m) }
+func (*GetCompanyRequest) ProtoMessage()    {}
+func (*GetCompanyRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_company_service_a9bae875d0b19058, []int{1}
+}
+func (m *GetCompanyRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetCompanyRequest.Unmarshal(m, b)
+}
+func (m *GetCompanyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetCompanyRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetCompanyRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetCompanyRequest.Merge(dst, src)
+}
+func (m *GetCompanyRequest) XXX_Size() int {
+	return xxx_messageInfo_GetCompanyRequest.Size(m)
+}
+func (m *GetCompanyRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetCompanyRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetCompanyRequest proto.InternalMessageInfo
+
+func (m *GetCompanyRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Input only.
+//
+// Request for updating a specified company.
+type UpdateCompanyRequest struct {
+	// Required.
+	//
+	// The company resource to replace the current resource in the system.
+	Company *Company `protobuf:"bytes,1,opt,name=company,proto3" json:"company,omitempty"`
+	// Optional but strongly recommended for the best service
+	// experience.
+	//
+	// If [update_mask][google.cloud.talent.v4beta1.UpdateCompanyRequest.update_mask] is provided, only the specified fields in
+	// [company][google.cloud.talent.v4beta1.UpdateCompanyRequest.company] are updated. Otherwise all the fields are updated.
+	//
+	// A field mask to specify the company fields to be updated. Only
+	// top level fields of [Company][google.cloud.talent.v4beta1.Company] are supported.
+	UpdateMask           *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UpdateCompanyRequest) Reset()         { *m = UpdateCompanyRequest{} }
+func (m *UpdateCompanyRequest) String() string { return proto.CompactTextString(m) }
+func (*UpdateCompanyRequest) ProtoMessage()    {}
+func (*UpdateCompanyRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_company_service_a9bae875d0b19058, []int{2}
+}
+func (m *UpdateCompanyRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateCompanyRequest.Unmarshal(m, b)
+}
+func (m *UpdateCompanyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateCompanyRequest.Marshal(b, m, deterministic)
+}
+func (dst *UpdateCompanyRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateCompanyRequest.Merge(dst, src)
+}
+func (m *UpdateCompanyRequest) XXX_Size() int {
+	return xxx_messageInfo_UpdateCompanyRequest.Size(m)
+}
+func (m *UpdateCompanyRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateCompanyRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateCompanyRequest proto.InternalMessageInfo
+
+func (m *UpdateCompanyRequest) GetCompany() *Company {
+	if m != nil {
+		return m.Company
+	}
+	return nil
+}
+
+func (m *UpdateCompanyRequest) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+// Input only.
+//
+// Request to delete a company.
+type DeleteCompanyRequest struct {
+	// Required.
+	//
+	// The resource name of the company to be deleted.
+	//
+	// The format is "projects/{project_id}/companies/{company_id}", for example,
+	// "projects/api-test-project/companies/foo".
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeleteCompanyRequest) Reset()         { *m = DeleteCompanyRequest{} }
+func (m *DeleteCompanyRequest) String() string { return proto.CompactTextString(m) }
+func (*DeleteCompanyRequest) ProtoMessage()    {}
+func (*DeleteCompanyRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_company_service_a9bae875d0b19058, []int{3}
+}
+func (m *DeleteCompanyRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteCompanyRequest.Unmarshal(m, b)
+}
+func (m *DeleteCompanyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteCompanyRequest.Marshal(b, m, deterministic)
+}
+func (dst *DeleteCompanyRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteCompanyRequest.Merge(dst, src)
+}
+func (m *DeleteCompanyRequest) XXX_Size() int {
+	return xxx_messageInfo_DeleteCompanyRequest.Size(m)
+}
+func (m *DeleteCompanyRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteCompanyRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteCompanyRequest proto.InternalMessageInfo
+
+func (m *DeleteCompanyRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Input only.
+//
+// List companies for which the client has ACL visibility.
+type ListCompaniesRequest struct {
+	// Required.
+	//
+	// Resource name of the project under which the company is created.
+	//
+	// The format is "projects/{project_id}", for example,
+	// "projects/api-test-project".
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Optional.
+	//
+	// The starting indicator from which to return results.
+	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Optional.
+	//
+	// The maximum number of companies to be returned, at most 100.
+	// Default is 100 if a non-positive number is provided.
+	PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	// Optional.
+	//
+	// Set to true if the companies requested must have open jobs.
+	//
+	// Defaults to false.
+	//
+	// If true, at most [page_size][google.cloud.talent.v4beta1.ListCompaniesRequest.page_size] of companies are fetched, among which
+	// only those with open jobs are returned.
+	RequireOpenJobs      bool     `protobuf:"varint,4,opt,name=require_open_jobs,json=requireOpenJobs,proto3" json:"require_open_jobs,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListCompaniesRequest) Reset()         { *m = ListCompaniesRequest{} }
+func (m *ListCompaniesRequest) String() string { return proto.CompactTextString(m) }
+func (*ListCompaniesRequest) ProtoMessage()    {}
+func (*ListCompaniesRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_company_service_a9bae875d0b19058, []int{4}
+}
+func (m *ListCompaniesRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListCompaniesRequest.Unmarshal(m, b)
+}
+func (m *ListCompaniesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListCompaniesRequest.Marshal(b, m, deterministic)
+}
+func (dst *ListCompaniesRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListCompaniesRequest.Merge(dst, src)
+}
+func (m *ListCompaniesRequest) XXX_Size() int {
+	return xxx_messageInfo_ListCompaniesRequest.Size(m)
+}
+func (m *ListCompaniesRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListCompaniesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListCompaniesRequest proto.InternalMessageInfo
+
+func (m *ListCompaniesRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *ListCompaniesRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListCompaniesRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+func (m *ListCompaniesRequest) GetRequireOpenJobs() bool {
+	if m != nil {
+		return m.RequireOpenJobs
+	}
+	return false
+}
+
+// Output only.
+//
+// The List companies response object.
+type ListCompaniesResponse struct {
+	// Companies for the current client.
+	Companies []*Company `protobuf:"bytes,1,rep,name=companies,proto3" json:"companies,omitempty"`
+	// A token to retrieve the next page of results.
+	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	// Additional information for the API invocation, such as the request
+	// tracking id.
+	Metadata             *ResponseMetadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *ListCompaniesResponse) Reset()         { *m = ListCompaniesResponse{} }
+func (m *ListCompaniesResponse) String() string { return proto.CompactTextString(m) }
+func (*ListCompaniesResponse) ProtoMessage()    {}
+func (*ListCompaniesResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_company_service_a9bae875d0b19058, []int{5}
+}
+func (m *ListCompaniesResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListCompaniesResponse.Unmarshal(m, b)
+}
+func (m *ListCompaniesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListCompaniesResponse.Marshal(b, m, deterministic)
+}
+func (dst *ListCompaniesResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListCompaniesResponse.Merge(dst, src)
+}
+func (m *ListCompaniesResponse) XXX_Size() int {
+	return xxx_messageInfo_ListCompaniesResponse.Size(m)
+}
+func (m *ListCompaniesResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListCompaniesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListCompaniesResponse proto.InternalMessageInfo
+
+func (m *ListCompaniesResponse) GetCompanies() []*Company {
+	if m != nil {
+		return m.Companies
+	}
+	return nil
+}
+
+func (m *ListCompaniesResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+func (m *ListCompaniesResponse) GetMetadata() *ResponseMetadata {
+	if m != nil {
+		return m.Metadata
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CreateCompanyRequest)(nil), "google.cloud.talent.v4beta1.CreateCompanyRequest")
+	proto.RegisterType((*GetCompanyRequest)(nil), "google.cloud.talent.v4beta1.GetCompanyRequest")
+	proto.RegisterType((*UpdateCompanyRequest)(nil), "google.cloud.talent.v4beta1.UpdateCompanyRequest")
+	proto.RegisterType((*DeleteCompanyRequest)(nil), "google.cloud.talent.v4beta1.DeleteCompanyRequest")
+	proto.RegisterType((*ListCompaniesRequest)(nil), "google.cloud.talent.v4beta1.ListCompaniesRequest")
+	proto.RegisterType((*ListCompaniesResponse)(nil), "google.cloud.talent.v4beta1.ListCompaniesResponse")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CompanyServiceClient is the client API for CompanyService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CompanyServiceClient interface {
+	// Creates a new company entity.
+	CreateCompany(ctx context.Context, in *CreateCompanyRequest, opts ...grpc.CallOption) (*Company, error)
+	// Retrieves specified company.
+	GetCompany(ctx context.Context, in *GetCompanyRequest, opts ...grpc.CallOption) (*Company, error)
+	// Updates specified company. Company names can't be updated. To update a
+	// company name, delete the company and all jobs associated with it, and only
+	// then re-create them.
+	UpdateCompany(ctx context.Context, in *UpdateCompanyRequest, opts ...grpc.CallOption) (*Company, error)
+	// Deletes specified company.
+	// Prerequisite: The company has no jobs associated with it.
+	DeleteCompany(ctx context.Context, in *DeleteCompanyRequest, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Lists all companies associated with the service account.
+	ListCompanies(ctx context.Context, in *ListCompaniesRequest, opts ...grpc.CallOption) (*ListCompaniesResponse, error)
+}
+
+type companyServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCompanyServiceClient(cc *grpc.ClientConn) CompanyServiceClient {
+	return &companyServiceClient{cc}
+}
+
+func (c *companyServiceClient) CreateCompany(ctx context.Context, in *CreateCompanyRequest, opts ...grpc.CallOption) (*Company, error) {
+	out := new(Company)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.CompanyService/CreateCompany", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *companyServiceClient) GetCompany(ctx context.Context, in *GetCompanyRequest, opts ...grpc.CallOption) (*Company, error) {
+	out := new(Company)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.CompanyService/GetCompany", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *companyServiceClient) UpdateCompany(ctx context.Context, in *UpdateCompanyRequest, opts ...grpc.CallOption) (*Company, error) {
+	out := new(Company)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.CompanyService/UpdateCompany", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *companyServiceClient) DeleteCompany(ctx context.Context, in *DeleteCompanyRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.CompanyService/DeleteCompany", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *companyServiceClient) ListCompanies(ctx context.Context, in *ListCompaniesRequest, opts ...grpc.CallOption) (*ListCompaniesResponse, error) {
+	out := new(ListCompaniesResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.CompanyService/ListCompanies", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CompanyServiceServer is the server API for CompanyService service.
+type CompanyServiceServer interface {
+	// Creates a new company entity.
+	CreateCompany(context.Context, *CreateCompanyRequest) (*Company, error)
+	// Retrieves specified company.
+	GetCompany(context.Context, *GetCompanyRequest) (*Company, error)
+	// Updates specified company. Company names can't be updated. To update a
+	// company name, delete the company and all jobs associated with it, and only
+	// then re-create them.
+	UpdateCompany(context.Context, *UpdateCompanyRequest) (*Company, error)
+	// Deletes specified company.
+	// Prerequisite: The company has no jobs associated with it.
+	DeleteCompany(context.Context, *DeleteCompanyRequest) (*empty.Empty, error)
+	// Lists all companies associated with the service account.
+	ListCompanies(context.Context, *ListCompaniesRequest) (*ListCompaniesResponse, error)
+}
+
+func RegisterCompanyServiceServer(s *grpc.Server, srv CompanyServiceServer) {
+	s.RegisterService(&_CompanyService_serviceDesc, srv)
+}
+
+func _CompanyService_CreateCompany_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateCompanyRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CompanyServiceServer).CreateCompany(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.CompanyService/CreateCompany",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CompanyServiceServer).CreateCompany(ctx, req.(*CreateCompanyRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CompanyService_GetCompany_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetCompanyRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CompanyServiceServer).GetCompany(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.CompanyService/GetCompany",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CompanyServiceServer).GetCompany(ctx, req.(*GetCompanyRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CompanyService_UpdateCompany_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateCompanyRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CompanyServiceServer).UpdateCompany(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.CompanyService/UpdateCompany",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CompanyServiceServer).UpdateCompany(ctx, req.(*UpdateCompanyRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CompanyService_DeleteCompany_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteCompanyRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CompanyServiceServer).DeleteCompany(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.CompanyService/DeleteCompany",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CompanyServiceServer).DeleteCompany(ctx, req.(*DeleteCompanyRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _CompanyService_ListCompanies_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListCompaniesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CompanyServiceServer).ListCompanies(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.CompanyService/ListCompanies",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CompanyServiceServer).ListCompanies(ctx, req.(*ListCompaniesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _CompanyService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.cloud.talent.v4beta1.CompanyService",
+	HandlerType: (*CompanyServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "CreateCompany",
+			Handler:    _CompanyService_CreateCompany_Handler,
+		},
+		{
+			MethodName: "GetCompany",
+			Handler:    _CompanyService_GetCompany_Handler,
+		},
+		{
+			MethodName: "UpdateCompany",
+			Handler:    _CompanyService_UpdateCompany_Handler,
+		},
+		{
+			MethodName: "DeleteCompany",
+			Handler:    _CompanyService_DeleteCompany_Handler,
+		},
+		{
+			MethodName: "ListCompanies",
+			Handler:    _CompanyService_ListCompanies_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/cloud/talent/v4beta1/company_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/company_service.proto", fileDescriptor_company_service_a9bae875d0b19058)
+}
+
+var fileDescriptor_company_service_a9bae875d0b19058 = []byte{
+	// 673 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x95, 0x4f, 0x6b, 0x13, 0x41,
+	0x18, 0xc6, 0x99, 0xb6, 0xd6, 0xe6, 0x2d, 0xb1, 0x74, 0x8c, 0x25, 0xa4, 0x8a, 0x61, 0x91, 0x1a,
+	0x23, 0xee, 0x92, 0xd4, 0x8b, 0x16, 0x05, 0x5b, 0xff, 0xa0, 0x58, 0x2c, 0xdb, 0x7a, 0xf1, 0xb2,
+	0x4c, 0x92, 0xb7, 0xcb, 0xb6, 0xd9, 0x99, 0xed, 0xce, 0xa4, 0x68, 0xa5, 0x07, 0x3d, 0x7a, 0xb4,
+	0xe0, 0xc5, 0x83, 0xa0, 0xe0, 0xc7, 0xf1, 0xe2, 0x57, 0xf0, 0x83, 0xc8, 0xee, 0xce, 0x26, 0x4d,
+	0xb2, 0x6c, 0xa2, 0xb7, 0xcc, 0x9f, 0x67, 0xde, 0xdf, 0xfb, 0xec, 0x3c, 0x13, 0x68, 0xb8, 0x42,
+	0xb8, 0x5d, 0xb4, 0xda, 0x5d, 0xd1, 0xeb, 0x58, 0x8a, 0x75, 0x91, 0x2b, 0xeb, 0xf8, 0x6e, 0x0b,
+	0x15, 0x6b, 0x58, 0x6d, 0xe1, 0x07, 0x8c, 0xbf, 0x73, 0x24, 0x86, 0xc7, 0x5e, 0x1b, 0xcd, 0x20,
+	0x14, 0x4a, 0xd0, 0xd5, 0x44, 0x62, 0xc6, 0x12, 0x33, 0x91, 0x98, 0x5a, 0x52, 0xb9, 0xaa, 0xcf,
+	0x63, 0x81, 0x67, 0x31, 0xce, 0x85, 0x62, 0xca, 0x13, 0x5c, 0x26, 0xd2, 0x4a, 0x6d, 0x42, 0x35,
+	0x5f, 0x70, 0xbd, 0xf3, 0xd6, 0x14, 0x5c, 0x7a, 0xab, 0xe6, 0xb1, 0xe2, 0x51, 0xab, 0xb7, 0x6f,
+	0xa1, 0x1f, 0xa8, 0x74, 0xb1, 0x3a, 0xba, 0xb8, 0xef, 0x61, 0xb7, 0xe3, 0xf8, 0x4c, 0x1e, 0x26,
+	0x3b, 0x0c, 0x0e, 0xa5, 0xad, 0x10, 0x99, 0xc2, 0xad, 0xe4, 0x54, 0x1b, 0x8f, 0x7a, 0x28, 0x15,
+	0x5d, 0x81, 0xf9, 0x80, 0x85, 0xc8, 0x55, 0x99, 0x54, 0x49, 0xad, 0x60, 0xeb, 0x11, 0x7d, 0x08,
+	0x17, 0x75, 0xfd, 0xf2, 0x4c, 0x95, 0xd4, 0x16, 0x9b, 0x37, 0xcc, 0x1c, 0x43, 0xcc, 0xf4, 0xd4,
+	0x54, 0x64, 0xdc, 0x84, 0xe5, 0x67, 0xa8, 0x46, 0x8a, 0x51, 0x98, 0xe3, 0xcc, 0x47, 0x5d, 0x2a,
+	0xfe, 0x6d, 0x9c, 0x11, 0x28, 0xbd, 0x0e, 0x3a, 0xe3, 0x64, 0xe7, 0x08, 0xc8, 0x7f, 0x10, 0xd0,
+	0x0d, 0x58, 0xec, 0xc5, 0xe7, 0xc6, 0x36, 0xe8, 0x2e, 0x2a, 0xe9, 0x19, 0xa9, 0x53, 0xe6, 0xd3,
+	0xc8, 0xa9, 0x6d, 0x26, 0x0f, 0x6d, 0x48, 0xb6, 0x47, 0xbf, 0x8d, 0x3a, 0x94, 0x1e, 0x63, 0x17,
+	0xc7, 0xa0, 0xb2, 0x3a, 0xf8, 0x42, 0xa0, 0xf4, 0xd2, 0x93, 0xba, 0x59, 0x0f, 0xe5, 0x24, 0x6f,
+	0xaf, 0x01, 0x04, 0xcc, 0x45, 0x47, 0x89, 0x43, 0xe4, 0x31, 0x58, 0xc1, 0x2e, 0x44, 0x33, 0x7b,
+	0xd1, 0x04, 0x5d, 0x85, 0x78, 0xe0, 0x48, 0xef, 0x04, 0xcb, 0xb3, 0x55, 0x52, 0xbb, 0x60, 0x2f,
+	0x44, 0x13, 0xbb, 0xde, 0x09, 0xd2, 0x3a, 0x2c, 0x87, 0x78, 0xd4, 0xf3, 0x42, 0x74, 0x44, 0x80,
+	0xdc, 0x39, 0x10, 0x2d, 0x59, 0x9e, 0xab, 0x92, 0xda, 0x82, 0xbd, 0xa4, 0x17, 0x5e, 0x05, 0xc8,
+	0x5f, 0x88, 0x96, 0x34, 0x7e, 0x11, 0xb8, 0x32, 0x02, 0x26, 0x03, 0xc1, 0x25, 0xd2, 0x4d, 0x28,
+	0xb4, 0xd3, 0xc9, 0x32, 0xa9, 0xce, 0x4e, 0xed, 0xee, 0x40, 0x46, 0xd7, 0x60, 0x89, 0xe3, 0x5b,
+	0xe5, 0x8c, 0xb5, 0x52, 0x8c, 0xa6, 0x77, 0xfa, 0xed, 0x3c, 0x87, 0x05, 0x1f, 0x15, 0xeb, 0x30,
+	0xc5, 0xe2, 0x6e, 0x16, 0x9b, 0x77, 0x72, 0x4b, 0xa5, 0x90, 0xdb, 0x5a, 0x64, 0xf7, 0xe5, 0xcd,
+	0x6f, 0xf3, 0x70, 0x49, 0x93, 0xec, 0x26, 0x61, 0xa5, 0x5f, 0x09, 0x14, 0x87, 0x2e, 0x36, 0x6d,
+	0xe4, 0x37, 0x92, 0x11, 0x82, 0xca, 0x54, 0xbd, 0x1b, 0x8d, 0x8f, 0xbf, 0xff, 0x9c, 0xcd, 0xdc,
+	0x36, 0xd6, 0xfa, 0x09, 0x7d, 0x9f, 0x7c, 0xd0, 0x07, 0x41, 0x28, 0x0e, 0xb0, 0xad, 0xa4, 0x55,
+	0x3f, 0xb5, 0xfa, 0x06, 0xdd, 0x27, 0x75, 0xfa, 0x99, 0x00, 0x0c, 0x62, 0x40, 0xcd, 0xdc, 0x3a,
+	0x63, 0x79, 0x99, 0x92, 0xcb, 0x8c, 0xb9, 0x6a, 0xf4, 0x1c, 0x57, 0x74, 0x2f, 0xcf, 0x51, 0x0d,
+	0xa0, 0xac, 0xfa, 0x29, 0xfd, 0x41, 0xa0, 0x38, 0x94, 0xb8, 0x09, 0x96, 0x65, 0xa5, 0x73, 0x4a,
+	0xb4, 0x7b, 0x31, 0xda, 0x7a, 0xd3, 0x1c, 0xa0, 0xa5, 0xaf, 0x5a, 0x1e, 0x62, 0x64, 0xdd, 0x27,
+	0x02, 0xc5, 0xa1, 0x08, 0x4e, 0xa0, 0xcc, 0x8a, 0x6b, 0x65, 0x65, 0x2c, 0xee, 0x4f, 0xa2, 0x57,
+	0x33, 0xb5, 0xac, 0x3e, 0xad, 0x65, 0x3f, 0x09, 0x14, 0x87, 0x92, 0x34, 0x01, 0x26, 0xeb, 0x39,
+	0xa8, 0x34, 0xff, 0x45, 0x92, 0x64, 0x20, 0xeb, 0xdb, 0xe6, 0xdd, 0xb9, 0xcd, 0x0f, 0x04, 0xae,
+	0xb7, 0x85, 0x9f, 0x57, 0x69, 0xf3, 0xf2, 0x70, 0x84, 0x76, 0x22, 0x6b, 0x76, 0xc8, 0x9b, 0x47,
+	0x5a, 0xe3, 0x8a, 0x2e, 0xe3, 0xae, 0x29, 0x42, 0xd7, 0x72, 0x91, 0xc7, 0xc6, 0x59, 0xc9, 0x12,
+	0x0b, 0x3c, 0x99, 0xf9, 0x57, 0xb5, 0x91, 0x0c, 0xbf, 0xcf, 0xcc, 0x6e, 0xed, 0xed, 0xb6, 0xe6,
+	0x63, 0xcd, 0xfa, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x13, 0xfe, 0x0c, 0xb0, 0x75, 0x07, 0x00,
+	0x00,
+}
diff --git a/googleapis/cloud/talent/v4beta1/completion_service.pb.go b/googleapis/cloud/talent/v4beta1/completion_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..37b5e3f97277f3dedf13e1bc0f01d17338adcb3d
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/completion_service.pb.go
@@ -0,0 +1,472 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/completion_service.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum to specify the scope of completion.
+type CompleteQueryRequest_CompletionScope int32
+
+const (
+	// Default value.
+	CompleteQueryRequest_COMPLETION_SCOPE_UNSPECIFIED CompleteQueryRequest_CompletionScope = 0
+	// Suggestions are based only on the data provided by the client.
+	CompleteQueryRequest_TENANT CompleteQueryRequest_CompletionScope = 1
+	// Suggestions are based on all jobs data in the system that's visible to
+	// the client
+	CompleteQueryRequest_PUBLIC CompleteQueryRequest_CompletionScope = 2
+)
+
+var CompleteQueryRequest_CompletionScope_name = map[int32]string{
+	0: "COMPLETION_SCOPE_UNSPECIFIED",
+	1: "TENANT",
+	2: "PUBLIC",
+}
+var CompleteQueryRequest_CompletionScope_value = map[string]int32{
+	"COMPLETION_SCOPE_UNSPECIFIED": 0,
+	"TENANT":                       1,
+	"PUBLIC":                       2,
+}
+
+func (x CompleteQueryRequest_CompletionScope) String() string {
+	return proto.EnumName(CompleteQueryRequest_CompletionScope_name, int32(x))
+}
+func (CompleteQueryRequest_CompletionScope) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_completion_service_3f502142a8ec9c10, []int{0, 0}
+}
+
+// Enum to specify auto-completion topics.
+type CompleteQueryRequest_CompletionType int32
+
+const (
+	// Default value.
+	CompleteQueryRequest_COMPLETION_TYPE_UNSPECIFIED CompleteQueryRequest_CompletionType = 0
+	// Only suggest job titles.
+	CompleteQueryRequest_JOB_TITLE CompleteQueryRequest_CompletionType = 1
+	// Only suggest company names.
+	CompleteQueryRequest_COMPANY_NAME CompleteQueryRequest_CompletionType = 2
+	// Suggest both job titles and company names.
+	CompleteQueryRequest_COMBINED CompleteQueryRequest_CompletionType = 3
+)
+
+var CompleteQueryRequest_CompletionType_name = map[int32]string{
+	0: "COMPLETION_TYPE_UNSPECIFIED",
+	1: "JOB_TITLE",
+	2: "COMPANY_NAME",
+	3: "COMBINED",
+}
+var CompleteQueryRequest_CompletionType_value = map[string]int32{
+	"COMPLETION_TYPE_UNSPECIFIED": 0,
+	"JOB_TITLE":                   1,
+	"COMPANY_NAME":                2,
+	"COMBINED":                    3,
+}
+
+func (x CompleteQueryRequest_CompletionType) String() string {
+	return proto.EnumName(CompleteQueryRequest_CompletionType_name, int32(x))
+}
+func (CompleteQueryRequest_CompletionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_completion_service_3f502142a8ec9c10, []int{0, 1}
+}
+
+// Input only.
+//
+// Auto-complete parameters.
+type CompleteQueryRequest struct {
+	// Required.
+	//
+	// Resource name of project the completion is performed within.
+	//
+	// The format is "projects/{project_id}", for example,
+	// "projects/api-test-project".
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Required.
+	//
+	// The query used to generate suggestions.
+	//
+	// The maximum number of allowed characters is 255.
+	Query string `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"`
+	// Optional.
+	//
+	// The list of languages of the query. This is
+	// the BCP-47 language code, such as "en-US" or "sr-Latn".
+	// For more information, see
+	// [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).
+	//
+	// For [CompletionType.JOB_TITLE][google.cloud.talent.v4beta1.CompleteQueryRequest.CompletionType.JOB_TITLE] type, only open jobs with the same
+	// [language_codes][google.cloud.talent.v4beta1.CompleteQueryRequest.language_codes] are returned.
+	//
+	// For [CompletionType.COMPANY_NAME][google.cloud.talent.v4beta1.CompleteQueryRequest.CompletionType.COMPANY_NAME] type,
+	// only companies having open jobs with the same [language_codes][google.cloud.talent.v4beta1.CompleteQueryRequest.language_codes] are
+	// returned.
+	//
+	// For [CompletionType.COMBINED][google.cloud.talent.v4beta1.CompleteQueryRequest.CompletionType.COMBINED] type, only open jobs with the same
+	// [language_codes][google.cloud.talent.v4beta1.CompleteQueryRequest.language_codes] or companies having open jobs with the same
+	// [language_codes][google.cloud.talent.v4beta1.CompleteQueryRequest.language_codes] are returned.
+	//
+	// The maximum number of allowed characters is 255.
+	LanguageCodes []string `protobuf:"bytes,3,rep,name=language_codes,json=languageCodes,proto3" json:"language_codes,omitempty"`
+	// Required.
+	//
+	// Completion result count.
+	//
+	// The maximum allowed page size is 10.
+	PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	// Optional.
+	//
+	// If provided, restricts completion to specified company.
+	//
+	// The format is "projects/{project_id}/companies/{company_id}", for example,
+	// "projects/api-test-project/companies/foo".
+	CompanyName string `protobuf:"bytes,5,opt,name=company_name,json=companyName,proto3" json:"company_name,omitempty"`
+	// Optional.
+	//
+	// The scope of the completion. The defaults is [CompletionScope.PUBLIC][google.cloud.talent.v4beta1.CompleteQueryRequest.CompletionScope.PUBLIC].
+	Scope CompleteQueryRequest_CompletionScope `protobuf:"varint,6,opt,name=scope,proto3,enum=google.cloud.talent.v4beta1.CompleteQueryRequest_CompletionScope" json:"scope,omitempty"`
+	// Optional.
+	//
+	// The completion topic. The default is [CompletionType.COMBINED][google.cloud.talent.v4beta1.CompleteQueryRequest.CompletionType.COMBINED].
+	Type                 CompleteQueryRequest_CompletionType `protobuf:"varint,7,opt,name=type,proto3,enum=google.cloud.talent.v4beta1.CompleteQueryRequest_CompletionType" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                            `json:"-"`
+	XXX_unrecognized     []byte                              `json:"-"`
+	XXX_sizecache        int32                               `json:"-"`
+}
+
+func (m *CompleteQueryRequest) Reset()         { *m = CompleteQueryRequest{} }
+func (m *CompleteQueryRequest) String() string { return proto.CompactTextString(m) }
+func (*CompleteQueryRequest) ProtoMessage()    {}
+func (*CompleteQueryRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_completion_service_3f502142a8ec9c10, []int{0}
+}
+func (m *CompleteQueryRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CompleteQueryRequest.Unmarshal(m, b)
+}
+func (m *CompleteQueryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CompleteQueryRequest.Marshal(b, m, deterministic)
+}
+func (dst *CompleteQueryRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CompleteQueryRequest.Merge(dst, src)
+}
+func (m *CompleteQueryRequest) XXX_Size() int {
+	return xxx_messageInfo_CompleteQueryRequest.Size(m)
+}
+func (m *CompleteQueryRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CompleteQueryRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompleteQueryRequest proto.InternalMessageInfo
+
+func (m *CompleteQueryRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *CompleteQueryRequest) GetQuery() string {
+	if m != nil {
+		return m.Query
+	}
+	return ""
+}
+
+func (m *CompleteQueryRequest) GetLanguageCodes() []string {
+	if m != nil {
+		return m.LanguageCodes
+	}
+	return nil
+}
+
+func (m *CompleteQueryRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+func (m *CompleteQueryRequest) GetCompanyName() string {
+	if m != nil {
+		return m.CompanyName
+	}
+	return ""
+}
+
+func (m *CompleteQueryRequest) GetScope() CompleteQueryRequest_CompletionScope {
+	if m != nil {
+		return m.Scope
+	}
+	return CompleteQueryRequest_COMPLETION_SCOPE_UNSPECIFIED
+}
+
+func (m *CompleteQueryRequest) GetType() CompleteQueryRequest_CompletionType {
+	if m != nil {
+		return m.Type
+	}
+	return CompleteQueryRequest_COMPLETION_TYPE_UNSPECIFIED
+}
+
+// Output only.
+//
+// Response of auto-complete query.
+type CompleteQueryResponse struct {
+	// Results of the matching job/company candidates.
+	CompletionResults []*CompleteQueryResponse_CompletionResult `protobuf:"bytes,1,rep,name=completion_results,json=completionResults,proto3" json:"completion_results,omitempty"`
+	// Additional information for the API invocation, such as the request
+	// tracking id.
+	Metadata             *ResponseMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *CompleteQueryResponse) Reset()         { *m = CompleteQueryResponse{} }
+func (m *CompleteQueryResponse) String() string { return proto.CompactTextString(m) }
+func (*CompleteQueryResponse) ProtoMessage()    {}
+func (*CompleteQueryResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_completion_service_3f502142a8ec9c10, []int{1}
+}
+func (m *CompleteQueryResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CompleteQueryResponse.Unmarshal(m, b)
+}
+func (m *CompleteQueryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CompleteQueryResponse.Marshal(b, m, deterministic)
+}
+func (dst *CompleteQueryResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CompleteQueryResponse.Merge(dst, src)
+}
+func (m *CompleteQueryResponse) XXX_Size() int {
+	return xxx_messageInfo_CompleteQueryResponse.Size(m)
+}
+func (m *CompleteQueryResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CompleteQueryResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompleteQueryResponse proto.InternalMessageInfo
+
+func (m *CompleteQueryResponse) GetCompletionResults() []*CompleteQueryResponse_CompletionResult {
+	if m != nil {
+		return m.CompletionResults
+	}
+	return nil
+}
+
+func (m *CompleteQueryResponse) GetMetadata() *ResponseMetadata {
+	if m != nil {
+		return m.Metadata
+	}
+	return nil
+}
+
+// Output only.
+//
+// Resource that represents completion results.
+type CompleteQueryResponse_CompletionResult struct {
+	// The suggestion for the query.
+	Suggestion string `protobuf:"bytes,1,opt,name=suggestion,proto3" json:"suggestion,omitempty"`
+	// The completion topic.
+	Type CompleteQueryRequest_CompletionType `protobuf:"varint,2,opt,name=type,proto3,enum=google.cloud.talent.v4beta1.CompleteQueryRequest_CompletionType" json:"type,omitempty"`
+	// The URI of the company image for [CompletionType.COMPANY_NAME][].
+	ImageUri             string   `protobuf:"bytes,3,opt,name=image_uri,json=imageUri,proto3" json:"image_uri,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CompleteQueryResponse_CompletionResult) Reset() {
+	*m = CompleteQueryResponse_CompletionResult{}
+}
+func (m *CompleteQueryResponse_CompletionResult) String() string { return proto.CompactTextString(m) }
+func (*CompleteQueryResponse_CompletionResult) ProtoMessage()    {}
+func (*CompleteQueryResponse_CompletionResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_completion_service_3f502142a8ec9c10, []int{1, 0}
+}
+func (m *CompleteQueryResponse_CompletionResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CompleteQueryResponse_CompletionResult.Unmarshal(m, b)
+}
+func (m *CompleteQueryResponse_CompletionResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CompleteQueryResponse_CompletionResult.Marshal(b, m, deterministic)
+}
+func (dst *CompleteQueryResponse_CompletionResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CompleteQueryResponse_CompletionResult.Merge(dst, src)
+}
+func (m *CompleteQueryResponse_CompletionResult) XXX_Size() int {
+	return xxx_messageInfo_CompleteQueryResponse_CompletionResult.Size(m)
+}
+func (m *CompleteQueryResponse_CompletionResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_CompleteQueryResponse_CompletionResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompleteQueryResponse_CompletionResult proto.InternalMessageInfo
+
+func (m *CompleteQueryResponse_CompletionResult) GetSuggestion() string {
+	if m != nil {
+		return m.Suggestion
+	}
+	return ""
+}
+
+func (m *CompleteQueryResponse_CompletionResult) GetType() CompleteQueryRequest_CompletionType {
+	if m != nil {
+		return m.Type
+	}
+	return CompleteQueryRequest_COMPLETION_TYPE_UNSPECIFIED
+}
+
+func (m *CompleteQueryResponse_CompletionResult) GetImageUri() string {
+	if m != nil {
+		return m.ImageUri
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*CompleteQueryRequest)(nil), "google.cloud.talent.v4beta1.CompleteQueryRequest")
+	proto.RegisterType((*CompleteQueryResponse)(nil), "google.cloud.talent.v4beta1.CompleteQueryResponse")
+	proto.RegisterType((*CompleteQueryResponse_CompletionResult)(nil), "google.cloud.talent.v4beta1.CompleteQueryResponse.CompletionResult")
+	proto.RegisterEnum("google.cloud.talent.v4beta1.CompleteQueryRequest_CompletionScope", CompleteQueryRequest_CompletionScope_name, CompleteQueryRequest_CompletionScope_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.CompleteQueryRequest_CompletionType", CompleteQueryRequest_CompletionType_name, CompleteQueryRequest_CompletionType_value)
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// CompletionClient is the client API for Completion service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CompletionClient interface {
+	// Completes the specified prefix with keyword suggestions.
+	// Intended for use by a job search auto-complete search box.
+	CompleteQuery(ctx context.Context, in *CompleteQueryRequest, opts ...grpc.CallOption) (*CompleteQueryResponse, error)
+}
+
+type completionClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewCompletionClient(cc *grpc.ClientConn) CompletionClient {
+	return &completionClient{cc}
+}
+
+func (c *completionClient) CompleteQuery(ctx context.Context, in *CompleteQueryRequest, opts ...grpc.CallOption) (*CompleteQueryResponse, error) {
+	out := new(CompleteQueryResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.Completion/CompleteQuery", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CompletionServer is the server API for Completion service.
+type CompletionServer interface {
+	// Completes the specified prefix with keyword suggestions.
+	// Intended for use by a job search auto-complete search box.
+	CompleteQuery(context.Context, *CompleteQueryRequest) (*CompleteQueryResponse, error)
+}
+
+func RegisterCompletionServer(s *grpc.Server, srv CompletionServer) {
+	s.RegisterService(&_Completion_serviceDesc, srv)
+}
+
+func _Completion_CompleteQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CompleteQueryRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CompletionServer).CompleteQuery(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.Completion/CompleteQuery",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CompletionServer).CompleteQuery(ctx, req.(*CompleteQueryRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _Completion_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.cloud.talent.v4beta1.Completion",
+	HandlerType: (*CompletionServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "CompleteQuery",
+			Handler:    _Completion_CompleteQuery_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/cloud/talent/v4beta1/completion_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/completion_service.proto", fileDescriptor_completion_service_3f502142a8ec9c10)
+}
+
+var fileDescriptor_completion_service_3f502142a8ec9c10 = []byte{
+	// 639 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xdd, 0x6e, 0xd3, 0x30,
+	0x14, 0x26, 0x69, 0x3b, 0xda, 0xb3, 0x1f, 0x82, 0x35, 0x50, 0xd4, 0x4d, 0xac, 0x14, 0x4d, 0xaa,
+	0x40, 0x24, 0x5a, 0xd9, 0x15, 0x08, 0x89, 0x36, 0x0b, 0x52, 0x60, 0x4d, 0x4b, 0x9a, 0x09, 0x8d,
+	0x9b, 0xe0, 0x65, 0x56, 0x14, 0xd4, 0xc6, 0x59, 0x9c, 0x4c, 0xea, 0x10, 0x37, 0x08, 0x9e, 0x80,
+	0x37, 0x00, 0xf1, 0x02, 0xbc, 0x0a, 0xaf, 0xc0, 0x73, 0x20, 0x64, 0x27, 0x1b, 0x5d, 0x99, 0x86,
+	0x2a, 0xb8, 0xb3, 0x3f, 0x9f, 0xef, 0xfb, 0xec, 0xe3, 0x73, 0x0e, 0x6c, 0x07, 0x94, 0x06, 0x23,
+	0xa2, 0xfb, 0x23, 0x9a, 0x1d, 0xea, 0x29, 0x1e, 0x91, 0x28, 0xd5, 0x8f, 0xb7, 0x0f, 0x48, 0x8a,
+	0xb7, 0x74, 0x9f, 0x8e, 0xe3, 0x11, 0x49, 0x43, 0x1a, 0x79, 0x8c, 0x24, 0xc7, 0xa1, 0x4f, 0xb4,
+	0x38, 0xa1, 0x29, 0x45, 0x6b, 0x39, 0x4b, 0x13, 0x2c, 0x2d, 0x67, 0x69, 0x05, 0xab, 0xbe, 0x5e,
+	0x48, 0xe2, 0x38, 0xd4, 0x71, 0x14, 0xd1, 0x14, 0x73, 0x05, 0x96, 0x53, 0xeb, 0xad, 0xbf, 0x18,
+	0x8e, 0x69, 0x94, 0x47, 0x36, 0x3f, 0x96, 0x61, 0xd5, 0xc8, 0x6f, 0x40, 0x5e, 0x64, 0x24, 0x99,
+	0x38, 0xe4, 0x28, 0x23, 0x2c, 0x45, 0x08, 0xca, 0x11, 0x1e, 0x13, 0x55, 0x6a, 0x48, 0xad, 0x9a,
+	0x23, 0xd6, 0x68, 0x15, 0x2a, 0x47, 0x3c, 0x46, 0x95, 0x05, 0x98, 0x6f, 0xd0, 0x26, 0xac, 0x8c,
+	0x70, 0x14, 0x64, 0x38, 0x20, 0x9e, 0x4f, 0x0f, 0x09, 0x53, 0x4b, 0x8d, 0x52, 0xab, 0xe6, 0x2c,
+	0x9f, 0xa2, 0x06, 0x07, 0xd1, 0x1a, 0xd4, 0x62, 0x1e, 0xc2, 0xc2, 0x13, 0xa2, 0x96, 0x1b, 0x52,
+	0xab, 0xe2, 0x54, 0x39, 0x30, 0x0c, 0x4f, 0x08, 0xba, 0x0d, 0x4b, 0x3c, 0x0f, 0x38, 0x9a, 0x78,
+	0xc2, 0xb5, 0x22, 0x0c, 0x16, 0x0b, 0xcc, 0xe6, 0xe6, 0x2f, 0xa1, 0xc2, 0x7c, 0x1a, 0x13, 0x75,
+	0xa1, 0x21, 0xb5, 0x56, 0xda, 0x1d, 0xed, 0x92, 0xf4, 0x68, 0x17, 0x3d, 0xe9, 0x14, 0x0c, 0x69,
+	0x34, 0xe4, 0x42, 0x4e, 0xae, 0x87, 0x5c, 0x28, 0xa7, 0x93, 0x98, 0xa8, 0x57, 0x85, 0xee, 0x93,
+	0x7f, 0xd1, 0x75, 0x27, 0x31, 0x71, 0x84, 0x5a, 0xf3, 0x39, 0x5c, 0x9b, 0xf1, 0x43, 0x0d, 0x58,
+	0x37, 0xfa, 0xbd, 0xc1, 0xae, 0xe9, 0x5a, 0x7d, 0xdb, 0x1b, 0x1a, 0xfd, 0x81, 0xe9, 0xed, 0xd9,
+	0xc3, 0x81, 0x69, 0x58, 0x4f, 0x2d, 0x73, 0x47, 0xb9, 0x82, 0x00, 0x16, 0x5c, 0xd3, 0xee, 0xd8,
+	0xae, 0x22, 0xf1, 0xf5, 0x60, 0xaf, 0xbb, 0x6b, 0x19, 0x8a, 0xdc, 0x7c, 0x0d, 0x2b, 0xe7, 0x4d,
+	0xd0, 0x06, 0xac, 0x4d, 0x69, 0xb9, 0xfb, 0x7f, 0x48, 0x2d, 0x43, 0xed, 0x59, 0xbf, 0xeb, 0xb9,
+	0x96, 0xbb, 0x6b, 0x2a, 0x12, 0x52, 0x60, 0x89, 0xc7, 0x77, 0xec, 0x7d, 0xcf, 0xee, 0xf4, 0x4c,
+	0x45, 0x46, 0x4b, 0x50, 0x35, 0xfa, 0xbd, 0xae, 0x65, 0x9b, 0x3b, 0x4a, 0xa9, 0xf9, 0x53, 0x86,
+	0x1b, 0x33, 0x8f, 0x63, 0x31, 0x8d, 0x18, 0x41, 0x09, 0xa0, 0xa9, 0x12, 0x4d, 0x08, 0xcb, 0x46,
+	0x29, 0x53, 0xa5, 0x46, 0xa9, 0xb5, 0xd8, 0x36, 0xe6, 0x49, 0x56, 0xae, 0x37, 0x95, 0x2d, 0x47,
+	0x68, 0x39, 0xd7, 0xfd, 0x19, 0x84, 0x21, 0x0b, 0xaa, 0x63, 0x92, 0xe2, 0x43, 0x9c, 0x62, 0x51,
+	0x6b, 0x8b, 0xed, 0xfb, 0x97, 0x3a, 0x9d, 0x8a, 0xf7, 0x0a, 0x92, 0x73, 0x46, 0xaf, 0x7f, 0x95,
+	0x40, 0x99, 0xb5, 0x44, 0xb7, 0x00, 0x58, 0x16, 0x04, 0x84, 0x71, 0xac, 0x28, 0xf1, 0x29, 0xe4,
+	0xac, 0x24, 0xe4, 0xff, 0x59, 0x12, 0xbc, 0x03, 0xc2, 0x31, 0x6f, 0x81, 0x2c, 0x09, 0xd5, 0x92,
+	0x30, 0xad, 0x0a, 0x60, 0x2f, 0x09, 0xdb, 0xdf, 0x24, 0x80, 0xdf, 0x2c, 0xf4, 0x45, 0x82, 0xe5,
+	0x73, 0xca, 0x68, 0x6b, 0xee, 0x5b, 0xd4, 0xdb, 0xf3, 0x7f, 0x4f, 0xf3, 0xde, 0xfb, 0xef, 0x3f,
+	0x3e, 0xc9, 0x9b, 0xe8, 0xce, 0xd9, 0xbc, 0x78, 0xcb, 0x3b, 0xf2, 0x71, 0x9c, 0xd0, 0x37, 0xc4,
+	0x4f, 0x99, 0x7e, 0xf7, 0xdd, 0xc3, 0xe2, 0xc3, 0x48, 0xf7, 0x83, 0x04, 0x1b, 0x3e, 0x1d, 0x5f,
+	0x66, 0xd3, 0xbd, 0x39, 0xd5, 0x06, 0xf9, 0x7c, 0x1b, 0xf0, 0xc9, 0x33, 0x90, 0x5e, 0x75, 0x0a,
+	0x5a, 0x40, 0xf9, 0xa4, 0xd0, 0x68, 0x12, 0xe8, 0x01, 0x89, 0xc4, 0x5c, 0xd2, 0xf3, 0x23, 0x1c,
+	0x87, 0xec, 0xc2, 0x21, 0xf6, 0x28, 0xdf, 0x7e, 0x96, 0x4b, 0x86, 0x3b, 0x3c, 0x58, 0x10, 0x9c,
+	0x07, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x40, 0x21, 0x96, 0x16, 0x68, 0x05, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/talent/v4beta1/event.pb.go b/googleapis/cloud/talent/v4beta1/event.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..66e7ce7839c17560436d19733371371d87a29fd8
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/event.pb.go
@@ -0,0 +1,637 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/event.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import timestamp "github.com/golang/protobuf/ptypes/timestamp"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// An enumeration of an event attributed to the behavior of the end user,
+// such as a job seeker.
+type JobEvent_JobEventType int32
+
+const (
+	// The event is unspecified by other provided values.
+	JobEvent_JOB_EVENT_TYPE_UNSPECIFIED JobEvent_JobEventType = 0
+	// The job seeker or other entity interacting with the service has
+	// had a job rendered in their view, such as in a list of search results in
+	// a compressed or clipped format. This event is typically associated with
+	// the viewing of a jobs list on a single page by a job seeker.
+	JobEvent_IMPRESSION JobEvent_JobEventType = 1
+	// The job seeker, or other entity interacting with the service, has
+	// viewed the details of a job, including the full description. This
+	// event doesn't apply to the viewing a snippet of a job appearing as a
+	// part of the job search results. Viewing a snippet is associated with an
+	// [impression][google.cloud.talent.v4beta1.JobEvent.JobEventType.IMPRESSION]).
+	JobEvent_VIEW JobEvent_JobEventType = 2
+	// The job seeker or other entity interacting with the service
+	// performed an action to view a job and was redirected to a different
+	// website for job.
+	JobEvent_VIEW_REDIRECT JobEvent_JobEventType = 3
+	// The job seeker or other entity interacting with the service
+	// began the process or demonstrated the intention of applying for a job.
+	JobEvent_APPLICATION_START JobEvent_JobEventType = 4
+	// The job seeker or other entity interacting with the service
+	// submitted an application for a job.
+	JobEvent_APPLICATION_FINISH JobEvent_JobEventType = 5
+	// The job seeker or other entity interacting with the service
+	// submitted an application for a job with a single click without
+	// entering information. If a job seeker performs this action, send only
+	// this event to the service. Do not also send
+	// [JobEventType.APPLICATION_START][google.cloud.talent.v4beta1.JobEvent.JobEventType.APPLICATION_START] or [JobEventType.APPLICATION_FINISH][google.cloud.talent.v4beta1.JobEvent.JobEventType.APPLICATION_FINISH]
+	// events.
+	JobEvent_APPLICATION_QUICK_SUBMISSION JobEvent_JobEventType = 6
+	// The job seeker or other entity interacting with the service
+	// performed an action to apply to a job and was redirected to a different
+	// website to complete the application.
+	JobEvent_APPLICATION_REDIRECT JobEvent_JobEventType = 7
+	// The job seeker or other entity interacting with the service began the
+	// process or demonstrated the intention of applying for a job from the
+	// search results page without viewing the details of the job posting.
+	// If sending this event, JobEventType.VIEW event shouldn't be sent.
+	JobEvent_APPLICATION_START_FROM_SEARCH JobEvent_JobEventType = 8
+	// The job seeker, or other entity interacting with the service, performs an
+	// action with a single click from the search results page to apply to a job
+	// (without viewing the details of the job posting), and is redirected
+	// to a different website to complete the application. If a candidate
+	// performs this action, send only this event to the service. Do not also
+	// send [JobEventType.APPLICATION_START][google.cloud.talent.v4beta1.JobEvent.JobEventType.APPLICATION_START],
+	// [JobEventType.APPLICATION_FINISH][google.cloud.talent.v4beta1.JobEvent.JobEventType.APPLICATION_FINISH] or [JobEventType.VIEW][google.cloud.talent.v4beta1.JobEvent.JobEventType.VIEW] events.
+	JobEvent_APPLICATION_REDIRECT_FROM_SEARCH JobEvent_JobEventType = 9
+	// This event should be used when a company submits an application
+	// on behalf of a job seeker. This event is intended for use by staffing
+	// agencies attempting to place candidates.
+	JobEvent_APPLICATION_COMPANY_SUBMIT JobEvent_JobEventType = 10
+	// The job seeker or other entity interacting with the service demonstrated
+	// an interest in a job by bookmarking or saving it.
+	JobEvent_BOOKMARK JobEvent_JobEventType = 11
+	// The job seeker or other entity interacting with the service was
+	// sent a notification, such as an email alert or device notification,
+	// contatining one or more jobs listings generated by the service.
+	JobEvent_NOTIFICATION JobEvent_JobEventType = 12
+	// The job seeker or other entity interacting with the service was
+	// employed by the hiring entity (employer). Send this event
+	// only if the job seeker was hired through an application that was
+	// initiated by a search conducted through the Cloud Talent Solution
+	// service.
+	JobEvent_HIRED JobEvent_JobEventType = 13
+	// A recruiter or staffing agency submitted an application on behalf of the
+	// candidate after interacting with the service to identify a suitable job
+	// posting.
+	JobEvent_SENT_CV JobEvent_JobEventType = 14
+	// The entity interacting with the service (for example, the job seeker),
+	// was granted an initial interview by the hiring entity (employer). This
+	// event should only be sent if the job seeker was granted an interview as
+	// part of an application that was initiated by a search conducted through /
+	// recommendation provided by the Cloud Talent Solution service.
+	JobEvent_INTERVIEW_GRANTED JobEvent_JobEventType = 15
+	// The job seeker or other entity interacting with the service showed
+	// no interest in the job.
+	JobEvent_NOT_INTERESTED JobEvent_JobEventType = 16
+)
+
+var JobEvent_JobEventType_name = map[int32]string{
+	0:  "JOB_EVENT_TYPE_UNSPECIFIED",
+	1:  "IMPRESSION",
+	2:  "VIEW",
+	3:  "VIEW_REDIRECT",
+	4:  "APPLICATION_START",
+	5:  "APPLICATION_FINISH",
+	6:  "APPLICATION_QUICK_SUBMISSION",
+	7:  "APPLICATION_REDIRECT",
+	8:  "APPLICATION_START_FROM_SEARCH",
+	9:  "APPLICATION_REDIRECT_FROM_SEARCH",
+	10: "APPLICATION_COMPANY_SUBMIT",
+	11: "BOOKMARK",
+	12: "NOTIFICATION",
+	13: "HIRED",
+	14: "SENT_CV",
+	15: "INTERVIEW_GRANTED",
+	16: "NOT_INTERESTED",
+}
+var JobEvent_JobEventType_value = map[string]int32{
+	"JOB_EVENT_TYPE_UNSPECIFIED":       0,
+	"IMPRESSION":                       1,
+	"VIEW":                             2,
+	"VIEW_REDIRECT":                    3,
+	"APPLICATION_START":                4,
+	"APPLICATION_FINISH":               5,
+	"APPLICATION_QUICK_SUBMISSION":     6,
+	"APPLICATION_REDIRECT":             7,
+	"APPLICATION_START_FROM_SEARCH":    8,
+	"APPLICATION_REDIRECT_FROM_SEARCH": 9,
+	"APPLICATION_COMPANY_SUBMIT":       10,
+	"BOOKMARK":                         11,
+	"NOTIFICATION":                     12,
+	"HIRED":                            13,
+	"SENT_CV":                          14,
+	"INTERVIEW_GRANTED":                15,
+	"NOT_INTERESTED":                   16,
+}
+
+func (x JobEvent_JobEventType) String() string {
+	return proto.EnumName(JobEvent_JobEventType_name, int32(x))
+}
+func (JobEvent_JobEventType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_event_b23c0886c64e48c0, []int{1, 0}
+}
+
+// The enum represents types of client events for a candidate profile.
+type ProfileEvent_ProfileEventType int32
+
+const (
+	// Default value.
+	ProfileEvent_PROFILE_EVENT_TYPE_UNSPECIFIED ProfileEvent_ProfileEventType = 0
+	// The profile is displayed.
+	ProfileEvent_IMPRESSION ProfileEvent_ProfileEventType = 1
+	// The profile is viewed.
+	ProfileEvent_VIEW ProfileEvent_ProfileEventType = 2
+	// The profile is bookmarked.
+	ProfileEvent_BOOKMARK ProfileEvent_ProfileEventType = 3
+	// Comment added to the profile.
+	ProfileEvent_COMMENT_ADDED ProfileEvent_ProfileEventType = 4
+	// Email sent regarding the profile.
+	ProfileEvent_EMAIL_SENT ProfileEvent_ProfileEventType = 5
+	// The resume of the profile is viewed.
+	ProfileEvent_RESUME_VIEWED ProfileEvent_ProfileEventType = 6
+	// The profile is added to a job.
+	ProfileEvent_ADD_TO_JOB ProfileEvent_ProfileEventType = 7
+	// The recruiter explicitly highlights that a given profile is interesting
+	// enough for later review or is a good result for the search.
+	ProfileEvent_POSITIVE_REACTION_TO_PROFILE ProfileEvent_ProfileEventType = 8
+	// The recruiter explicitly highlights that a given profile is not
+	// interesting enough for later review or is not a good result for the
+	// search.
+	ProfileEvent_NEGATIVE_REACTION_TO_PROFILE ProfileEvent_ProfileEventType = 9
+	// The candidate is interesting enough to set up an initial screen with the
+	// recruiter. This step may be skipped based on the interview process.
+	ProfileEvent_SCREEN ProfileEvent_ProfileEventType = 10
+)
+
+var ProfileEvent_ProfileEventType_name = map[int32]string{
+	0:  "PROFILE_EVENT_TYPE_UNSPECIFIED",
+	1:  "IMPRESSION",
+	2:  "VIEW",
+	3:  "BOOKMARK",
+	4:  "COMMENT_ADDED",
+	5:  "EMAIL_SENT",
+	6:  "RESUME_VIEWED",
+	7:  "ADD_TO_JOB",
+	8:  "POSITIVE_REACTION_TO_PROFILE",
+	9:  "NEGATIVE_REACTION_TO_PROFILE",
+	10: "SCREEN",
+}
+var ProfileEvent_ProfileEventType_value = map[string]int32{
+	"PROFILE_EVENT_TYPE_UNSPECIFIED": 0,
+	"IMPRESSION":                     1,
+	"VIEW":                           2,
+	"BOOKMARK":                       3,
+	"COMMENT_ADDED":                  4,
+	"EMAIL_SENT":                     5,
+	"RESUME_VIEWED":                  6,
+	"ADD_TO_JOB":                     7,
+	"POSITIVE_REACTION_TO_PROFILE":   8,
+	"NEGATIVE_REACTION_TO_PROFILE":   9,
+	"SCREEN":                         10,
+}
+
+func (x ProfileEvent_ProfileEventType) String() string {
+	return proto.EnumName(ProfileEvent_ProfileEventType_name, int32(x))
+}
+func (ProfileEvent_ProfileEventType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_event_b23c0886c64e48c0, []int{2, 0}
+}
+
+// An event issued when an end user interacts with the application that
+// implements Cloud Talent Solution. Providing this information improves the
+// quality of search and recommendation for the API clients, enabling the
+// service to perform optimally. The number of events sent must be consistent
+// with other calls, such as job searches, issued to the service by the client.
+type ClientEvent struct {
+	// Required.
+	//
+	// A unique ID generated in the API responses. It can be found in
+	// [ResponseMetadata.request_id][google.cloud.talent.v4beta1.ResponseMetadata.request_id].
+	RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
+	// Required.
+	//
+	// A unique identifier, generated by the client application. This `event_id`
+	// is used to establish the relationship between different events
+	// (see [parent_event_id][google.cloud.talent.v4beta1.ClientEvent.parent_event_id]).
+	EventId string `protobuf:"bytes,2,opt,name=event_id,json=eventId,proto3" json:"event_id,omitempty"`
+	// Required except the first event.
+	//
+	// The event_id of an event that resulted in the current event. For example, a
+	// [Job view][JobEventType.VIEW] event usually follows a parent
+	// [impression][JobEventType.IMPRESSION] event: A job seeker first does a
+	// search where a list of jobs appears
+	// ([impression][JobEventType.IMPRESSION]). The job seeker then selects a
+	// result and views the description of a particular job ([Job
+	// view][JobEventType.VIEW]).
+	ParentEventId string `protobuf:"bytes,3,opt,name=parent_event_id,json=parentEventId,proto3" json:"parent_event_id,omitempty"`
+	// Required.
+	//
+	// The timestamp of the event.
+	CreateTime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
+	// Required.
+	//
+	// The detail information of a specific event type.
+	//
+	// Types that are valid to be assigned to Event:
+	//	*ClientEvent_JobEvent
+	//	*ClientEvent_ProfileEvent
+	Event isClientEvent_Event `protobuf_oneof:"event"`
+	// Optional.
+	//
+	// Extra information about this event. Used for storing information with no
+	// matching field in [event][google.cloud.talent.v4beta1.event] payload, for example, user application specific
+	// context or details.
+	//
+	// At most 20 keys are supported. The maximum total size of all keys and
+	// values is 2 KB.
+	ExtraInfo            map[string]string `protobuf:"bytes,7,rep,name=extra_info,json=extraInfo,proto3" json:"extra_info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *ClientEvent) Reset()         { *m = ClientEvent{} }
+func (m *ClientEvent) String() string { return proto.CompactTextString(m) }
+func (*ClientEvent) ProtoMessage()    {}
+func (*ClientEvent) Descriptor() ([]byte, []int) {
+	return fileDescriptor_event_b23c0886c64e48c0, []int{0}
+}
+func (m *ClientEvent) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ClientEvent.Unmarshal(m, b)
+}
+func (m *ClientEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ClientEvent.Marshal(b, m, deterministic)
+}
+func (dst *ClientEvent) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ClientEvent.Merge(dst, src)
+}
+func (m *ClientEvent) XXX_Size() int {
+	return xxx_messageInfo_ClientEvent.Size(m)
+}
+func (m *ClientEvent) XXX_DiscardUnknown() {
+	xxx_messageInfo_ClientEvent.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ClientEvent proto.InternalMessageInfo
+
+func (m *ClientEvent) GetRequestId() string {
+	if m != nil {
+		return m.RequestId
+	}
+	return ""
+}
+
+func (m *ClientEvent) GetEventId() string {
+	if m != nil {
+		return m.EventId
+	}
+	return ""
+}
+
+func (m *ClientEvent) GetParentEventId() string {
+	if m != nil {
+		return m.ParentEventId
+	}
+	return ""
+}
+
+func (m *ClientEvent) GetCreateTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.CreateTime
+	}
+	return nil
+}
+
+type isClientEvent_Event interface {
+	isClientEvent_Event()
+}
+
+type ClientEvent_JobEvent struct {
+	JobEvent *JobEvent `protobuf:"bytes,5,opt,name=job_event,json=jobEvent,proto3,oneof"`
+}
+
+type ClientEvent_ProfileEvent struct {
+	ProfileEvent *ProfileEvent `protobuf:"bytes,6,opt,name=profile_event,json=profileEvent,proto3,oneof"`
+}
+
+func (*ClientEvent_JobEvent) isClientEvent_Event() {}
+
+func (*ClientEvent_ProfileEvent) isClientEvent_Event() {}
+
+func (m *ClientEvent) GetEvent() isClientEvent_Event {
+	if m != nil {
+		return m.Event
+	}
+	return nil
+}
+
+func (m *ClientEvent) GetJobEvent() *JobEvent {
+	if x, ok := m.GetEvent().(*ClientEvent_JobEvent); ok {
+		return x.JobEvent
+	}
+	return nil
+}
+
+func (m *ClientEvent) GetProfileEvent() *ProfileEvent {
+	if x, ok := m.GetEvent().(*ClientEvent_ProfileEvent); ok {
+		return x.ProfileEvent
+	}
+	return nil
+}
+
+func (m *ClientEvent) GetExtraInfo() map[string]string {
+	if m != nil {
+		return m.ExtraInfo
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*ClientEvent) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _ClientEvent_OneofMarshaler, _ClientEvent_OneofUnmarshaler, _ClientEvent_OneofSizer, []interface{}{
+		(*ClientEvent_JobEvent)(nil),
+		(*ClientEvent_ProfileEvent)(nil),
+	}
+}
+
+func _ClientEvent_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*ClientEvent)
+	// event
+	switch x := m.Event.(type) {
+	case *ClientEvent_JobEvent:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.JobEvent); err != nil {
+			return err
+		}
+	case *ClientEvent_ProfileEvent:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ProfileEvent); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("ClientEvent.Event has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _ClientEvent_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*ClientEvent)
+	switch tag {
+	case 5: // event.job_event
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(JobEvent)
+		err := b.DecodeMessage(msg)
+		m.Event = &ClientEvent_JobEvent{msg}
+		return true, err
+	case 6: // event.profile_event
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ProfileEvent)
+		err := b.DecodeMessage(msg)
+		m.Event = &ClientEvent_ProfileEvent{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _ClientEvent_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*ClientEvent)
+	// event
+	switch x := m.Event.(type) {
+	case *ClientEvent_JobEvent:
+		s := proto.Size(x.JobEvent)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *ClientEvent_ProfileEvent:
+		s := proto.Size(x.ProfileEvent)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// An event issued when a job seeker interacts with the application that
+// implements Cloud Talent Solution.
+type JobEvent struct {
+	// Required.
+	//
+	// The type of the event (see [JobEventType][google.cloud.talent.v4beta1.JobEvent.JobEventType]).
+	Type JobEvent_JobEventType `protobuf:"varint,1,opt,name=type,proto3,enum=google.cloud.talent.v4beta1.JobEvent_JobEventType" json:"type,omitempty"`
+	// Required.
+	//
+	// The [job name(s)][google.cloud.talent.v4beta1.Job.name] associated with this event.
+	// For example, if this is an [impression][google.cloud.talent.v4beta1.JobEvent.JobEventType.IMPRESSION] event,
+	// this field contains the identifiers of all jobs shown to the job seeker.
+	// If this was a [view][google.cloud.talent.v4beta1.JobEvent.JobEventType.VIEW] event, this field contains the
+	// identifier of the viewed job.
+	Jobs                 []string `protobuf:"bytes,2,rep,name=jobs,proto3" json:"jobs,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *JobEvent) Reset()         { *m = JobEvent{} }
+func (m *JobEvent) String() string { return proto.CompactTextString(m) }
+func (*JobEvent) ProtoMessage()    {}
+func (*JobEvent) Descriptor() ([]byte, []int) {
+	return fileDescriptor_event_b23c0886c64e48c0, []int{1}
+}
+func (m *JobEvent) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_JobEvent.Unmarshal(m, b)
+}
+func (m *JobEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_JobEvent.Marshal(b, m, deterministic)
+}
+func (dst *JobEvent) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_JobEvent.Merge(dst, src)
+}
+func (m *JobEvent) XXX_Size() int {
+	return xxx_messageInfo_JobEvent.Size(m)
+}
+func (m *JobEvent) XXX_DiscardUnknown() {
+	xxx_messageInfo_JobEvent.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_JobEvent proto.InternalMessageInfo
+
+func (m *JobEvent) GetType() JobEvent_JobEventType {
+	if m != nil {
+		return m.Type
+	}
+	return JobEvent_JOB_EVENT_TYPE_UNSPECIFIED
+}
+
+func (m *JobEvent) GetJobs() []string {
+	if m != nil {
+		return m.Jobs
+	}
+	return nil
+}
+
+// An event issued when a profile searcher interacts with the application
+// that implements Cloud Talent Solution.
+type ProfileEvent struct {
+	// Required.
+	//
+	// Type of event.
+	Type ProfileEvent_ProfileEventType `protobuf:"varint,1,opt,name=type,proto3,enum=google.cloud.talent.v4beta1.ProfileEvent_ProfileEventType" json:"type,omitempty"`
+	// Required.
+	//
+	// The [profile name(s)][google.cloud.talent.v4beta1.Profile.name] associated with this client event.
+	Profiles []string `protobuf:"bytes,2,rep,name=profiles,proto3" json:"profiles,omitempty"`
+	// Optional.
+	//
+	// The job ID associated with this client event if there is one. Leave it
+	// empty if the event isn't associated with a job.
+	//
+	// The job ID should be consistent with the
+	// [JobApplication.job.requisition_id][] in the profile.
+	JobId                string   `protobuf:"bytes,3,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProfileEvent) Reset()         { *m = ProfileEvent{} }
+func (m *ProfileEvent) String() string { return proto.CompactTextString(m) }
+func (*ProfileEvent) ProtoMessage()    {}
+func (*ProfileEvent) Descriptor() ([]byte, []int) {
+	return fileDescriptor_event_b23c0886c64e48c0, []int{2}
+}
+func (m *ProfileEvent) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProfileEvent.Unmarshal(m, b)
+}
+func (m *ProfileEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProfileEvent.Marshal(b, m, deterministic)
+}
+func (dst *ProfileEvent) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProfileEvent.Merge(dst, src)
+}
+func (m *ProfileEvent) XXX_Size() int {
+	return xxx_messageInfo_ProfileEvent.Size(m)
+}
+func (m *ProfileEvent) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProfileEvent.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProfileEvent proto.InternalMessageInfo
+
+func (m *ProfileEvent) GetType() ProfileEvent_ProfileEventType {
+	if m != nil {
+		return m.Type
+	}
+	return ProfileEvent_PROFILE_EVENT_TYPE_UNSPECIFIED
+}
+
+func (m *ProfileEvent) GetProfiles() []string {
+	if m != nil {
+		return m.Profiles
+	}
+	return nil
+}
+
+func (m *ProfileEvent) GetJobId() string {
+	if m != nil {
+		return m.JobId
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*ClientEvent)(nil), "google.cloud.talent.v4beta1.ClientEvent")
+	proto.RegisterMapType((map[string]string)(nil), "google.cloud.talent.v4beta1.ClientEvent.ExtraInfoEntry")
+	proto.RegisterType((*JobEvent)(nil), "google.cloud.talent.v4beta1.JobEvent")
+	proto.RegisterType((*ProfileEvent)(nil), "google.cloud.talent.v4beta1.ProfileEvent")
+	proto.RegisterEnum("google.cloud.talent.v4beta1.JobEvent_JobEventType", JobEvent_JobEventType_name, JobEvent_JobEventType_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.ProfileEvent_ProfileEventType", ProfileEvent_ProfileEventType_name, ProfileEvent_ProfileEventType_value)
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/event.proto", fileDescriptor_event_b23c0886c64e48c0)
+}
+
+var fileDescriptor_event_b23c0886c64e48c0 = []byte{
+	// 842 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xcb, 0x6e, 0xdb, 0x46,
+	0x14, 0x8d, 0x4c, 0x3d, 0xaf, 0x64, 0x65, 0x32, 0x48, 0x0a, 0x55, 0xcd, 0x43, 0x15, 0xfa, 0x70,
+	0x37, 0x14, 0xea, 0x16, 0x68, 0x91, 0x74, 0x43, 0x91, 0xa3, 0x78, 0x6c, 0xf3, 0xd1, 0x21, 0xad,
+	0x22, 0xdd, 0x0c, 0x28, 0x6b, 0x2c, 0xc8, 0x95, 0x39, 0xac, 0x44, 0x1b, 0xf1, 0x1f, 0x74, 0xdd,
+	0x4f, 0xe8, 0xaf, 0xf5, 0x17, 0xba, 0xeb, 0xa6, 0x98, 0x21, 0x25, 0xd0, 0x6d, 0x6a, 0x04, 0xd9,
+	0xdd, 0xc7, 0xb9, 0xe7, 0x5e, 0x9e, 0xb9, 0x33, 0x84, 0x2f, 0x17, 0x52, 0x2e, 0x56, 0x62, 0x74,
+	0xbe, 0x92, 0xd7, 0xf3, 0x51, 0x16, 0xaf, 0x44, 0x92, 0x8d, 0x6e, 0xbe, 0x9d, 0x89, 0x2c, 0xfe,
+	0x7a, 0x24, 0x6e, 0x44, 0x92, 0x99, 0xe9, 0x5a, 0x66, 0x12, 0x7f, 0x92, 0x03, 0x4d, 0x0d, 0x34,
+	0x73, 0xa0, 0x59, 0x00, 0xfb, 0x4f, 0x0b, 0x96, 0x38, 0x5d, 0x8e, 0xe2, 0x24, 0x91, 0x59, 0x9c,
+	0x2d, 0x65, 0xb2, 0xc9, 0x4b, 0xfb, 0x2f, 0x8a, 0xac, 0xf6, 0x66, 0xd7, 0x17, 0xa3, 0x6c, 0x79,
+	0x25, 0x36, 0x59, 0x7c, 0x95, 0xe6, 0x80, 0xe1, 0x9f, 0x06, 0xb4, 0xed, 0xd5, 0x52, 0x24, 0x19,
+	0x51, 0x1d, 0xf1, 0x33, 0x80, 0xb5, 0xf8, 0xf5, 0x5a, 0x6c, 0x32, 0xbe, 0x9c, 0xf7, 0x2a, 0x83,
+	0xca, 0x41, 0x8b, 0xb5, 0x8a, 0x08, 0x9d, 0xe3, 0x8f, 0xa1, 0xa9, 0x27, 0x53, 0xc9, 0x3d, 0x9d,
+	0x6c, 0x68, 0x9f, 0xce, 0xf1, 0x17, 0xf0, 0x30, 0x8d, 0xd7, 0x2a, 0xb7, 0x43, 0x18, 0x1a, 0xb1,
+	0x9f, 0x87, 0x49, 0x81, 0x7b, 0x05, 0xed, 0xf3, 0xb5, 0x88, 0x33, 0xc1, 0xd5, 0x2c, 0xbd, 0xea,
+	0xa0, 0x72, 0xd0, 0x3e, 0xec, 0x9b, 0xc5, 0x37, 0x6e, 0x07, 0x35, 0xa3, 0xed, 0xa0, 0x0c, 0x72,
+	0xb8, 0x0a, 0x60, 0x07, 0x5a, 0x97, 0x72, 0x96, 0x77, 0xe8, 0xd5, 0x74, 0xe9, 0xe7, 0xe6, 0x3d,
+	0xf2, 0x98, 0xc7, 0x72, 0xa6, 0x1b, 0x1f, 0x3d, 0x60, 0xcd, 0xcb, 0xc2, 0xc6, 0x01, 0xec, 0xa7,
+	0x6b, 0x79, 0xb1, 0x5c, 0x89, 0x82, 0xa9, 0xae, 0x99, 0xbe, 0xba, 0x97, 0x29, 0xc8, 0x2b, 0xb6,
+	0x6c, 0x9d, 0xb4, 0xe4, 0xe3, 0x29, 0x80, 0x78, 0x9b, 0xad, 0x63, 0xbe, 0x4c, 0x2e, 0x64, 0xaf,
+	0x31, 0x30, 0x0e, 0xda, 0x87, 0xdf, 0xdd, 0x4b, 0x57, 0x12, 0xdd, 0x24, 0xaa, 0x94, 0x26, 0x17,
+	0x92, 0x24, 0xd9, 0xfa, 0x96, 0xb5, 0xc4, 0xd6, 0xef, 0xff, 0x00, 0xdd, 0xbb, 0x49, 0x8c, 0xc0,
+	0xf8, 0x45, 0xdc, 0x16, 0x27, 0xa3, 0x4c, 0xfc, 0x18, 0x6a, 0x37, 0xf1, 0xea, 0x5a, 0x14, 0x07,
+	0x92, 0x3b, 0x2f, 0xf7, 0xbe, 0xaf, 0x8c, 0x1b, 0x50, 0xd3, 0xdf, 0x37, 0xfc, 0xdb, 0x80, 0xe6,
+	0x56, 0x09, 0x3c, 0x81, 0x6a, 0x76, 0x9b, 0x0a, 0x4d, 0xd1, 0x3d, 0x3c, 0x7c, 0x2f, 0xf9, 0x76,
+	0x46, 0x74, 0x9b, 0x0a, 0xa6, 0xeb, 0x31, 0x86, 0xea, 0xa5, 0x9c, 0x6d, 0x7a, 0x7b, 0x03, 0xe3,
+	0xa0, 0xc5, 0xb4, 0x3d, 0xfc, 0xdd, 0x80, 0x4e, 0x19, 0x8a, 0x9f, 0x43, 0xff, 0xd8, 0x1f, 0x73,
+	0x32, 0x25, 0x5e, 0xc4, 0xa3, 0x37, 0x01, 0xe1, 0x67, 0x5e, 0x18, 0x10, 0x9b, 0x4e, 0x28, 0x71,
+	0xd0, 0x03, 0xdc, 0x05, 0xa0, 0x6e, 0xc0, 0x48, 0x18, 0x52, 0xdf, 0x43, 0x15, 0xdc, 0x84, 0xea,
+	0x94, 0x92, 0x9f, 0xd0, 0x1e, 0x7e, 0x04, 0xfb, 0xca, 0xe2, 0x8c, 0x38, 0x94, 0x11, 0x3b, 0x42,
+	0x06, 0x7e, 0x02, 0x8f, 0xac, 0x20, 0x38, 0xa5, 0xb6, 0x15, 0x51, 0xdf, 0xe3, 0x61, 0x64, 0xb1,
+	0x08, 0x55, 0xf1, 0x47, 0x80, 0xcb, 0xe1, 0x09, 0xf5, 0x68, 0x78, 0x84, 0x6a, 0x78, 0x00, 0x4f,
+	0xcb, 0xf1, 0x1f, 0xcf, 0xa8, 0x7d, 0xc2, 0xc3, 0xb3, 0xb1, 0x4b, 0xf3, 0x6e, 0x75, 0xdc, 0x83,
+	0xc7, 0x65, 0xc4, 0xae, 0x55, 0x03, 0x7f, 0x0a, 0xcf, 0xfe, 0xd3, 0x8a, 0x4f, 0x98, 0xef, 0xf2,
+	0x90, 0x58, 0xcc, 0x3e, 0x42, 0x4d, 0xfc, 0x19, 0x0c, 0xde, 0x55, 0x7c, 0x07, 0xd5, 0x52, 0x02,
+	0x94, 0x51, 0xb6, 0xef, 0x06, 0x96, 0xf7, 0x26, 0x1f, 0x23, 0x42, 0x80, 0x3b, 0xd0, 0x1c, 0xfb,
+	0xfe, 0x89, 0x6b, 0xb1, 0x13, 0xd4, 0xc6, 0x08, 0x3a, 0x9e, 0x1f, 0xd1, 0x49, 0x01, 0x47, 0x1d,
+	0xdc, 0x82, 0xda, 0x11, 0x65, 0xc4, 0x41, 0xfb, 0xb8, 0x0d, 0x8d, 0x50, 0xc9, 0x68, 0x4f, 0x51,
+	0x57, 0x69, 0x41, 0xbd, 0x88, 0x30, 0xad, 0xd1, 0x6b, 0x66, 0x79, 0x11, 0x71, 0xd0, 0x43, 0x8c,
+	0xa1, 0xeb, 0xf9, 0x11, 0xd7, 0x29, 0x12, 0xaa, 0x18, 0x1a, 0xfe, 0x66, 0x40, 0xa7, 0xbc, 0xbd,
+	0xd8, 0xbb, 0xb3, 0x01, 0x2f, 0xdf, 0x7b, 0xed, 0xef, 0x38, 0xa5, 0x4d, 0xe8, 0x43, 0xb3, 0xb8,
+	0x0d, 0xdb, 0x6d, 0xd8, 0xf9, 0xf8, 0x09, 0xd4, 0xd5, 0x8d, 0xdd, 0xbd, 0x06, 0xb5, 0x4b, 0x39,
+	0xa3, 0xf3, 0xe1, 0x5f, 0x15, 0x40, 0xff, 0x66, 0xc3, 0x43, 0x78, 0x1e, 0x30, 0x7f, 0x42, 0x4f,
+	0xc9, 0x87, 0x2c, 0x4c, 0x59, 0x49, 0x43, 0xad, 0x8f, 0xed, 0xbb, 0xae, 0x62, 0xb1, 0x1c, 0x87,
+	0x38, 0xa8, 0xaa, 0x4a, 0x89, 0x6b, 0xd1, 0x53, 0xae, 0x54, 0x44, 0x35, 0x05, 0x61, 0x24, 0x3c,
+	0x73, 0x09, 0x57, 0x0c, 0xc4, 0x41, 0x75, 0x05, 0xb1, 0x1c, 0x87, 0x47, 0x3e, 0x3f, 0xf6, 0xc7,
+	0xa8, 0xa1, 0x56, 0x28, 0xf0, 0x43, 0x1a, 0xd1, 0x29, 0xe1, 0x8c, 0x58, 0xb6, 0x3e, 0xc3, 0xc8,
+	0xe7, 0xc5, 0x98, 0xa8, 0xa9, 0x10, 0x1e, 0x79, 0x6d, 0xfd, 0x2f, 0xa2, 0x85, 0x01, 0xea, 0xa1,
+	0xcd, 0x08, 0xf1, 0x10, 0x8c, 0xdf, 0xc2, 0x8b, 0x73, 0x79, 0x75, 0x9f, 0xe0, 0x63, 0xd0, 0x7a,
+	0x04, 0xea, 0x1d, 0x0c, 0x2a, 0x3f, 0x5b, 0x05, 0x74, 0x21, 0x57, 0x71, 0xb2, 0x30, 0xe5, 0x7a,
+	0x31, 0x5a, 0x88, 0x44, 0xbf, 0x92, 0xa3, 0x3c, 0x15, 0xa7, 0xcb, 0xcd, 0x3b, 0xff, 0x21, 0xaf,
+	0x72, 0xf7, 0x8f, 0x3d, 0xc3, 0x8e, 0xc2, 0x59, 0x5d, 0xd7, 0x7c, 0xf3, 0x4f, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0x88, 0xe5, 0x98, 0x95, 0x76, 0x06, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/talent/v4beta1/event_service.pb.go b/googleapis/cloud/talent/v4beta1/event_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..182eb4ff4a666349ef88d2cedae2470796c67808
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/event_service.pb.go
@@ -0,0 +1,195 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/event_service.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// The report event request.
+type CreateClientEventRequest struct {
+	// Parent project name.
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Required.
+	//
+	// Events issued when end user interacts with customer's application that
+	// uses Cloud Talent Solution.
+	ClientEvent          *ClientEvent `protobuf:"bytes,2,opt,name=client_event,json=clientEvent,proto3" json:"client_event,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *CreateClientEventRequest) Reset()         { *m = CreateClientEventRequest{} }
+func (m *CreateClientEventRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateClientEventRequest) ProtoMessage()    {}
+func (*CreateClientEventRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_event_service_945b8fa8923070de, []int{0}
+}
+func (m *CreateClientEventRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateClientEventRequest.Unmarshal(m, b)
+}
+func (m *CreateClientEventRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateClientEventRequest.Marshal(b, m, deterministic)
+}
+func (dst *CreateClientEventRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateClientEventRequest.Merge(dst, src)
+}
+func (m *CreateClientEventRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateClientEventRequest.Size(m)
+}
+func (m *CreateClientEventRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateClientEventRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateClientEventRequest proto.InternalMessageInfo
+
+func (m *CreateClientEventRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *CreateClientEventRequest) GetClientEvent() *ClientEvent {
+	if m != nil {
+		return m.ClientEvent
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CreateClientEventRequest)(nil), "google.cloud.talent.v4beta1.CreateClientEventRequest")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// EventServiceClient is the client API for EventService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type EventServiceClient interface {
+	// Report events issued when end user interacts with customer's application
+	// that uses Cloud Talent Solution. You may inspect the created events in
+	// [self service
+	// tools](https://console.cloud.google.com/talent-solution/overview).
+	// [Learn
+	// more](https://cloud.google.com/talent-solution/job-search/docs/management-tools)
+	// about self service tools.
+	CreateClientEvent(ctx context.Context, in *CreateClientEventRequest, opts ...grpc.CallOption) (*ClientEvent, error)
+}
+
+type eventServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewEventServiceClient(cc *grpc.ClientConn) EventServiceClient {
+	return &eventServiceClient{cc}
+}
+
+func (c *eventServiceClient) CreateClientEvent(ctx context.Context, in *CreateClientEventRequest, opts ...grpc.CallOption) (*ClientEvent, error) {
+	out := new(ClientEvent)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.EventService/CreateClientEvent", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// EventServiceServer is the server API for EventService service.
+type EventServiceServer interface {
+	// Report events issued when end user interacts with customer's application
+	// that uses Cloud Talent Solution. You may inspect the created events in
+	// [self service
+	// tools](https://console.cloud.google.com/talent-solution/overview).
+	// [Learn
+	// more](https://cloud.google.com/talent-solution/job-search/docs/management-tools)
+	// about self service tools.
+	CreateClientEvent(context.Context, *CreateClientEventRequest) (*ClientEvent, error)
+}
+
+func RegisterEventServiceServer(s *grpc.Server, srv EventServiceServer) {
+	s.RegisterService(&_EventService_serviceDesc, srv)
+}
+
+func _EventService_CreateClientEvent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateClientEventRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(EventServiceServer).CreateClientEvent(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.EventService/CreateClientEvent",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(EventServiceServer).CreateClientEvent(ctx, req.(*CreateClientEventRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _EventService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.cloud.talent.v4beta1.EventService",
+	HandlerType: (*EventServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "CreateClientEvent",
+			Handler:    _EventService_CreateClientEvent_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/cloud/talent/v4beta1/event_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/event_service.proto", fileDescriptor_event_service_945b8fa8923070de)
+}
+
+var fileDescriptor_event_service_945b8fa8923070de = []byte{
+	// 313 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0xce, 0xc9, 0x2f, 0x4d, 0xd1, 0x2f, 0x49, 0xcc, 0x49, 0xcd, 0x2b, 0xd1,
+	0x2f, 0x33, 0x49, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x4f, 0x2d, 0x4b, 0xcd, 0x2b, 0x89, 0x2f, 0x4e,
+	0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x86, 0x68, 0xd0,
+	0x03, 0x6b, 0xd0, 0x83, 0x68, 0xd0, 0x83, 0x6a, 0x90, 0x92, 0x81, 0x9a, 0x96, 0x58, 0x90, 0xa9,
+	0x9f, 0x98, 0x97, 0x97, 0x5f, 0x92, 0x58, 0x92, 0x99, 0x9f, 0x57, 0x0c, 0xd1, 0x2a, 0xa5, 0x4e,
+	0xd0, 0x2e, 0x88, 0x42, 0xa5, 0x7a, 0x2e, 0x09, 0xe7, 0xa2, 0xd4, 0xc4, 0x92, 0x54, 0xe7, 0x9c,
+	0xcc, 0xd4, 0xbc, 0x12, 0x57, 0x90, 0x54, 0x50, 0x6a, 0x61, 0x69, 0x6a, 0x71, 0x89, 0x90, 0x18,
+	0x17, 0x5b, 0x41, 0x62, 0x51, 0x6a, 0x5e, 0x89, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x94,
+	0x27, 0xe4, 0xcd, 0xc5, 0x93, 0x0c, 0x56, 0x1d, 0x0f, 0x36, 0x49, 0x82, 0x49, 0x81, 0x51, 0x83,
+	0xdb, 0x48, 0x43, 0x0f, 0x8f, 0x73, 0xf5, 0x90, 0x8d, 0xe7, 0x4e, 0x46, 0x70, 0x8c, 0x76, 0x33,
+	0x72, 0xf1, 0x80, 0x59, 0xc1, 0x10, 0xbf, 0x0b, 0xad, 0x62, 0xe4, 0x12, 0xc4, 0x70, 0x92, 0x90,
+	0x29, 0x7e, 0xd3, 0x71, 0x78, 0x41, 0x8a, 0x68, 0x47, 0x29, 0x99, 0x34, 0x5d, 0x7e, 0x32, 0x99,
+	0x49, 0x4f, 0x49, 0x13, 0x1e, 0x4c, 0xd5, 0x10, 0xef, 0xda, 0x16, 0x14, 0xe5, 0x67, 0xa5, 0x26,
+	0x97, 0x14, 0xeb, 0x6b, 0xd5, 0xea, 0x23, 0xb9, 0xbc, 0xd8, 0x8a, 0x51, 0xcb, 0xa9, 0x9e, 0x4b,
+	0x3e, 0x39, 0x3f, 0x17, 0x9f, 0x25, 0x4e, 0x82, 0xc8, 0xbe, 0x0b, 0x00, 0x05, 0x7a, 0x00, 0x63,
+	0x94, 0x23, 0x54, 0x47, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, 0xba, 0x5e, 0x7e, 0x51, 0xba, 0x7e, 0x7a,
+	0x6a, 0x1e, 0x38, 0x4a, 0xa0, 0xc9, 0x24, 0xb1, 0x20, 0xb3, 0x18, 0x6b, 0xf4, 0x59, 0x43, 0xb8,
+	0x8b, 0x98, 0x98, 0x9d, 0x43, 0x82, 0x93, 0xd8, 0xc0, 0x7a, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff,
+	0xff, 0x82, 0xde, 0x1c, 0xf0, 0x5d, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/talent/v4beta1/filters.pb.go b/googleapis/cloud/talent/v4beta1/filters.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..245690d92f5a35a6112ae4cbce8fec5135694ad1
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/filters.pb.go
@@ -0,0 +1,2089 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/filters.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import duration "github.com/golang/protobuf/ptypes/duration"
+import timestamp "github.com/golang/protobuf/ptypes/timestamp"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import date "google.golang.org/genproto/googleapis/type/date"
+import latlng "google.golang.org/genproto/googleapis/type/latlng"
+import timeofday "google.golang.org/genproto/googleapis/type/timeofday"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Specify whether including telecommute jobs.
+type LocationFilter_TelecommutePreference int32
+
+const (
+	// Default value if the telecommute preference isn't specified.
+	LocationFilter_TELECOMMUTE_PREFERENCE_UNSPECIFIED LocationFilter_TelecommutePreference = 0
+	// Exclude telecommute jobs.
+	LocationFilter_TELECOMMUTE_EXCLUDED LocationFilter_TelecommutePreference = 1
+	// Allow telecommute jobs.
+	LocationFilter_TELECOMMUTE_ALLOWED LocationFilter_TelecommutePreference = 2
+)
+
+var LocationFilter_TelecommutePreference_name = map[int32]string{
+	0: "TELECOMMUTE_PREFERENCE_UNSPECIFIED",
+	1: "TELECOMMUTE_EXCLUDED",
+	2: "TELECOMMUTE_ALLOWED",
+}
+var LocationFilter_TelecommutePreference_value = map[string]int32{
+	"TELECOMMUTE_PREFERENCE_UNSPECIFIED": 0,
+	"TELECOMMUTE_EXCLUDED":               1,
+	"TELECOMMUTE_ALLOWED":                2,
+}
+
+func (x LocationFilter_TelecommutePreference) String() string {
+	return proto.EnumName(LocationFilter_TelecommutePreference_name, int32(x))
+}
+func (LocationFilter_TelecommutePreference) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{2, 0}
+}
+
+// Specify the type of filtering.
+type CompensationFilter_FilterType int32
+
+const (
+	// Filter type unspecified. Position holder, INVALID, should never be used.
+	CompensationFilter_FILTER_TYPE_UNSPECIFIED CompensationFilter_FilterType = 0
+	// Filter by `base compensation entry's` unit. A job is a match if and
+	// only if the job contains a base CompensationEntry and the base
+	// CompensationEntry's unit matches provided [units][google.cloud.talent.v4beta1.CompensationFilter.units].
+	// Populate one or more [units][google.cloud.talent.v4beta1.CompensationFilter.units].
+	//
+	// See [CompensationInfo.CompensationEntry][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry] for definition of
+	// base compensation entry.
+	CompensationFilter_UNIT_ONLY CompensationFilter_FilterType = 1
+	// Filter by `base compensation entry's` unit and amount / range. A job
+	// is a match if and only if the job contains a base CompensationEntry, and
+	// the base entry's unit matches provided [compensation_units][] and amount
+	// or range overlaps with provided [compensation_range][].
+	//
+	// See [CompensationInfo.CompensationEntry][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry] for definition of
+	// base compensation entry.
+	//
+	// Set exactly one [units][google.cloud.talent.v4beta1.CompensationFilter.units] and populate [range][google.cloud.talent.v4beta1.CompensationFilter.range].
+	CompensationFilter_UNIT_AND_AMOUNT CompensationFilter_FilterType = 2
+	// Filter by annualized base compensation amount and `base compensation
+	// entry's` unit. Populate [range][google.cloud.talent.v4beta1.CompensationFilter.range] and zero or more [units][google.cloud.talent.v4beta1.CompensationFilter.units].
+	CompensationFilter_ANNUALIZED_BASE_AMOUNT CompensationFilter_FilterType = 3
+	// Filter by annualized total compensation amount and `base compensation
+	// entry's` unit . Populate [range][google.cloud.talent.v4beta1.CompensationFilter.range] and zero or more [units][google.cloud.talent.v4beta1.CompensationFilter.units].
+	CompensationFilter_ANNUALIZED_TOTAL_AMOUNT CompensationFilter_FilterType = 4
+)
+
+var CompensationFilter_FilterType_name = map[int32]string{
+	0: "FILTER_TYPE_UNSPECIFIED",
+	1: "UNIT_ONLY",
+	2: "UNIT_AND_AMOUNT",
+	3: "ANNUALIZED_BASE_AMOUNT",
+	4: "ANNUALIZED_TOTAL_AMOUNT",
+}
+var CompensationFilter_FilterType_value = map[string]int32{
+	"FILTER_TYPE_UNSPECIFIED": 0,
+	"UNIT_ONLY":               1,
+	"UNIT_AND_AMOUNT":         2,
+	"ANNUALIZED_BASE_AMOUNT":  3,
+	"ANNUALIZED_TOTAL_AMOUNT": 4,
+}
+
+func (x CompensationFilter_FilterType) String() string {
+	return proto.EnumName(CompensationFilter_FilterType_name, int32(x))
+}
+func (CompensationFilter_FilterType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{3, 0}
+}
+
+// Method for commute.
+type CommuteFilter_CommuteMethod int32
+
+const (
+	// Commute method isn't specified.
+	CommuteFilter_COMMUTE_METHOD_UNSPECIFIED CommuteFilter_CommuteMethod = 0
+	// Commute time is calculated based on driving time.
+	CommuteFilter_DRIVING CommuteFilter_CommuteMethod = 1
+	// Commute time is calculated based on public transit including bus, metro,
+	// subway, etc.
+	CommuteFilter_TRANSIT CommuteFilter_CommuteMethod = 2
+	// Commute time is calculated based on walking time.
+	CommuteFilter_WALKING CommuteFilter_CommuteMethod = 3
+	// Commute time is calculated based on biking time.
+	CommuteFilter_BICYCLING CommuteFilter_CommuteMethod = 4
+	// Commute time is calculated based on public transit that is wheelchair
+	// accessible.
+	CommuteFilter_TRANSIT_ACCESSIBLE CommuteFilter_CommuteMethod = 5
+)
+
+var CommuteFilter_CommuteMethod_name = map[int32]string{
+	0: "COMMUTE_METHOD_UNSPECIFIED",
+	1: "DRIVING",
+	2: "TRANSIT",
+	3: "WALKING",
+	4: "BICYCLING",
+	5: "TRANSIT_ACCESSIBLE",
+}
+var CommuteFilter_CommuteMethod_value = map[string]int32{
+	"COMMUTE_METHOD_UNSPECIFIED": 0,
+	"DRIVING":                    1,
+	"TRANSIT":                    2,
+	"WALKING":                    3,
+	"BICYCLING":                  4,
+	"TRANSIT_ACCESSIBLE":         5,
+}
+
+func (x CommuteFilter_CommuteMethod) String() string {
+	return proto.EnumName(CommuteFilter_CommuteMethod_name, int32(x))
+}
+func (CommuteFilter_CommuteMethod) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{4, 0}
+}
+
+// The traffic density to use when calculating commute time.
+type CommuteFilter_RoadTraffic int32
+
+const (
+	// Road traffic situation isn't specified.
+	CommuteFilter_ROAD_TRAFFIC_UNSPECIFIED CommuteFilter_RoadTraffic = 0
+	// Optimal commute time without considering any traffic impact.
+	CommuteFilter_TRAFFIC_FREE CommuteFilter_RoadTraffic = 1
+	// Commute time calculation takes in account the peak traffic impact.
+	CommuteFilter_BUSY_HOUR CommuteFilter_RoadTraffic = 2
+)
+
+var CommuteFilter_RoadTraffic_name = map[int32]string{
+	0: "ROAD_TRAFFIC_UNSPECIFIED",
+	1: "TRAFFIC_FREE",
+	2: "BUSY_HOUR",
+}
+var CommuteFilter_RoadTraffic_value = map[string]int32{
+	"ROAD_TRAFFIC_UNSPECIFIED": 0,
+	"TRAFFIC_FREE":             1,
+	"BUSY_HOUR":                2,
+}
+
+func (x CommuteFilter_RoadTraffic) String() string {
+	return proto.EnumName(CommuteFilter_RoadTraffic_name, int32(x))
+}
+func (CommuteFilter_RoadTraffic) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{4, 1}
+}
+
+// Enum indicating which set of [Profile.employment_records][google.cloud.talent.v4beta1.Profile.employment_records] to search
+// against.
+type EmployerFilter_EmployerFilterMode int32
+
+const (
+	// Default value.
+	EmployerFilter_EMPLOYER_FILTER_MODE_UNSPECIFIED EmployerFilter_EmployerFilterMode = 0
+	// Apply to all employers in [Profile.employment_records][google.cloud.talent.v4beta1.Profile.employment_records].
+	EmployerFilter_ALL_EMPLOYMENT_RECORDS EmployerFilter_EmployerFilterMode = 1
+	// Apply only to current employer in [Profile.employment_records][google.cloud.talent.v4beta1.Profile.employment_records].
+	EmployerFilter_CURRENT_EMPLOYMENT_RECORDS_ONLY EmployerFilter_EmployerFilterMode = 2
+	// Apply only to past (not current) employers in
+	// [Profile.employment_records][google.cloud.talent.v4beta1.Profile.employment_records].
+	EmployerFilter_PAST_EMPLOYMENT_RECORDS_ONLY EmployerFilter_EmployerFilterMode = 3
+)
+
+var EmployerFilter_EmployerFilterMode_name = map[int32]string{
+	0: "EMPLOYER_FILTER_MODE_UNSPECIFIED",
+	1: "ALL_EMPLOYMENT_RECORDS",
+	2: "CURRENT_EMPLOYMENT_RECORDS_ONLY",
+	3: "PAST_EMPLOYMENT_RECORDS_ONLY",
+}
+var EmployerFilter_EmployerFilterMode_value = map[string]int32{
+	"EMPLOYER_FILTER_MODE_UNSPECIFIED": 0,
+	"ALL_EMPLOYMENT_RECORDS":           1,
+	"CURRENT_EMPLOYMENT_RECORDS_ONLY":  2,
+	"PAST_EMPLOYMENT_RECORDS_ONLY":     3,
+}
+
+func (x EmployerFilter_EmployerFilterMode) String() string {
+	return proto.EnumName(EmployerFilter_EmployerFilterMode_name, int32(x))
+}
+func (EmployerFilter_EmployerFilterMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{7, 0}
+}
+
+// Time fields can be used in TimeFilter.
+type TimeFilter_TimeField int32
+
+const (
+	// Default value.
+	TimeFilter_TIME_FIELD_UNSPECIFIED TimeFilter_TimeField = 0
+	// Earliest profile create time.
+	TimeFilter_CREATE_TIME TimeFilter_TimeField = 1
+	// Latest profile update time.
+	TimeFilter_UPDATE_TIME TimeFilter_TimeField = 2
+)
+
+var TimeFilter_TimeField_name = map[int32]string{
+	0: "TIME_FIELD_UNSPECIFIED",
+	1: "CREATE_TIME",
+	2: "UPDATE_TIME",
+}
+var TimeFilter_TimeField_value = map[string]int32{
+	"TIME_FIELD_UNSPECIFIED": 0,
+	"CREATE_TIME":            1,
+	"UPDATE_TIME":            2,
+}
+
+func (x TimeFilter_TimeField) String() string {
+	return proto.EnumName(TimeFilter_TimeField_name, int32(x))
+}
+func (TimeFilter_TimeField) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{15, 0}
+}
+
+// Input only.
+//
+// The query required to perform a search query.
+type JobQuery struct {
+	// Optional.
+	//
+	// The query string that matches against the job title, description, and
+	// location fields.
+	//
+	// The maximum number of allowed characters is 255.
+	Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"`
+	// Optional.
+	//
+	// This filter specifies the company entities to search against.
+	//
+	// If a value isn't specified, jobs are searched for against all
+	// companies.
+	//
+	// If multiple values are specified, jobs are searched against the
+	// companies specified.
+	//
+	// The format is "projects/{project_id}/companies/{company_id}", for example,
+	// "projects/api-test-project/companies/foo".
+	//
+	// At most 20 company filters are allowed.
+	CompanyNames []string `protobuf:"bytes,2,rep,name=company_names,json=companyNames,proto3" json:"company_names,omitempty"`
+	// Optional.
+	//
+	// The location filter specifies geo-regions containing the jobs to
+	// search against. See [LocationFilter][google.cloud.talent.v4beta1.LocationFilter] for more information.
+	//
+	// If a location value isn't specified, jobs fitting the other search
+	// criteria are retrieved regardless of where they're located.
+	//
+	// If multiple values are specified, jobs are retrieved from any of the
+	// specified locations. If different values are specified for the
+	// [LocationFilter.distance_in_miles][google.cloud.talent.v4beta1.LocationFilter.distance_in_miles] parameter, the maximum provided
+	// distance is used for all locations.
+	//
+	// At most 5 location filters are allowed.
+	LocationFilters []*LocationFilter `protobuf:"bytes,3,rep,name=location_filters,json=locationFilters,proto3" json:"location_filters,omitempty"`
+	// Optional.
+	//
+	// The category filter specifies the categories of jobs to search against.
+	// See [Category][] for more information.
+	//
+	// If a value isn't specified, jobs from any category are searched against.
+	//
+	// If multiple values are specified, jobs from any of the specified
+	// categories are searched against.
+	JobCategories []JobCategory `protobuf:"varint,4,rep,packed,name=job_categories,json=jobCategories,proto3,enum=google.cloud.talent.v4beta1.JobCategory" json:"job_categories,omitempty"`
+	// Optional.
+	//
+	//  Allows filtering jobs by commute time with different travel methods (for
+	//  example, driving or public transit). Note: This only works with [COMMUTE
+	//  MODE][Mode#COMMUTE]. When specified, [JobQuery.location_filters] is
+	//  ignored.
+	//
+	//  Currently we don't support sorting by commute time.
+	CommuteFilter *CommuteFilter `protobuf:"bytes,5,opt,name=commute_filter,json=commuteFilter,proto3" json:"commute_filter,omitempty"`
+	// Optional.
+	//
+	// This filter specifies the exact [company display
+	// name][Company.display_name] of the jobs to search against.
+	//
+	// If a value isn't specified, jobs within the search results are
+	// associated with any company.
+	//
+	// If multiple values are specified, jobs within the search results may be
+	// associated with any of the specified companies.
+	//
+	// At most 20 company display name filters are allowed.
+	CompanyDisplayNames []string `protobuf:"bytes,6,rep,name=company_display_names,json=companyDisplayNames,proto3" json:"company_display_names,omitempty"`
+	// Optional.
+	//
+	// This search filter is applied only to
+	// [Job.compensation_info][google.cloud.talent.v4beta1.Job.compensation_info]. For example, if the filter is specified
+	// as "Hourly job with per-hour compensation > $15", only jobs meeting
+	// these criteria are searched. If a filter isn't defined, all open jobs
+	// are searched.
+	CompensationFilter *CompensationFilter `protobuf:"bytes,7,opt,name=compensation_filter,json=compensationFilter,proto3" json:"compensation_filter,omitempty"`
+	// Optional.
+	//
+	// This filter specifies a structured syntax to match against the
+	// [Job.custom_attributes][google.cloud.talent.v4beta1.Job.custom_attributes] marked as `filterable`.
+	//
+	// The syntax for this expression is a subset of SQL syntax.
+	//
+	// Supported operators are: `=`, `!=`, `<`, `<=`, `>`, and `>=` where the
+	// left of the operator is a custom field key and the right of the operator
+	// is a number or a quoted string. You must escape backslash (\\) and
+	// quote (\") characters.
+	//
+	// Supported functions are `LOWER([field_name])` to
+	// perform a case insensitive match and `EMPTY([field_name])` to filter on the
+	// existence of a key.
+	//
+	// Boolean expressions (AND/OR/NOT) are supported up to 3 levels of
+	// nesting (for example, "((A AND B AND C) OR NOT D) AND E"), a maximum of 100
+	// comparisons or functions are allowed in the expression. The expression
+	// must be < 3000 bytes in length.
+	//
+	// Sample Query:
+	// `(LOWER(driving_license)="class \"a\"" OR EMPTY(driving_license)) AND
+	// driving_years > 10`
+	CustomAttributeFilter string `protobuf:"bytes,8,opt,name=custom_attribute_filter,json=customAttributeFilter,proto3" json:"custom_attribute_filter,omitempty"`
+	// Optional.
+	//
+	// This flag controls the spell-check feature. If false, the
+	// service attempts to correct a misspelled query,
+	// for example, "enginee" is corrected to "engineer".
+	//
+	// Defaults to false: a spell check is performed.
+	DisableSpellCheck bool `protobuf:"varint,9,opt,name=disable_spell_check,json=disableSpellCheck,proto3" json:"disable_spell_check,omitempty"`
+	// Optional.
+	//
+	// The employment type filter specifies the employment type of jobs to
+	// search against, such as [EmploymentType.FULL_TIME][google.cloud.talent.v4beta1.EmploymentType.FULL_TIME].
+	//
+	// If a value isn't specified, jobs in the search results includes any
+	// employment type.
+	//
+	// If multiple values are specified, jobs in the search results include
+	// any of the specified employment types.
+	EmploymentTypes []EmploymentType `protobuf:"varint,10,rep,packed,name=employment_types,json=employmentTypes,proto3,enum=google.cloud.talent.v4beta1.EmploymentType" json:"employment_types,omitempty"`
+	// Optional.
+	//
+	// This filter specifies the locale of jobs to search against,
+	// for example, "en-US".
+	//
+	// If a value isn't specified, the search results can contain jobs in any
+	// locale.
+	//
+	//
+	// Language codes should be in BCP-47 format, such as "en-US" or "sr-Latn".
+	// For more information, see
+	// [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).
+	//
+	// At most 10 language code filters are allowed.
+	LanguageCodes []string `protobuf:"bytes,11,rep,name=language_codes,json=languageCodes,proto3" json:"language_codes,omitempty"`
+	// Optional.
+	//
+	// Jobs published within a range specified by this filter are searched
+	// against.
+	PublishTimeRange *TimestampRange `protobuf:"bytes,12,opt,name=publish_time_range,json=publishTimeRange,proto3" json:"publish_time_range,omitempty"`
+	// Optional.
+	//
+	// This filter specifies a list of job names to be excluded during search.
+	//
+	// At most 200 excluded job names are allowed.
+	ExcludedJobs         []string `protobuf:"bytes,13,rep,name=excluded_jobs,json=excludedJobs,proto3" json:"excluded_jobs,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *JobQuery) Reset()         { *m = JobQuery{} }
+func (m *JobQuery) String() string { return proto.CompactTextString(m) }
+func (*JobQuery) ProtoMessage()    {}
+func (*JobQuery) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{0}
+}
+func (m *JobQuery) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_JobQuery.Unmarshal(m, b)
+}
+func (m *JobQuery) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_JobQuery.Marshal(b, m, deterministic)
+}
+func (dst *JobQuery) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_JobQuery.Merge(dst, src)
+}
+func (m *JobQuery) XXX_Size() int {
+	return xxx_messageInfo_JobQuery.Size(m)
+}
+func (m *JobQuery) XXX_DiscardUnknown() {
+	xxx_messageInfo_JobQuery.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_JobQuery proto.InternalMessageInfo
+
+func (m *JobQuery) GetQuery() string {
+	if m != nil {
+		return m.Query
+	}
+	return ""
+}
+
+func (m *JobQuery) GetCompanyNames() []string {
+	if m != nil {
+		return m.CompanyNames
+	}
+	return nil
+}
+
+func (m *JobQuery) GetLocationFilters() []*LocationFilter {
+	if m != nil {
+		return m.LocationFilters
+	}
+	return nil
+}
+
+func (m *JobQuery) GetJobCategories() []JobCategory {
+	if m != nil {
+		return m.JobCategories
+	}
+	return nil
+}
+
+func (m *JobQuery) GetCommuteFilter() *CommuteFilter {
+	if m != nil {
+		return m.CommuteFilter
+	}
+	return nil
+}
+
+func (m *JobQuery) GetCompanyDisplayNames() []string {
+	if m != nil {
+		return m.CompanyDisplayNames
+	}
+	return nil
+}
+
+func (m *JobQuery) GetCompensationFilter() *CompensationFilter {
+	if m != nil {
+		return m.CompensationFilter
+	}
+	return nil
+}
+
+func (m *JobQuery) GetCustomAttributeFilter() string {
+	if m != nil {
+		return m.CustomAttributeFilter
+	}
+	return ""
+}
+
+func (m *JobQuery) GetDisableSpellCheck() bool {
+	if m != nil {
+		return m.DisableSpellCheck
+	}
+	return false
+}
+
+func (m *JobQuery) GetEmploymentTypes() []EmploymentType {
+	if m != nil {
+		return m.EmploymentTypes
+	}
+	return nil
+}
+
+func (m *JobQuery) GetLanguageCodes() []string {
+	if m != nil {
+		return m.LanguageCodes
+	}
+	return nil
+}
+
+func (m *JobQuery) GetPublishTimeRange() *TimestampRange {
+	if m != nil {
+		return m.PublishTimeRange
+	}
+	return nil
+}
+
+func (m *JobQuery) GetExcludedJobs() []string {
+	if m != nil {
+		return m.ExcludedJobs
+	}
+	return nil
+}
+
+// Filters to apply when performing the search query.
+type ProfileQuery struct {
+	// Optional.
+	//
+	// Keywords to match any text fields of profiles.
+	//
+	// For example, "software engineer in Palo Alto".
+	Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"`
+	// Optional.
+	//
+	// The location filter specifies geo-regions containing the profiles to
+	// search against.
+	//
+	// If a location filter isn't specified, profiles fitting the other search
+	// criteria are retrieved regardless of where they're located.
+	//
+	// If [LocationFilter.negated][google.cloud.talent.v4beta1.LocationFilter.negated] is specified, the result doesn't contain
+	// profiles from that location.
+	//
+	// For example, search for profiles with addresses in "New York City".
+	LocationFilters []*LocationFilter `protobuf:"bytes,2,rep,name=location_filters,json=locationFilters,proto3" json:"location_filters,omitempty"`
+	// Optional.
+	//
+	// Job title filter specifies job titles of profiles to match on.
+	//
+	// If a job title isn't specified, profiles with any titles are retrieved.
+	//
+	// If multiple values are specified, profiles are retrieved with any of the
+	// specified job titles.
+	//
+	// If [JobTitleFilter.negated][google.cloud.talent.v4beta1.JobTitleFilter.negated] is specified, the result won't contain
+	// profiles with the job titles.
+	//
+	// For example, search for profiles with a job title "Product Manager".
+	JobTitleFilters []*JobTitleFilter `protobuf:"bytes,3,rep,name=job_title_filters,json=jobTitleFilters,proto3" json:"job_title_filters,omitempty"`
+	// Optional.
+	//
+	// Employer filter specifies employers of profiles to match on.
+	//
+	// If an employer filter isn't specified, profiles with any employers are
+	// retrieved.
+	//
+	// If multiple employer filters are specified, profiles with any matching
+	// employers are retrieved.
+	//
+	// If [EmployerFilter.negated][google.cloud.talent.v4beta1.EmployerFilter.negated] is specified, the result won't contain
+	// profiles that match the employers.
+	//
+	// For example, search for profiles that have working experience at "Google
+	// LLC".
+	EmployerFilters []*EmployerFilter `protobuf:"bytes,4,rep,name=employer_filters,json=employerFilters,proto3" json:"employer_filters,omitempty"`
+	// Optional.
+	//
+	// Education filter specifies education of profiles to match on.
+	//
+	// If an education filter isn't specified, profiles with any education are
+	// retrieved.
+	//
+	// If multiple education filters are specified, profiles that match any
+	// education filters are retrieved.
+	//
+	// If [EducationFilter.negated][google.cloud.talent.v4beta1.EducationFilter.negated] is specified, the result won't contain
+	// profiles that match the educations.
+	//
+	// For example, search for profiles with a master degree.
+	EducationFilters []*EducationFilter `protobuf:"bytes,5,rep,name=education_filters,json=educationFilters,proto3" json:"education_filters,omitempty"`
+	// Optional.
+	//
+	// Skill filter specifies skill of profiles to match on.
+	//
+	// If a skill filter isn't specified, profiles with any skills are retrieved.
+	//
+	// If multiple skill filters are specified, profiles that match any skill
+	// filters are retrieved.
+	//
+	// If [SkillFilter.negated][google.cloud.talent.v4beta1.SkillFilter.negated] is specified, the result won't contain profiles
+	// that match the skills.
+	//
+	// For example, search for profiles that have "Java" and "Python" in skill
+	// list.
+	SkillFilters []*SkillFilter `protobuf:"bytes,6,rep,name=skill_filters,json=skillFilters,proto3" json:"skill_filters,omitempty"`
+	// Optional.
+	//
+	// Work experience filter specifies the total working experience of profiles
+	// to match on.
+	//
+	// If a work experience filter isn't specified, profiles with any
+	// professional experience are retrieved.
+	//
+	// If multiple work experience filters are specified, profiles that match any
+	// work experience filters are retrieved.
+	//
+	// For example, search for profiles with 10 years of work experience.
+	WorkExperienceFilter []*WorkExperienceFilter `protobuf:"bytes,7,rep,name=work_experience_filter,json=workExperienceFilter,proto3" json:"work_experience_filter,omitempty"`
+	// Optional.
+	//
+	// Time filter specifies the create/update timestamp of the profiles to match
+	// on.
+	//
+	// For example, search for profiles created since "2018-1-1".
+	TimeFilters []*TimeFilter `protobuf:"bytes,8,rep,name=time_filters,json=timeFilters,proto3" json:"time_filters,omitempty"`
+	// Optional.
+	//
+	// The hirable filter specifies the profile's hirable status to match on.
+	HirableFilter *wrappers.BoolValue `protobuf:"bytes,9,opt,name=hirable_filter,json=hirableFilter,proto3" json:"hirable_filter,omitempty"`
+	// Optional.
+	//
+	// The application date filters specify application date ranges to match on.
+	ApplicationDateFilters []*ApplicationDateFilter `protobuf:"bytes,10,rep,name=application_date_filters,json=applicationDateFilters,proto3" json:"application_date_filters,omitempty"`
+	// Optional.
+	//
+	// The application outcome reason filters specify the reasons for outcome of
+	// the job application.
+	ApplicationOutcomeReasonFilters []*ApplicationOutcomeReasonFilter `protobuf:"bytes,11,rep,name=application_outcome_reason_filters,json=applicationOutcomeReasonFilters,proto3" json:"application_outcome_reason_filters,omitempty"`
+	// Optional.
+	//
+	// The application last stage filters specify the last stage of job
+	// application.
+	ApplicationLastStageFilters []*ApplicationLastStageFilter `protobuf:"bytes,12,rep,name=application_last_stage_filters,json=applicationLastStageFilters,proto3" json:"application_last_stage_filters,omitempty"`
+	// Optional.
+	//
+	// The application job filters specify the job applied for in the application.
+	ApplicationJobFilters []*ApplicationJobFilter `protobuf:"bytes,13,rep,name=application_job_filters,json=applicationJobFilters,proto3" json:"application_job_filters,omitempty"`
+	// Optional.
+	//
+	// The application status filters specify the status of job application.
+	ApplicationStatusFilters []*ApplicationStatusFilter `protobuf:"bytes,14,rep,name=application_status_filters,json=applicationStatusFilters,proto3" json:"application_status_filters,omitempty"`
+	// Optional.
+	//
+	// This filter specifies a structured syntax to match against the
+	// [Profile.custom_attributes][google.cloud.talent.v4beta1.Profile.custom_attributes] that are marked as `filterable`.
+	//
+	// The syntax for this expression is a subset of Google SQL syntax.
+	//
+	// Supported operators are: =, != where the left of the operator is a custom
+	// field key and the right of the operator is a string (surrounded by quotes)
+	// value.
+	//
+	// Supported functions are LOWER(<field_name>) to
+	// perform case insensitive match and EMPTY(<field_name>) to filter on the
+	// existence of a key.
+	//
+	// Boolean expressions (AND/OR/NOT) are supported up to 3 levels of
+	// nesting (for example "((A AND B AND C) OR NOT D) AND E"), and there can be
+	// a maximum of 50 comparisons/functions in the expression. The expression
+	// must be < 2000 characters in length.
+	//
+	// Sample Query:
+	// (key1 = "TEST" OR LOWER(key1)="test" OR NOT EMPTY(key1))
+	CustomFieldFilter    string   `protobuf:"bytes,15,opt,name=custom_field_filter,json=customFieldFilter,proto3" json:"custom_field_filter,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ProfileQuery) Reset()         { *m = ProfileQuery{} }
+func (m *ProfileQuery) String() string { return proto.CompactTextString(m) }
+func (*ProfileQuery) ProtoMessage()    {}
+func (*ProfileQuery) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{1}
+}
+func (m *ProfileQuery) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ProfileQuery.Unmarshal(m, b)
+}
+func (m *ProfileQuery) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ProfileQuery.Marshal(b, m, deterministic)
+}
+func (dst *ProfileQuery) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ProfileQuery.Merge(dst, src)
+}
+func (m *ProfileQuery) XXX_Size() int {
+	return xxx_messageInfo_ProfileQuery.Size(m)
+}
+func (m *ProfileQuery) XXX_DiscardUnknown() {
+	xxx_messageInfo_ProfileQuery.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ProfileQuery proto.InternalMessageInfo
+
+func (m *ProfileQuery) GetQuery() string {
+	if m != nil {
+		return m.Query
+	}
+	return ""
+}
+
+func (m *ProfileQuery) GetLocationFilters() []*LocationFilter {
+	if m != nil {
+		return m.LocationFilters
+	}
+	return nil
+}
+
+func (m *ProfileQuery) GetJobTitleFilters() []*JobTitleFilter {
+	if m != nil {
+		return m.JobTitleFilters
+	}
+	return nil
+}
+
+func (m *ProfileQuery) GetEmployerFilters() []*EmployerFilter {
+	if m != nil {
+		return m.EmployerFilters
+	}
+	return nil
+}
+
+func (m *ProfileQuery) GetEducationFilters() []*EducationFilter {
+	if m != nil {
+		return m.EducationFilters
+	}
+	return nil
+}
+
+func (m *ProfileQuery) GetSkillFilters() []*SkillFilter {
+	if m != nil {
+		return m.SkillFilters
+	}
+	return nil
+}
+
+func (m *ProfileQuery) GetWorkExperienceFilter() []*WorkExperienceFilter {
+	if m != nil {
+		return m.WorkExperienceFilter
+	}
+	return nil
+}
+
+func (m *ProfileQuery) GetTimeFilters() []*TimeFilter {
+	if m != nil {
+		return m.TimeFilters
+	}
+	return nil
+}
+
+func (m *ProfileQuery) GetHirableFilter() *wrappers.BoolValue {
+	if m != nil {
+		return m.HirableFilter
+	}
+	return nil
+}
+
+func (m *ProfileQuery) GetApplicationDateFilters() []*ApplicationDateFilter {
+	if m != nil {
+		return m.ApplicationDateFilters
+	}
+	return nil
+}
+
+func (m *ProfileQuery) GetApplicationOutcomeReasonFilters() []*ApplicationOutcomeReasonFilter {
+	if m != nil {
+		return m.ApplicationOutcomeReasonFilters
+	}
+	return nil
+}
+
+func (m *ProfileQuery) GetApplicationLastStageFilters() []*ApplicationLastStageFilter {
+	if m != nil {
+		return m.ApplicationLastStageFilters
+	}
+	return nil
+}
+
+func (m *ProfileQuery) GetApplicationJobFilters() []*ApplicationJobFilter {
+	if m != nil {
+		return m.ApplicationJobFilters
+	}
+	return nil
+}
+
+func (m *ProfileQuery) GetApplicationStatusFilters() []*ApplicationStatusFilter {
+	if m != nil {
+		return m.ApplicationStatusFilters
+	}
+	return nil
+}
+
+func (m *ProfileQuery) GetCustomFieldFilter() string {
+	if m != nil {
+		return m.CustomFieldFilter
+	}
+	return ""
+}
+
+// Input only.
+//
+// Geographic region of the search.
+type LocationFilter struct {
+	// Optional.
+	//
+	// The address name, such as "Mountain View" or "Bay Area".
+	Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
+	// Optional.
+	//
+	// CLDR region code of the country/region of the address. This is used
+	// to address ambiguity of the user-input location, for example, "Liverpool"
+	// against "Liverpool, NY, US" or "Liverpool, UK".
+	//
+	// Set this field if all the jobs to search against are from a same region,
+	// or jobs are world-wide, but the job seeker is from a specific region.
+	//
+	// See http://cldr.unicode.org/ and
+	// http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
+	// for details. Example: "CH" for Switzerland.
+	RegionCode string `protobuf:"bytes,2,opt,name=region_code,json=regionCode,proto3" json:"region_code,omitempty"`
+	// Optional.
+	//
+	// The latitude and longitude of the geographic center from which to
+	// search. This field's ignored if `address` is provided.
+	LatLng *latlng.LatLng `protobuf:"bytes,3,opt,name=lat_lng,json=latLng,proto3" json:"lat_lng,omitempty"`
+	// Optional.
+	//
+	//
+	// The distance_in_miles is applied when the location being searched for is
+	// identified as a city or smaller. When the location being searched for is a
+	// state or larger, this field is ignored.
+	DistanceInMiles float64 `protobuf:"fixed64,4,opt,name=distance_in_miles,json=distanceInMiles,proto3" json:"distance_in_miles,omitempty"`
+	// Optional.
+	//
+	// Allows the client to return jobs without a
+	// set location, specifically, telecommuting jobs (telecomuting is considered
+	// by the service as a special location.
+	// [Job.posting_region][google.cloud.talent.v4beta1.Job.posting_region] indicates if a job permits telecommuting.
+	// If this field is set to [TelecommutePreference.TELECOMMUTE_ALLOWED][google.cloud.talent.v4beta1.LocationFilter.TelecommutePreference.TELECOMMUTE_ALLOWED],
+	// telecommuting jobs are searched, and [address][google.cloud.talent.v4beta1.LocationFilter.address] and [lat_lng][google.cloud.talent.v4beta1.LocationFilter.lat_lng] are
+	// ignored. If not set or set to
+	// [TelecommutePreference.TELECOMMUTE_EXCLUDED][google.cloud.talent.v4beta1.LocationFilter.TelecommutePreference.TELECOMMUTE_EXCLUDED], telecommute job are not
+	// searched.
+	//
+	// This filter can be used by itself to search exclusively for telecommuting
+	// jobs, or it can be combined with another location
+	// filter to search for a combination of job locations,
+	// such as "Mountain View" or "telecommuting" jobs. However, when used in
+	// combination with other location filters, telecommuting jobs can be
+	// treated as less relevant than other jobs in the search response.
+	TelecommutePreference LocationFilter_TelecommutePreference `protobuf:"varint,5,opt,name=telecommute_preference,json=telecommutePreference,proto3,enum=google.cloud.talent.v4beta1.LocationFilter_TelecommutePreference" json:"telecommute_preference,omitempty"`
+	// Optional.
+	//
+	// Whether to apply negation to the filter so profiles matching the filter
+	// are excluded.
+	//
+	// Currently only supported in profile search.
+	Negated              bool     `protobuf:"varint,6,opt,name=negated,proto3" json:"negated,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LocationFilter) Reset()         { *m = LocationFilter{} }
+func (m *LocationFilter) String() string { return proto.CompactTextString(m) }
+func (*LocationFilter) ProtoMessage()    {}
+func (*LocationFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{2}
+}
+func (m *LocationFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LocationFilter.Unmarshal(m, b)
+}
+func (m *LocationFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LocationFilter.Marshal(b, m, deterministic)
+}
+func (dst *LocationFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LocationFilter.Merge(dst, src)
+}
+func (m *LocationFilter) XXX_Size() int {
+	return xxx_messageInfo_LocationFilter.Size(m)
+}
+func (m *LocationFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_LocationFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LocationFilter proto.InternalMessageInfo
+
+func (m *LocationFilter) GetAddress() string {
+	if m != nil {
+		return m.Address
+	}
+	return ""
+}
+
+func (m *LocationFilter) GetRegionCode() string {
+	if m != nil {
+		return m.RegionCode
+	}
+	return ""
+}
+
+func (m *LocationFilter) GetLatLng() *latlng.LatLng {
+	if m != nil {
+		return m.LatLng
+	}
+	return nil
+}
+
+func (m *LocationFilter) GetDistanceInMiles() float64 {
+	if m != nil {
+		return m.DistanceInMiles
+	}
+	return 0
+}
+
+func (m *LocationFilter) GetTelecommutePreference() LocationFilter_TelecommutePreference {
+	if m != nil {
+		return m.TelecommutePreference
+	}
+	return LocationFilter_TELECOMMUTE_PREFERENCE_UNSPECIFIED
+}
+
+func (m *LocationFilter) GetNegated() bool {
+	if m != nil {
+		return m.Negated
+	}
+	return false
+}
+
+// Input only.
+//
+// Filter on job compensation type and amount.
+type CompensationFilter struct {
+	// Required.
+	//
+	// Type of filter.
+	Type CompensationFilter_FilterType `protobuf:"varint,1,opt,name=type,proto3,enum=google.cloud.talent.v4beta1.CompensationFilter_FilterType" json:"type,omitempty"`
+	// Required.
+	//
+	// Specify desired `base compensation entry's`
+	// [CompensationInfo.CompensationUnit][google.cloud.talent.v4beta1.CompensationInfo.CompensationUnit].
+	Units []CompensationInfo_CompensationUnit `protobuf:"varint,2,rep,packed,name=units,proto3,enum=google.cloud.talent.v4beta1.CompensationInfo_CompensationUnit" json:"units,omitempty"`
+	// Optional.
+	//
+	// Compensation range.
+	Range *CompensationInfo_CompensationRange `protobuf:"bytes,3,opt,name=range,proto3" json:"range,omitempty"`
+	// Optional.
+	//
+	// Whether to include jobs whose compensation range is unspecified.
+	IncludeJobsWithUnspecifiedCompensationRange bool     `protobuf:"varint,4,opt,name=include_jobs_with_unspecified_compensation_range,json=includeJobsWithUnspecifiedCompensationRange,proto3" json:"include_jobs_with_unspecified_compensation_range,omitempty"`
+	XXX_NoUnkeyedLiteral                        struct{} `json:"-"`
+	XXX_unrecognized                            []byte   `json:"-"`
+	XXX_sizecache                               int32    `json:"-"`
+}
+
+func (m *CompensationFilter) Reset()         { *m = CompensationFilter{} }
+func (m *CompensationFilter) String() string { return proto.CompactTextString(m) }
+func (*CompensationFilter) ProtoMessage()    {}
+func (*CompensationFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{3}
+}
+func (m *CompensationFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CompensationFilter.Unmarshal(m, b)
+}
+func (m *CompensationFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CompensationFilter.Marshal(b, m, deterministic)
+}
+func (dst *CompensationFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CompensationFilter.Merge(dst, src)
+}
+func (m *CompensationFilter) XXX_Size() int {
+	return xxx_messageInfo_CompensationFilter.Size(m)
+}
+func (m *CompensationFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_CompensationFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CompensationFilter proto.InternalMessageInfo
+
+func (m *CompensationFilter) GetType() CompensationFilter_FilterType {
+	if m != nil {
+		return m.Type
+	}
+	return CompensationFilter_FILTER_TYPE_UNSPECIFIED
+}
+
+func (m *CompensationFilter) GetUnits() []CompensationInfo_CompensationUnit {
+	if m != nil {
+		return m.Units
+	}
+	return nil
+}
+
+func (m *CompensationFilter) GetRange() *CompensationInfo_CompensationRange {
+	if m != nil {
+		return m.Range
+	}
+	return nil
+}
+
+func (m *CompensationFilter) GetIncludeJobsWithUnspecifiedCompensationRange() bool {
+	if m != nil {
+		return m.IncludeJobsWithUnspecifiedCompensationRange
+	}
+	return false
+}
+
+// Input only.
+//
+// Parameters needed for commute search.
+type CommuteFilter struct {
+	// Required.
+	//
+	// The method of transportation for which to calculate the commute time.
+	CommuteMethod CommuteFilter_CommuteMethod `protobuf:"varint,1,opt,name=commute_method,json=commuteMethod,proto3,enum=google.cloud.talent.v4beta1.CommuteFilter_CommuteMethod" json:"commute_method,omitempty"`
+	// Required.
+	//
+	// The latitude and longitude of the location from which to calculate the
+	// commute time.
+	StartCoordinates *latlng.LatLng `protobuf:"bytes,2,opt,name=start_coordinates,json=startCoordinates,proto3" json:"start_coordinates,omitempty"`
+	// Required.
+	//
+	// The maximum travel time in seconds. The maximum allowed value is `3600s`
+	// (one hour). Format is `123s`.
+	TravelDuration *duration.Duration `protobuf:"bytes,3,opt,name=travel_duration,json=travelDuration,proto3" json:"travel_duration,omitempty"`
+	// Optional.
+	// If `true`, jobs without street level addresses may also be returned.
+	// For city level addresses, the city center is used. For state and coarser
+	// level addresses, text matching is used.
+	// If this field is set to `false` or isn't specified, only jobs that include
+	// street level addresses will be returned by commute search.
+	AllowImpreciseAddresses bool `protobuf:"varint,4,opt,name=allow_imprecise_addresses,json=allowImpreciseAddresses,proto3" json:"allow_imprecise_addresses,omitempty"`
+	// Optional.
+	//
+	// Traffic factor to take into account while searching by commute.
+	//
+	// Types that are valid to be assigned to TrafficOption:
+	//	*CommuteFilter_RoadTraffic_
+	//	*CommuteFilter_DepartureTime
+	TrafficOption        isCommuteFilter_TrafficOption `protobuf_oneof:"traffic_option"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *CommuteFilter) Reset()         { *m = CommuteFilter{} }
+func (m *CommuteFilter) String() string { return proto.CompactTextString(m) }
+func (*CommuteFilter) ProtoMessage()    {}
+func (*CommuteFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{4}
+}
+func (m *CommuteFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CommuteFilter.Unmarshal(m, b)
+}
+func (m *CommuteFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CommuteFilter.Marshal(b, m, deterministic)
+}
+func (dst *CommuteFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CommuteFilter.Merge(dst, src)
+}
+func (m *CommuteFilter) XXX_Size() int {
+	return xxx_messageInfo_CommuteFilter.Size(m)
+}
+func (m *CommuteFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_CommuteFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CommuteFilter proto.InternalMessageInfo
+
+func (m *CommuteFilter) GetCommuteMethod() CommuteFilter_CommuteMethod {
+	if m != nil {
+		return m.CommuteMethod
+	}
+	return CommuteFilter_COMMUTE_METHOD_UNSPECIFIED
+}
+
+func (m *CommuteFilter) GetStartCoordinates() *latlng.LatLng {
+	if m != nil {
+		return m.StartCoordinates
+	}
+	return nil
+}
+
+func (m *CommuteFilter) GetTravelDuration() *duration.Duration {
+	if m != nil {
+		return m.TravelDuration
+	}
+	return nil
+}
+
+func (m *CommuteFilter) GetAllowImpreciseAddresses() bool {
+	if m != nil {
+		return m.AllowImpreciseAddresses
+	}
+	return false
+}
+
+type isCommuteFilter_TrafficOption interface {
+	isCommuteFilter_TrafficOption()
+}
+
+type CommuteFilter_RoadTraffic_ struct {
+	RoadTraffic CommuteFilter_RoadTraffic `protobuf:"varint,5,opt,name=road_traffic,json=roadTraffic,proto3,enum=google.cloud.talent.v4beta1.CommuteFilter_RoadTraffic,oneof"`
+}
+
+type CommuteFilter_DepartureTime struct {
+	DepartureTime *timeofday.TimeOfDay `protobuf:"bytes,6,opt,name=departure_time,json=departureTime,proto3,oneof"`
+}
+
+func (*CommuteFilter_RoadTraffic_) isCommuteFilter_TrafficOption() {}
+
+func (*CommuteFilter_DepartureTime) isCommuteFilter_TrafficOption() {}
+
+func (m *CommuteFilter) GetTrafficOption() isCommuteFilter_TrafficOption {
+	if m != nil {
+		return m.TrafficOption
+	}
+	return nil
+}
+
+func (m *CommuteFilter) GetRoadTraffic() CommuteFilter_RoadTraffic {
+	if x, ok := m.GetTrafficOption().(*CommuteFilter_RoadTraffic_); ok {
+		return x.RoadTraffic
+	}
+	return CommuteFilter_ROAD_TRAFFIC_UNSPECIFIED
+}
+
+func (m *CommuteFilter) GetDepartureTime() *timeofday.TimeOfDay {
+	if x, ok := m.GetTrafficOption().(*CommuteFilter_DepartureTime); ok {
+		return x.DepartureTime
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*CommuteFilter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _CommuteFilter_OneofMarshaler, _CommuteFilter_OneofUnmarshaler, _CommuteFilter_OneofSizer, []interface{}{
+		(*CommuteFilter_RoadTraffic_)(nil),
+		(*CommuteFilter_DepartureTime)(nil),
+	}
+}
+
+func _CommuteFilter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*CommuteFilter)
+	// traffic_option
+	switch x := m.TrafficOption.(type) {
+	case *CommuteFilter_RoadTraffic_:
+		b.EncodeVarint(5<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.RoadTraffic))
+	case *CommuteFilter_DepartureTime:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.DepartureTime); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("CommuteFilter.TrafficOption has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _CommuteFilter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*CommuteFilter)
+	switch tag {
+	case 5: // traffic_option.road_traffic
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.TrafficOption = &CommuteFilter_RoadTraffic_{CommuteFilter_RoadTraffic(x)}
+		return true, err
+	case 6: // traffic_option.departure_time
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(timeofday.TimeOfDay)
+		err := b.DecodeMessage(msg)
+		m.TrafficOption = &CommuteFilter_DepartureTime{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _CommuteFilter_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*CommuteFilter)
+	// traffic_option
+	switch x := m.TrafficOption.(type) {
+	case *CommuteFilter_RoadTraffic_:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(x.RoadTraffic))
+	case *CommuteFilter_DepartureTime:
+		s := proto.Size(x.DepartureTime)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Input only.
+//
+// Job title of the search.
+type JobTitleFilter struct {
+	// Required.
+	//
+	// The job title, for example, "Software engineer", or "Product manager".
+	JobTitle string `protobuf:"bytes,1,opt,name=job_title,json=jobTitle,proto3" json:"job_title,omitempty"`
+	// Optional.
+	//
+	// Whether to apply negation to the filter so profiles matching the filter
+	// are excluded.
+	Negated              bool     `protobuf:"varint,2,opt,name=negated,proto3" json:"negated,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *JobTitleFilter) Reset()         { *m = JobTitleFilter{} }
+func (m *JobTitleFilter) String() string { return proto.CompactTextString(m) }
+func (*JobTitleFilter) ProtoMessage()    {}
+func (*JobTitleFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{5}
+}
+func (m *JobTitleFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_JobTitleFilter.Unmarshal(m, b)
+}
+func (m *JobTitleFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_JobTitleFilter.Marshal(b, m, deterministic)
+}
+func (dst *JobTitleFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_JobTitleFilter.Merge(dst, src)
+}
+func (m *JobTitleFilter) XXX_Size() int {
+	return xxx_messageInfo_JobTitleFilter.Size(m)
+}
+func (m *JobTitleFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_JobTitleFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_JobTitleFilter proto.InternalMessageInfo
+
+func (m *JobTitleFilter) GetJobTitle() string {
+	if m != nil {
+		return m.JobTitle
+	}
+	return ""
+}
+
+func (m *JobTitleFilter) GetNegated() bool {
+	if m != nil {
+		return m.Negated
+	}
+	return false
+}
+
+// Input only.
+//
+// Skill filter of the search.
+type SkillFilter struct {
+	// Required.
+	//
+	// The skill name. For example, "java", "j2ee", etc.
+	Skill string `protobuf:"bytes,1,opt,name=skill,proto3" json:"skill,omitempty"`
+	// Optional.
+	//
+	// Whether to apply negation to the filter so profiles matching the filter
+	// are excluded.
+	Negated              bool     `protobuf:"varint,2,opt,name=negated,proto3" json:"negated,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SkillFilter) Reset()         { *m = SkillFilter{} }
+func (m *SkillFilter) String() string { return proto.CompactTextString(m) }
+func (*SkillFilter) ProtoMessage()    {}
+func (*SkillFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{6}
+}
+func (m *SkillFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SkillFilter.Unmarshal(m, b)
+}
+func (m *SkillFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SkillFilter.Marshal(b, m, deterministic)
+}
+func (dst *SkillFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SkillFilter.Merge(dst, src)
+}
+func (m *SkillFilter) XXX_Size() int {
+	return xxx_messageInfo_SkillFilter.Size(m)
+}
+func (m *SkillFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_SkillFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SkillFilter proto.InternalMessageInfo
+
+func (m *SkillFilter) GetSkill() string {
+	if m != nil {
+		return m.Skill
+	}
+	return ""
+}
+
+func (m *SkillFilter) GetNegated() bool {
+	if m != nil {
+		return m.Negated
+	}
+	return false
+}
+
+// Input only.
+//
+// Employer filter of the search.
+type EmployerFilter struct {
+	// Required.
+	//
+	// The name of the employer, for example "Google", "Alphabet".
+	Employer string `protobuf:"bytes,1,opt,name=employer,proto3" json:"employer,omitempty"`
+	// Optional.
+	//
+	// Define set of [EmploymentRecord][google.cloud.talent.v4beta1.EmploymentRecord]s to search against.
+	//
+	// Defaults to [EmployerFilterMode.ALL_EMPLOYMENT_RECORDS][google.cloud.talent.v4beta1.EmployerFilter.EmployerFilterMode.ALL_EMPLOYMENT_RECORDS].
+	Mode EmployerFilter_EmployerFilterMode `protobuf:"varint,2,opt,name=mode,proto3,enum=google.cloud.talent.v4beta1.EmployerFilter_EmployerFilterMode" json:"mode,omitempty"`
+	// Optional.
+	//
+	// Whether to apply negation to the filter so profiles matching the filter
+	// is excluded.
+	Negated              bool     `protobuf:"varint,3,opt,name=negated,proto3" json:"negated,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EmployerFilter) Reset()         { *m = EmployerFilter{} }
+func (m *EmployerFilter) String() string { return proto.CompactTextString(m) }
+func (*EmployerFilter) ProtoMessage()    {}
+func (*EmployerFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{7}
+}
+func (m *EmployerFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EmployerFilter.Unmarshal(m, b)
+}
+func (m *EmployerFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EmployerFilter.Marshal(b, m, deterministic)
+}
+func (dst *EmployerFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EmployerFilter.Merge(dst, src)
+}
+func (m *EmployerFilter) XXX_Size() int {
+	return xxx_messageInfo_EmployerFilter.Size(m)
+}
+func (m *EmployerFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_EmployerFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EmployerFilter proto.InternalMessageInfo
+
+func (m *EmployerFilter) GetEmployer() string {
+	if m != nil {
+		return m.Employer
+	}
+	return ""
+}
+
+func (m *EmployerFilter) GetMode() EmployerFilter_EmployerFilterMode {
+	if m != nil {
+		return m.Mode
+	}
+	return EmployerFilter_EMPLOYER_FILTER_MODE_UNSPECIFIED
+}
+
+func (m *EmployerFilter) GetNegated() bool {
+	if m != nil {
+		return m.Negated
+	}
+	return false
+}
+
+// Input only.
+//
+// Education filter of the search.
+type EducationFilter struct {
+	// Optional.
+	//
+	// The school name. For example "MIT", "University of California, Berkeley".
+	School string `protobuf:"bytes,1,opt,name=school,proto3" json:"school,omitempty"`
+	// Optional.
+	//
+	// The field of study. This is to search against value provided in
+	// [Degree.fields_of_study][google.cloud.talent.v4beta1.Degree.fields_of_study].
+	// For example "Computer Science", "Mathematics".
+	FieldOfStudy string `protobuf:"bytes,2,opt,name=field_of_study,json=fieldOfStudy,proto3" json:"field_of_study,omitempty"`
+	// Optional.
+	//
+	// Education degree in ISCED code. Each value in degree covers a specific
+	// level of education, without any expansion to upper nor lower levels of
+	// education degree.
+	DegreeType DegreeType `protobuf:"varint,3,opt,name=degree_type,json=degreeType,proto3,enum=google.cloud.talent.v4beta1.DegreeType" json:"degree_type,omitempty"`
+	// Optional.
+	//
+	// Whether to apply negation to the filter so profiles matching the filter
+	// is excluded.
+	Negated              bool     `protobuf:"varint,6,opt,name=negated,proto3" json:"negated,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EducationFilter) Reset()         { *m = EducationFilter{} }
+func (m *EducationFilter) String() string { return proto.CompactTextString(m) }
+func (*EducationFilter) ProtoMessage()    {}
+func (*EducationFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{8}
+}
+func (m *EducationFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EducationFilter.Unmarshal(m, b)
+}
+func (m *EducationFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EducationFilter.Marshal(b, m, deterministic)
+}
+func (dst *EducationFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EducationFilter.Merge(dst, src)
+}
+func (m *EducationFilter) XXX_Size() int {
+	return xxx_messageInfo_EducationFilter.Size(m)
+}
+func (m *EducationFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_EducationFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EducationFilter proto.InternalMessageInfo
+
+func (m *EducationFilter) GetSchool() string {
+	if m != nil {
+		return m.School
+	}
+	return ""
+}
+
+func (m *EducationFilter) GetFieldOfStudy() string {
+	if m != nil {
+		return m.FieldOfStudy
+	}
+	return ""
+}
+
+func (m *EducationFilter) GetDegreeType() DegreeType {
+	if m != nil {
+		return m.DegreeType
+	}
+	return DegreeType_DEGREE_TYPE_UNSPECIFIED
+}
+
+func (m *EducationFilter) GetNegated() bool {
+	if m != nil {
+		return m.Negated
+	}
+	return false
+}
+
+// Input only.
+//
+// Work experience filter.
+//
+// This filter is used to search for profiles with working experience length
+// between [min_experience][google.cloud.talent.v4beta1.WorkExperienceFilter.min_experience] and [max_experience][google.cloud.talent.v4beta1.WorkExperienceFilter.max_experience].
+type WorkExperienceFilter struct {
+	// Optional.
+	//
+	// The minimum duration of the work experience (inclusive).
+	MinExperience *duration.Duration `protobuf:"bytes,1,opt,name=min_experience,json=minExperience,proto3" json:"min_experience,omitempty"`
+	// Optional.
+	//
+	// The maximum duration of the work experience (exclusive).
+	MaxExperience        *duration.Duration `protobuf:"bytes,2,opt,name=max_experience,json=maxExperience,proto3" json:"max_experience,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *WorkExperienceFilter) Reset()         { *m = WorkExperienceFilter{} }
+func (m *WorkExperienceFilter) String() string { return proto.CompactTextString(m) }
+func (*WorkExperienceFilter) ProtoMessage()    {}
+func (*WorkExperienceFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{9}
+}
+func (m *WorkExperienceFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_WorkExperienceFilter.Unmarshal(m, b)
+}
+func (m *WorkExperienceFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_WorkExperienceFilter.Marshal(b, m, deterministic)
+}
+func (dst *WorkExperienceFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_WorkExperienceFilter.Merge(dst, src)
+}
+func (m *WorkExperienceFilter) XXX_Size() int {
+	return xxx_messageInfo_WorkExperienceFilter.Size(m)
+}
+func (m *WorkExperienceFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_WorkExperienceFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_WorkExperienceFilter proto.InternalMessageInfo
+
+func (m *WorkExperienceFilter) GetMinExperience() *duration.Duration {
+	if m != nil {
+		return m.MinExperience
+	}
+	return nil
+}
+
+func (m *WorkExperienceFilter) GetMaxExperience() *duration.Duration {
+	if m != nil {
+		return m.MaxExperience
+	}
+	return nil
+}
+
+// Input only.
+//
+// Application Date Range Filter.
+//
+// The API matches profiles with [JobApplication.application_date][google.cloud.talent.v4beta1.JobApplication.application_date] between
+// start date and end date (both boundaries are inclusive). The filter is
+// ignored if both [start_date][google.cloud.talent.v4beta1.ApplicationDateFilter.start_date] and [end_date][google.cloud.talent.v4beta1.ApplicationDateFilter.end_date] are missing.
+type ApplicationDateFilter struct {
+	// Optional.
+	//
+	// Start date. If it's missing, The API matches profiles with application date
+	// not after the end date.
+	StartDate *date.Date `protobuf:"bytes,1,opt,name=start_date,json=startDate,proto3" json:"start_date,omitempty"`
+	// Optional.
+	//
+	// End date. If it's missing, The API matches profiles with application date
+	// not before the start date.
+	EndDate              *date.Date `protobuf:"bytes,2,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
+	XXX_unrecognized     []byte     `json:"-"`
+	XXX_sizecache        int32      `json:"-"`
+}
+
+func (m *ApplicationDateFilter) Reset()         { *m = ApplicationDateFilter{} }
+func (m *ApplicationDateFilter) String() string { return proto.CompactTextString(m) }
+func (*ApplicationDateFilter) ProtoMessage()    {}
+func (*ApplicationDateFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{10}
+}
+func (m *ApplicationDateFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplicationDateFilter.Unmarshal(m, b)
+}
+func (m *ApplicationDateFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplicationDateFilter.Marshal(b, m, deterministic)
+}
+func (dst *ApplicationDateFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplicationDateFilter.Merge(dst, src)
+}
+func (m *ApplicationDateFilter) XXX_Size() int {
+	return xxx_messageInfo_ApplicationDateFilter.Size(m)
+}
+func (m *ApplicationDateFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplicationDateFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplicationDateFilter proto.InternalMessageInfo
+
+func (m *ApplicationDateFilter) GetStartDate() *date.Date {
+	if m != nil {
+		return m.StartDate
+	}
+	return nil
+}
+
+func (m *ApplicationDateFilter) GetEndDate() *date.Date {
+	if m != nil {
+		return m.EndDate
+	}
+	return nil
+}
+
+// Input only.
+//
+// Outcome Reason Filter.
+type ApplicationOutcomeReasonFilter struct {
+	// Required.
+	//
+	// User entered or selected outcome reason. The API does an exact match on the
+	// [JobApplication.outcome_reason][google.cloud.talent.v4beta1.JobApplication.outcome_reason] in profiles.
+	OutcomeReason string `protobuf:"bytes,1,opt,name=outcome_reason,json=outcomeReason,proto3" json:"outcome_reason,omitempty"`
+	// Optional.
+	//
+	// If true, The API excludes all candidates with any
+	// [JobApplication.outcome_reason][google.cloud.talent.v4beta1.JobApplication.outcome_reason] matching the outcome reason specified in
+	// the filter.
+	Negated              bool     `protobuf:"varint,2,opt,name=negated,proto3" json:"negated,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ApplicationOutcomeReasonFilter) Reset()         { *m = ApplicationOutcomeReasonFilter{} }
+func (m *ApplicationOutcomeReasonFilter) String() string { return proto.CompactTextString(m) }
+func (*ApplicationOutcomeReasonFilter) ProtoMessage()    {}
+func (*ApplicationOutcomeReasonFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{11}
+}
+func (m *ApplicationOutcomeReasonFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplicationOutcomeReasonFilter.Unmarshal(m, b)
+}
+func (m *ApplicationOutcomeReasonFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplicationOutcomeReasonFilter.Marshal(b, m, deterministic)
+}
+func (dst *ApplicationOutcomeReasonFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplicationOutcomeReasonFilter.Merge(dst, src)
+}
+func (m *ApplicationOutcomeReasonFilter) XXX_Size() int {
+	return xxx_messageInfo_ApplicationOutcomeReasonFilter.Size(m)
+}
+func (m *ApplicationOutcomeReasonFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplicationOutcomeReasonFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplicationOutcomeReasonFilter proto.InternalMessageInfo
+
+func (m *ApplicationOutcomeReasonFilter) GetOutcomeReason() string {
+	if m != nil {
+		return m.OutcomeReason
+	}
+	return ""
+}
+
+func (m *ApplicationOutcomeReasonFilter) GetNegated() bool {
+	if m != nil {
+		return m.Negated
+	}
+	return false
+}
+
+// Input only.
+//
+// Filter on Last Stage of Application.
+type ApplicationLastStageFilter struct {
+	// Required.
+	//
+	// User entered or selected last stage the candidate reached in the
+	// application. The API does an exact match on the
+	// [JobApplication.last_stage][google.cloud.talent.v4beta1.JobApplication.last_stage] in profiles.
+	LastStage string `protobuf:"bytes,1,opt,name=last_stage,json=lastStage,proto3" json:"last_stage,omitempty"`
+	// Optional.
+	// If true, The API excludes all candidates with any
+	// [JobApplication.last_stage][google.cloud.talent.v4beta1.JobApplication.last_stage] matching the last stage specified in the
+	// filter.
+	Negated              bool     `protobuf:"varint,2,opt,name=negated,proto3" json:"negated,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ApplicationLastStageFilter) Reset()         { *m = ApplicationLastStageFilter{} }
+func (m *ApplicationLastStageFilter) String() string { return proto.CompactTextString(m) }
+func (*ApplicationLastStageFilter) ProtoMessage()    {}
+func (*ApplicationLastStageFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{12}
+}
+func (m *ApplicationLastStageFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplicationLastStageFilter.Unmarshal(m, b)
+}
+func (m *ApplicationLastStageFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplicationLastStageFilter.Marshal(b, m, deterministic)
+}
+func (dst *ApplicationLastStageFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplicationLastStageFilter.Merge(dst, src)
+}
+func (m *ApplicationLastStageFilter) XXX_Size() int {
+	return xxx_messageInfo_ApplicationLastStageFilter.Size(m)
+}
+func (m *ApplicationLastStageFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplicationLastStageFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplicationLastStageFilter proto.InternalMessageInfo
+
+func (m *ApplicationLastStageFilter) GetLastStage() string {
+	if m != nil {
+		return m.LastStage
+	}
+	return ""
+}
+
+func (m *ApplicationLastStageFilter) GetNegated() bool {
+	if m != nil {
+		return m.Negated
+	}
+	return false
+}
+
+// Input only.
+//
+// Filter on the job information of Application.
+type ApplicationJobFilter struct {
+	// Optional.
+	//
+	// The job resource name in the application. The API does an exact match on
+	// the [Job.name][google.cloud.talent.v4beta1.Job.name] of [JobApplication.job][google.cloud.talent.v4beta1.JobApplication.job] in profiles.
+	JobName string `protobuf:"bytes,1,opt,name=job_name,json=jobName,proto3" json:"job_name,omitempty"`
+	// Optional.
+	//
+	// The job requisition id in the application. The API does an exact match on
+	// the [Job.requisistion_id][] of [JobApplication.job][google.cloud.talent.v4beta1.JobApplication.job] in profiles.
+	JobRequisitionId string `protobuf:"bytes,2,opt,name=job_requisition_id,json=jobRequisitionId,proto3" json:"job_requisition_id,omitempty"`
+	// Optional.
+	//
+	// The job title in the application. The API does an exact match on the
+	// [Job.title][google.cloud.talent.v4beta1.Job.title] of [JobApplication.job][google.cloud.talent.v4beta1.JobApplication.job] in profiles.
+	JobTitle string `protobuf:"bytes,3,opt,name=job_title,json=jobTitle,proto3" json:"job_title,omitempty"`
+	// Optional.
+	//
+	// If true, the API excludes all profiles with any [JobApplication.job][google.cloud.talent.v4beta1.JobApplication.job]
+	// matching the filters.
+	Negated              bool     `protobuf:"varint,4,opt,name=negated,proto3" json:"negated,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ApplicationJobFilter) Reset()         { *m = ApplicationJobFilter{} }
+func (m *ApplicationJobFilter) String() string { return proto.CompactTextString(m) }
+func (*ApplicationJobFilter) ProtoMessage()    {}
+func (*ApplicationJobFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{13}
+}
+func (m *ApplicationJobFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplicationJobFilter.Unmarshal(m, b)
+}
+func (m *ApplicationJobFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplicationJobFilter.Marshal(b, m, deterministic)
+}
+func (dst *ApplicationJobFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplicationJobFilter.Merge(dst, src)
+}
+func (m *ApplicationJobFilter) XXX_Size() int {
+	return xxx_messageInfo_ApplicationJobFilter.Size(m)
+}
+func (m *ApplicationJobFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplicationJobFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplicationJobFilter proto.InternalMessageInfo
+
+func (m *ApplicationJobFilter) GetJobName() string {
+	if m != nil {
+		return m.JobName
+	}
+	return ""
+}
+
+func (m *ApplicationJobFilter) GetJobRequisitionId() string {
+	if m != nil {
+		return m.JobRequisitionId
+	}
+	return ""
+}
+
+func (m *ApplicationJobFilter) GetJobTitle() string {
+	if m != nil {
+		return m.JobTitle
+	}
+	return ""
+}
+
+func (m *ApplicationJobFilter) GetNegated() bool {
+	if m != nil {
+		return m.Negated
+	}
+	return false
+}
+
+// Input only.
+//
+// Filter on status of Application.
+type ApplicationStatusFilter struct {
+	// Required.
+	//
+	// User entered or selected application status. The API does an exact match
+	// between the application status specified in this filter and the
+	// [JobApplication.status][] in profiles.
+	ApplicationStatus JobApplication_ApplicationStatus `protobuf:"varint,1,opt,name=application_status,json=applicationStatus,proto3,enum=google.cloud.talent.v4beta1.JobApplication_ApplicationStatus" json:"application_status,omitempty"`
+	// Optional.
+	//
+	// If true, The API excludes all candidates with any [JobApplication.status][]
+	// matching the status specified in the filter.
+	Negated              bool     `protobuf:"varint,2,opt,name=negated,proto3" json:"negated,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ApplicationStatusFilter) Reset()         { *m = ApplicationStatusFilter{} }
+func (m *ApplicationStatusFilter) String() string { return proto.CompactTextString(m) }
+func (*ApplicationStatusFilter) ProtoMessage()    {}
+func (*ApplicationStatusFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{14}
+}
+func (m *ApplicationStatusFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ApplicationStatusFilter.Unmarshal(m, b)
+}
+func (m *ApplicationStatusFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ApplicationStatusFilter.Marshal(b, m, deterministic)
+}
+func (dst *ApplicationStatusFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ApplicationStatusFilter.Merge(dst, src)
+}
+func (m *ApplicationStatusFilter) XXX_Size() int {
+	return xxx_messageInfo_ApplicationStatusFilter.Size(m)
+}
+func (m *ApplicationStatusFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_ApplicationStatusFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ApplicationStatusFilter proto.InternalMessageInfo
+
+func (m *ApplicationStatusFilter) GetApplicationStatus() JobApplication_ApplicationStatus {
+	if m != nil {
+		return m.ApplicationStatus
+	}
+	return JobApplication_APPLICATION_STATUS_UNSPECIFIED
+}
+
+func (m *ApplicationStatusFilter) GetNegated() bool {
+	if m != nil {
+		return m.Negated
+	}
+	return false
+}
+
+// Input only.
+//
+// Filter on create timestamp or update timestamp of profiles.
+type TimeFilter struct {
+	// Optional.
+	//
+	// Start timestamp, matching profiles with the start time. If this field
+	// missing, The API matches profiles with create / update timestamp before the
+	// end timestamp.
+	StartTime *timestamp.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
+	// Optional.
+	//
+	// End timestamp, matching profiles with the end time. If this field
+	// missing, The API matches profiles with create / update timestamp after the
+	// start timestamp.
+	EndTime *timestamp.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
+	// Optional.
+	//
+	// Specifies which time field to filter profiles.
+	//
+	// Defaults to [TimeField.CREATE_TIME][google.cloud.talent.v4beta1.TimeFilter.TimeField.CREATE_TIME].
+	TimeField            TimeFilter_TimeField `protobuf:"varint,3,opt,name=time_field,json=timeField,proto3,enum=google.cloud.talent.v4beta1.TimeFilter_TimeField" json:"time_field,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *TimeFilter) Reset()         { *m = TimeFilter{} }
+func (m *TimeFilter) String() string { return proto.CompactTextString(m) }
+func (*TimeFilter) ProtoMessage()    {}
+func (*TimeFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_filters_37155a594c645a6c, []int{15}
+}
+func (m *TimeFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TimeFilter.Unmarshal(m, b)
+}
+func (m *TimeFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TimeFilter.Marshal(b, m, deterministic)
+}
+func (dst *TimeFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TimeFilter.Merge(dst, src)
+}
+func (m *TimeFilter) XXX_Size() int {
+	return xxx_messageInfo_TimeFilter.Size(m)
+}
+func (m *TimeFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_TimeFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TimeFilter proto.InternalMessageInfo
+
+func (m *TimeFilter) GetStartTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.StartTime
+	}
+	return nil
+}
+
+func (m *TimeFilter) GetEndTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.EndTime
+	}
+	return nil
+}
+
+func (m *TimeFilter) GetTimeField() TimeFilter_TimeField {
+	if m != nil {
+		return m.TimeField
+	}
+	return TimeFilter_TIME_FIELD_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*JobQuery)(nil), "google.cloud.talent.v4beta1.JobQuery")
+	proto.RegisterType((*ProfileQuery)(nil), "google.cloud.talent.v4beta1.ProfileQuery")
+	proto.RegisterType((*LocationFilter)(nil), "google.cloud.talent.v4beta1.LocationFilter")
+	proto.RegisterType((*CompensationFilter)(nil), "google.cloud.talent.v4beta1.CompensationFilter")
+	proto.RegisterType((*CommuteFilter)(nil), "google.cloud.talent.v4beta1.CommuteFilter")
+	proto.RegisterType((*JobTitleFilter)(nil), "google.cloud.talent.v4beta1.JobTitleFilter")
+	proto.RegisterType((*SkillFilter)(nil), "google.cloud.talent.v4beta1.SkillFilter")
+	proto.RegisterType((*EmployerFilter)(nil), "google.cloud.talent.v4beta1.EmployerFilter")
+	proto.RegisterType((*EducationFilter)(nil), "google.cloud.talent.v4beta1.EducationFilter")
+	proto.RegisterType((*WorkExperienceFilter)(nil), "google.cloud.talent.v4beta1.WorkExperienceFilter")
+	proto.RegisterType((*ApplicationDateFilter)(nil), "google.cloud.talent.v4beta1.ApplicationDateFilter")
+	proto.RegisterType((*ApplicationOutcomeReasonFilter)(nil), "google.cloud.talent.v4beta1.ApplicationOutcomeReasonFilter")
+	proto.RegisterType((*ApplicationLastStageFilter)(nil), "google.cloud.talent.v4beta1.ApplicationLastStageFilter")
+	proto.RegisterType((*ApplicationJobFilter)(nil), "google.cloud.talent.v4beta1.ApplicationJobFilter")
+	proto.RegisterType((*ApplicationStatusFilter)(nil), "google.cloud.talent.v4beta1.ApplicationStatusFilter")
+	proto.RegisterType((*TimeFilter)(nil), "google.cloud.talent.v4beta1.TimeFilter")
+	proto.RegisterEnum("google.cloud.talent.v4beta1.LocationFilter_TelecommutePreference", LocationFilter_TelecommutePreference_name, LocationFilter_TelecommutePreference_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.CompensationFilter_FilterType", CompensationFilter_FilterType_name, CompensationFilter_FilterType_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.CommuteFilter_CommuteMethod", CommuteFilter_CommuteMethod_name, CommuteFilter_CommuteMethod_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.CommuteFilter_RoadTraffic", CommuteFilter_RoadTraffic_name, CommuteFilter_RoadTraffic_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.EmployerFilter_EmployerFilterMode", EmployerFilter_EmployerFilterMode_name, EmployerFilter_EmployerFilterMode_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.TimeFilter_TimeField", TimeFilter_TimeField_name, TimeFilter_TimeField_value)
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/filters.proto", fileDescriptor_filters_37155a594c645a6c)
+}
+
+var fileDescriptor_filters_37155a594c645a6c = []byte{
+	// 2208 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0x4b, 0x73, 0x1b, 0xc7,
+	0xf1, 0x17, 0x00, 0x3e, 0x1b, 0x04, 0x08, 0x8e, 0x44, 0x12, 0xa2, 0xf4, 0x97, 0x58, 0xb0, 0xf5,
+	0x0f, 0x63, 0xab, 0x40, 0x8b, 0x71, 0x9c, 0xc4, 0x2e, 0xc7, 0x06, 0x81, 0xa5, 0x05, 0x06, 0x2f,
+	0x2f, 0x16, 0x52, 0xe8, 0x1c, 0x36, 0x03, 0xec, 0x00, 0x5c, 0x6a, 0xb1, 0xb3, 0xde, 0x19, 0x98,
+	0x62, 0x2a, 0x39, 0xe4, 0x92, 0xca, 0x27, 0xc8, 0x21, 0xa9, 0x1c, 0x92, 0x7b, 0x2a, 0x87, 0xdc,
+	0x72, 0xc8, 0xb7, 0xc8, 0xf7, 0x49, 0xcd, 0xec, 0x0c, 0xb0, 0xe0, 0x63, 0x49, 0xa5, 0x72, 0xc2,
+	0xf6, 0xeb, 0xd7, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x80, 0xef, 0x8f, 0x28, 0x1d, 0x79, 0x64, 0x7f,
+	0xe0, 0xd1, 0x89, 0xb3, 0xcf, 0xb1, 0x47, 0x7c, 0xbe, 0xff, 0xdd, 0xc7, 0x7d, 0xc2, 0xf1, 0x8b,
+	0xfd, 0xa1, 0xeb, 0x71, 0x12, 0xb2, 0x72, 0x10, 0x52, 0x4e, 0xd1, 0xa3, 0x48, 0xb5, 0x2c, 0x55,
+	0xcb, 0x91, 0x6a, 0x59, 0xa9, 0xee, 0x3c, 0x56, 0x38, 0x38, 0x70, 0xf7, 0xb1, 0xef, 0x53, 0x8e,
+	0xb9, 0x4b, 0x7d, 0x65, 0xba, 0xb3, 0x97, 0xe4, 0x65, 0x40, 0xc7, 0x63, 0xea, 0x2b, 0xcd, 0x67,
+	0x49, 0x9a, 0x67, 0xb4, 0xaf, 0xd4, 0x12, 0xc3, 0x0e, 0x42, 0x3a, 0x74, 0x3d, 0xa2, 0x54, 0x9f,
+	0x28, 0x55, 0x49, 0xf5, 0x27, 0xc3, 0x7d, 0x67, 0x12, 0xca, 0xe0, 0x94, 0xfc, 0xe9, 0x65, 0x39,
+	0x77, 0xc7, 0x84, 0x71, 0x3c, 0x0e, 0x6e, 0x02, 0x38, 0x0f, 0x71, 0x10, 0x4c, 0xf3, 0xb2, 0xb3,
+	0xa5, 0xe4, 0xfc, 0x22, 0x20, 0xfb, 0x0e, 0xe6, 0xda, 0x71, 0x31, 0xce, 0xf7, 0x30, 0xf7, 0xfc,
+	0x91, 0x92, 0x3c, 0x8a, 0x4b, 0x84, 0x3b, 0x3a, 0x74, 0xf0, 0x45, 0x24, 0x2c, 0xfd, 0x6b, 0x09,
+	0x56, 0x8e, 0x69, 0xff, 0xeb, 0x09, 0x09, 0x2f, 0xd0, 0x03, 0x58, 0xfc, 0x56, 0x7c, 0x14, 0x53,
+	0xbb, 0xa9, 0xbd, 0x55, 0x33, 0x22, 0xd0, 0x7b, 0x90, 0x1b, 0xd0, 0x71, 0x80, 0xfd, 0x0b, 0xdb,
+	0xc7, 0x63, 0xc2, 0x8a, 0xe9, 0xdd, 0xcc, 0xde, 0xaa, 0xb9, 0xa6, 0x98, 0x2d, 0xc1, 0x43, 0xaf,
+	0xa0, 0xe0, 0xd1, 0x81, 0x5c, 0xa9, 0xad, 0x36, 0xb2, 0x98, 0xd9, 0xcd, 0xec, 0x65, 0x0f, 0x3e,
+	0x2c, 0x27, 0xec, 0x64, 0xb9, 0xa1, 0x8c, 0x8e, 0xa4, 0x8d, 0xb9, 0xee, 0xcd, 0xd1, 0x0c, 0xb5,
+	0x21, 0x7f, 0x46, 0xfb, 0xf6, 0x00, 0x73, 0x32, 0xa2, 0xa1, 0x4b, 0x58, 0x71, 0x61, 0x37, 0xb3,
+	0x97, 0x3f, 0xd8, 0x4b, 0x44, 0x3d, 0xa6, 0xfd, 0x6a, 0x64, 0x71, 0x61, 0xe6, 0xce, 0xa6, 0x84,
+	0x4b, 0x18, 0xfa, 0x1a, 0xf2, 0xa2, 0x04, 0x26, 0x9c, 0xa8, 0x38, 0x8b, 0x8b, 0xbb, 0xa9, 0xbd,
+	0xec, 0xc1, 0x07, 0x89, 0x80, 0xd5, 0xc8, 0x44, 0x45, 0x99, 0x1b, 0xc4, 0x49, 0x74, 0x00, 0x9b,
+	0x3a, 0x41, 0x8e, 0xcb, 0x02, 0x0f, 0xeb, 0x44, 0x2d, 0xc9, 0x44, 0xdd, 0x57, 0xc2, 0x5a, 0x24,
+	0x8b, 0xf2, 0xf5, 0x4b, 0x90, 0x6c, 0xe2, 0xb3, 0x78, 0xce, 0x8a, 0xcb, 0x32, 0x96, 0xfd, 0xdb,
+	0x62, 0x99, 0xda, 0xa9, 0x80, 0xd0, 0xe0, 0x0a, 0x0f, 0x7d, 0x02, 0xdb, 0x83, 0x09, 0xe3, 0x74,
+	0x6c, 0x63, 0xce, 0x43, 0xb7, 0x1f, 0x5b, 0xf1, 0x8a, 0xdc, 0xde, 0xcd, 0x48, 0x5c, 0xd1, 0x52,
+	0x65, 0x57, 0x86, 0xfb, 0x8e, 0xcb, 0x70, 0xdf, 0x23, 0x36, 0x0b, 0x88, 0xe7, 0xd9, 0x83, 0x53,
+	0x32, 0x78, 0x53, 0x5c, 0xdd, 0x4d, 0xed, 0xad, 0x98, 0x1b, 0x4a, 0xd4, 0x15, 0x92, 0xaa, 0x10,
+	0x88, 0x9d, 0x27, 0xe3, 0xc0, 0xa3, 0x17, 0x63, 0xe2, 0x73, 0x5b, 0x14, 0x19, 0x2b, 0x82, 0xdc,
+	0xa3, 0xe4, 0x9d, 0x37, 0xa6, 0x46, 0xd6, 0x45, 0x40, 0xcc, 0x75, 0x32, 0x47, 0x33, 0xf4, 0x0c,
+	0xf2, 0x1e, 0xf6, 0x47, 0x13, 0x3c, 0x22, 0xf6, 0x80, 0x3a, 0x84, 0x15, 0xb3, 0x32, 0x9d, 0x39,
+	0xcd, 0xad, 0x0a, 0x26, 0x3a, 0x01, 0x14, 0x4c, 0xfa, 0x9e, 0xcb, 0x4e, 0x6d, 0x51, 0xdb, 0x76,
+	0x88, 0xfd, 0x11, 0x29, 0xae, 0xc9, 0x3c, 0x26, 0x07, 0x60, 0xe9, 0x93, 0x67, 0x0a, 0x13, 0xb3,
+	0xa0, 0x60, 0x04, 0x5b, 0x72, 0x44, 0xe1, 0x93, 0xb7, 0x03, 0x6f, 0xe2, 0x10, 0xc7, 0x3e, 0xa3,
+	0x7d, 0x56, 0xcc, 0x45, 0x85, 0xaf, 0x99, 0xc7, 0xb4, 0xcf, 0x4a, 0xff, 0x06, 0x58, 0xeb, 0x44,
+	0x2d, 0x20, 0xe9, 0x10, 0x5d, 0x77, 0x3e, 0xd2, 0xff, 0x83, 0xf3, 0xf1, 0x1a, 0x36, 0xc4, 0xf9,
+	0xe0, 0x2e, 0xf7, 0xc8, 0x3b, 0x1d, 0xbc, 0x63, 0xda, 0xb7, 0x84, 0x91, 0x06, 0x3e, 0x9b, 0xa3,
+	0xd9, 0x6c, 0x5b, 0x49, 0x38, 0xc5, 0x5d, 0xb8, 0x03, 0xae, 0xa1, 0x8c, 0x34, 0x2e, 0x99, 0xa3,
+	0xc5, 0x7e, 0x6d, 0x10, 0x67, 0x72, 0x29, 0x13, 0x8b, 0x12, 0xf8, 0x79, 0x32, 0xb0, 0xb6, 0x52,
+	0xc8, 0x05, 0x32, 0xcf, 0x60, 0xa8, 0x09, 0x39, 0xf6, 0xc6, 0xf5, 0xbc, 0x29, 0xec, 0x92, 0x84,
+	0x4d, 0x6e, 0x15, 0x5d, 0x61, 0xa1, 0x20, 0xd7, 0xd8, 0x8c, 0x60, 0x68, 0x04, 0x5b, 0xe7, 0x34,
+	0x7c, 0x63, 0x93, 0xb7, 0x01, 0x09, 0x5d, 0xe2, 0x0f, 0xc8, 0xec, 0x94, 0x0a, 0xdc, 0x17, 0x89,
+	0xb8, 0xaf, 0x69, 0xf8, 0xc6, 0x98, 0x5a, 0x2a, 0x07, 0x0f, 0xce, 0xaf, 0xe1, 0xa2, 0x63, 0x58,
+	0x93, 0xa5, 0xab, 0xc3, 0x5e, 0x91, 0xf0, 0xdf, 0xbb, 0xb5, 0x78, 0x15, 0x68, 0x96, 0x4f, 0xbf,
+	0x19, 0xaa, 0x40, 0xfe, 0xd4, 0x0d, 0xe5, 0xe9, 0x55, 0xc1, 0xae, 0xca, 0xa3, 0xb0, 0xa3, 0xd1,
+	0xf4, 0xbd, 0x52, 0x3e, 0xa4, 0xd4, 0x7b, 0x85, 0xbd, 0x09, 0x31, 0x73, 0xca, 0x42, 0x85, 0xe3,
+	0x41, 0x11, 0x07, 0x81, 0xe7, 0xaa, 0x3d, 0x12, 0x77, 0xcc, 0x34, 0x34, 0x90, 0xa1, 0x1d, 0x24,
+	0x86, 0x56, 0x99, 0x19, 0xd7, 0xf0, 0xb4, 0x67, 0x6e, 0xe1, 0xeb, 0xd8, 0x0c, 0xfd, 0x3e, 0x05,
+	0xa5, 0xb8, 0x3b, 0x3a, 0xe1, 0x03, 0x2a, 0xce, 0x31, 0xc1, 0x2c, 0x56, 0x21, 0x59, 0xe9, 0xf8,
+	0xb3, 0xbb, 0x3a, 0x6e, 0x47, 0x28, 0xa6, 0x04, 0x51, 0x11, 0x3c, 0xc5, 0x89, 0x72, 0x86, 0x7e,
+	0x0d, 0x4f, 0xe2, 0x91, 0x78, 0x98, 0x71, 0x9b, 0x71, 0xd1, 0x7f, 0x74, 0x14, 0x6b, 0x32, 0x8a,
+	0x1f, 0xdd, 0x35, 0x8a, 0x06, 0x66, 0xbc, 0x2b, 0x00, 0x54, 0x04, 0x8f, 0xf0, 0x8d, 0x32, 0x86,
+	0x5c, 0xd8, 0x8e, 0x7b, 0x17, 0xa7, 0x5a, 0xbb, 0xcd, 0xdd, 0xa1, 0xde, 0x62, 0x6e, 0x8f, 0x69,
+	0x5f, 0x39, 0xdc, 0xc4, 0xd7, 0x70, 0x19, 0x0a, 0x61, 0x27, 0xee, 0x8a, 0x71, 0xcc, 0x27, 0x6c,
+	0xea, 0x2d, 0x2f, 0xbd, 0x7d, 0x7c, 0x57, 0x6f, 0x5d, 0x69, 0xad, 0x1c, 0xc6, 0x2b, 0x27, 0x2e,
+	0x60, 0xe2, 0x5a, 0x51, 0xd7, 0xd1, 0xd0, 0x25, 0x9e, 0xa3, 0xab, 0x73, 0x5d, 0x36, 0xc9, 0x8d,
+	0x48, 0x74, 0x24, 0x24, 0x91, 0x41, 0xe9, 0x6f, 0x19, 0xc8, 0xcf, 0x37, 0x3f, 0x54, 0x84, 0x65,
+	0xec, 0x38, 0x21, 0x61, 0x4c, 0xf5, 0x56, 0x4d, 0xa2, 0xa7, 0x90, 0x0d, 0xc9, 0x48, 0xac, 0x45,
+	0xdc, 0x14, 0xc5, 0xb4, 0x94, 0x42, 0xc4, 0x12, 0xd7, 0x04, 0x7a, 0x0e, 0xcb, 0x1e, 0xe6, 0xb6,
+	0xe7, 0x8f, 0x8a, 0x19, 0x79, 0x1e, 0xee, 0xeb, 0xe5, 0x89, 0x0b, 0xab, 0xdc, 0xc0, 0xbc, 0xe1,
+	0x8f, 0xcc, 0x25, 0x4f, 0xfe, 0xa2, 0x0f, 0x40, 0xdc, 0x73, 0x1c, 0x8b, 0x23, 0xef, 0xfa, 0xf6,
+	0xd8, 0xf5, 0xe4, 0xdc, 0x91, 0xda, 0x4b, 0x99, 0xeb, 0x5a, 0x50, 0xf7, 0x9b, 0x82, 0x8d, 0xde,
+	0xc2, 0x16, 0x27, 0x1e, 0xd1, 0x33, 0x45, 0x10, 0x92, 0x21, 0x09, 0xc5, 0xe1, 0x96, 0x73, 0x45,
+	0xfe, 0xa0, 0xf2, 0x0e, 0xed, 0xbd, 0x6c, 0xcd, 0x90, 0x3a, 0x53, 0x20, 0x73, 0x93, 0x5f, 0xc7,
+	0x16, 0xe9, 0xf0, 0xc9, 0x08, 0x73, 0xe2, 0x14, 0x97, 0xe4, 0xe5, 0xac, 0xc9, 0x52, 0x08, 0x9b,
+	0xd7, 0x22, 0xa1, 0xff, 0x87, 0x92, 0x65, 0x34, 0x8c, 0x6a, 0xbb, 0xd9, 0xec, 0x59, 0x86, 0xdd,
+	0x31, 0x8d, 0x23, 0xc3, 0x34, 0x5a, 0x55, 0xc3, 0xee, 0xb5, 0xba, 0x1d, 0xa3, 0x5a, 0x3f, 0xaa,
+	0x1b, 0xb5, 0xc2, 0x3d, 0x54, 0x84, 0x07, 0x71, 0x3d, 0xe3, 0xe7, 0xd5, 0x46, 0xaf, 0x66, 0xd4,
+	0x0a, 0x29, 0xb4, 0x0d, 0xf7, 0xe3, 0x92, 0x4a, 0xa3, 0xd1, 0x7e, 0x6d, 0xd4, 0x0a, 0xe9, 0xd2,
+	0x6f, 0x17, 0x00, 0x5d, 0x9d, 0x4c, 0x50, 0x0b, 0x16, 0x44, 0x86, 0xe5, 0x86, 0xe5, 0x0f, 0x3e,
+	0x7d, 0xc7, 0xc1, 0xa6, 0x1c, 0xfd, 0xc8, 0x01, 0x41, 0xe2, 0x20, 0x0b, 0x16, 0x27, 0xbe, 0xcb,
+	0xa3, 0xcb, 0x33, 0x7f, 0xf0, 0xd3, 0x3b, 0x03, 0xd6, 0xfd, 0x21, 0x9d, 0x63, 0xf4, 0x7c, 0x97,
+	0x9b, 0x11, 0x18, 0xea, 0xc1, 0x62, 0x34, 0x37, 0x44, 0xc5, 0xf1, 0xc5, 0x7f, 0x8f, 0x1a, 0xcd,
+	0x12, 0x11, 0x1a, 0x22, 0xf0, 0x91, 0xeb, 0xcb, 0x59, 0x41, 0xce, 0x0f, 0xf6, 0xb9, 0xcb, 0x4f,
+	0xed, 0x89, 0xcf, 0x02, 0x32, 0x70, 0x87, 0x2e, 0x71, 0xec, 0xb9, 0x11, 0x30, 0x8a, 0x60, 0x41,
+	0x6e, 0xe5, 0x87, 0xca, 0x4e, 0x8c, 0x18, 0xaf, 0x5d, 0x7e, 0xda, 0x9b, 0x19, 0x5d, 0xf1, 0x56,
+	0xfa, 0x5d, 0x0a, 0x60, 0x96, 0x28, 0xf4, 0x08, 0xb6, 0x8f, 0xea, 0x0d, 0xcb, 0x30, 0x6d, 0xeb,
+	0xa4, 0x73, 0x79, 0x67, 0x73, 0xb0, 0xda, 0x6b, 0xd5, 0x2d, 0xbb, 0xdd, 0x6a, 0x9c, 0x14, 0x52,
+	0xe8, 0x3e, 0xac, 0x4b, 0xb2, 0xd2, 0xaa, 0xd9, 0x95, 0x66, 0xbb, 0xd7, 0xb2, 0x0a, 0x69, 0xb4,
+	0x03, 0x5b, 0x95, 0x56, 0xab, 0x57, 0x69, 0xd4, 0xbf, 0x31, 0x6a, 0xf6, 0x61, 0xa5, 0x6b, 0x68,
+	0x59, 0x46, 0x80, 0xc7, 0x64, 0x56, 0xdb, 0xaa, 0x34, 0xb4, 0x70, 0xa1, 0xf4, 0xf7, 0x45, 0xc8,
+	0xcd, 0x4d, 0xca, 0xc8, 0x9e, 0x4d, 0xdb, 0x63, 0xc2, 0x4f, 0xa9, 0xa3, 0x0a, 0xe1, 0xc7, 0x77,
+	0x9f, 0xb6, 0x35, 0xd5, 0x94, 0xf6, 0xd3, 0xd9, 0x3b, 0x22, 0xd1, 0x97, 0xb0, 0xc1, 0x38, 0x0e,
+	0xb9, 0x3d, 0xa0, 0x34, 0x74, 0x5c, 0x1f, 0x73, 0xf9, 0x40, 0xb9, 0xf1, 0x88, 0x17, 0xa4, 0x76,
+	0x75, 0xa6, 0x8c, 0x0e, 0x61, 0x9d, 0x87, 0xf8, 0x3b, 0xe2, 0xd9, 0xfa, 0xa9, 0xa6, 0xaa, 0xe0,
+	0xe1, 0x95, 0x2b, 0xb3, 0xa6, 0x14, 0xcc, 0x7c, 0x64, 0xa1, 0x69, 0xf4, 0x29, 0x3c, 0xc4, 0x9e,
+	0x47, 0xcf, 0x6d, 0x77, 0x1c, 0x84, 0x64, 0xe0, 0x32, 0x62, 0xab, 0xd6, 0xa4, 0x1a, 0xc7, 0x8a,
+	0xb9, 0x2d, 0x15, 0xea, 0x5a, 0x5e, 0xd1, 0x62, 0xf4, 0x0b, 0x58, 0x0b, 0x29, 0x76, 0x6c, 0x1e,
+	0xe2, 0xe1, 0xd0, 0x1d, 0xa8, 0xb6, 0xf1, 0xc9, 0x3b, 0x24, 0xc8, 0xa4, 0xd8, 0xb1, 0x22, 0xeb,
+	0x97, 0xf7, 0xcc, 0x6c, 0x38, 0x23, 0xd1, 0x17, 0x90, 0x77, 0x48, 0x80, 0x43, 0x3e, 0x09, 0x89,
+	0x9c, 0x8f, 0x65, 0xab, 0xc8, 0x1e, 0x6c, 0xcd, 0xe5, 0x46, 0x0c, 0x13, 0xed, 0x61, 0x0d, 0x5f,
+	0xbc, 0xbc, 0x67, 0xe6, 0xa6, 0xfa, 0x82, 0x5b, 0xfa, 0xcd, 0x74, 0x47, 0x55, 0xc2, 0x9f, 0xc0,
+	0x8e, 0x3e, 0xfc, 0x4d, 0xc3, 0x7a, 0xd9, 0xae, 0x5d, 0x2a, 0xb0, 0x2c, 0x2c, 0xd7, 0xcc, 0xfa,
+	0xab, 0x7a, 0xeb, 0xab, 0x42, 0x4a, 0x10, 0x96, 0x59, 0x69, 0x75, 0xeb, 0xa2, 0xac, 0xb2, 0xb0,
+	0xfc, 0xba, 0xd2, 0xf8, 0x99, 0x90, 0x64, 0x44, 0x1d, 0x1e, 0xd6, 0xab, 0x27, 0xd5, 0x86, 0x20,
+	0x17, 0xd0, 0x16, 0x20, 0xa5, 0x68, 0x57, 0xaa, 0x55, 0xa3, 0xdb, 0xad, 0x1f, 0x36, 0x8c, 0xc2,
+	0x62, 0xa9, 0x01, 0xd9, 0xd8, 0xea, 0xd0, 0x63, 0x28, 0x9a, 0xed, 0x4a, 0xcd, 0xb6, 0xcc, 0xca,
+	0xd1, 0x51, 0xbd, 0x7a, 0xc9, 0x75, 0x01, 0xd6, 0xb4, 0xe0, 0xc8, 0x34, 0x8c, 0x42, 0x4a, 0x7a,
+	0xe9, 0x75, 0x4f, 0xec, 0x97, 0xed, 0x9e, 0x59, 0x48, 0x1f, 0x16, 0x20, 0xaf, 0xb2, 0x6c, 0xd3,
+	0x40, 0x6c, 0x5c, 0xe9, 0x2b, 0xc8, 0xcf, 0x0f, 0xc2, 0xe8, 0x11, 0xac, 0x4e, 0x07, 0x6a, 0x75,
+	0xcd, 0xac, 0xe8, 0xd9, 0x38, 0xde, 0x72, 0xd3, 0xf3, 0x2d, 0xf7, 0x73, 0xc8, 0xc6, 0x26, 0x49,
+	0xf1, 0x08, 0x90, 0xb3, 0xa4, 0x7e, 0x04, 0x48, 0x22, 0xc1, 0xfc, 0x9f, 0x69, 0xc8, 0xcf, 0x4f,
+	0xce, 0x68, 0x07, 0x56, 0xf4, 0xec, 0xac, 0xe3, 0xd0, 0x34, 0x32, 0x61, 0x61, 0xac, 0x2f, 0xba,
+	0xdb, 0x9a, 0xe0, 0x3c, 0xec, 0x25, 0xb2, 0x49, 0x1d, 0x62, 0x4a, 0xac, 0x78, 0x70, 0x99, 0xf9,
+	0xe0, 0xfe, 0x9c, 0x02, 0x74, 0xd5, 0x0c, 0xbd, 0x0f, 0xbb, 0x46, 0xb3, 0xd3, 0x68, 0x9f, 0x18,
+	0xa6, 0xad, 0x1a, 0x4e, 0xb3, 0x5d, 0xbb, 0xdc, 0x70, 0x44, 0x33, 0x69, 0x34, 0xec, 0x48, 0xb3,
+	0x69, 0xb4, 0x2c, 0xdb, 0x34, 0xaa, 0x6d, 0xb3, 0xd6, 0x2d, 0xa4, 0xd0, 0x7b, 0xf0, 0xb4, 0xda,
+	0x33, 0x4d, 0xc1, 0xbc, 0x2a, 0x8f, 0x5a, 0x54, 0x1a, 0xed, 0xc2, 0xe3, 0x4e, 0xa5, 0x7b, 0xb3,
+	0x46, 0xa6, 0xf4, 0x8f, 0x14, 0xac, 0x5f, 0x7a, 0x1d, 0xa0, 0x2d, 0x58, 0x62, 0x83, 0x53, 0x4a,
+	0xf5, 0x0e, 0x28, 0x0a, 0xbd, 0x0f, 0xf9, 0x68, 0xfe, 0xa0, 0x43, 0x9b, 0xf1, 0x89, 0x73, 0xa1,
+	0x86, 0x85, 0x35, 0xc9, 0x6d, 0x0f, 0xbb, 0x82, 0x87, 0x5e, 0x42, 0xd6, 0x21, 0xa3, 0x90, 0x10,
+	0xf9, 0x9e, 0x95, 0xf9, 0xc8, 0xdf, 0x32, 0x90, 0xd7, 0xa4, 0xbe, 0xbc, 0xa9, 0xc0, 0x99, 0x7e,
+	0x27, 0x5c, 0xd2, 0x7f, 0x4c, 0xc1, 0x83, 0xeb, 0x1e, 0x09, 0xe8, 0x4b, 0xc8, 0x8f, 0x5d, 0x3f,
+	0xf6, 0xec, 0x90, 0x4b, 0x48, 0xec, 0x47, 0xb9, 0xb1, 0xeb, 0xcf, 0x70, 0x24, 0x02, 0x7e, 0x1b,
+	0x47, 0x48, 0xdf, 0x8e, 0x80, 0xdf, 0xce, 0x10, 0x4a, 0xe7, 0xb0, 0x79, 0xed, 0x18, 0x8f, 0x3e,
+	0x02, 0x88, 0xfa, 0xad, 0x78, 0x16, 0xa8, 0xc0, 0x36, 0xe6, 0x9a, 0x89, 0x50, 0x36, 0x57, 0xa5,
+	0x92, 0xf8, 0x44, 0xcf, 0x61, 0x85, 0xf8, 0x4e, 0xa4, 0x9f, 0xbe, 0x49, 0x7f, 0x99, 0xf8, 0x8e,
+	0xf8, 0x28, 0x61, 0x78, 0x92, 0x3c, 0xc6, 0xa3, 0x67, 0x90, 0x9f, 0x7f, 0x23, 0xa8, 0x1d, 0xce,
+	0xd1, 0xb8, 0x72, 0xc2, 0x59, 0xeb, 0xc1, 0xce, 0xcd, 0x33, 0x3a, 0xfa, 0x3f, 0x80, 0xd9, 0xe0,
+	0xaf, 0xa0, 0x57, 0x3d, 0xad, 0x94, 0x00, 0xfb, 0x87, 0x14, 0x3c, 0xb8, 0x6e, 0x08, 0x47, 0x0f,
+	0x41, 0x34, 0x10, 0xf9, 0x97, 0x90, 0x9e, 0x5b, 0xcf, 0x68, 0xbf, 0x85, 0xc7, 0x22, 0x37, 0x48,
+	0x88, 0x42, 0xf2, 0xed, 0xc4, 0x65, 0xae, 0x9c, 0x02, 0x5c, 0x47, 0x55, 0x64, 0xe1, 0x8c, 0xf6,
+	0xcd, 0x99, 0xa0, 0xee, 0xcc, 0xb7, 0xa6, 0xcc, 0xcd, 0xad, 0x69, 0x61, 0x3e, 0xb0, 0xbf, 0xa4,
+	0x60, 0xfb, 0x86, 0x79, 0x1d, 0x79, 0x80, 0xae, 0xbe, 0x04, 0xd4, 0x1d, 0xfd, 0xf9, 0x6d, 0xff,
+	0x1f, 0xc4, 0x40, 0xaf, 0x3e, 0x08, 0xcc, 0x8d, 0x2b, 0x4f, 0x81, 0x84, 0xe4, 0xfd, 0x29, 0x0d,
+	0x30, 0x7b, 0xd2, 0xa2, 0x9f, 0xe8, 0x2a, 0x93, 0x57, 0x56, 0xea, 0x86, 0x17, 0xec, 0xec, 0x0f,
+	0x9c, 0xa8, 0xdc, 0x04, 0x8d, 0x7e, 0x18, 0x95, 0x9b, 0x34, 0x4c, 0xdf, 0x6a, 0x28, 0xea, 0x4e,
+	0x9a, 0x75, 0x00, 0xd4, 0x1b, 0x9c, 0x78, 0x8e, 0x3a, 0xf0, 0x2f, 0xee, 0xf8, 0x02, 0x57, 0x9f,
+	0xc4, 0x73, 0xcc, 0x55, 0xae, 0x3f, 0x4b, 0x75, 0x58, 0x9d, 0xf2, 0x45, 0x17, 0xb4, 0xea, 0x4d,
+	0xc3, 0x3e, 0xaa, 0x1b, 0x8d, 0xcb, 0x37, 0xe6, 0x3a, 0x64, 0xab, 0xa6, 0x51, 0xb1, 0x0c, 0x5b,
+	0xa8, 0x14, 0x52, 0x82, 0xd1, 0xeb, 0xd4, 0xa6, 0x8c, 0xf4, 0xe1, 0xaf, 0xe0, 0xe9, 0x80, 0x8e,
+	0x93, 0xa2, 0x39, 0x5c, 0x53, 0xef, 0xac, 0x8e, 0x58, 0x63, 0x27, 0xf5, 0x4d, 0x45, 0x29, 0x8f,
+	0xa8, 0x87, 0xfd, 0x51, 0x99, 0x86, 0xa3, 0xfd, 0x11, 0xf1, 0x65, 0x06, 0xf6, 0x23, 0x11, 0x0e,
+	0x5c, 0x76, 0xed, 0x3f, 0xda, 0x9f, 0x45, 0xe4, 0x5f, 0xd3, 0x99, 0xaa, 0xd5, 0xed, 0x2f, 0x49,
+	0x9b, 0x1f, 0xfc, 0x27, 0x00, 0x00, 0xff, 0xff, 0x5a, 0x6f, 0x5c, 0x74, 0xbb, 0x17, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/talent/v4beta1/histogram.pb.go b/googleapis/cloud/talent/v4beta1/histogram.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..4623bc9c58174b1e842ca2d0c639861c25ce51ba
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/histogram.pb.go
@@ -0,0 +1,159 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/histogram.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import _ "github.com/golang/protobuf/ptypes/wrappers"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Input Only.
+//
+// The histogram request.
+type HistogramQuery struct {
+	// An expression specifies a histogram request against matching resources
+	// (for example, jobs, profiles) for searches.
+	//
+	// See [SearchJobsRequest.histogram_queries][google.cloud.talent.v4beta1.SearchJobsRequest.histogram_queries] and
+	// [SearchProfilesRequest.histogram_queries][google.cloud.talent.v4beta1.SearchProfilesRequest.histogram_queries] for details about syntax.
+	HistogramQuery       string   `protobuf:"bytes,1,opt,name=histogram_query,json=histogramQuery,proto3" json:"histogram_query,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HistogramQuery) Reset()         { *m = HistogramQuery{} }
+func (m *HistogramQuery) String() string { return proto.CompactTextString(m) }
+func (*HistogramQuery) ProtoMessage()    {}
+func (*HistogramQuery) Descriptor() ([]byte, []int) {
+	return fileDescriptor_histogram_d3709fcfd1e3ebcb, []int{0}
+}
+func (m *HistogramQuery) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HistogramQuery.Unmarshal(m, b)
+}
+func (m *HistogramQuery) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HistogramQuery.Marshal(b, m, deterministic)
+}
+func (dst *HistogramQuery) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HistogramQuery.Merge(dst, src)
+}
+func (m *HistogramQuery) XXX_Size() int {
+	return xxx_messageInfo_HistogramQuery.Size(m)
+}
+func (m *HistogramQuery) XXX_DiscardUnknown() {
+	xxx_messageInfo_HistogramQuery.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HistogramQuery proto.InternalMessageInfo
+
+func (m *HistogramQuery) GetHistogramQuery() string {
+	if m != nil {
+		return m.HistogramQuery
+	}
+	return ""
+}
+
+// Output only.
+//
+// Histogram result that matches [HistogramSpec][] specified in searches.
+type HistogramQueryResult struct {
+	// Requested histogram expression.
+	HistogramQuery string `protobuf:"bytes,1,opt,name=histogram_query,json=histogramQuery,proto3" json:"histogram_query,omitempty"`
+	// A map from the values of the facet associated with distinct values to the
+	// number of matching entries with corresponding value.
+	//
+	// The key format is:
+	// * (for string histogram) string values stored in the field.
+	// * (for named numeric bucket) name specified in `bucket()` function, like
+	//   for `bucket(0, MAX, "non-negative")`, the key will be `non-negative`.
+	// * (for anonymous numeric bucket) range formatted as `<low>-<high>`, for
+	// example, `0-1000`, `MIN-0`, and `0-MAX`.
+	Histogram            map[string]int64 `protobuf:"bytes,2,rep,name=histogram,proto3" json:"histogram,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *HistogramQueryResult) Reset()         { *m = HistogramQueryResult{} }
+func (m *HistogramQueryResult) String() string { return proto.CompactTextString(m) }
+func (*HistogramQueryResult) ProtoMessage()    {}
+func (*HistogramQueryResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_histogram_d3709fcfd1e3ebcb, []int{1}
+}
+func (m *HistogramQueryResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HistogramQueryResult.Unmarshal(m, b)
+}
+func (m *HistogramQueryResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HistogramQueryResult.Marshal(b, m, deterministic)
+}
+func (dst *HistogramQueryResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HistogramQueryResult.Merge(dst, src)
+}
+func (m *HistogramQueryResult) XXX_Size() int {
+	return xxx_messageInfo_HistogramQueryResult.Size(m)
+}
+func (m *HistogramQueryResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_HistogramQueryResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HistogramQueryResult proto.InternalMessageInfo
+
+func (m *HistogramQueryResult) GetHistogramQuery() string {
+	if m != nil {
+		return m.HistogramQuery
+	}
+	return ""
+}
+
+func (m *HistogramQueryResult) GetHistogram() map[string]int64 {
+	if m != nil {
+		return m.Histogram
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*HistogramQuery)(nil), "google.cloud.talent.v4beta1.HistogramQuery")
+	proto.RegisterType((*HistogramQueryResult)(nil), "google.cloud.talent.v4beta1.HistogramQueryResult")
+	proto.RegisterMapType((map[string]int64)(nil), "google.cloud.talent.v4beta1.HistogramQueryResult.HistogramEntry")
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/histogram.proto", fileDescriptor_histogram_d3709fcfd1e3ebcb)
+}
+
+var fileDescriptor_histogram_d3709fcfd1e3ebcb = []byte{
+	// 301 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4e, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x4f, 0xce, 0xc9, 0x2f, 0x4d, 0xd1, 0x2f, 0x49, 0xcc, 0x49, 0xcd, 0x2b, 0xd1,
+	0x2f, 0x33, 0x49, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0xcf, 0xc8, 0x2c, 0x2e, 0xc9, 0x4f, 0x2f, 0x4a,
+	0xcc, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x86, 0x28, 0xd6, 0x03, 0x2b, 0xd6, 0x83,
+	0x28, 0xd6, 0x83, 0x2a, 0x96, 0x92, 0x81, 0x9a, 0x94, 0x58, 0x90, 0xa9, 0x9f, 0x98, 0x97, 0x97,
+	0x5f, 0x92, 0x58, 0x92, 0x99, 0x9f, 0x57, 0x0c, 0xd1, 0x2a, 0x25, 0x07, 0x95, 0x05, 0xf3, 0x92,
+	0x4a, 0xd3, 0xf4, 0xcb, 0x8b, 0x12, 0x0b, 0x0a, 0x52, 0x8b, 0xa0, 0xf2, 0x4a, 0x96, 0x5c, 0x7c,
+	0x1e, 0x30, 0xdb, 0x02, 0x4b, 0x53, 0x8b, 0x2a, 0x85, 0xd4, 0xb9, 0xf8, 0xe1, 0xf6, 0xc7, 0x17,
+	0x82, 0x84, 0x24, 0x18, 0x15, 0x18, 0x35, 0x38, 0x83, 0xf8, 0x32, 0x50, 0x14, 0x2a, 0xdd, 0x65,
+	0xe4, 0x12, 0x41, 0xd5, 0x1b, 0x94, 0x5a, 0x5c, 0x9a, 0x53, 0x42, 0xb4, 0x09, 0x42, 0x71, 0x5c,
+	0x9c, 0x70, 0x11, 0x09, 0x26, 0x05, 0x66, 0x0d, 0x6e, 0x23, 0x07, 0x3d, 0x3c, 0x7e, 0xd5, 0xc3,
+	0x66, 0x1d, 0x42, 0xd0, 0x35, 0xaf, 0xa4, 0xa8, 0x32, 0x08, 0x61, 0xa4, 0x94, 0x0d, 0x92, 0xe7,
+	0xc0, 0x92, 0x42, 0x02, 0x5c, 0xcc, 0xd9, 0xa9, 0x30, 0xe7, 0x80, 0x98, 0x42, 0x22, 0x5c, 0xac,
+	0x65, 0x89, 0x39, 0xa5, 0xa9, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0xcc, 0x41, 0x10, 0x8e, 0x15, 0x93,
+	0x05, 0xa3, 0x53, 0x0d, 0x97, 0x7c, 0x72, 0x7e, 0x2e, 0x3e, 0xf7, 0x38, 0x21, 0x8c, 0x0f, 0x00,
+	0x85, 0x66, 0x00, 0x63, 0x94, 0x23, 0x54, 0x79, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, 0xba, 0x5e, 0x7e,
+	0x51, 0xba, 0x7e, 0x7a, 0x6a, 0x1e, 0x38, 0xac, 0xf5, 0x21, 0x52, 0x89, 0x05, 0x99, 0xc5, 0x58,
+	0xa3, 0xdd, 0x1a, 0xc2, 0x5d, 0xc4, 0xc4, 0xec, 0x1c, 0x12, 0x9c, 0xc4, 0x06, 0xd6, 0x63, 0x0c,
+	0x08, 0x00, 0x00, 0xff, 0xff, 0x45, 0x7d, 0x3b, 0x7e, 0x29, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/talent/v4beta1/job.pb.go b/googleapis/cloud/talent/v4beta1/job.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..3d36457363633f9b0512e5ce6b3927f23fb16fa0
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/job.pb.go
@@ -0,0 +1,793 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/job.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import timestamp "github.com/golang/protobuf/ptypes/timestamp"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// A Job resource represents a job posting (also referred to as a "job listing"
+// or "job requisition"). A job belongs to a [Company][google.cloud.talent.v4beta1.Company], which is the hiring
+// entity responsible for the job.
+type Job struct {
+	// Required during job update.
+	//
+	// The resource name for the job. This is generated by the service when a
+	// job is created.
+	//
+	// The format is "projects/{project_id}/jobs/{job_id}",
+	// for example, "projects/api-test-project/jobs/1234".
+	//
+	// Use of this field in job queries and API calls is preferred over the use of
+	// [requisition_id][google.cloud.talent.v4beta1.Job.requisition_id] since this value is unique.
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Required.
+	//
+	// The resource name of the company listing the job, such as
+	// "projects/api-test-project/companies/foo".
+	CompanyName string `protobuf:"bytes,2,opt,name=company_name,json=companyName,proto3" json:"company_name,omitempty"`
+	// Required.
+	//
+	// The requisition ID, also referred to as the posting ID, is assigned by the
+	// client to identify a job. This field is intended to be used by clients
+	// for client identification and tracking of postings. A job isn't allowed
+	// to be created if there is another job with the same [company][google.cloud.talent.v4beta1.Job.name],
+	// [language_code][google.cloud.talent.v4beta1.Job.language_code] and [requisition_id][google.cloud.talent.v4beta1.Job.requisition_id].
+	//
+	// The maximum number of allowed characters is 255.
+	RequisitionId string `protobuf:"bytes,3,opt,name=requisition_id,json=requisitionId,proto3" json:"requisition_id,omitempty"`
+	// Required.
+	//
+	// The title of the job, such as "Software Engineer"
+	//
+	// The maximum number of allowed characters is 500.
+	Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"`
+	// Required.
+	//
+	// The description of the job, which typically includes a multi-paragraph
+	// description of the company and related information. Separate fields are
+	// provided on the job object for [responsibilities][google.cloud.talent.v4beta1.Job.responsibilities],
+	// [qualifications][google.cloud.talent.v4beta1.Job.qualifications], and other job characteristics. Use of
+	// these separate job fields is recommended.
+	//
+	// This field accepts and sanitizes HTML input, and also accepts
+	// bold, italic, ordered list, and unordered list markup tags.
+	//
+	// The maximum number of allowed characters is 100,000.
+	Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
+	// Optional but strongly recommended for the best service experience.
+	//
+	// Location(s) where the employer is looking to hire for this job posting.
+	//
+	// Specifying the full street address(es) of the hiring location enables
+	// better API results, especially job searches by commute time.
+	//
+	// At most 50 locations are allowed for best search performance. If a job has
+	// more locations, it is suggested to split it into multiple jobs with unique
+	// [requisition_id][google.cloud.talent.v4beta1.Job.requisition_id]s (e.g. 'ReqA' becomes 'ReqA-1', 'ReqA-2', etc.) as
+	// multiple jobs with the same [company][google.cloud.talent.v4beta1.Job.name][], [language_code][] and
+	// [requisition_id][google.cloud.talent.v4beta1.Job.requisition_id] are not allowed. If the original [requisition_id][google.cloud.talent.v4beta1.Job.requisition_id] must
+	// be preserved, a custom field should be used for storage. It is also
+	// suggested to group the locations that close to each other in the same job
+	// for better search experience.
+	//
+	// The maximum number of allowed characters is 500.
+	Addresses []string `protobuf:"bytes,6,rep,name=addresses,proto3" json:"addresses,omitempty"`
+	// Required. At least one field within [ApplicationInfo][google.cloud.talent.v4beta1.Job.ApplicationInfo] must be specified.
+	//
+	// Job application information.
+	ApplicationInfo *Job_ApplicationInfo `protobuf:"bytes,7,opt,name=application_info,json=applicationInfo,proto3" json:"application_info,omitempty"`
+	// Optional.
+	//
+	// The benefits included with the job.
+	JobBenefits []JobBenefit `protobuf:"varint,8,rep,packed,name=job_benefits,json=jobBenefits,proto3,enum=google.cloud.talent.v4beta1.JobBenefit" json:"job_benefits,omitempty"`
+	// Optional.
+	//
+	// Job compensation information.
+	CompensationInfo *CompensationInfo `protobuf:"bytes,9,opt,name=compensation_info,json=compensationInfo,proto3" json:"compensation_info,omitempty"`
+	// Optional.
+	//
+	// A map of fields to hold both filterable and non-filterable custom job
+	// attributes that are not covered by the provided structured fields.
+	//
+	// The keys of the map are strings up to 64 bytes and must match the
+	// pattern: [a-zA-Z][a-zA-Z0-9_]*. For example, key0LikeThis or
+	// KEY_1_LIKE_THIS.
+	//
+	// At most 100 filterable and at most 100 unfilterable keys are supported.
+	// For filterable `string_values`, across all keys at most 200 values are
+	// allowed, with each string no more than 255 characters. For unfilterable
+	// `string_values`, the maximum total size of `string_values` across all keys
+	// is 50KB.
+	CustomAttributes map[string]*CustomAttribute `protobuf:"bytes,10,rep,name=custom_attributes,json=customAttributes,proto3" json:"custom_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	// Optional.
+	//
+	// The desired education degrees for the job, such as Bachelors, Masters.
+	DegreeTypes []DegreeType `protobuf:"varint,11,rep,packed,name=degree_types,json=degreeTypes,proto3,enum=google.cloud.talent.v4beta1.DegreeType" json:"degree_types,omitempty"`
+	// Optional.
+	//
+	// The department or functional area within the company with the open
+	// position.
+	//
+	// The maximum number of allowed characters is 255.
+	Department string `protobuf:"bytes,12,opt,name=department,proto3" json:"department,omitempty"`
+	// Optional.
+	//
+	// The employment type(s) of a job, for example,
+	// [full time][google.cloud.talent.v4beta1.EmploymentType.FULL_TIME] or
+	// [part time][google.cloud.talent.v4beta1.EmploymentType.PART_TIME].
+	EmploymentTypes []EmploymentType `protobuf:"varint,13,rep,packed,name=employment_types,json=employmentTypes,proto3,enum=google.cloud.talent.v4beta1.EmploymentType" json:"employment_types,omitempty"`
+	// Optional.
+	//
+	// A description of bonus, commission, and other compensation
+	// incentives associated with the job not including salary or pay.
+	//
+	// The maximum number of allowed characters is 10,000.
+	Incentives string `protobuf:"bytes,14,opt,name=incentives,proto3" json:"incentives,omitempty"`
+	// Optional.
+	//
+	// The language of the posting. This field is distinct from
+	// any requirements for fluency that are associated with the job.
+	//
+	// Language codes must be in BCP-47 format, such as "en-US" or "sr-Latn".
+	// For more information, see
+	// [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47){:
+	// class="external" target="_blank" }.
+	//
+	// If this field is unspecified and [Job.description][google.cloud.talent.v4beta1.Job.description] is present, detected
+	// language code based on [Job.description][google.cloud.talent.v4beta1.Job.description] is assigned, otherwise
+	// defaults to 'en_US'.
+	LanguageCode string `protobuf:"bytes,15,opt,name=language_code,json=languageCode,proto3" json:"language_code,omitempty"`
+	// Optional.
+	//
+	// The experience level associated with the job, such as "Entry Level".
+	JobLevel JobLevel `protobuf:"varint,16,opt,name=job_level,json=jobLevel,proto3,enum=google.cloud.talent.v4beta1.JobLevel" json:"job_level,omitempty"`
+	// Optional.
+	//
+	// A promotion value of the job, as determined by the client.
+	// The value determines the sort order of the jobs returned when searching for
+	// jobs using the featured jobs search call, with higher promotional values
+	// being returned first and ties being resolved by relevance sort. Only the
+	// jobs with a promotionValue >0 are returned in a FEATURED_JOB_SEARCH.
+	//
+	// Default value is 0, and negative values are treated as 0.
+	PromotionValue int32 `protobuf:"varint,17,opt,name=promotion_value,json=promotionValue,proto3" json:"promotion_value,omitempty"`
+	// Optional.
+	//
+	// A description of the qualifications required to perform the
+	// job. The use of this field is recommended
+	// as an alternative to using the more general [description][google.cloud.talent.v4beta1.Job.description] field.
+	//
+	// This field accepts and sanitizes HTML input, and also accepts
+	// bold, italic, ordered list, and unordered list markup tags.
+	//
+	// The maximum number of allowed characters is 10,000.
+	Qualifications string `protobuf:"bytes,18,opt,name=qualifications,proto3" json:"qualifications,omitempty"`
+	// Optional.
+	//
+	// A description of job responsibilities. The use of this field is
+	// recommended as an alternative to using the more general [description][google.cloud.talent.v4beta1.Job.description]
+	// field.
+	//
+	// This field accepts and sanitizes HTML input, and also accepts
+	// bold, italic, ordered list, and unordered list markup tags.
+	//
+	// The maximum number of allowed characters is 10,000.
+	Responsibilities string `protobuf:"bytes,19,opt,name=responsibilities,proto3" json:"responsibilities,omitempty"`
+	// Optional.
+	//
+	// The job [PostingRegion][google.cloud.talent.v4beta1.PostingRegion] (for example, state, country) throughout which
+	// the job is available. If this field is set, a
+	// [LocationFilter][google.cloud.talent.v4beta1.LocationFilter] in a search query within the job region
+	// finds this job posting if an exact location match isn't specified.
+	// If this field is set to [PostingRegion.NATION][google.cloud.talent.v4beta1.PostingRegion.NATION] or
+	// [PostingRegion.ADMINISTRATIVE_AREA][google.cloud.talent.v4beta1.PostingRegion.ADMINISTRATIVE_AREA], setting job [Job.addresses][google.cloud.talent.v4beta1.Job.addresses]
+	// to the same location level as this field is strongly recommended.
+	PostingRegion PostingRegion `protobuf:"varint,20,opt,name=posting_region,json=postingRegion,proto3,enum=google.cloud.talent.v4beta1.PostingRegion" json:"posting_region,omitempty"`
+	// Optional.
+	//
+	// The visibility of the job.
+	//
+	// Defaults to [Visibility.ACCOUNT_ONLY][google.cloud.talent.v4beta1.Visibility.ACCOUNT_ONLY] if not specified.
+	Visibility Visibility `protobuf:"varint,21,opt,name=visibility,proto3,enum=google.cloud.talent.v4beta1.Visibility" json:"visibility,omitempty"`
+	// Optional.
+	//
+	// The start timestamp of the job in UTC time zone. Typically this field
+	// is used for contracting engagements. Invalid timestamps are ignored.
+	JobStartTime *timestamp.Timestamp `protobuf:"bytes,22,opt,name=job_start_time,json=jobStartTime,proto3" json:"job_start_time,omitempty"`
+	// Optional.
+	//
+	// The end timestamp of the job. Typically this field is used for contracting
+	// engagements. Invalid timestamps are ignored.
+	JobEndTime *timestamp.Timestamp `protobuf:"bytes,23,opt,name=job_end_time,json=jobEndTime,proto3" json:"job_end_time,omitempty"`
+	// Optional.
+	//
+	// The timestamp this job posting was most recently published. The default
+	// value is the time the request arrives at the server. Invalid timestamps are
+	// ignored.
+	PostingPublishTime *timestamp.Timestamp `protobuf:"bytes,24,opt,name=posting_publish_time,json=postingPublishTime,proto3" json:"posting_publish_time,omitempty"`
+	// Optional but strongly recommended for the best service
+	// experience.
+	//
+	// The expiration timestamp of the job. After this timestamp, the
+	// job is marked as expired, and it no longer appears in search results. The
+	// expired job can't be deleted or listed by the [DeleteJob][] and
+	// [ListJobs][] APIs, but it can be retrieved with the [GetJob][] API or
+	// updated with the [UpdateJob][] API. An expired job can be updated and
+	// opened again by using a future expiration timestamp. Updating an expired
+	// job fails if there is another existing open job with same [company][google.cloud.talent.v4beta1.Job.name][],
+	// [language_code][google.cloud.talent.v4beta1.Job.language_code] and [requisition_id][google.cloud.talent.v4beta1.Job.requisition_id].
+	//
+	// The expired jobs are retained in our system for 90 days. However, the
+	// overall expired job count cannot exceed 3 times the maximum of open jobs
+	// count over the past week, otherwise jobs with earlier expire time are
+	// cleaned first. Expired jobs are no longer accessible after they are cleaned
+	// out.
+	//
+	// Invalid timestamps are ignored, and treated as expire time not provided.
+	//
+	// Timestamp before the instant request is made is considered valid, the job
+	// will be treated as expired immediately.
+	//
+	// If this value isn't provided at the time of job creation or is invalid,
+	// the job posting expires after 30 days from the job's creation time. For
+	// example, if the job was created on 2017/01/01 13:00AM UTC with an
+	// unspecified expiration date, the job expires after 2017/01/31 13:00AM UTC.
+	//
+	// If this value isn't provided on job update, it depends on the field masks
+	// set by [UpdateJobRequest.update_mask][google.cloud.talent.v4beta1.UpdateJobRequest.update_mask]. If the field masks include
+	// [expiry_time][], or the masks are empty meaning that every field is
+	// updated, the job posting expires after 30 days from the job's last
+	// update time. Otherwise the expiration date isn't updated.
+	PostingExpireTime *timestamp.Timestamp `protobuf:"bytes,25,opt,name=posting_expire_time,json=postingExpireTime,proto3" json:"posting_expire_time,omitempty"`
+	// Output only. The timestamp when this job posting was created.
+	PostingCreateTime *timestamp.Timestamp `protobuf:"bytes,26,opt,name=posting_create_time,json=postingCreateTime,proto3" json:"posting_create_time,omitempty"`
+	// Output only. The timestamp when this job posting was last updated.
+	PostingUpdateTime *timestamp.Timestamp `protobuf:"bytes,27,opt,name=posting_update_time,json=postingUpdateTime,proto3" json:"posting_update_time,omitempty"`
+	// Output only. Display name of the company listing the job.
+	CompanyDisplayName string `protobuf:"bytes,28,opt,name=company_display_name,json=companyDisplayName,proto3" json:"company_display_name,omitempty"`
+	// Output only. Derived details about the job posting.
+	DerivedInfo *Job_DerivedInfo `protobuf:"bytes,29,opt,name=derived_info,json=derivedInfo,proto3" json:"derived_info,omitempty"`
+	// Optional.
+	//
+	// Options for job processing.
+	ProcessingOptions    *Job_ProcessingOptions `protobuf:"bytes,30,opt,name=processing_options,json=processingOptions,proto3" json:"processing_options,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
+}
+
+func (m *Job) Reset()         { *m = Job{} }
+func (m *Job) String() string { return proto.CompactTextString(m) }
+func (*Job) ProtoMessage()    {}
+func (*Job) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_83eef106eb2e5a90, []int{0}
+}
+func (m *Job) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Job.Unmarshal(m, b)
+}
+func (m *Job) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Job.Marshal(b, m, deterministic)
+}
+func (dst *Job) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Job.Merge(dst, src)
+}
+func (m *Job) XXX_Size() int {
+	return xxx_messageInfo_Job.Size(m)
+}
+func (m *Job) XXX_DiscardUnknown() {
+	xxx_messageInfo_Job.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Job proto.InternalMessageInfo
+
+func (m *Job) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *Job) GetCompanyName() string {
+	if m != nil {
+		return m.CompanyName
+	}
+	return ""
+}
+
+func (m *Job) GetRequisitionId() string {
+	if m != nil {
+		return m.RequisitionId
+	}
+	return ""
+}
+
+func (m *Job) GetTitle() string {
+	if m != nil {
+		return m.Title
+	}
+	return ""
+}
+
+func (m *Job) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+func (m *Job) GetAddresses() []string {
+	if m != nil {
+		return m.Addresses
+	}
+	return nil
+}
+
+func (m *Job) GetApplicationInfo() *Job_ApplicationInfo {
+	if m != nil {
+		return m.ApplicationInfo
+	}
+	return nil
+}
+
+func (m *Job) GetJobBenefits() []JobBenefit {
+	if m != nil {
+		return m.JobBenefits
+	}
+	return nil
+}
+
+func (m *Job) GetCompensationInfo() *CompensationInfo {
+	if m != nil {
+		return m.CompensationInfo
+	}
+	return nil
+}
+
+func (m *Job) GetCustomAttributes() map[string]*CustomAttribute {
+	if m != nil {
+		return m.CustomAttributes
+	}
+	return nil
+}
+
+func (m *Job) GetDegreeTypes() []DegreeType {
+	if m != nil {
+		return m.DegreeTypes
+	}
+	return nil
+}
+
+func (m *Job) GetDepartment() string {
+	if m != nil {
+		return m.Department
+	}
+	return ""
+}
+
+func (m *Job) GetEmploymentTypes() []EmploymentType {
+	if m != nil {
+		return m.EmploymentTypes
+	}
+	return nil
+}
+
+func (m *Job) GetIncentives() string {
+	if m != nil {
+		return m.Incentives
+	}
+	return ""
+}
+
+func (m *Job) GetLanguageCode() string {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return ""
+}
+
+func (m *Job) GetJobLevel() JobLevel {
+	if m != nil {
+		return m.JobLevel
+	}
+	return JobLevel_JOB_LEVEL_UNSPECIFIED
+}
+
+func (m *Job) GetPromotionValue() int32 {
+	if m != nil {
+		return m.PromotionValue
+	}
+	return 0
+}
+
+func (m *Job) GetQualifications() string {
+	if m != nil {
+		return m.Qualifications
+	}
+	return ""
+}
+
+func (m *Job) GetResponsibilities() string {
+	if m != nil {
+		return m.Responsibilities
+	}
+	return ""
+}
+
+func (m *Job) GetPostingRegion() PostingRegion {
+	if m != nil {
+		return m.PostingRegion
+	}
+	return PostingRegion_POSTING_REGION_UNSPECIFIED
+}
+
+func (m *Job) GetVisibility() Visibility {
+	if m != nil {
+		return m.Visibility
+	}
+	return Visibility_VISIBILITY_UNSPECIFIED
+}
+
+func (m *Job) GetJobStartTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.JobStartTime
+	}
+	return nil
+}
+
+func (m *Job) GetJobEndTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.JobEndTime
+	}
+	return nil
+}
+
+func (m *Job) GetPostingPublishTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.PostingPublishTime
+	}
+	return nil
+}
+
+func (m *Job) GetPostingExpireTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.PostingExpireTime
+	}
+	return nil
+}
+
+func (m *Job) GetPostingCreateTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.PostingCreateTime
+	}
+	return nil
+}
+
+func (m *Job) GetPostingUpdateTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.PostingUpdateTime
+	}
+	return nil
+}
+
+func (m *Job) GetCompanyDisplayName() string {
+	if m != nil {
+		return m.CompanyDisplayName
+	}
+	return ""
+}
+
+func (m *Job) GetDerivedInfo() *Job_DerivedInfo {
+	if m != nil {
+		return m.DerivedInfo
+	}
+	return nil
+}
+
+func (m *Job) GetProcessingOptions() *Job_ProcessingOptions {
+	if m != nil {
+		return m.ProcessingOptions
+	}
+	return nil
+}
+
+// Application related details of a job posting.
+type Job_ApplicationInfo struct {
+	// Optional but at least one of [uris][google.cloud.talent.v4beta1.Job.ApplicationInfo.uris],
+	// [emails][google.cloud.talent.v4beta1.Job.ApplicationInfo.emails] or [instruction][google.cloud.talent.v4beta1.Job.ApplicationInfo.instruction] must be
+	// specified.
+	//
+	// Use this field to specify email address(es) to which resumes or
+	// applications can be sent.
+	//
+	// The maximum number of allowed characters for each entry is 255.
+	Emails []string `protobuf:"bytes,1,rep,name=emails,proto3" json:"emails,omitempty"`
+	// Optional but at least one of [uris][google.cloud.talent.v4beta1.Job.ApplicationInfo.uris],
+	// [emails][google.cloud.talent.v4beta1.Job.ApplicationInfo.emails] or [instruction][google.cloud.talent.v4beta1.Job.ApplicationInfo.instruction] must be
+	// specified.
+	//
+	// Use this field to provide instructions, such as "Mail your application
+	// to ...", that a candidate can follow to apply for the job.
+	//
+	// This field accepts and sanitizes HTML input, and also accepts
+	// bold, italic, ordered list, and unordered list markup tags.
+	//
+	// The maximum number of allowed characters is 3,000.
+	Instruction string `protobuf:"bytes,2,opt,name=instruction,proto3" json:"instruction,omitempty"`
+	// Optional but at least one of [uris][google.cloud.talent.v4beta1.Job.ApplicationInfo.uris],
+	// [emails][google.cloud.talent.v4beta1.Job.ApplicationInfo.emails] or [instruction][google.cloud.talent.v4beta1.Job.ApplicationInfo.instruction] must be
+	// specified.
+	//
+	// Use this URI field to direct an applicant to a website, for example to
+	// link to an online application form.
+	//
+	// The maximum number of allowed characters for each entry is 2,000.
+	Uris                 []string `protobuf:"bytes,3,rep,name=uris,proto3" json:"uris,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Job_ApplicationInfo) Reset()         { *m = Job_ApplicationInfo{} }
+func (m *Job_ApplicationInfo) String() string { return proto.CompactTextString(m) }
+func (*Job_ApplicationInfo) ProtoMessage()    {}
+func (*Job_ApplicationInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_83eef106eb2e5a90, []int{0, 0}
+}
+func (m *Job_ApplicationInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Job_ApplicationInfo.Unmarshal(m, b)
+}
+func (m *Job_ApplicationInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Job_ApplicationInfo.Marshal(b, m, deterministic)
+}
+func (dst *Job_ApplicationInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Job_ApplicationInfo.Merge(dst, src)
+}
+func (m *Job_ApplicationInfo) XXX_Size() int {
+	return xxx_messageInfo_Job_ApplicationInfo.Size(m)
+}
+func (m *Job_ApplicationInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_Job_ApplicationInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Job_ApplicationInfo proto.InternalMessageInfo
+
+func (m *Job_ApplicationInfo) GetEmails() []string {
+	if m != nil {
+		return m.Emails
+	}
+	return nil
+}
+
+func (m *Job_ApplicationInfo) GetInstruction() string {
+	if m != nil {
+		return m.Instruction
+	}
+	return ""
+}
+
+func (m *Job_ApplicationInfo) GetUris() []string {
+	if m != nil {
+		return m.Uris
+	}
+	return nil
+}
+
+// Output only.
+//
+// Derived details about the job posting.
+type Job_DerivedInfo struct {
+	// Structured locations of the job, resolved from [Job.addresses][google.cloud.talent.v4beta1.Job.addresses].
+	//
+	// [locations][google.cloud.talent.v4beta1.Job.DerivedInfo.locations] are exactly matched to [Job.addresses][google.cloud.talent.v4beta1.Job.addresses] in the same
+	// order.
+	Locations []*Location `protobuf:"bytes,1,rep,name=locations,proto3" json:"locations,omitempty"`
+	// Job categories derived from [Job.title][google.cloud.talent.v4beta1.Job.title] and [Job.description][google.cloud.talent.v4beta1.Job.description].
+	JobCategories        []JobCategory `protobuf:"varint,3,rep,packed,name=job_categories,json=jobCategories,proto3,enum=google.cloud.talent.v4beta1.JobCategory" json:"job_categories,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *Job_DerivedInfo) Reset()         { *m = Job_DerivedInfo{} }
+func (m *Job_DerivedInfo) String() string { return proto.CompactTextString(m) }
+func (*Job_DerivedInfo) ProtoMessage()    {}
+func (*Job_DerivedInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_83eef106eb2e5a90, []int{0, 1}
+}
+func (m *Job_DerivedInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Job_DerivedInfo.Unmarshal(m, b)
+}
+func (m *Job_DerivedInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Job_DerivedInfo.Marshal(b, m, deterministic)
+}
+func (dst *Job_DerivedInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Job_DerivedInfo.Merge(dst, src)
+}
+func (m *Job_DerivedInfo) XXX_Size() int {
+	return xxx_messageInfo_Job_DerivedInfo.Size(m)
+}
+func (m *Job_DerivedInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_Job_DerivedInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Job_DerivedInfo proto.InternalMessageInfo
+
+func (m *Job_DerivedInfo) GetLocations() []*Location {
+	if m != nil {
+		return m.Locations
+	}
+	return nil
+}
+
+func (m *Job_DerivedInfo) GetJobCategories() []JobCategory {
+	if m != nil {
+		return m.JobCategories
+	}
+	return nil
+}
+
+// Input only.
+//
+// Options for job processing.
+type Job_ProcessingOptions struct {
+	// Optional.
+	//
+	// If set to `true`, the service does not attempt to resolve a
+	// more precise address for the job.
+	DisableStreetAddressResolution bool `protobuf:"varint,1,opt,name=disable_street_address_resolution,json=disableStreetAddressResolution,proto3" json:"disable_street_address_resolution,omitempty"`
+	// Optional.
+	//
+	// Option for job HTML content sanitization. Applied fields are:
+	//
+	// * description
+	// * applicationInfo.instruction
+	// * incentives
+	// * qualifications
+	// * responsibilities
+	//
+	// HTML tags in these fields may be stripped if sanitiazation isn't
+	// disabled.
+	//
+	// Defaults to [HtmlSanitization.SIMPLE_FORMATTING_ONLY][google.cloud.talent.v4beta1.HtmlSanitization.SIMPLE_FORMATTING_ONLY].
+	HtmlSanitization     HtmlSanitization `protobuf:"varint,2,opt,name=html_sanitization,json=htmlSanitization,proto3,enum=google.cloud.talent.v4beta1.HtmlSanitization" json:"html_sanitization,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *Job_ProcessingOptions) Reset()         { *m = Job_ProcessingOptions{} }
+func (m *Job_ProcessingOptions) String() string { return proto.CompactTextString(m) }
+func (*Job_ProcessingOptions) ProtoMessage()    {}
+func (*Job_ProcessingOptions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_83eef106eb2e5a90, []int{0, 2}
+}
+func (m *Job_ProcessingOptions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Job_ProcessingOptions.Unmarshal(m, b)
+}
+func (m *Job_ProcessingOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Job_ProcessingOptions.Marshal(b, m, deterministic)
+}
+func (dst *Job_ProcessingOptions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Job_ProcessingOptions.Merge(dst, src)
+}
+func (m *Job_ProcessingOptions) XXX_Size() int {
+	return xxx_messageInfo_Job_ProcessingOptions.Size(m)
+}
+func (m *Job_ProcessingOptions) XXX_DiscardUnknown() {
+	xxx_messageInfo_Job_ProcessingOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Job_ProcessingOptions proto.InternalMessageInfo
+
+func (m *Job_ProcessingOptions) GetDisableStreetAddressResolution() bool {
+	if m != nil {
+		return m.DisableStreetAddressResolution
+	}
+	return false
+}
+
+func (m *Job_ProcessingOptions) GetHtmlSanitization() HtmlSanitization {
+	if m != nil {
+		return m.HtmlSanitization
+	}
+	return HtmlSanitization_HTML_SANITIZATION_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterType((*Job)(nil), "google.cloud.talent.v4beta1.Job")
+	proto.RegisterMapType((map[string]*CustomAttribute)(nil), "google.cloud.talent.v4beta1.Job.CustomAttributesEntry")
+	proto.RegisterType((*Job_ApplicationInfo)(nil), "google.cloud.talent.v4beta1.Job.ApplicationInfo")
+	proto.RegisterType((*Job_DerivedInfo)(nil), "google.cloud.talent.v4beta1.Job.DerivedInfo")
+	proto.RegisterType((*Job_ProcessingOptions)(nil), "google.cloud.talent.v4beta1.Job.ProcessingOptions")
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/job.proto", fileDescriptor_job_83eef106eb2e5a90)
+}
+
+var fileDescriptor_job_83eef106eb2e5a90 = []byte{
+	// 1080 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0xd1, 0x72, 0x1b, 0x35,
+	0x14, 0x1d, 0xc7, 0x4d, 0xa9, 0xe5, 0xc4, 0xb1, 0xd5, 0xb4, 0x2c, 0x6e, 0x69, 0x5d, 0x98, 0x52,
+	0x4f, 0x01, 0xbb, 0x04, 0x86, 0x61, 0x80, 0x07, 0x12, 0x27, 0x03, 0xc9, 0x64, 0x48, 0xd8, 0x84,
+	0x3c, 0x94, 0x87, 0x1d, 0xed, 0xee, 0x8d, 0x23, 0xb3, 0x2b, 0x29, 0x92, 0xd6, 0x83, 0x79, 0xe0,
+	0x63, 0xe0, 0x2f, 0xf8, 0x12, 0x3e, 0x87, 0xd1, 0xd5, 0xda, 0x71, 0xdd, 0x8e, 0x9d, 0x37, 0xe9,
+	0xe8, 0x9c, 0x73, 0xb5, 0xd7, 0xba, 0xf7, 0x9a, 0x3c, 0x1f, 0x4a, 0x39, 0xcc, 0xa0, 0x9f, 0x64,
+	0xb2, 0x48, 0xfb, 0x96, 0x65, 0x20, 0x6c, 0x7f, 0xfc, 0x55, 0x0c, 0x96, 0x7d, 0xd1, 0x1f, 0xc9,
+	0xb8, 0xa7, 0xb4, 0xb4, 0x92, 0x3e, 0xf2, 0xb4, 0x1e, 0xd2, 0x7a, 0x9e, 0xd6, 0x2b, 0x69, 0xed,
+	0xc7, 0xa5, 0x07, 0x53, 0xbc, 0xcf, 0x84, 0x90, 0x96, 0x59, 0x2e, 0x85, 0xf1, 0xd2, 0x76, 0x77,
+	0x59, 0x84, 0x44, 0xe6, 0xb9, 0x14, 0x25, 0xf3, 0x69, 0xc9, 0xc4, 0x5d, 0x5c, 0x5c, 0xf6, 0x2d,
+	0xcf, 0xc1, 0x58, 0x96, 0x2b, 0x4f, 0xf8, 0xe8, 0x3f, 0x4a, 0xaa, 0x47, 0x32, 0xa6, 0x94, 0xdc,
+	0x11, 0x2c, 0x87, 0xa0, 0xd2, 0xa9, 0x74, 0x6b, 0x21, 0xae, 0xe9, 0x33, 0xb2, 0x91, 0xc8, 0x5c,
+	0x31, 0x31, 0x89, 0xf0, 0x6c, 0x0d, 0xcf, 0xea, 0x25, 0xf6, 0xb3, 0xa3, 0x3c, 0x27, 0x0d, 0x0d,
+	0xd7, 0x05, 0x37, 0xdc, 0xdd, 0x2f, 0xe2, 0x69, 0x50, 0x45, 0xd2, 0xe6, 0x1c, 0x7a, 0x98, 0xd2,
+	0x6d, 0xb2, 0x6e, 0xb9, 0xcd, 0x20, 0xb8, 0x83, 0xa7, 0x7e, 0x43, 0x3b, 0xa4, 0x9e, 0x82, 0x49,
+	0x34, 0x57, 0x8e, 0x16, 0xac, 0x7b, 0xfb, 0x39, 0x88, 0x3e, 0x26, 0x35, 0x96, 0xa6, 0x1a, 0x8c,
+	0x01, 0x13, 0xdc, 0xed, 0x54, 0xbb, 0xb5, 0xf0, 0x06, 0xa0, 0xbf, 0x91, 0x26, 0x53, 0x2a, 0xe3,
+	0x09, 0xf3, 0xc1, 0xc5, 0xa5, 0x0c, 0xde, 0xeb, 0x54, 0xba, 0xf5, 0x9d, 0x57, 0xbd, 0x25, 0xc9,
+	0xed, 0x1d, 0xc9, 0xb8, 0xb7, 0x7b, 0x23, 0x3c, 0x14, 0x97, 0x32, 0xdc, 0x62, 0x6f, 0x02, 0xf4,
+	0x88, 0x6c, 0x8c, 0x64, 0x1c, 0xc5, 0x20, 0xe0, 0x92, 0x5b, 0x13, 0xdc, 0xeb, 0x54, 0xbb, 0x8d,
+	0x9d, 0x17, 0xab, 0x8c, 0xf7, 0x3c, 0x3f, 0xac, 0x8f, 0x66, 0x6b, 0x43, 0x5f, 0x93, 0x96, 0x4b,
+	0x1a, 0x08, 0x33, 0x77, 0xd3, 0x1a, 0xde, 0xf4, 0xf3, 0xa5, 0x86, 0x83, 0x39, 0x15, 0x5e, 0xb3,
+	0x99, 0x2c, 0x20, 0x34, 0x21, 0xad, 0xa4, 0x30, 0x56, 0xe6, 0x11, 0xb3, 0x56, 0xf3, 0xb8, 0xb0,
+	0x60, 0x02, 0xd2, 0xa9, 0x76, 0xeb, 0x3b, 0x5f, 0xaf, 0xcc, 0xc2, 0x00, 0x95, 0xbb, 0x33, 0xe1,
+	0x81, 0xb0, 0x7a, 0x12, 0x36, 0x93, 0x05, 0xd8, 0x25, 0x23, 0x85, 0xa1, 0x06, 0x88, 0xec, 0x44,
+	0x81, 0x09, 0xea, 0xb7, 0x48, 0xc6, 0x3e, 0x0a, 0xce, 0x27, 0x0a, 0xdc, 0x6f, 0x3a, 0x5d, 0x1b,
+	0xfa, 0x84, 0x90, 0x14, 0x14, 0xd3, 0x36, 0x07, 0x61, 0x83, 0x0d, 0xfc, 0xd1, 0xe7, 0x10, 0x7a,
+	0x41, 0x9a, 0x90, 0xab, 0x4c, 0x4e, 0xdc, 0xae, 0x8c, 0xb7, 0x89, 0xf1, 0x3e, 0x5d, 0x1a, 0xef,
+	0x60, 0x26, 0xc2, 0x98, 0x5b, 0xf0, 0xc6, 0x1e, 0xe3, 0x72, 0x91, 0x80, 0xb0, 0x7c, 0x0c, 0x26,
+	0x68, 0xf8, 0xb8, 0x37, 0x08, 0xfd, 0x98, 0x6c, 0x66, 0x4c, 0x0c, 0x0b, 0x36, 0x84, 0x28, 0x91,
+	0x29, 0x04, 0x5b, 0x48, 0xd9, 0x98, 0x82, 0x03, 0x99, 0x02, 0xdd, 0x23, 0x35, 0xf7, 0x2a, 0x32,
+	0x18, 0x43, 0x16, 0x34, 0x3b, 0x95, 0x6e, 0x63, 0xe7, 0xf9, 0xaa, 0x2c, 0x1f, 0x3b, 0x72, 0x78,
+	0x6f, 0x54, 0xae, 0xe8, 0x0b, 0xb2, 0xa5, 0xb4, 0xcc, 0x25, 0x3e, 0x85, 0x31, 0xcb, 0x0a, 0x08,
+	0x5a, 0x9d, 0x4a, 0x77, 0x3d, 0x6c, 0xcc, 0xe0, 0x0b, 0x87, 0xd2, 0x4f, 0x48, 0xe3, 0xba, 0x60,
+	0x19, 0xbf, 0x2c, 0xdf, 0xa5, 0x09, 0x28, 0x5e, 0x69, 0x01, 0xa5, 0x2f, 0x49, 0x53, 0x83, 0x51,
+	0x52, 0x18, 0x1e, 0xf3, 0x8c, 0x5b, 0x0e, 0x26, 0xb8, 0x8f, 0xcc, 0xb7, 0x70, 0xfa, 0x0b, 0x69,
+	0x28, 0x69, 0x2c, 0x17, 0xc3, 0x48, 0xc3, 0xd0, 0x95, 0xdd, 0x36, 0x7e, 0xc5, 0xcb, 0xa5, 0x5f,
+	0x71, 0xea, 0x25, 0x21, 0x2a, 0xc2, 0x4d, 0x35, 0xbf, 0xa5, 0x3f, 0x12, 0x32, 0xe6, 0x65, 0x88,
+	0x49, 0xf0, 0x00, 0xed, 0x96, 0x3f, 0x8d, 0x8b, 0x19, 0x3d, 0x9c, 0x93, 0xd2, 0x1f, 0x48, 0xc3,
+	0x25, 0xd7, 0x58, 0xa6, 0x6d, 0xe4, 0x1a, 0x55, 0xf0, 0x10, 0x6b, 0xa4, 0x3d, 0x35, 0x9b, 0x76,
+	0xb1, 0xde, 0xf9, 0xb4, 0x8b, 0x85, 0xae, 0x48, 0xcf, 0x9c, 0xc0, 0x41, 0xf4, 0x7b, 0x5f, 0xb4,
+	0x20, 0x52, 0xaf, 0x7f, 0x7f, 0xa5, 0x9e, 0x8c, 0x64, 0x7c, 0x20, 0x52, 0x54, 0x1f, 0x93, 0xed,
+	0x69, 0x6e, 0x54, 0x11, 0x67, 0xdc, 0x5c, 0x79, 0x97, 0x60, 0xa5, 0x0b, 0x2d, 0x75, 0xa7, 0x5e,
+	0x86, 0x6e, 0x47, 0xe4, 0xfe, 0xd4, 0x0d, 0xfe, 0x50, 0x5c, 0x83, 0x37, 0xfb, 0x60, 0xa5, 0x59,
+	0xab, 0x94, 0x1d, 0xa0, 0x6a, 0xd1, 0x2b, 0xd1, 0xc0, 0x6c, 0xe9, 0xd5, 0xbe, 0xb5, 0xd7, 0x00,
+	0x55, 0x8b, 0x5e, 0x85, 0x4a, 0x67, 0x5e, 0x8f, 0x6e, 0xed, 0xf5, 0x2b, 0xaa, 0xd0, 0xeb, 0x15,
+	0xd9, 0x9e, 0x4e, 0x88, 0x94, 0x1b, 0x95, 0xb1, 0x72, 0x52, 0x3c, 0xc6, 0xd7, 0x47, 0xcb, 0xb3,
+	0x7d, 0x7f, 0x84, 0x03, 0xe3, 0xc4, 0x75, 0x12, 0xcd, 0xc7, 0x90, 0xfa, 0x2e, 0xf8, 0x21, 0x86,
+	0xfd, 0x6c, 0x65, 0xa7, 0xda, 0xf7, 0x22, 0x6c, 0x82, 0xf5, 0xf4, 0x66, 0x43, 0x19, 0xa1, 0x4a,
+	0xcb, 0x04, 0x8c, 0x71, 0x5f, 0x24, 0x95, 0x2f, 0x94, 0x27, 0x68, 0xbb, 0xb3, 0xd2, 0xf6, 0x74,
+	0x26, 0x3d, 0xf1, 0xca, 0xb0, 0xa5, 0x16, 0xa1, 0x76, 0x44, 0xb6, 0x16, 0xc6, 0x05, 0x7d, 0x48,
+	0xee, 0x42, 0xce, 0x78, 0x66, 0x82, 0x0a, 0x4e, 0xa5, 0x72, 0xe7, 0x46, 0x1a, 0x17, 0xc6, 0xea,
+	0x22, 0xc1, 0x91, 0x56, 0x4e, 0xcc, 0x39, 0xc8, 0x0d, 0xda, 0x42, 0x73, 0x13, 0x54, 0x51, 0x87,
+	0xeb, 0xf6, 0x3f, 0x15, 0x52, 0x9f, 0xfb, 0x40, 0x3a, 0x20, 0xb5, 0x4c, 0x4e, 0x6b, 0xbe, 0x82,
+	0xbd, 0x7c, 0x79, 0x97, 0x39, 0x2e, 0xd9, 0xe1, 0x8d, 0x8e, 0x9e, 0xf8, 0x6a, 0x4a, 0x98, 0x85,
+	0xa1, 0xd4, 0xae, 0x27, 0x54, 0xb1, 0x8b, 0x76, 0x57, 0x25, 0x65, 0xe0, 0x15, 0x93, 0x70, 0x73,
+	0x34, 0xdb, 0x70, 0x30, 0xed, 0x7f, 0x2b, 0xa4, 0xf5, 0x56, 0xbe, 0xe8, 0x21, 0x79, 0x96, 0x72,
+	0xc3, 0xe2, 0x0c, 0x22, 0x63, 0x35, 0x80, 0x8d, 0xca, 0x01, 0x1d, 0x69, 0x30, 0x32, 0x2b, 0x30,
+	0x0f, 0xee, 0x5f, 0xc5, 0xbd, 0xf0, 0x49, 0x49, 0x3c, 0x43, 0xde, 0xae, 0xa7, 0x85, 0x33, 0x96,
+	0x1b, 0x93, 0x57, 0x36, 0xcf, 0x22, 0xc3, 0x04, 0xb7, 0xfc, 0x4f, 0x36, 0x4b, 0x61, 0x63, 0xc5,
+	0x98, 0xfc, 0xc9, 0xe6, 0xd9, 0xd9, 0x9c, 0x28, 0x6c, 0x5e, 0x2d, 0x20, 0xed, 0x6b, 0xf2, 0xe0,
+	0x9d, 0xc3, 0x8e, 0x36, 0x49, 0xf5, 0x77, 0x98, 0x94, 0xff, 0x7b, 0xdc, 0x92, 0xee, 0x91, 0x75,
+	0xdf, 0x95, 0xd7, 0x6e, 0xf1, 0x36, 0x17, 0x4c, 0x43, 0x2f, 0xfd, 0x76, 0xed, 0x9b, 0xca, 0xde,
+	0x5f, 0xe4, 0x69, 0x22, 0xf3, 0x65, 0xea, 0xbd, 0xe6, 0x91, 0x8c, 0x5d, 0x02, 0x0a, 0x9d, 0xc0,
+	0xa9, 0xab, 0xb8, 0xd3, 0xca, 0xeb, 0xdd, 0x52, 0x30, 0x94, 0x6e, 0xf2, 0xf4, 0xa4, 0x1e, 0xf6,
+	0x87, 0x20, 0xb0, 0x1e, 0xfb, 0xfe, 0x88, 0x29, 0x6e, 0xde, 0xf9, 0xdf, 0xef, 0x3b, 0xbf, 0xfd,
+	0x7b, 0xad, 0x3a, 0x38, 0x3f, 0x8b, 0xef, 0xa2, 0xe6, 0xcb, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff,
+	0xef, 0x7f, 0xde, 0x75, 0x90, 0x0a, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/talent/v4beta1/job_service.pb.go b/googleapis/cloud/talent/v4beta1/job_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f0d47f8d9d031d158b217da77b2b6445bd37b3b2
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/job_service.pb.go
@@ -0,0 +1,1900 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/job_service.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import duration "github.com/golang/protobuf/ptypes/duration"
+import empty "github.com/golang/protobuf/ptypes/empty"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import _ "google.golang.org/genproto/googleapis/longrunning"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// An enum that specifies the job attributes that are returned in the
+// [MatchingJob.Job][] in [SearchJobsResponse][google.cloud.talent.v4beta1.SearchJobsResponse] or [Job][google.cloud.talent.v4beta1.Job] objects in
+// [ListJobsResponse][google.cloud.talent.v4beta1.ListJobsResponse].
+type JobView int32
+
+const (
+	// Default value.
+	JobView_JOB_VIEW_UNSPECIFIED JobView = 0
+	// A ID only view of job, with following attributes:
+	// [Job.name][google.cloud.talent.v4beta1.Job.name], [Job.requisition_id][google.cloud.talent.v4beta1.Job.requisition_id], [Job.language_code][google.cloud.talent.v4beta1.Job.language_code].
+	JobView_JOB_VIEW_ID_ONLY JobView = 1
+	// A minimal view of the job, with the following attributes:
+	// [Job.name][google.cloud.talent.v4beta1.Job.name], [Job.requisition_id][google.cloud.talent.v4beta1.Job.requisition_id], [Job.job_title][],
+	// [Job.company_name][google.cloud.talent.v4beta1.Job.company_name], [Job.DerivedInfo.locations][google.cloud.talent.v4beta1.Job.DerivedInfo.locations], [Job.language_code][google.cloud.talent.v4beta1.Job.language_code].
+	JobView_JOB_VIEW_MINIMAL JobView = 2
+	// A small view of the job, with the following attributes in the search
+	// results: [Job.name][google.cloud.talent.v4beta1.Job.name], [Job.requisition_id][google.cloud.talent.v4beta1.Job.requisition_id], [Job.job_title][],
+	// [Job.company_name][google.cloud.talent.v4beta1.Job.company_name], [Job.DerivedInfo.locations][google.cloud.talent.v4beta1.Job.DerivedInfo.locations], [Job.visibility][google.cloud.talent.v4beta1.Job.visibility],
+	// [Job.language_code][google.cloud.talent.v4beta1.Job.language_code], [Job.description][google.cloud.talent.v4beta1.Job.description].
+	JobView_JOB_VIEW_SMALL JobView = 3
+	// All available attributes are included in the search results.
+	JobView_JOB_VIEW_FULL JobView = 4
+)
+
+var JobView_name = map[int32]string{
+	0: "JOB_VIEW_UNSPECIFIED",
+	1: "JOB_VIEW_ID_ONLY",
+	2: "JOB_VIEW_MINIMAL",
+	3: "JOB_VIEW_SMALL",
+	4: "JOB_VIEW_FULL",
+}
+var JobView_value = map[string]int32{
+	"JOB_VIEW_UNSPECIFIED": 0,
+	"JOB_VIEW_ID_ONLY":     1,
+	"JOB_VIEW_MINIMAL":     2,
+	"JOB_VIEW_SMALL":       3,
+	"JOB_VIEW_FULL":        4,
+}
+
+func (x JobView) String() string {
+	return proto.EnumName(JobView_name, int32(x))
+}
+func (JobView) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{0}
+}
+
+// A string-represented enumeration of the job search mode. The service
+// operate differently for different modes of service.
+type SearchJobsRequest_SearchMode int32
+
+const (
+	// The mode of the search method isn't specified.
+	SearchJobsRequest_SEARCH_MODE_UNSPECIFIED SearchJobsRequest_SearchMode = 0
+	// The job search matches against all jobs, and featured jobs
+	// (jobs with promotionValue > 0) are not specially handled.
+	SearchJobsRequest_JOB_SEARCH SearchJobsRequest_SearchMode = 1
+	// The job search matches only against featured jobs (jobs with a
+	// promotionValue > 0). This method doesn't return any jobs having a
+	// promotionValue <= 0. The search results order is determined by the
+	// promotionValue (jobs with a higher promotionValue are returned higher up
+	// in the search results), with relevance being used as a tiebreaker.
+	SearchJobsRequest_FEATURED_JOB_SEARCH SearchJobsRequest_SearchMode = 2
+)
+
+var SearchJobsRequest_SearchMode_name = map[int32]string{
+	0: "SEARCH_MODE_UNSPECIFIED",
+	1: "JOB_SEARCH",
+	2: "FEATURED_JOB_SEARCH",
+}
+var SearchJobsRequest_SearchMode_value = map[string]int32{
+	"SEARCH_MODE_UNSPECIFIED": 0,
+	"JOB_SEARCH":              1,
+	"FEATURED_JOB_SEARCH":     2,
+}
+
+func (x SearchJobsRequest_SearchMode) String() string {
+	return proto.EnumName(SearchJobsRequest_SearchMode_name, int32(x))
+}
+func (SearchJobsRequest_SearchMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{7, 0}
+}
+
+// Controls whether highly similar jobs are returned next to each other in
+// the search results. Jobs are identified as highly similar based on
+// their titles, job categories, and locations. Highly similar results are
+// clustered so that only one representative job of the cluster is
+// displayed to the job seeker higher up in the results, with the other jobs
+// being displayed lower down in the results.
+type SearchJobsRequest_DiversificationLevel int32
+
+const (
+	// The diversification level isn't specified.
+	SearchJobsRequest_DIVERSIFICATION_LEVEL_UNSPECIFIED SearchJobsRequest_DiversificationLevel = 0
+	// Disables diversification. Jobs that would normally be pushed to the last
+	// page would not have their positions altered. This may result in highly
+	// similar jobs appearing in sequence in the search results.
+	SearchJobsRequest_DISABLED SearchJobsRequest_DiversificationLevel = 1
+	// Default diversifying behavior. The result list is ordered so that
+	// highly similar results are pushed to the end of the last page of search
+	// results.
+	SearchJobsRequest_SIMPLE SearchJobsRequest_DiversificationLevel = 2
+)
+
+var SearchJobsRequest_DiversificationLevel_name = map[int32]string{
+	0: "DIVERSIFICATION_LEVEL_UNSPECIFIED",
+	1: "DISABLED",
+	2: "SIMPLE",
+}
+var SearchJobsRequest_DiversificationLevel_value = map[string]int32{
+	"DIVERSIFICATION_LEVEL_UNSPECIFIED": 0,
+	"DISABLED":                          1,
+	"SIMPLE":                            2,
+}
+
+func (x SearchJobsRequest_DiversificationLevel) String() string {
+	return proto.EnumName(SearchJobsRequest_DiversificationLevel_name, int32(x))
+}
+func (SearchJobsRequest_DiversificationLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{7, 1}
+}
+
+// The importance level for [CustomRankingInfo.ranking_expression][google.cloud.talent.v4beta1.SearchJobsRequest.CustomRankingInfo.ranking_expression].
+type SearchJobsRequest_CustomRankingInfo_ImportanceLevel int32
+
+const (
+	// Default value if the importance level isn't specified.
+	SearchJobsRequest_CustomRankingInfo_IMPORTANCE_LEVEL_UNSPECIFIED SearchJobsRequest_CustomRankingInfo_ImportanceLevel = 0
+	// The given ranking expression is of None importance, existing relevance
+	// score (determined by API algorithm) dominates job's final ranking
+	// position.
+	SearchJobsRequest_CustomRankingInfo_NONE SearchJobsRequest_CustomRankingInfo_ImportanceLevel = 1
+	// The given ranking expression is of Low importance in terms of job's
+	// final ranking position compared to existing relevance
+	// score (determined by API algorithm).
+	SearchJobsRequest_CustomRankingInfo_LOW SearchJobsRequest_CustomRankingInfo_ImportanceLevel = 2
+	// The given ranking expression is of Mild importance in terms of job's
+	// final ranking position compared to existing relevance
+	// score (determined by API algorithm).
+	SearchJobsRequest_CustomRankingInfo_MILD SearchJobsRequest_CustomRankingInfo_ImportanceLevel = 3
+	// The given ranking expression is of Medium importance in terms of job's
+	// final ranking position compared to existing relevance
+	// score (determined by API algorithm).
+	SearchJobsRequest_CustomRankingInfo_MEDIUM SearchJobsRequest_CustomRankingInfo_ImportanceLevel = 4
+	// The given ranking expression is of High importance in terms of job's
+	// final ranking position compared to existing relevance
+	// score (determined by API algorithm).
+	SearchJobsRequest_CustomRankingInfo_HIGH SearchJobsRequest_CustomRankingInfo_ImportanceLevel = 5
+	// The given ranking expression is of Extreme importance, and dominates
+	// job's final ranking position with existing relevance
+	// score (determined by API algorithm) ignored.
+	SearchJobsRequest_CustomRankingInfo_EXTREME SearchJobsRequest_CustomRankingInfo_ImportanceLevel = 6
+)
+
+var SearchJobsRequest_CustomRankingInfo_ImportanceLevel_name = map[int32]string{
+	0: "IMPORTANCE_LEVEL_UNSPECIFIED",
+	1: "NONE",
+	2: "LOW",
+	3: "MILD",
+	4: "MEDIUM",
+	5: "HIGH",
+	6: "EXTREME",
+}
+var SearchJobsRequest_CustomRankingInfo_ImportanceLevel_value = map[string]int32{
+	"IMPORTANCE_LEVEL_UNSPECIFIED": 0,
+	"NONE":                         1,
+	"LOW":                          2,
+	"MILD":                         3,
+	"MEDIUM":                       4,
+	"HIGH":                         5,
+	"EXTREME":                      6,
+}
+
+func (x SearchJobsRequest_CustomRankingInfo_ImportanceLevel) String() string {
+	return proto.EnumName(SearchJobsRequest_CustomRankingInfo_ImportanceLevel_name, int32(x))
+}
+func (SearchJobsRequest_CustomRankingInfo_ImportanceLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{7, 0, 0}
+}
+
+// Input only.
+//
+// Create job request.
+type CreateJobRequest struct {
+	// Required.
+	//
+	// The resource name of the project under which the job is created.
+	//
+	// The format is "projects/{project_id}", for example,
+	// "projects/api-test-project".
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Required.
+	//
+	// The Job to be created.
+	Job                  *Job     `protobuf:"bytes,2,opt,name=job,proto3" json:"job,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateJobRequest) Reset()         { *m = CreateJobRequest{} }
+func (m *CreateJobRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateJobRequest) ProtoMessage()    {}
+func (*CreateJobRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{0}
+}
+func (m *CreateJobRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateJobRequest.Unmarshal(m, b)
+}
+func (m *CreateJobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateJobRequest.Marshal(b, m, deterministic)
+}
+func (dst *CreateJobRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateJobRequest.Merge(dst, src)
+}
+func (m *CreateJobRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateJobRequest.Size(m)
+}
+func (m *CreateJobRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateJobRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateJobRequest proto.InternalMessageInfo
+
+func (m *CreateJobRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *CreateJobRequest) GetJob() *Job {
+	if m != nil {
+		return m.Job
+	}
+	return nil
+}
+
+// Input only.
+//
+// Get job request.
+type GetJobRequest struct {
+	// Required.
+	//
+	// The resource name of the job to retrieve.
+	//
+	// The format is "projects/{project_id}/jobs/{job_id}",
+	// for example, "projects/api-test-project/jobs/1234".
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetJobRequest) Reset()         { *m = GetJobRequest{} }
+func (m *GetJobRequest) String() string { return proto.CompactTextString(m) }
+func (*GetJobRequest) ProtoMessage()    {}
+func (*GetJobRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{1}
+}
+func (m *GetJobRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetJobRequest.Unmarshal(m, b)
+}
+func (m *GetJobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetJobRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetJobRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetJobRequest.Merge(dst, src)
+}
+func (m *GetJobRequest) XXX_Size() int {
+	return xxx_messageInfo_GetJobRequest.Size(m)
+}
+func (m *GetJobRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetJobRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetJobRequest proto.InternalMessageInfo
+
+func (m *GetJobRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Input only.
+//
+// Update job request.
+type UpdateJobRequest struct {
+	// Required.
+	//
+	// The Job to be updated.
+	Job *Job `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"`
+	// Optional but strongly recommended to be provided for the best service
+	// experience.
+	//
+	// If [update_mask][google.cloud.talent.v4beta1.UpdateJobRequest.update_mask] is provided, only the specified fields in
+	// [job][google.cloud.talent.v4beta1.UpdateJobRequest.job] are updated. Otherwise all the fields are updated.
+	//
+	// A field mask to restrict the fields that are updated. Only
+	// top level fields of [Job][google.cloud.talent.v4beta1.Job] are supported.
+	UpdateMask           *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UpdateJobRequest) Reset()         { *m = UpdateJobRequest{} }
+func (m *UpdateJobRequest) String() string { return proto.CompactTextString(m) }
+func (*UpdateJobRequest) ProtoMessage()    {}
+func (*UpdateJobRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{2}
+}
+func (m *UpdateJobRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateJobRequest.Unmarshal(m, b)
+}
+func (m *UpdateJobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateJobRequest.Marshal(b, m, deterministic)
+}
+func (dst *UpdateJobRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateJobRequest.Merge(dst, src)
+}
+func (m *UpdateJobRequest) XXX_Size() int {
+	return xxx_messageInfo_UpdateJobRequest.Size(m)
+}
+func (m *UpdateJobRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateJobRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateJobRequest proto.InternalMessageInfo
+
+func (m *UpdateJobRequest) GetJob() *Job {
+	if m != nil {
+		return m.Job
+	}
+	return nil
+}
+
+func (m *UpdateJobRequest) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+// Input only.
+//
+// Delete job request.
+type DeleteJobRequest struct {
+	// Required.
+	//
+	// The resource name of the job to be deleted.
+	//
+	// The format is "projects/{project_id}/jobs/{job_id}",
+	// for example, "projects/api-test-project/jobs/1234".
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeleteJobRequest) Reset()         { *m = DeleteJobRequest{} }
+func (m *DeleteJobRequest) String() string { return proto.CompactTextString(m) }
+func (*DeleteJobRequest) ProtoMessage()    {}
+func (*DeleteJobRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{3}
+}
+func (m *DeleteJobRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteJobRequest.Unmarshal(m, b)
+}
+func (m *DeleteJobRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteJobRequest.Marshal(b, m, deterministic)
+}
+func (dst *DeleteJobRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteJobRequest.Merge(dst, src)
+}
+func (m *DeleteJobRequest) XXX_Size() int {
+	return xxx_messageInfo_DeleteJobRequest.Size(m)
+}
+func (m *DeleteJobRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteJobRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteJobRequest proto.InternalMessageInfo
+
+func (m *DeleteJobRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Input only.
+//
+// Batch delete jobs request.
+type BatchDeleteJobsRequest struct {
+	// Required.
+	//
+	// The resource name of the project under which the job is created.
+	//
+	// The format is "projects/{project_id}", for example,
+	// "projects/api-test-project".
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Required.
+	//
+	// The filter string specifies the jobs to be deleted.
+	//
+	// Supported operator: =, AND
+	//
+	// The fields eligible for filtering are:
+	//
+	// * `companyName` (Required)
+	// * `requisitionId` (Required)
+	//
+	// Sample Query: companyName = "projects/api-test-project/companies/123" AND
+	// requisitionId = "req-1"
+	Filter               string   `protobuf:"bytes,2,opt,name=filter,proto3" json:"filter,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BatchDeleteJobsRequest) Reset()         { *m = BatchDeleteJobsRequest{} }
+func (m *BatchDeleteJobsRequest) String() string { return proto.CompactTextString(m) }
+func (*BatchDeleteJobsRequest) ProtoMessage()    {}
+func (*BatchDeleteJobsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{4}
+}
+func (m *BatchDeleteJobsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BatchDeleteJobsRequest.Unmarshal(m, b)
+}
+func (m *BatchDeleteJobsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BatchDeleteJobsRequest.Marshal(b, m, deterministic)
+}
+func (dst *BatchDeleteJobsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BatchDeleteJobsRequest.Merge(dst, src)
+}
+func (m *BatchDeleteJobsRequest) XXX_Size() int {
+	return xxx_messageInfo_BatchDeleteJobsRequest.Size(m)
+}
+func (m *BatchDeleteJobsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_BatchDeleteJobsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BatchDeleteJobsRequest proto.InternalMessageInfo
+
+func (m *BatchDeleteJobsRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *BatchDeleteJobsRequest) GetFilter() string {
+	if m != nil {
+		return m.Filter
+	}
+	return ""
+}
+
+// Input only.
+//
+// List jobs request.
+type ListJobsRequest struct {
+	// Required.
+	//
+	// The resource name of the project under which the job is created.
+	//
+	// The format is "projects/{project_id}", for example,
+	// "projects/api-test-project".
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Required.
+	//
+	// The filter string specifies the jobs to be enumerated.
+	//
+	// Supported operator: =, AND
+	//
+	// The fields eligible for filtering are:
+	//
+	// * `companyName` (Required)
+	// * `requisitionId` (Optional)
+	//
+	// Sample Query:
+	//
+	// * companyName = "projects/api-test-project/companies/123"
+	// * companyName = "projects/api-test-project/companies/123" AND requisitionId
+	// = "req-1"
+	Filter string `protobuf:"bytes,2,opt,name=filter,proto3" json:"filter,omitempty"`
+	// Optional.
+	//
+	// The starting point of a query result.
+	PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Optional.
+	//
+	// The maximum number of jobs to be returned per page of results.
+	//
+	// If [job_view][google.cloud.talent.v4beta1.ListJobsRequest.job_view] is set to [JobView.JOB_VIEW_ID_ONLY][google.cloud.talent.v4beta1.JobView.JOB_VIEW_ID_ONLY], the maximum allowed
+	// page size is 1000. Otherwise, the maximum allowed page size is 100.
+	//
+	// Default is 100 if empty or a number < 1 is specified.
+	PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	// Optional.
+	//
+	// The desired job attributes returned for jobs in the
+	// search response. Defaults to [JobView.JOB_VIEW_FULL][google.cloud.talent.v4beta1.JobView.JOB_VIEW_FULL] if no value is
+	// specified.
+	JobView              JobView  `protobuf:"varint,5,opt,name=job_view,json=jobView,proto3,enum=google.cloud.talent.v4beta1.JobView" json:"job_view,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListJobsRequest) Reset()         { *m = ListJobsRequest{} }
+func (m *ListJobsRequest) String() string { return proto.CompactTextString(m) }
+func (*ListJobsRequest) ProtoMessage()    {}
+func (*ListJobsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{5}
+}
+func (m *ListJobsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListJobsRequest.Unmarshal(m, b)
+}
+func (m *ListJobsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListJobsRequest.Marshal(b, m, deterministic)
+}
+func (dst *ListJobsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListJobsRequest.Merge(dst, src)
+}
+func (m *ListJobsRequest) XXX_Size() int {
+	return xxx_messageInfo_ListJobsRequest.Size(m)
+}
+func (m *ListJobsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListJobsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListJobsRequest proto.InternalMessageInfo
+
+func (m *ListJobsRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *ListJobsRequest) GetFilter() string {
+	if m != nil {
+		return m.Filter
+	}
+	return ""
+}
+
+func (m *ListJobsRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListJobsRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+func (m *ListJobsRequest) GetJobView() JobView {
+	if m != nil {
+		return m.JobView
+	}
+	return JobView_JOB_VIEW_UNSPECIFIED
+}
+
+// Output only.
+//
+// List jobs response.
+type ListJobsResponse struct {
+	// The Jobs for a given company.
+	//
+	// The maximum number of items returned is based on the limit field
+	// provided in the request.
+	Jobs []*Job `protobuf:"bytes,1,rep,name=jobs,proto3" json:"jobs,omitempty"`
+	// A token to retrieve the next page of results.
+	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	// Additional information for the API invocation, such as the request
+	// tracking id.
+	Metadata             *ResponseMetadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *ListJobsResponse) Reset()         { *m = ListJobsResponse{} }
+func (m *ListJobsResponse) String() string { return proto.CompactTextString(m) }
+func (*ListJobsResponse) ProtoMessage()    {}
+func (*ListJobsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{6}
+}
+func (m *ListJobsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListJobsResponse.Unmarshal(m, b)
+}
+func (m *ListJobsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListJobsResponse.Marshal(b, m, deterministic)
+}
+func (dst *ListJobsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListJobsResponse.Merge(dst, src)
+}
+func (m *ListJobsResponse) XXX_Size() int {
+	return xxx_messageInfo_ListJobsResponse.Size(m)
+}
+func (m *ListJobsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListJobsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListJobsResponse proto.InternalMessageInfo
+
+func (m *ListJobsResponse) GetJobs() []*Job {
+	if m != nil {
+		return m.Jobs
+	}
+	return nil
+}
+
+func (m *ListJobsResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+func (m *ListJobsResponse) GetMetadata() *ResponseMetadata {
+	if m != nil {
+		return m.Metadata
+	}
+	return nil
+}
+
+// Input only.
+//
+// The Request body of the `SearchJobs` call.
+type SearchJobsRequest struct {
+	// Required.
+	//
+	// The resource name of the project to search within.
+	//
+	// The format is "projects/{project_id}", for example,
+	// "projects/api-test-project".
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Optional.
+	//
+	// Mode of a search.
+	//
+	// Defaults to [SearchMode.JOB_SEARCH][google.cloud.talent.v4beta1.SearchJobsRequest.SearchMode.JOB_SEARCH].
+	SearchMode SearchJobsRequest_SearchMode `protobuf:"varint,2,opt,name=search_mode,json=searchMode,proto3,enum=google.cloud.talent.v4beta1.SearchJobsRequest_SearchMode" json:"search_mode,omitempty"`
+	// Required.
+	//
+	// The meta information collected about the job searcher, used to improve the
+	// search quality of the service.. The identifiers, (such as `user_id`) are
+	// provided by users, and must be unique and consistent.
+	RequestMetadata *RequestMetadata `protobuf:"bytes,3,opt,name=request_metadata,json=requestMetadata,proto3" json:"request_metadata,omitempty"`
+	// Optional.
+	//
+	// Query used to search against jobs, such as keyword, location filters, etc.
+	JobQuery *JobQuery `protobuf:"bytes,4,opt,name=job_query,json=jobQuery,proto3" json:"job_query,omitempty"`
+	// Optional.
+	//
+	// Controls whether to broaden the search when it produces sparse results.
+	// Broadened queries append results to the end of the matching results
+	// list.
+	//
+	// Defaults to false.
+	EnableBroadening bool `protobuf:"varint,5,opt,name=enable_broadening,json=enableBroadening,proto3" json:"enable_broadening,omitempty"`
+	// Optional.
+	//
+	// Controls if the search job request requires the return of a precise
+	// count of the first 300 results. Setting this to `true` ensures
+	// consistency in the number of results per page. Best practice is to set this
+	// value to true if a client allows users to jump directly to a
+	// non-sequential search results page.
+	//
+	// Enabling this flag may adversely impact performance.
+	//
+	// Defaults to false.
+	RequirePreciseResultSize bool `protobuf:"varint,6,opt,name=require_precise_result_size,json=requirePreciseResultSize,proto3" json:"require_precise_result_size,omitempty"`
+	// Optional.
+	//
+	// An expression specifies a histogram request against matching jobs.
+	//
+	// Expression syntax is an aggregation function call with histogram facets and
+	// other options.
+	//
+	// Available aggregation function calls are:
+	// * `count(string_histogram_facet)`: Count the number of matching entities,
+	// for each distinct attribute value.
+	// * `count(numeric_histogram_facet, list of buckets)`: Count the number of
+	// matching entities within each bucket.
+	//
+	// Data types:
+	//
+	// * Histogram facet: facet names with format [a-zA-Z][a-zA-Z0-9_]+.
+	// * String: string like "any string with backslash escape for quote(\")."
+	// * Number: whole number and floating point number like 10, -1 and -0.01.
+	// * List: list of elements with comma(,) separator surrounded by square
+	// brackets, for example, [1, 2, 3] and ["one", "two", "three"].
+	//
+	// Built-in constants:
+	//
+	// * MIN (minimum number similar to java Double.MIN_VALUE)
+	// * MAX (maximum number similar to java Double.MAX_VALUE)
+	//
+	// Built-in functions:
+	//
+	// * bucket(start, end[, label]): bucket built-in function creates a bucket
+	// with range of [start, end). Note that the end is exclusive, for example,
+	// bucket(1, MAX, "positive number") or bucket(1, 10).
+	//
+	// Job histogram facets:
+	//
+	// * company_id: histogram by [Job.distributor_company_id][].
+	// * company_display_name: histogram by [Job.company_display_name][google.cloud.talent.v4beta1.Job.company_display_name].
+	// * employment_type: histogram by [Job.employment_types][google.cloud.talent.v4beta1.Job.employment_types], for example,
+	// "FULL_TIME", "PART_TIME".
+	// * company_size: histogram by [CompanySize][google.cloud.talent.v4beta1.CompanySize], for example, "SMALL",
+	// "MEDIUM", "BIG".
+	// * publish_time_in_month: histogram by the [Job.publish_time][] in months.
+	// Must specify list of numeric buckets in spec.
+	// * publish_time_in_year: histogram by the [Job.publish_time][] in years.
+	// Must specify list of numeric buckets in spec.
+	// * degree_type: histogram by the [Job.degree_type][], for example,
+	// "Bachelors", "Masters".
+	// * job_level: histogram by the [Job.job_level][google.cloud.talent.v4beta1.Job.job_level], for example, "Entry
+	// Level".
+	// * country: histogram by the country code of jobs, for example, "US", "FR".
+	// * admin1: histogram by the admin1 code of jobs, which is a global
+	// placeholder referring to the state, province, or the particular term a
+	// country uses to define the geographic structure below the country level,
+	// for example, "CA", "IL".
+	// * city: histogram by a combination of the "city name, admin1 code". For
+	// example,  "Mountain View, CA", "New York, NY".
+	// * admin1_country: histogram by a combination of the "admin1 code, country",
+	// for example, "CA, US", "IL, US".
+	// * city_coordinate: histogram by the city center's GPS coordinates (latitude
+	// and longitude), for example, 37.4038522,-122.0987765. Since the coordinates
+	// of a city center can change, customers may need to refresh them
+	// periodically.
+	// * locale: histogram by the [Job.language_code][google.cloud.talent.v4beta1.Job.language_code], for example, "en-US",
+	// "fr-FR".
+	// * language: histogram by the language subtag of the [Job.language_code][google.cloud.talent.v4beta1.Job.language_code],
+	// for example, "en", "fr".
+	// * category: histogram by the [JobCategory][google.cloud.talent.v4beta1.JobCategory], for example,
+	// "COMPUTER_AND_IT", "HEALTHCARE".
+	// * base_compensation_unit: histogram by the [CompensationUnit][] of base
+	// salary, for example, "WEEKLY", "MONTHLY".
+	// * base_compensation: histogram by the base salary. Must specify list of
+	// numeric buckets to group results by.
+	// * annualized_base_compensation: histogram by the base annualized salary.
+	// Must specify list of numeric buckets to group results by.
+	// * annualized_total_compensation: histogram by the total annualized salary.
+	// Must specify list of numeric buckets to group results by.
+	// * string_custom_attribute: histogram by string [Job.custom_attributes][google.cloud.talent.v4beta1.Job.custom_attributes].
+	// Values can be accessed via square bracket notations like
+	// string_custom_attribute["key1"].
+	// * numeric_custom_attribute: histogram by numeric [Job.custom_attributes][google.cloud.talent.v4beta1.Job.custom_attributes].
+	// Values can be accessed via square bracket notations like
+	// numeric_custom_attribute["key1"]. Must specify list of numeric buckets to
+	// group results by.
+	//
+	// Example expressions:
+	// * count(admin1)
+	// * count(base_compensation, [bucket(1000, 10000), bucket(10000, 100000),
+	// bucket(100000, MAX)])
+	// * count(string_custom_attribute["some-string-custom-attribute"])
+	// * count(numeric_custom_attribute["some-numeric-custom-attribute"],
+	// [bucket(MIN, 0, "negative"), bucket(0, MAX, "non-negative"])
+	HistogramQueries []*HistogramQuery `protobuf:"bytes,7,rep,name=histogram_queries,json=histogramQueries,proto3" json:"histogram_queries,omitempty"`
+	// Optional.
+	//
+	// The desired job attributes returned for jobs in the
+	// search response. Defaults to [JobView.SMALL][] if no value is specified.
+	JobView JobView `protobuf:"varint,8,opt,name=job_view,json=jobView,proto3,enum=google.cloud.talent.v4beta1.JobView" json:"job_view,omitempty"`
+	// Optional.
+	//
+	// An integer that specifies the current offset (that is, starting result
+	// location, amongst the jobs deemed by the API as relevant) in search
+	// results. This field is only considered if [page_token][google.cloud.talent.v4beta1.SearchJobsRequest.page_token] is unset.
+	//
+	// For example, 0 means to  return results starting from the first matching
+	// job, and 10 means to return from the 11th job. This can be used for
+	// pagination, (for example, pageSize = 10 and offset = 10 means to return
+	// from the second page).
+	Offset int32 `protobuf:"varint,9,opt,name=offset,proto3" json:"offset,omitempty"`
+	// Optional.
+	//
+	// A limit on the number of jobs returned in the search results.
+	// Increasing this value above the default value of 10 can increase search
+	// response time. The value can be between 1 and 100.
+	PageSize int32 `protobuf:"varint,10,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	// Optional.
+	//
+	// The token specifying the current offset within
+	// search results. See [SearchJobsResponse.next_page_token][google.cloud.talent.v4beta1.SearchJobsResponse.next_page_token] for
+	// an explanation of how to obtain the next set of query results.
+	PageToken string `protobuf:"bytes,11,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Optional.
+	//
+	// The criteria determining how search results are sorted. Default is
+	// "relevance desc".
+	//
+	// Supported options are:
+	//
+	// * "relevance desc": By relevance descending, as determined by the API
+	// algorithms. Relevance thresholding of query results is only available
+	// with this ordering.
+	// * "posting`_`publish`_`time desc": By [Job.posting_publish_time][google.cloud.talent.v4beta1.Job.posting_publish_time]
+	// descending.
+	// * "posting`_`update`_`time desc": By [Job.posting_update_time][google.cloud.talent.v4beta1.Job.posting_update_time]
+	// descending.
+	// * "title": By [Job.title][google.cloud.talent.v4beta1.Job.title] ascending.
+	// * "title desc": By [Job.title][google.cloud.talent.v4beta1.Job.title] descending.
+	// * "annualized`_`base`_`compensation": By job's
+	// [CompensationInfo.annualized_base_compensation_range][google.cloud.talent.v4beta1.CompensationInfo.annualized_base_compensation_range] ascending. Jobs
+	// whose annualized base compensation is unspecified are put at the end of
+	// search results.
+	// * "annualized`_`base`_`compensation desc": By job's
+	// [CompensationInfo.annualized_base_compensation_range][google.cloud.talent.v4beta1.CompensationInfo.annualized_base_compensation_range] descending. Jobs
+	// whose annualized base compensation is unspecified are put at the end of
+	// search results.
+	// * "annualized`_`total`_`compensation": By job's
+	// [CompensationInfo.annualized_total_compensation_range][google.cloud.talent.v4beta1.CompensationInfo.annualized_total_compensation_range] ascending. Jobs
+	// whose annualized base compensation is unspecified are put at the end of
+	// search results.
+	// * "annualized`_`total`_`compensation desc": By job's
+	// [CompensationInfo.annualized_total_compensation_range][google.cloud.talent.v4beta1.CompensationInfo.annualized_total_compensation_range] descending. Jobs
+	// whose annualized base compensation is unspecified are put at the end of
+	// search results.
+	// * "custom`_`ranking desc": By the relevance score adjusted to the
+	// [SearchJobsRequest.custom_ranking_info.ranking_expression][] with weight
+	// factor assigned by
+	// [SearchJobsRequest.custom_ranking_info.importance_level][] in descending
+	// order.
+	// * "location`_`distance": By the distance between the location on jobs and
+	//  locations specified in the
+	// [SearchJobsRequest.job_query.location_filters][].
+	// When this order is selected, the
+	// [SearchJobsRequest.job_query.location_filters][] must not be empty. When
+	// a job has multiple locations, the location closest to one of the locations
+	// specified in the location filter will be used to calculate location
+	// distance. Distance is calculated by the distance between two lat/long
+	// coordinates, with a precision of 10e-4 degrees (11.3 meters).
+	// Jobs that don't have locations specified will be ranked below jobs having
+	// locations.
+	// Diversification strategy is still applied unless explicitly disabled in
+	// [SearchJobsRequest.diversification_level][google.cloud.talent.v4beta1.SearchJobsRequest.diversification_level].
+	OrderBy string `protobuf:"bytes,12,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"`
+	// Optional.
+	//
+	// Controls whether highly similar jobs are returned next to each other in
+	// the search results. Jobs are identified as highly similar based on
+	// their titles, job categories, and locations. Highly similar results are
+	// clustered so that only one representative job of the cluster is
+	// displayed to the job seeker higher up in the results, with the other jobs
+	// being displayed lower down in the results.
+	//
+	// Defaults to [DiversificationLevel.SIMPLE][google.cloud.talent.v4beta1.SearchJobsRequest.DiversificationLevel.SIMPLE] if no value
+	// is specified.
+	DiversificationLevel SearchJobsRequest_DiversificationLevel `protobuf:"varint,13,opt,name=diversification_level,json=diversificationLevel,proto3,enum=google.cloud.talent.v4beta1.SearchJobsRequest_DiversificationLevel" json:"diversification_level,omitempty"`
+	// Optional.
+	//
+	// Controls over how job documents get ranked on top of existing relevance
+	// score (determined by API algorithm).
+	CustomRankingInfo *SearchJobsRequest_CustomRankingInfo `protobuf:"bytes,14,opt,name=custom_ranking_info,json=customRankingInfo,proto3" json:"custom_ranking_info,omitempty"`
+	// Optional.
+	//
+	// Controls whether to disable exact keyword match on [Job.job_title][],
+	// [Job.description][google.cloud.talent.v4beta1.Job.description], [Job.company_display_name][google.cloud.talent.v4beta1.Job.company_display_name], [Job.locations][0],
+	// [Job.qualifications][google.cloud.talent.v4beta1.Job.qualifications]. When disable keyword match is turned off, a
+	// keyword match returns jobs that do not match given category filters when
+	// there are matching keywords. For example, for the query "program manager,"
+	// a result is returned even if the job posting has the title "software
+	// developer," which doesn't fall into "program manager" ontology, but does
+	// have "program manager" appearing in its description.
+	//
+	// For queries like "cloud" that don't contain title or
+	// location specific ontology, jobs with "cloud" keyword matches are returned
+	// regardless of this flag's value.
+	//
+	// Please use [Company.keyword_searchable_custom_fields][] or
+	// [Company.keyword_searchable_custom_attributes][] if company specific
+	// globally matched custom field/attribute string values is needed. Enabling
+	// keyword match improves recall of subsequent search requests.
+	//
+	// Defaults to false.
+	DisableKeywordMatch  bool     `protobuf:"varint,16,opt,name=disable_keyword_match,json=disableKeywordMatch,proto3" json:"disable_keyword_match,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SearchJobsRequest) Reset()         { *m = SearchJobsRequest{} }
+func (m *SearchJobsRequest) String() string { return proto.CompactTextString(m) }
+func (*SearchJobsRequest) ProtoMessage()    {}
+func (*SearchJobsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{7}
+}
+func (m *SearchJobsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchJobsRequest.Unmarshal(m, b)
+}
+func (m *SearchJobsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchJobsRequest.Marshal(b, m, deterministic)
+}
+func (dst *SearchJobsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchJobsRequest.Merge(dst, src)
+}
+func (m *SearchJobsRequest) XXX_Size() int {
+	return xxx_messageInfo_SearchJobsRequest.Size(m)
+}
+func (m *SearchJobsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchJobsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchJobsRequest proto.InternalMessageInfo
+
+func (m *SearchJobsRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *SearchJobsRequest) GetSearchMode() SearchJobsRequest_SearchMode {
+	if m != nil {
+		return m.SearchMode
+	}
+	return SearchJobsRequest_SEARCH_MODE_UNSPECIFIED
+}
+
+func (m *SearchJobsRequest) GetRequestMetadata() *RequestMetadata {
+	if m != nil {
+		return m.RequestMetadata
+	}
+	return nil
+}
+
+func (m *SearchJobsRequest) GetJobQuery() *JobQuery {
+	if m != nil {
+		return m.JobQuery
+	}
+	return nil
+}
+
+func (m *SearchJobsRequest) GetEnableBroadening() bool {
+	if m != nil {
+		return m.EnableBroadening
+	}
+	return false
+}
+
+func (m *SearchJobsRequest) GetRequirePreciseResultSize() bool {
+	if m != nil {
+		return m.RequirePreciseResultSize
+	}
+	return false
+}
+
+func (m *SearchJobsRequest) GetHistogramQueries() []*HistogramQuery {
+	if m != nil {
+		return m.HistogramQueries
+	}
+	return nil
+}
+
+func (m *SearchJobsRequest) GetJobView() JobView {
+	if m != nil {
+		return m.JobView
+	}
+	return JobView_JOB_VIEW_UNSPECIFIED
+}
+
+func (m *SearchJobsRequest) GetOffset() int32 {
+	if m != nil {
+		return m.Offset
+	}
+	return 0
+}
+
+func (m *SearchJobsRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+func (m *SearchJobsRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *SearchJobsRequest) GetOrderBy() string {
+	if m != nil {
+		return m.OrderBy
+	}
+	return ""
+}
+
+func (m *SearchJobsRequest) GetDiversificationLevel() SearchJobsRequest_DiversificationLevel {
+	if m != nil {
+		return m.DiversificationLevel
+	}
+	return SearchJobsRequest_DIVERSIFICATION_LEVEL_UNSPECIFIED
+}
+
+func (m *SearchJobsRequest) GetCustomRankingInfo() *SearchJobsRequest_CustomRankingInfo {
+	if m != nil {
+		return m.CustomRankingInfo
+	}
+	return nil
+}
+
+func (m *SearchJobsRequest) GetDisableKeywordMatch() bool {
+	if m != nil {
+		return m.DisableKeywordMatch
+	}
+	return false
+}
+
+// Input only.
+//
+// Custom ranking information for [SearchJobsRequest][google.cloud.talent.v4beta1.SearchJobsRequest].
+type SearchJobsRequest_CustomRankingInfo struct {
+	// Required.
+	//
+	// Controls over how important the score of
+	// [CustomRankingInfo.ranking_expression][google.cloud.talent.v4beta1.SearchJobsRequest.CustomRankingInfo.ranking_expression] gets applied to job's final
+	// ranking position.
+	//
+	// An error is thrown if not specified.
+	ImportanceLevel SearchJobsRequest_CustomRankingInfo_ImportanceLevel `protobuf:"varint,1,opt,name=importance_level,json=importanceLevel,proto3,enum=google.cloud.talent.v4beta1.SearchJobsRequest_CustomRankingInfo_ImportanceLevel" json:"importance_level,omitempty"`
+	// Required.
+	//
+	// Controls over how job documents get ranked on top of existing relevance
+	// score (determined by API algorithm). The product of ranking expression
+	// and relevance score is used to determine job's final ranking position.
+	//
+	// The syntax for this expression is a subset of Google SQL syntax.
+	//
+	// Supported operators are: +, -, *, /, where the left and right side of
+	// the operator is either a numeric [Job.custom_attributes][google.cloud.talent.v4beta1.Job.custom_attributes] key,
+	// integer/double value or an expression that can be evaluated to a number.
+	//
+	// Parenthesis are supported to adjust calculation precedence. The
+	// expression must be < 100 characters in length.
+	//
+	// Sample ranking expression
+	// (year + 25) * 0.25 - (freshness / 0.5)
+	RankingExpression    string   `protobuf:"bytes,2,opt,name=ranking_expression,json=rankingExpression,proto3" json:"ranking_expression,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SearchJobsRequest_CustomRankingInfo) Reset()         { *m = SearchJobsRequest_CustomRankingInfo{} }
+func (m *SearchJobsRequest_CustomRankingInfo) String() string { return proto.CompactTextString(m) }
+func (*SearchJobsRequest_CustomRankingInfo) ProtoMessage()    {}
+func (*SearchJobsRequest_CustomRankingInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{7, 0}
+}
+func (m *SearchJobsRequest_CustomRankingInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchJobsRequest_CustomRankingInfo.Unmarshal(m, b)
+}
+func (m *SearchJobsRequest_CustomRankingInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchJobsRequest_CustomRankingInfo.Marshal(b, m, deterministic)
+}
+func (dst *SearchJobsRequest_CustomRankingInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchJobsRequest_CustomRankingInfo.Merge(dst, src)
+}
+func (m *SearchJobsRequest_CustomRankingInfo) XXX_Size() int {
+	return xxx_messageInfo_SearchJobsRequest_CustomRankingInfo.Size(m)
+}
+func (m *SearchJobsRequest_CustomRankingInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchJobsRequest_CustomRankingInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchJobsRequest_CustomRankingInfo proto.InternalMessageInfo
+
+func (m *SearchJobsRequest_CustomRankingInfo) GetImportanceLevel() SearchJobsRequest_CustomRankingInfo_ImportanceLevel {
+	if m != nil {
+		return m.ImportanceLevel
+	}
+	return SearchJobsRequest_CustomRankingInfo_IMPORTANCE_LEVEL_UNSPECIFIED
+}
+
+func (m *SearchJobsRequest_CustomRankingInfo) GetRankingExpression() string {
+	if m != nil {
+		return m.RankingExpression
+	}
+	return ""
+}
+
+// Output only.
+//
+// Response for SearchJob method.
+type SearchJobsResponse struct {
+	// The Job entities that match the specified [SearchJobsRequest][google.cloud.talent.v4beta1.SearchJobsRequest].
+	MatchingJobs []*SearchJobsResponse_MatchingJob `protobuf:"bytes,1,rep,name=matching_jobs,json=matchingJobs,proto3" json:"matching_jobs,omitempty"`
+	// The histogram results that match with specified
+	// [SearchJobsRequest.histogram_queries][google.cloud.talent.v4beta1.SearchJobsRequest.histogram_queries].
+	HistogramQueryResults []*HistogramQueryResult `protobuf:"bytes,2,rep,name=histogram_query_results,json=histogramQueryResults,proto3" json:"histogram_query_results,omitempty"`
+	// The token that specifies the starting position of the next page of results.
+	// This field is empty if there are no more results.
+	NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	// The location filters that the service applied to the specified query. If
+	// any filters are lat-lng based, the [JobLocation.location_type][] is
+	// [JobLocation.LocationType#LOCATION_TYPE_UNSPECIFIED][].
+	LocationFilters []*Location `protobuf:"bytes,4,rep,name=location_filters,json=locationFilters,proto3" json:"location_filters,omitempty"`
+	// An estimation of the number of jobs that match the specified query.
+	//
+	// This number isn't guaranteed to be accurate. For accurate results,
+	// see [enable_precise_result_size][].
+	EstimatedTotalSize int32 `protobuf:"varint,5,opt,name=estimated_total_size,json=estimatedTotalSize,proto3" json:"estimated_total_size,omitempty"`
+	// The precise result count, which is available only if the client set
+	// [enable_precise_result_size][] to `true`, or if the response
+	// is the last page of results. Otherwise, the value is `-1`.
+	TotalSize int32 `protobuf:"varint,6,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"`
+	// Additional information for the API invocation, such as the request
+	// tracking id.
+	Metadata *ResponseMetadata `protobuf:"bytes,7,opt,name=metadata,proto3" json:"metadata,omitempty"`
+	// If query broadening is enabled, we may append additional results from the
+	// broadened query. This number indicates how many of the jobs returned in the
+	// jobs field are from the broadened query. These results are always at the
+	// end of the jobs list. In particular, a value of 0, or if the field isn't
+	// set, all the jobs in the jobs list are from the original
+	// (without broadening) query. If this field is non-zero, subsequent requests
+	// with offset after this result set should contain all broadened results.
+	BroadenedQueryJobsCount int32 `protobuf:"varint,8,opt,name=broadened_query_jobs_count,json=broadenedQueryJobsCount,proto3" json:"broadened_query_jobs_count,omitempty"`
+	// The spell checking result, and correction.
+	SpellCorrection      *SpellingCorrection `protobuf:"bytes,9,opt,name=spell_correction,json=spellCorrection,proto3" json:"spell_correction,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *SearchJobsResponse) Reset()         { *m = SearchJobsResponse{} }
+func (m *SearchJobsResponse) String() string { return proto.CompactTextString(m) }
+func (*SearchJobsResponse) ProtoMessage()    {}
+func (*SearchJobsResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{8}
+}
+func (m *SearchJobsResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchJobsResponse.Unmarshal(m, b)
+}
+func (m *SearchJobsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchJobsResponse.Marshal(b, m, deterministic)
+}
+func (dst *SearchJobsResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchJobsResponse.Merge(dst, src)
+}
+func (m *SearchJobsResponse) XXX_Size() int {
+	return xxx_messageInfo_SearchJobsResponse.Size(m)
+}
+func (m *SearchJobsResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchJobsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchJobsResponse proto.InternalMessageInfo
+
+func (m *SearchJobsResponse) GetMatchingJobs() []*SearchJobsResponse_MatchingJob {
+	if m != nil {
+		return m.MatchingJobs
+	}
+	return nil
+}
+
+func (m *SearchJobsResponse) GetHistogramQueryResults() []*HistogramQueryResult {
+	if m != nil {
+		return m.HistogramQueryResults
+	}
+	return nil
+}
+
+func (m *SearchJobsResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+func (m *SearchJobsResponse) GetLocationFilters() []*Location {
+	if m != nil {
+		return m.LocationFilters
+	}
+	return nil
+}
+
+func (m *SearchJobsResponse) GetEstimatedTotalSize() int32 {
+	if m != nil {
+		return m.EstimatedTotalSize
+	}
+	return 0
+}
+
+func (m *SearchJobsResponse) GetTotalSize() int32 {
+	if m != nil {
+		return m.TotalSize
+	}
+	return 0
+}
+
+func (m *SearchJobsResponse) GetMetadata() *ResponseMetadata {
+	if m != nil {
+		return m.Metadata
+	}
+	return nil
+}
+
+func (m *SearchJobsResponse) GetBroadenedQueryJobsCount() int32 {
+	if m != nil {
+		return m.BroadenedQueryJobsCount
+	}
+	return 0
+}
+
+func (m *SearchJobsResponse) GetSpellCorrection() *SpellingCorrection {
+	if m != nil {
+		return m.SpellCorrection
+	}
+	return nil
+}
+
+// Output only.
+//
+// Job entry with metadata inside [SearchJobsResponse][google.cloud.talent.v4beta1.SearchJobsResponse].
+type SearchJobsResponse_MatchingJob struct {
+	// Job resource that matches the specified [SearchJobsRequest][google.cloud.talent.v4beta1.SearchJobsRequest].
+	Job *Job `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"`
+	// A summary of the job with core information that's displayed on the search
+	// results listing page.
+	JobSummary string `protobuf:"bytes,2,opt,name=job_summary,json=jobSummary,proto3" json:"job_summary,omitempty"`
+	// Contains snippets of text from the [Job.job_title][] field most
+	// closely matching a search query's keywords, if available. The matching
+	// query keywords are enclosed in HTML bold tags.
+	JobTitleSnippet string `protobuf:"bytes,3,opt,name=job_title_snippet,json=jobTitleSnippet,proto3" json:"job_title_snippet,omitempty"`
+	// Contains snippets of text from the [Job.description][google.cloud.talent.v4beta1.Job.description] and similar
+	// fields that most closely match a search query's keywords, if available.
+	// All HTML tags in the original fields are stripped when returned in this
+	// field, and matching query keywords are enclosed in HTML bold tags.
+	SearchTextSnippet string `protobuf:"bytes,4,opt,name=search_text_snippet,json=searchTextSnippet,proto3" json:"search_text_snippet,omitempty"`
+	// Commute information which is generated based on specified
+	//  [CommuteFilter][google.cloud.talent.v4beta1.CommuteFilter].
+	CommuteInfo          *SearchJobsResponse_CommuteInfo `protobuf:"bytes,5,opt,name=commute_info,json=commuteInfo,proto3" json:"commute_info,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *SearchJobsResponse_MatchingJob) Reset()         { *m = SearchJobsResponse_MatchingJob{} }
+func (m *SearchJobsResponse_MatchingJob) String() string { return proto.CompactTextString(m) }
+func (*SearchJobsResponse_MatchingJob) ProtoMessage()    {}
+func (*SearchJobsResponse_MatchingJob) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{8, 0}
+}
+func (m *SearchJobsResponse_MatchingJob) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchJobsResponse_MatchingJob.Unmarshal(m, b)
+}
+func (m *SearchJobsResponse_MatchingJob) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchJobsResponse_MatchingJob.Marshal(b, m, deterministic)
+}
+func (dst *SearchJobsResponse_MatchingJob) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchJobsResponse_MatchingJob.Merge(dst, src)
+}
+func (m *SearchJobsResponse_MatchingJob) XXX_Size() int {
+	return xxx_messageInfo_SearchJobsResponse_MatchingJob.Size(m)
+}
+func (m *SearchJobsResponse_MatchingJob) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchJobsResponse_MatchingJob.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchJobsResponse_MatchingJob proto.InternalMessageInfo
+
+func (m *SearchJobsResponse_MatchingJob) GetJob() *Job {
+	if m != nil {
+		return m.Job
+	}
+	return nil
+}
+
+func (m *SearchJobsResponse_MatchingJob) GetJobSummary() string {
+	if m != nil {
+		return m.JobSummary
+	}
+	return ""
+}
+
+func (m *SearchJobsResponse_MatchingJob) GetJobTitleSnippet() string {
+	if m != nil {
+		return m.JobTitleSnippet
+	}
+	return ""
+}
+
+func (m *SearchJobsResponse_MatchingJob) GetSearchTextSnippet() string {
+	if m != nil {
+		return m.SearchTextSnippet
+	}
+	return ""
+}
+
+func (m *SearchJobsResponse_MatchingJob) GetCommuteInfo() *SearchJobsResponse_CommuteInfo {
+	if m != nil {
+		return m.CommuteInfo
+	}
+	return nil
+}
+
+// Output only.
+//
+// Commute details related to this job.
+type SearchJobsResponse_CommuteInfo struct {
+	// Location used as the destination in the commute calculation.
+	JobLocation *Location `protobuf:"bytes,1,opt,name=job_location,json=jobLocation,proto3" json:"job_location,omitempty"`
+	// The number of seconds required to travel to the job location from the
+	// query location. A duration of 0 seconds indicates that the job isn't
+	// reachable within the requested duration, but was returned as part of an
+	// expanded query.
+	TravelDuration       *duration.Duration `protobuf:"bytes,2,opt,name=travel_duration,json=travelDuration,proto3" json:"travel_duration,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *SearchJobsResponse_CommuteInfo) Reset()         { *m = SearchJobsResponse_CommuteInfo{} }
+func (m *SearchJobsResponse_CommuteInfo) String() string { return proto.CompactTextString(m) }
+func (*SearchJobsResponse_CommuteInfo) ProtoMessage()    {}
+func (*SearchJobsResponse_CommuteInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_job_service_a6470b4363404135, []int{8, 1}
+}
+func (m *SearchJobsResponse_CommuteInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchJobsResponse_CommuteInfo.Unmarshal(m, b)
+}
+func (m *SearchJobsResponse_CommuteInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchJobsResponse_CommuteInfo.Marshal(b, m, deterministic)
+}
+func (dst *SearchJobsResponse_CommuteInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchJobsResponse_CommuteInfo.Merge(dst, src)
+}
+func (m *SearchJobsResponse_CommuteInfo) XXX_Size() int {
+	return xxx_messageInfo_SearchJobsResponse_CommuteInfo.Size(m)
+}
+func (m *SearchJobsResponse_CommuteInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchJobsResponse_CommuteInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchJobsResponse_CommuteInfo proto.InternalMessageInfo
+
+func (m *SearchJobsResponse_CommuteInfo) GetJobLocation() *Location {
+	if m != nil {
+		return m.JobLocation
+	}
+	return nil
+}
+
+func (m *SearchJobsResponse_CommuteInfo) GetTravelDuration() *duration.Duration {
+	if m != nil {
+		return m.TravelDuration
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*CreateJobRequest)(nil), "google.cloud.talent.v4beta1.CreateJobRequest")
+	proto.RegisterType((*GetJobRequest)(nil), "google.cloud.talent.v4beta1.GetJobRequest")
+	proto.RegisterType((*UpdateJobRequest)(nil), "google.cloud.talent.v4beta1.UpdateJobRequest")
+	proto.RegisterType((*DeleteJobRequest)(nil), "google.cloud.talent.v4beta1.DeleteJobRequest")
+	proto.RegisterType((*BatchDeleteJobsRequest)(nil), "google.cloud.talent.v4beta1.BatchDeleteJobsRequest")
+	proto.RegisterType((*ListJobsRequest)(nil), "google.cloud.talent.v4beta1.ListJobsRequest")
+	proto.RegisterType((*ListJobsResponse)(nil), "google.cloud.talent.v4beta1.ListJobsResponse")
+	proto.RegisterType((*SearchJobsRequest)(nil), "google.cloud.talent.v4beta1.SearchJobsRequest")
+	proto.RegisterType((*SearchJobsRequest_CustomRankingInfo)(nil), "google.cloud.talent.v4beta1.SearchJobsRequest.CustomRankingInfo")
+	proto.RegisterType((*SearchJobsResponse)(nil), "google.cloud.talent.v4beta1.SearchJobsResponse")
+	proto.RegisterType((*SearchJobsResponse_MatchingJob)(nil), "google.cloud.talent.v4beta1.SearchJobsResponse.MatchingJob")
+	proto.RegisterType((*SearchJobsResponse_CommuteInfo)(nil), "google.cloud.talent.v4beta1.SearchJobsResponse.CommuteInfo")
+	proto.RegisterEnum("google.cloud.talent.v4beta1.JobView", JobView_name, JobView_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.SearchJobsRequest_SearchMode", SearchJobsRequest_SearchMode_name, SearchJobsRequest_SearchMode_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.SearchJobsRequest_DiversificationLevel", SearchJobsRequest_DiversificationLevel_name, SearchJobsRequest_DiversificationLevel_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.SearchJobsRequest_CustomRankingInfo_ImportanceLevel", SearchJobsRequest_CustomRankingInfo_ImportanceLevel_name, SearchJobsRequest_CustomRankingInfo_ImportanceLevel_value)
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// JobServiceClient is the client API for JobService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type JobServiceClient interface {
+	// Creates a new job.
+	//
+	// Typically, the job becomes searchable within 10 seconds, but it may take
+	// up to 5 minutes.
+	CreateJob(ctx context.Context, in *CreateJobRequest, opts ...grpc.CallOption) (*Job, error)
+	// Retrieves the specified job, whose status is OPEN or recently EXPIRED
+	// within the last 90 days.
+	GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*Job, error)
+	// Updates specified job.
+	//
+	// Typically, updated contents become visible in search results within 10
+	// seconds, but it may take up to 5 minutes.
+	UpdateJob(ctx context.Context, in *UpdateJobRequest, opts ...grpc.CallOption) (*Job, error)
+	// Deletes the specified job.
+	//
+	// Typically, the job becomes unsearchable within 10 seconds, but it may take
+	// up to 5 minutes.
+	DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Lists jobs by filter.
+	ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error)
+	// Deletes a list of [Job][google.cloud.talent.v4beta1.Job]s by filter.
+	BatchDeleteJobs(ctx context.Context, in *BatchDeleteJobsRequest, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Searches for jobs using the provided [SearchJobsRequest][google.cloud.talent.v4beta1.SearchJobsRequest].
+	//
+	// This call constrains the [visibility][google.cloud.talent.v4beta1.Job.visibility] of jobs
+	// present in the database, and only returns jobs that the caller has
+	// permission to search against.
+	SearchJobs(ctx context.Context, in *SearchJobsRequest, opts ...grpc.CallOption) (*SearchJobsResponse, error)
+	// Searches for jobs using the provided [SearchJobsRequest][google.cloud.talent.v4beta1.SearchJobsRequest].
+	//
+	// This API call is intended for the use case of targeting passive job
+	// seekers (for example, job seekers who have signed up to receive email
+	// alerts about potential job opportunities), and has different algorithmic
+	// adjustments that are targeted to passive job seekers.
+	//
+	// This call constrains the [visibility][google.cloud.talent.v4beta1.Job.visibility] of jobs
+	// present in the database, and only returns jobs the caller has
+	// permission to search against.
+	SearchJobsForAlert(ctx context.Context, in *SearchJobsRequest, opts ...grpc.CallOption) (*SearchJobsResponse, error)
+}
+
+type jobServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewJobServiceClient(cc *grpc.ClientConn) JobServiceClient {
+	return &jobServiceClient{cc}
+}
+
+func (c *jobServiceClient) CreateJob(ctx context.Context, in *CreateJobRequest, opts ...grpc.CallOption) (*Job, error) {
+	out := new(Job)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.JobService/CreateJob", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *jobServiceClient) GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*Job, error) {
+	out := new(Job)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.JobService/GetJob", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *jobServiceClient) UpdateJob(ctx context.Context, in *UpdateJobRequest, opts ...grpc.CallOption) (*Job, error) {
+	out := new(Job)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.JobService/UpdateJob", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *jobServiceClient) DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.JobService/DeleteJob", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *jobServiceClient) ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) {
+	out := new(ListJobsResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.JobService/ListJobs", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *jobServiceClient) BatchDeleteJobs(ctx context.Context, in *BatchDeleteJobsRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.JobService/BatchDeleteJobs", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *jobServiceClient) SearchJobs(ctx context.Context, in *SearchJobsRequest, opts ...grpc.CallOption) (*SearchJobsResponse, error) {
+	out := new(SearchJobsResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.JobService/SearchJobs", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *jobServiceClient) SearchJobsForAlert(ctx context.Context, in *SearchJobsRequest, opts ...grpc.CallOption) (*SearchJobsResponse, error) {
+	out := new(SearchJobsResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.JobService/SearchJobsForAlert", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// JobServiceServer is the server API for JobService service.
+type JobServiceServer interface {
+	// Creates a new job.
+	//
+	// Typically, the job becomes searchable within 10 seconds, but it may take
+	// up to 5 minutes.
+	CreateJob(context.Context, *CreateJobRequest) (*Job, error)
+	// Retrieves the specified job, whose status is OPEN or recently EXPIRED
+	// within the last 90 days.
+	GetJob(context.Context, *GetJobRequest) (*Job, error)
+	// Updates specified job.
+	//
+	// Typically, updated contents become visible in search results within 10
+	// seconds, but it may take up to 5 minutes.
+	UpdateJob(context.Context, *UpdateJobRequest) (*Job, error)
+	// Deletes the specified job.
+	//
+	// Typically, the job becomes unsearchable within 10 seconds, but it may take
+	// up to 5 minutes.
+	DeleteJob(context.Context, *DeleteJobRequest) (*empty.Empty, error)
+	// Lists jobs by filter.
+	ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error)
+	// Deletes a list of [Job][google.cloud.talent.v4beta1.Job]s by filter.
+	BatchDeleteJobs(context.Context, *BatchDeleteJobsRequest) (*empty.Empty, error)
+	// Searches for jobs using the provided [SearchJobsRequest][google.cloud.talent.v4beta1.SearchJobsRequest].
+	//
+	// This call constrains the [visibility][google.cloud.talent.v4beta1.Job.visibility] of jobs
+	// present in the database, and only returns jobs that the caller has
+	// permission to search against.
+	SearchJobs(context.Context, *SearchJobsRequest) (*SearchJobsResponse, error)
+	// Searches for jobs using the provided [SearchJobsRequest][google.cloud.talent.v4beta1.SearchJobsRequest].
+	//
+	// This API call is intended for the use case of targeting passive job
+	// seekers (for example, job seekers who have signed up to receive email
+	// alerts about potential job opportunities), and has different algorithmic
+	// adjustments that are targeted to passive job seekers.
+	//
+	// This call constrains the [visibility][google.cloud.talent.v4beta1.Job.visibility] of jobs
+	// present in the database, and only returns jobs the caller has
+	// permission to search against.
+	SearchJobsForAlert(context.Context, *SearchJobsRequest) (*SearchJobsResponse, error)
+}
+
+func RegisterJobServiceServer(s *grpc.Server, srv JobServiceServer) {
+	s.RegisterService(&_JobService_serviceDesc, srv)
+}
+
+func _JobService_CreateJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateJobRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(JobServiceServer).CreateJob(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.JobService/CreateJob",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(JobServiceServer).CreateJob(ctx, req.(*CreateJobRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _JobService_GetJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetJobRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(JobServiceServer).GetJob(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.JobService/GetJob",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(JobServiceServer).GetJob(ctx, req.(*GetJobRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _JobService_UpdateJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateJobRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(JobServiceServer).UpdateJob(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.JobService/UpdateJob",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(JobServiceServer).UpdateJob(ctx, req.(*UpdateJobRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _JobService_DeleteJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteJobRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(JobServiceServer).DeleteJob(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.JobService/DeleteJob",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(JobServiceServer).DeleteJob(ctx, req.(*DeleteJobRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _JobService_ListJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListJobsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(JobServiceServer).ListJobs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.JobService/ListJobs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(JobServiceServer).ListJobs(ctx, req.(*ListJobsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _JobService_BatchDeleteJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(BatchDeleteJobsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(JobServiceServer).BatchDeleteJobs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.JobService/BatchDeleteJobs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(JobServiceServer).BatchDeleteJobs(ctx, req.(*BatchDeleteJobsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _JobService_SearchJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SearchJobsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(JobServiceServer).SearchJobs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.JobService/SearchJobs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(JobServiceServer).SearchJobs(ctx, req.(*SearchJobsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _JobService_SearchJobsForAlert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SearchJobsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(JobServiceServer).SearchJobsForAlert(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.JobService/SearchJobsForAlert",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(JobServiceServer).SearchJobsForAlert(ctx, req.(*SearchJobsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _JobService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.cloud.talent.v4beta1.JobService",
+	HandlerType: (*JobServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "CreateJob",
+			Handler:    _JobService_CreateJob_Handler,
+		},
+		{
+			MethodName: "GetJob",
+			Handler:    _JobService_GetJob_Handler,
+		},
+		{
+			MethodName: "UpdateJob",
+			Handler:    _JobService_UpdateJob_Handler,
+		},
+		{
+			MethodName: "DeleteJob",
+			Handler:    _JobService_DeleteJob_Handler,
+		},
+		{
+			MethodName: "ListJobs",
+			Handler:    _JobService_ListJobs_Handler,
+		},
+		{
+			MethodName: "BatchDeleteJobs",
+			Handler:    _JobService_BatchDeleteJobs_Handler,
+		},
+		{
+			MethodName: "SearchJobs",
+			Handler:    _JobService_SearchJobs_Handler,
+		},
+		{
+			MethodName: "SearchJobsForAlert",
+			Handler:    _JobService_SearchJobsForAlert_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/cloud/talent/v4beta1/job_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/job_service.proto", fileDescriptor_job_service_a6470b4363404135)
+}
+
+var fileDescriptor_job_service_a6470b4363404135 = []byte{
+	// 1805 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x4f, 0x73, 0xdb, 0xc6,
+	0x15, 0x2f, 0xa8, 0x7f, 0xe4, 0xa3, 0x24, 0x42, 0x6b, 0xc5, 0x66, 0xa8, 0xb4, 0x51, 0xe8, 0xda,
+	0x55, 0xe4, 0x88, 0x74, 0xe8, 0x74, 0xa6, 0x8d, 0x26, 0xd3, 0xf2, 0x0f, 0x14, 0xc1, 0x25, 0x25,
+	0x16, 0xa4, 0xec, 0xd4, 0x87, 0xa0, 0x20, 0xb8, 0xa2, 0x20, 0x81, 0x58, 0x04, 0x58, 0xca, 0x56,
+	0x32, 0x3e, 0xb4, 0xbd, 0xf5, 0xd0, 0x43, 0x7b, 0xe9, 0x4c, 0x67, 0x72, 0xc8, 0x47, 0xe8, 0x74,
+	0xa6, 0x87, 0xce, 0xf4, 0x2b, 0xf4, 0xd0, 0xaf, 0xd0, 0x0f, 0xd2, 0xd9, 0x3f, 0x80, 0x48, 0x9a,
+	0x26, 0x29, 0x7b, 0x72, 0xe3, 0xbe, 0xf7, 0xdb, 0xb7, 0xbf, 0xf7, 0x07, 0x6f, 0xf7, 0x11, 0xf6,
+	0x7a, 0x84, 0xf4, 0x5c, 0x5c, 0xb4, 0x5d, 0x32, 0xe8, 0x16, 0xa9, 0xe5, 0x62, 0x8f, 0x16, 0x2f,
+	0x3f, 0xe9, 0x60, 0x6a, 0x7d, 0x5c, 0x3c, 0x27, 0x1d, 0x33, 0xc4, 0xc1, 0xa5, 0x63, 0xe3, 0x82,
+	0x1f, 0x10, 0x4a, 0xd0, 0x96, 0x80, 0x17, 0x38, 0xbc, 0x20, 0xe0, 0x05, 0x09, 0xcf, 0xbd, 0x27,
+	0x6d, 0x59, 0xbe, 0x53, 0xb4, 0x3c, 0x8f, 0x50, 0x8b, 0x3a, 0xc4, 0x0b, 0xc5, 0xd6, 0xdc, 0x4f,
+	0xa6, 0x9d, 0xd4, 0xb1, 0xa8, 0x7d, 0x26, 0x81, 0x3b, 0xd3, 0x80, 0x36, 0xe9, 0xf7, 0x89, 0x27,
+	0x91, 0x1f, 0x4e, 0x43, 0x9e, 0x3a, 0x2e, 0xc5, 0x41, 0x74, 0xfa, 0x83, 0x69, 0xd0, 0x33, 0x27,
+	0xa4, 0xa4, 0x17, 0x58, 0x7d, 0x09, 0xbe, 0x37, 0x23, 0x28, 0x12, 0x76, 0x57, 0xc2, 0x5c, 0xe2,
+	0xf5, 0x82, 0x81, 0xe7, 0x39, 0x5e, 0xaf, 0x48, 0x7c, 0x1c, 0x8c, 0xb8, 0xfd, 0x23, 0x09, 0xe2,
+	0xab, 0xce, 0xe0, 0xb4, 0xd8, 0x1d, 0x08, 0x80, 0xd4, 0x6f, 0x8d, 0xeb, 0x71, 0xdf, 0xa7, 0x57,
+	0x52, 0xb9, 0x3d, 0xae, 0x3c, 0x75, 0xb0, 0xdb, 0x35, 0xfb, 0x56, 0x78, 0x21, 0x10, 0xf9, 0x2f,
+	0x41, 0xad, 0x06, 0xd8, 0xa2, 0xf8, 0x31, 0xe9, 0x18, 0xf8, 0xab, 0x01, 0x0e, 0x29, 0xba, 0x0d,
+	0xcb, 0xbe, 0x15, 0x60, 0x8f, 0x66, 0x95, 0x6d, 0x65, 0x27, 0x65, 0xc8, 0x15, 0x2a, 0xc1, 0xc2,
+	0x39, 0xe9, 0x64, 0x13, 0xdb, 0xca, 0x4e, 0xba, 0xb4, 0x5d, 0x98, 0x92, 0xca, 0x02, 0xb3, 0xc6,
+	0xc0, 0xf9, 0xbb, 0xb0, 0xf6, 0x39, 0xa6, 0x43, 0xc6, 0x11, 0x2c, 0x7a, 0x56, 0x1f, 0x4b, 0xd3,
+	0xfc, 0x77, 0xfe, 0x0f, 0x0a, 0xa8, 0x27, 0x7e, 0x77, 0x94, 0x85, 0x3c, 0x4d, 0xb9, 0xc1, 0x69,
+	0x68, 0x1f, 0xd2, 0x03, 0x6e, 0x87, 0xbb, 0x28, 0x99, 0xe6, 0xa2, 0xbd, 0x51, 0x14, 0x0a, 0x07,
+	0x2c, 0x0a, 0x0d, 0x2b, 0xbc, 0x30, 0x40, 0xc0, 0xd9, 0xef, 0xfc, 0x7d, 0x50, 0x6b, 0xd8, 0xc5,
+	0x23, 0x24, 0x26, 0xb1, 0x3d, 0x84, 0xdb, 0x15, 0x56, 0x6e, 0x31, 0x38, 0x9c, 0x15, 0xb8, 0xdb,
+	0xb0, 0x2c, 0xaa, 0x89, 0x33, 0x4a, 0x19, 0x72, 0x95, 0xff, 0xb7, 0x02, 0x99, 0xba, 0x13, 0xd2,
+	0xb7, 0xb0, 0x81, 0x7e, 0x08, 0xe0, 0x5b, 0x3d, 0x6c, 0x52, 0x72, 0x81, 0xbd, 0xec, 0x02, 0xd7,
+	0xa5, 0x98, 0xa4, 0xcd, 0x04, 0x68, 0x0b, 0xf8, 0xc2, 0x0c, 0x9d, 0xaf, 0x71, 0x76, 0x71, 0x5b,
+	0xd9, 0x59, 0x32, 0x92, 0x4c, 0xd0, 0x72, 0xbe, 0xc6, 0xe8, 0x17, 0x90, 0x64, 0x9f, 0xe8, 0xa5,
+	0x83, 0x9f, 0x67, 0x97, 0xb6, 0x95, 0x9d, 0xf5, 0xd2, 0x8f, 0x67, 0xc5, 0xf9, 0x89, 0x83, 0x9f,
+	0x1b, 0x2b, 0xe7, 0xe2, 0x47, 0xfe, 0x5f, 0x0a, 0xa8, 0xd7, 0x0e, 0x84, 0x3e, 0xf1, 0x42, 0x8c,
+	0x3e, 0x81, 0xc5, 0x73, 0xd2, 0x09, 0xb3, 0xca, 0xf6, 0xc2, 0x5c, 0x99, 0xe3, 0x68, 0x74, 0x1f,
+	0x32, 0x1e, 0x7e, 0x41, 0xcd, 0x21, 0x67, 0x84, 0xa3, 0x6b, 0x4c, 0xdc, 0x8c, 0x1d, 0xd2, 0x21,
+	0xd9, 0xc7, 0xd4, 0xea, 0x5a, 0xd4, 0xe2, 0xde, 0xa6, 0x4b, 0x7b, 0x53, 0x4f, 0x88, 0x68, 0x35,
+	0xe4, 0x26, 0x23, 0xde, 0x9e, 0xff, 0x36, 0x0d, 0x1b, 0x2d, 0x6c, 0x05, 0xf6, 0xd9, 0x3c, 0x09,
+	0x78, 0x06, 0xe9, 0x90, 0x83, 0xcd, 0x3e, 0xe9, 0x62, 0x4e, 0x6e, 0xbd, 0xf4, 0xf3, 0xa9, 0x67,
+	0xbf, 0x62, 0x5c, 0x4a, 0x1a, 0xa4, 0x8b, 0x0d, 0x08, 0xe3, 0xdf, 0xe8, 0x29, 0xa8, 0x81, 0x40,
+	0x98, 0x63, 0xce, 0x7d, 0x34, 0xc3, 0x39, 0xbe, 0x29, 0xf6, 0x2d, 0x13, 0x8c, 0x0a, 0x50, 0x05,
+	0x52, 0x2c, 0xc3, 0x5f, 0x0d, 0x70, 0x70, 0xc5, 0xd3, 0x9f, 0x2e, 0xdd, 0x9b, 0x95, 0x90, 0x5f,
+	0x33, 0xb0, 0xc1, 0x2a, 0x83, 0xff, 0x42, 0x0f, 0x60, 0x03, 0x7b, 0x56, 0xc7, 0xc5, 0x66, 0x27,
+	0x20, 0x56, 0x17, 0xb3, 0x3e, 0xc5, 0xcb, 0x25, 0x69, 0xa8, 0x42, 0x51, 0x89, 0xe5, 0xe8, 0x33,
+	0xd8, 0x62, 0x1c, 0x9c, 0x00, 0x9b, 0x7e, 0x80, 0x6d, 0x27, 0xc4, 0x66, 0x80, 0xc3, 0x81, 0x4b,
+	0x45, 0x05, 0x2e, 0xf3, 0x6d, 0x59, 0x09, 0x69, 0x0a, 0x84, 0xc1, 0x01, 0xbc, 0x22, 0xbf, 0x80,
+	0x8d, 0xb8, 0x99, 0x72, 0xd6, 0x0e, 0x0e, 0xb3, 0x2b, 0xbc, 0x90, 0x1e, 0x4c, 0xe5, 0x7d, 0x18,
+	0xed, 0x12, 0xec, 0xd5, 0xb3, 0xe1, 0xb5, 0x83, 0xc3, 0x91, 0x5a, 0x4f, 0xbe, 0x41, 0xad, 0xb3,
+	0xba, 0x20, 0xa7, 0xa7, 0x21, 0xa6, 0xd9, 0x14, 0xff, 0x8c, 0xe4, 0x6a, 0xf4, 0x0b, 0x83, 0xb1,
+	0x2f, 0x6c, 0xf4, 0xeb, 0x4c, 0x8f, 0x7f, 0x9d, 0xef, 0x42, 0x92, 0x04, 0x5d, 0x1c, 0x98, 0x9d,
+	0xab, 0xec, 0x2a, 0x57, 0xae, 0xf0, 0x75, 0xe5, 0x0a, 0xbd, 0x80, 0x77, 0xba, 0xce, 0x25, 0x0e,
+	0x42, 0xe7, 0xd4, 0xb1, 0x79, 0xc3, 0x37, 0x5d, 0x7c, 0x89, 0xdd, 0xec, 0x1a, 0x27, 0x5f, 0xbd,
+	0x61, 0xe1, 0xd5, 0x46, 0x6d, 0xd5, 0x99, 0x29, 0x63, 0xb3, 0x3b, 0x41, 0x8a, 0x7c, 0xb8, 0x65,
+	0x0f, 0x42, 0x4a, 0xfa, 0x66, 0x60, 0x79, 0x17, 0x8e, 0xd7, 0x33, 0x1d, 0xef, 0x94, 0x64, 0xd7,
+	0x79, 0xf5, 0xfc, 0xf2, 0x86, 0xe7, 0x56, 0xb9, 0x25, 0x43, 0x18, 0xd2, 0xbd, 0x53, 0x62, 0x6c,
+	0xd8, 0xe3, 0x22, 0x54, 0x62, 0xbe, 0x86, 0xbc, 0xc4, 0x2e, 0xf0, 0xd5, 0x73, 0x12, 0xb0, 0x2b,
+	0x8a, 0xda, 0x67, 0x59, 0x95, 0x97, 0xcb, 0x2d, 0xa9, 0xfc, 0x95, 0xd0, 0x35, 0x98, 0x2a, 0xf7,
+	0x8f, 0x04, 0x6c, 0xbc, 0x62, 0x1c, 0x7d, 0x03, 0xaa, 0xd3, 0xf7, 0x49, 0x40, 0x2d, 0xcf, 0xc6,
+	0x32, 0x60, 0x0a, 0x0f, 0x58, 0xf3, 0x6d, 0x89, 0x17, 0xf4, 0xd8, 0xb0, 0x88, 0x5e, 0xc6, 0x19,
+	0x15, 0xa0, 0x3d, 0x40, 0x51, 0xc4, 0xf0, 0x0b, 0x3f, 0xc0, 0x61, 0xe8, 0x90, 0xa8, 0x8b, 0x6d,
+	0x48, 0x8d, 0x16, 0x2b, 0xf2, 0x21, 0x64, 0xc6, 0x4c, 0xa2, 0x6d, 0x78, 0x4f, 0x6f, 0x34, 0x8f,
+	0x8d, 0x76, 0xf9, 0xa8, 0xaa, 0x99, 0x75, 0xed, 0x89, 0x56, 0x37, 0x4f, 0x8e, 0x5a, 0x4d, 0xad,
+	0xaa, 0x1f, 0xe8, 0x5a, 0x4d, 0xfd, 0x01, 0x4a, 0xc2, 0xe2, 0xd1, 0xf1, 0x91, 0xa6, 0x2a, 0x68,
+	0x05, 0x16, 0xea, 0xc7, 0x4f, 0xd5, 0x04, 0x13, 0x35, 0xf4, 0x7a, 0x4d, 0x5d, 0x40, 0x00, 0xcb,
+	0x0d, 0xad, 0xa6, 0x9f, 0x34, 0xd4, 0x45, 0x26, 0x3d, 0xd4, 0x3f, 0x3f, 0x54, 0x97, 0x50, 0x1a,
+	0x56, 0xb4, 0x2f, 0xda, 0x86, 0xd6, 0xd0, 0xd4, 0xe5, 0xbc, 0x01, 0x70, 0xdd, 0x83, 0xd0, 0x16,
+	0xdc, 0x69, 0x69, 0x65, 0xa3, 0x7a, 0x68, 0x36, 0x8e, 0x6b, 0xda, 0xd8, 0x51, 0xeb, 0x00, 0x8f,
+	0x8f, 0x2b, 0xa6, 0x00, 0xa8, 0x0a, 0xba, 0x03, 0xb7, 0x0e, 0xb4, 0x72, 0xfb, 0xc4, 0xd0, 0x6a,
+	0xe6, 0x90, 0x22, 0x91, 0x7f, 0x0a, 0x9b, 0x93, 0xca, 0x0b, 0xdd, 0x83, 0x0f, 0x6a, 0xfa, 0x13,
+	0xcd, 0x68, 0xe9, 0x07, 0x7a, 0xb5, 0xdc, 0xd6, 0x8f, 0x8f, 0x26, 0xba, 0xb4, 0x0a, 0xc9, 0x9a,
+	0xde, 0x2a, 0x57, 0xea, 0x5a, 0x4d, 0x55, 0x98, 0x0f, 0x2d, 0xbd, 0xd1, 0xac, 0x6b, 0x6a, 0x22,
+	0xff, 0x9f, 0x24, 0xa0, 0xe1, 0xcc, 0xc8, 0x0b, 0xe6, 0xb7, 0xb0, 0xc6, 0xcb, 0x83, 0x05, 0x7a,
+	0xe8, 0xa6, 0xd9, 0x9f, 0x3b, 0xc3, 0xc2, 0x4e, 0xa1, 0x21, 0x8d, 0xb0, 0x4b, 0x68, 0xb5, 0x7f,
+	0xbd, 0x08, 0x91, 0x03, 0x77, 0x46, 0xdb, 0xd0, 0x95, 0xec, 0x62, 0x61, 0x36, 0xc1, 0xcf, 0xfa,
+	0xf8, 0x26, 0xcd, 0x88, 0xef, 0x34, 0xde, 0x39, 0x9b, 0x20, 0x9d, 0x78, 0xef, 0x2d, 0x4c, 0xba,
+	0xf7, 0x9a, 0xa0, 0xba, 0x44, 0x36, 0x02, 0xf9, 0x34, 0xcd, 0x2e, 0x72, 0x2e, 0xd3, 0x1b, 0x7a,
+	0x5d, 0x6e, 0x32, 0x32, 0xd1, 0xf6, 0x03, 0xb1, 0x1b, 0x3d, 0x84, 0x4d, 0x1c, 0x52, 0xa7, 0x6f,
+	0x51, 0xdc, 0x35, 0x29, 0xa1, 0x96, 0x2b, 0x7a, 0xd8, 0x12, 0xef, 0x61, 0x28, 0xd6, 0xb5, 0x99,
+	0x2a, 0xea, 0x66, 0x43, 0xb8, 0x65, 0x8e, 0x4b, 0xd1, 0x58, 0x3d, 0x7c, 0x35, 0xaf, 0xbc, 0xd5,
+	0xd5, 0x8c, 0xf6, 0x21, 0x27, 0x2f, 0x1b, 0xdc, 0x95, 0x09, 0x60, 0x99, 0x36, 0x6d, 0x32, 0xf0,
+	0x28, 0xef, 0xdf, 0x4b, 0xc6, 0x9d, 0x18, 0xc1, 0x03, 0xca, 0x12, 0x57, 0x65, 0x6a, 0xf4, 0x0c,
+	0xd4, 0xd0, 0xc7, 0xae, 0x6b, 0xda, 0x24, 0x08, 0xb0, 0xcd, 0x7c, 0xe6, 0x3d, 0x3b, 0x5d, 0x2a,
+	0x4e, 0x2f, 0x11, 0xb6, 0xc9, 0xf1, 0x7a, 0xd5, 0x78, 0x9b, 0x91, 0xe1, 0x86, 0xae, 0x05, 0xb9,
+	0x6f, 0x13, 0x90, 0x1e, 0xaa, 0x9b, 0x37, 0x7a, 0xa5, 0xbe, 0x0f, 0x69, 0x3e, 0x19, 0x0d, 0xfa,
+	0x7d, 0x2b, 0xb8, 0x92, 0x0d, 0x02, 0xce, 0x49, 0xa7, 0x25, 0x24, 0x68, 0x17, 0x36, 0x18, 0x80,
+	0x3a, 0xd4, 0xc5, 0x66, 0xe8, 0x39, 0xbe, 0x8f, 0xa9, 0xac, 0x8a, 0xcc, 0x39, 0xe9, 0xb4, 0x99,
+	0xbc, 0x25, 0xc4, 0xa8, 0x00, 0xb7, 0xe4, 0xb3, 0x84, 0xb2, 0x32, 0x8a, 0xd0, 0x8b, 0xa2, 0xeb,
+	0x08, 0x55, 0x1b, 0xbf, 0xa0, 0x11, 0xfe, 0x4b, 0x58, 0x65, 0x33, 0xd0, 0x80, 0x62, 0xd1, 0xd6,
+	0x97, 0x38, 0xf3, 0x1b, 0x7f, 0x3b, 0x55, 0x61, 0x83, 0x77, 0xf4, 0xb4, 0x7d, 0xbd, 0xc8, 0xfd,
+	0x4d, 0x81, 0xf4, 0x90, 0x12, 0x1d, 0xc2, 0x2a, 0xf3, 0x25, 0x2a, 0x3e, 0x19, 0xa9, 0x39, 0x6b,
+	0x96, 0xc5, 0x29, 0x5a, 0xa0, 0x0a, 0x64, 0x68, 0x60, 0x5d, 0x62, 0xd7, 0x8c, 0x46, 0x20, 0xf9,
+	0xc0, 0x7f, 0xf7, 0x95, 0x07, 0x7e, 0x4d, 0x02, 0x8c, 0x75, 0xb1, 0x23, 0x5a, 0xef, 0x5e, 0xc2,
+	0x8a, 0xbc, 0xd8, 0x51, 0x16, 0x36, 0x59, 0x17, 0x7b, 0xa2, 0x6b, 0x4f, 0xc7, 0x1a, 0xd2, 0x26,
+	0xa8, 0xb1, 0x46, 0xaf, 0x99, 0xc7, 0x47, 0xf5, 0xdf, 0xa8, 0xca, 0x88, 0xb4, 0xa1, 0x1f, 0xe9,
+	0x8d, 0x72, 0x5d, 0x4d, 0x20, 0x04, 0xeb, 0xb1, 0xb4, 0xd5, 0x28, 0xd7, 0xeb, 0xea, 0x02, 0xda,
+	0x80, 0xb5, 0x58, 0x76, 0x70, 0x52, 0xaf, 0xab, 0x8b, 0xa5, 0x7f, 0xa6, 0x00, 0x1e, 0x93, 0x4e,
+	0x4b, 0x0c, 0xc3, 0xe8, 0x8f, 0x0a, 0xa4, 0xe2, 0xb1, 0x0b, 0x4d, 0xff, 0x4a, 0xc6, 0xc7, 0xb3,
+	0xdc, 0xcc, 0x2a, 0xcb, 0x7f, 0xf4, 0xfb, 0xff, 0xfe, 0xef, 0x2f, 0x89, 0xfb, 0xf9, 0x0f, 0xe2,
+	0xa1, 0xf3, 0x1b, 0xf1, 0x88, 0xfd, 0xcc, 0x0f, 0xc8, 0x39, 0xb6, 0x69, 0x58, 0xdc, 0x7d, 0xc9,
+	0x06, 0xd1, 0xf0, 0x53, 0x65, 0x17, 0xfd, 0x4e, 0x81, 0x65, 0x31, 0xa3, 0xa1, 0xdd, 0xa9, 0xa6,
+	0x47, 0x06, 0xb9, 0x39, 0x68, 0x7c, 0xc8, 0x69, 0xdc, 0x45, 0x43, 0x34, 0xd8, 0x00, 0x35, 0x44,
+	0x82, 0x73, 0x28, 0xee, 0xbe, 0x44, 0x7f, 0x52, 0x20, 0x15, 0x4f, 0x80, 0x33, 0x02, 0x32, 0x3e,
+	0x29, 0xce, 0xc1, 0xe4, 0x21, 0x67, 0xb2, 0x5b, 0xba, 0x77, 0xcd, 0x84, 0x8d, 0xe1, 0xaf, 0x61,
+	0xc3, 0x82, 0xf2, 0x12, 0x52, 0xf1, 0x7c, 0x37, 0x83, 0xcf, 0xf8, 0xd0, 0x98, 0xbb, 0xfd, 0x4a,
+	0x3d, 0x6a, 0x6c, 0x26, 0x8f, 0xe2, 0xb1, 0x3b, 0x47, 0x3c, 0xfe, 0xac, 0x40, 0x32, 0x1a, 0xac,
+	0xd0, 0xf4, 0x19, 0x60, 0x6c, 0x80, 0xcc, 0xed, 0xcd, 0x89, 0x16, 0x1f, 0xf2, 0xa4, 0x24, 0xbd,
+	0xa6, 0x56, 0xd0, 0x5f, 0x15, 0xc8, 0x8c, 0x4d, 0xbe, 0xe8, 0xd1, 0xd4, 0xd3, 0x26, 0xcf, 0xc9,
+	0xaf, 0x0d, 0xd0, 0xcf, 0x38, 0x97, 0x52, 0x7e, 0x6f, 0x76, 0xdd, 0x76, 0xae, 0x2d, 0xb3, 0x74,
+	0x7d, 0xa7, 0x44, 0xef, 0x1a, 0xce, 0xaa, 0x70, 0xb3, 0xc7, 0x5e, 0xae, 0x78, 0xc3, 0xf6, 0x97,
+	0x7f, 0xc4, 0x99, 0xee, 0xe5, 0x77, 0x66, 0x33, 0x15, 0x2d, 0x98, 0x91, 0xfc, 0xbb, 0x32, 0xfc,
+	0x9c, 0x39, 0x20, 0x41, 0xd9, 0xc5, 0x01, 0xfd, 0xfe, 0xc9, 0xee, 0x73, 0xb2, 0x3f, 0xcd, 0x3f,
+	0x9c, 0x97, 0x6c, 0x44, 0xed, 0x53, 0x65, 0xb7, 0xf2, 0x12, 0xde, 0xb7, 0x49, 0x7f, 0xda, 0x91,
+	0x95, 0xcc, 0x75, 0x67, 0x6b, 0xb2, 0x84, 0x36, 0x95, 0x67, 0x65, 0x89, 0xef, 0x11, 0xd7, 0xf2,
+	0x7a, 0x05, 0x12, 0xf4, 0x8a, 0x3d, 0xec, 0xf1, 0x74, 0x17, 0x85, 0xca, 0xf2, 0x9d, 0x70, 0xe2,
+	0x1f, 0x64, 0xfb, 0x62, 0xf9, 0x5d, 0x62, 0xa1, 0xda, 0x6e, 0x75, 0x96, 0xf9, 0x9e, 0x47, 0xff,
+	0x0f, 0x00, 0x00, 0xff, 0xff, 0x51, 0xce, 0x76, 0x0b, 0x68, 0x14, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/talent/v4beta1/profile.pb.go b/googleapis/cloud/talent/v4beta1/profile.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e0ab3803930c18bc8d4bf4825a76c7b9bc9cf85e
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/profile.pb.go
@@ -0,0 +1,2918 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/profile.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import timestamp "github.com/golang/protobuf/ptypes/timestamp"
+import wrappers "github.com/golang/protobuf/ptypes/wrappers"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import date "google.golang.org/genproto/googleapis/type/date"
+import postaladdress "google.golang.org/genproto/googleapis/type/postaladdress"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Enum that represents the type of the telephone.
+type Phone_PhoneType int32
+
+const (
+	// Default value.
+	Phone_PHONE_TYPE_UNSPECIFIED Phone_PhoneType = 0
+	// A landline.
+	Phone_LANDLINE Phone_PhoneType = 1
+	// A mobile.
+	Phone_MOBILE Phone_PhoneType = 2
+	// A fax.
+	Phone_FAX Phone_PhoneType = 3
+	// A pager.
+	Phone_PAGER Phone_PhoneType = 4
+	// A TTY (test telephone) or TDD (telecommunication device for the deaf).
+	Phone_TTY_OR_TDD Phone_PhoneType = 5
+	// A voicemail.
+	Phone_VOICEMAIL Phone_PhoneType = 6
+	// A virtual telephone number is a number that can be routed to another
+	// number and managed by the user via Web, SMS, IVR, etc.  It is associated
+	// with a particular person, and may be routed to either a MOBILE or
+	// LANDLINE number. The phone usage (see ContactInfoUsage above) should be
+	// set to PERSONAL for these phone types. Some more information can be
+	// found here: http://en.wikipedia.org/wiki/Personal_Numbers
+	Phone_VIRTUAL Phone_PhoneType = 7
+	// Voice over IP numbers. This includes TSoIP (Telephony Service over IP).
+	Phone_VOIP Phone_PhoneType = 8
+	// In some regions (e.g. the USA), it is impossible to distinguish between
+	// fixed-line and mobile numbers by looking at the phone number itself.
+	Phone_MOBILE_OR_LANDLINE Phone_PhoneType = 9
+)
+
+var Phone_PhoneType_name = map[int32]string{
+	0: "PHONE_TYPE_UNSPECIFIED",
+	1: "LANDLINE",
+	2: "MOBILE",
+	3: "FAX",
+	4: "PAGER",
+	5: "TTY_OR_TDD",
+	6: "VOICEMAIL",
+	7: "VIRTUAL",
+	8: "VOIP",
+	9: "MOBILE_OR_LANDLINE",
+}
+var Phone_PhoneType_value = map[string]int32{
+	"PHONE_TYPE_UNSPECIFIED": 0,
+	"LANDLINE":               1,
+	"MOBILE":                 2,
+	"FAX":                    3,
+	"PAGER":                  4,
+	"TTY_OR_TDD":             5,
+	"VOICEMAIL":              6,
+	"VIRTUAL":                7,
+	"VOIP":                   8,
+	"MOBILE_OR_LANDLINE":     9,
+}
+
+func (x Phone_PhoneType) String() string {
+	return proto.EnumName(Phone_PhoneType_name, int32(x))
+}
+func (Phone_PhoneType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{4, 0}
+}
+
+// Enum that represents the skill proficiency level.
+type Skill_SkillProficiencyLevel int32
+
+const (
+	// Default value.
+	Skill_SKILL_PROFICIENCY_LEVEL_UNSPECIFIED Skill_SkillProficiencyLevel = 0
+	// Have a common knowledge or an understanding of basic techniques and
+	// concepts.
+	Skill_FUNDAMENTAL_AWARENESS Skill_SkillProficiencyLevel = 1
+	// Have the level of experience gained in a classroom and/or experimental
+	// scenarios or as a trainee on-the-job.
+	Skill_NOVICE Skill_SkillProficiencyLevel = 2
+	// Be able to successfully complete tasks in this skill as requested. Help
+	// from an expert may be required from time to time, but can usually perform
+	// skill independently.
+	Skill_INTERMEDIATE Skill_SkillProficiencyLevel = 3
+	// Can perform the actions associated with this skill without assistance.
+	Skill_ADVANCED Skill_SkillProficiencyLevel = 4
+	// Known as an expert in this area.
+	Skill_EXPERT Skill_SkillProficiencyLevel = 5
+)
+
+var Skill_SkillProficiencyLevel_name = map[int32]string{
+	0: "SKILL_PROFICIENCY_LEVEL_UNSPECIFIED",
+	1: "FUNDAMENTAL_AWARENESS",
+	2: "NOVICE",
+	3: "INTERMEDIATE",
+	4: "ADVANCED",
+	5: "EXPERT",
+}
+var Skill_SkillProficiencyLevel_value = map[string]int32{
+	"SKILL_PROFICIENCY_LEVEL_UNSPECIFIED": 0,
+	"FUNDAMENTAL_AWARENESS":               1,
+	"NOVICE":                              2,
+	"INTERMEDIATE":                        3,
+	"ADVANCED":                            4,
+	"EXPERT":                              5,
+}
+
+func (x Skill_SkillProficiencyLevel) String() string {
+	return proto.EnumName(Skill_SkillProficiencyLevel_name, int32(x))
+}
+func (Skill_SkillProficiencyLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{10, 0}
+}
+
+// Enum that represents the application status.
+type JobApplication_ApplicationStatus int32
+
+const (
+	// Default value.
+	JobApplication_APPLICATION_STATUS_UNSPECIFIED JobApplication_ApplicationStatus = 0
+	// The offer is extended.
+	JobApplication_OFFER_EXTENDED JobApplication_ApplicationStatus = 1
+	// The offer is rejected by candidate.
+	JobApplication_REJECTED_BY_CANDIDATE JobApplication_ApplicationStatus = 2
+	// The application is active.
+	JobApplication_ACTIVE JobApplication_ApplicationStatus = 3
+	// The candidate is rejected by employer.
+	JobApplication_REJECTED_BY_EMPLOYER JobApplication_ApplicationStatus = 4
+	// The candidate is hired and hasn't started the new job.
+	JobApplication_HIRED_PENDING_DATE JobApplication_ApplicationStatus = 5
+	// The candidate is hired started.
+	JobApplication_HIRED_STARTED JobApplication_ApplicationStatus = 6
+	// The candidate is a prospect candidate.
+	JobApplication_PROSPECTED JobApplication_ApplicationStatus = 7
+)
+
+var JobApplication_ApplicationStatus_name = map[int32]string{
+	0: "APPLICATION_STATUS_UNSPECIFIED",
+	1: "OFFER_EXTENDED",
+	2: "REJECTED_BY_CANDIDATE",
+	3: "ACTIVE",
+	4: "REJECTED_BY_EMPLOYER",
+	5: "HIRED_PENDING_DATE",
+	6: "HIRED_STARTED",
+	7: "PROSPECTED",
+}
+var JobApplication_ApplicationStatus_value = map[string]int32{
+	"APPLICATION_STATUS_UNSPECIFIED": 0,
+	"OFFER_EXTENDED":                 1,
+	"REJECTED_BY_CANDIDATE":          2,
+	"ACTIVE":                         3,
+	"REJECTED_BY_EMPLOYER":           4,
+	"HIRED_PENDING_DATE":             5,
+	"HIRED_STARTED":                  6,
+	"PROSPECTED":                     7,
+}
+
+func (x JobApplication_ApplicationStatus) String() string {
+	return proto.EnumName(JobApplication_ApplicationStatus_name, int32(x))
+}
+func (JobApplication_ApplicationStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{14, 0}
+}
+
+// A resource that represents the profile for a job candidate (also referred to
+// as a "single-source profile"). A profile belongs to a [Company][google.cloud.talent.v4beta1.Company], which is
+// the company/organization that owns the profile.
+type Profile struct {
+	// Required during profile update.
+	//
+	// Resource name assigned to a profile by the API.
+	//
+	// The format is
+	// "projects/{project_id}/companies/{company_id}/profiles/{profile_id}",
+	// for example, "projects/api-test-project/companies/foo/profiles/bar".
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	// Optional.
+	//
+	// Profile's id in client system if available.
+	//
+	// The maximum number of bytes allowed is 100.
+	ExternalId string `protobuf:"bytes,2,opt,name=external_id,json=externalId,proto3" json:"external_id,omitempty"`
+	// Optional.
+	//
+	// The source description indicating where the profile is acquired.
+	//
+	// For example, if a candidate profile is acquired from a resume, the user can
+	// input "resume" here to indicate the source.
+	//
+	// The maximum number of bytes allowed is 100.
+	Source string `protobuf:"bytes,3,opt,name=source,proto3" json:"source,omitempty"`
+	// Optional.
+	//
+	// The URI set by clients that links to this profile's client-side copy.
+	//
+	// The maximum number of bytes allowed is 4000.
+	Uri string `protobuf:"bytes,4,opt,name=uri,proto3" json:"uri,omitempty"`
+	// Optional.
+	//
+	// The cluster id of the profile to associate with other profile(s) for the
+	// same candidate.
+	//
+	// A random UUID is assigned if [group_id][google.cloud.talent.v4beta1.Profile.group_id] isn't provided. To ensure
+	// global uniqueness, customized [group_id][google.cloud.talent.v4beta1.Profile.group_id] isn't supported. If
+	// [group_id][google.cloud.talent.v4beta1.Profile.group_id] is set, there must be at least one other profile with the
+	// same system generated [group_id][google.cloud.talent.v4beta1.Profile.group_id], otherwise an error is thrown.
+	//
+	// This is used to link multiple profiles to the same candidate. For example,
+	// a client has a candidate with two profiles, where one was created recently
+	// and the other one was created 5 years ago. These two profiles may be very
+	// different. The clients can create the first profile and get a generated
+	// [group_id][google.cloud.talent.v4beta1.Profile.group_id], and assign it when the second profile is created,
+	// indicating these two profiles are referring to the same candidate.
+	GroupId string `protobuf:"bytes,5,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`
+	// Optional.
+	//
+	// Indicates the hirable status of the candidate.
+	IsHirable *wrappers.BoolValue `protobuf:"bytes,6,opt,name=is_hirable,json=isHirable,proto3" json:"is_hirable,omitempty"`
+	// Optional.
+	//
+	// The timestamp when the profile was first created at this source.
+	CreateTime *timestamp.Timestamp `protobuf:"bytes,7,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
+	// Optional.
+	//
+	// The timestamp when the profile was last updated at this source.
+	UpdateTime *timestamp.Timestamp `protobuf:"bytes,8,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`
+	// Optional.
+	//
+	// The profile contents in HR-XML format.
+	// See http://schemas.liquid-technologies.com/hr-xml/2007-04-15/ for more
+	// information about Human Resources XML.
+	//
+	// Users can create a profile with only [resume_hrxml][google.cloud.talent.v4beta1.Profile.resume_hrxml] field. For example,
+	// the API parses the [resume_hrxml][google.cloud.talent.v4beta1.Profile.resume_hrxml] and creates a profile with all
+	// structured fields populated, for example. [EmploymentRecord][google.cloud.talent.v4beta1.EmploymentRecord],
+	// [EducationRecord][google.cloud.talent.v4beta1.EducationRecord], etc. An error is thrown if the [resume_hrxml][google.cloud.talent.v4beta1.Profile.resume_hrxml] can't
+	// be parsed.
+	//
+	// If the [resume_hrxml][google.cloud.talent.v4beta1.Profile.resume_hrxml] is provided during profile creation or update,
+	// any other structured data provided in the profile is ignored. The
+	// API populates these fields by parsing the HR-XML.
+	ResumeHrxml string `protobuf:"bytes,10,opt,name=resume_hrxml,json=resumeHrxml,proto3" json:"resume_hrxml,omitempty"`
+	// Optional.
+	//
+	// The names of the candidate this profile references.
+	//
+	// Currently only one person name is supported.
+	PersonNames []*PersonName `protobuf:"bytes,11,rep,name=person_names,json=personNames,proto3" json:"person_names,omitempty"`
+	// Optional.
+	//
+	// The candidate's postal addresses.
+	Addresses []*Address `protobuf:"bytes,12,rep,name=addresses,proto3" json:"addresses,omitempty"`
+	// Optional.
+	//
+	// The candidate's email addresses.
+	EmailAddresses []*Email `protobuf:"bytes,13,rep,name=email_addresses,json=emailAddresses,proto3" json:"email_addresses,omitempty"`
+	// Optional.
+	//
+	// The candidate's phone number(s).
+	PhoneNumbers []*Phone `protobuf:"bytes,14,rep,name=phone_numbers,json=phoneNumbers,proto3" json:"phone_numbers,omitempty"`
+	// Optional.
+	//
+	// The candidate's personal URIs.
+	PersonalUris []*PersonalUri `protobuf:"bytes,15,rep,name=personal_uris,json=personalUris,proto3" json:"personal_uris,omitempty"`
+	// Optional.
+	//
+	// Available contact information besides [addresses][google.cloud.talent.v4beta1.Profile.addresses], [email_addresses][google.cloud.talent.v4beta1.Profile.email_addresses],
+	// [phone_numbers][google.cloud.talent.v4beta1.Profile.phone_numbers] and [personal_uris][google.cloud.talent.v4beta1.Profile.personal_uris]. For example, Hang-out, Skype.
+	AdditionalContactInfo []*AdditionalContactInfo `protobuf:"bytes,16,rep,name=additional_contact_info,json=additionalContactInfo,proto3" json:"additional_contact_info,omitempty"`
+	// Optional.
+	//
+	// The employment history records of the candidate. It's highly recommended
+	// to input this information as accurately as possible to help improve search
+	// quality. Here are some recommendations:
+	//
+	// * Specify the start and end dates of the employment records.
+	// * List different employment types separately, no matter how minor the
+	// change is.
+	// For example, only job title is changed from "software engineer" to "senior
+	// software engineer".
+	// * Provide [EmploymentRecord.is_current][google.cloud.talent.v4beta1.EmploymentRecord.is_current] for the current employment if
+	// possible. If not, it's inferred from user inputs.
+	EmploymentRecords []*EmploymentRecord `protobuf:"bytes,17,rep,name=employment_records,json=employmentRecords,proto3" json:"employment_records,omitempty"`
+	// Optional.
+	//
+	// The education history record of the candidate. It's highly recommended to
+	// input this information as accurately as possible to help improve search
+	// quality. Here are some recommendations:
+	//
+	// * Specify the start and end dates of the education records.
+	// * List each education type separately, no matter how minor the change is.
+	// For example, the profile contains the education experience from the same
+	// school but different degrees.
+	// * Provide [EducationRecord.is_current][google.cloud.talent.v4beta1.EducationRecord.is_current] for the current education if
+	// possible. If not, it's inferred from user inputs.
+	EducationRecords []*EducationRecord `protobuf:"bytes,18,rep,name=education_records,json=educationRecords,proto3" json:"education_records,omitempty"`
+	// Optional.
+	//
+	// The skill set of the candidate. It's highly recommended to provide as
+	// much information as possible to help improve the search quality.
+	Skills []*Skill `protobuf:"bytes,19,rep,name=skills,proto3" json:"skills,omitempty"`
+	// Optional.
+	//
+	// The individual or collaborative activities which the candidate has
+	// participated in, for example, open-source projects, class assignments that
+	// aren't listed in [employment_records][google.cloud.talent.v4beta1.Profile.employment_records].
+	Activities []*Activity `protobuf:"bytes,20,rep,name=activities,proto3" json:"activities,omitempty"`
+	// Optional.
+	//
+	// The publications published by the candidate.
+	Publications []*Publication `protobuf:"bytes,21,rep,name=publications,proto3" json:"publications,omitempty"`
+	// Optional.
+	//
+	// The patents acquired by the candidate.
+	Patents []*Patent `protobuf:"bytes,22,rep,name=patents,proto3" json:"patents,omitempty"`
+	// Optional.
+	//
+	// The certifications acquired by the candidate.
+	Certifications []*Certification `protobuf:"bytes,23,rep,name=certifications,proto3" json:"certifications,omitempty"`
+	// Optional.
+	//
+	// The job applications of the candidate.
+	JobApplications []*JobApplication `protobuf:"bytes,24,rep,name=job_applications,json=jobApplications,proto3" json:"job_applications,omitempty"`
+	// Optional.
+	//
+	// The recruiting notes added for the candidate.
+	//
+	// For example, the recruiter can add some unstructured comments for this
+	// candidate like "this candidate also has experiences in volunteer work".
+	RecruitingNotes []*RecruitingNote `protobuf:"bytes,25,rep,name=recruiting_notes,json=recruitingNotes,proto3" json:"recruiting_notes,omitempty"`
+	// Optional.
+	//
+	// A map of fields to hold both filterable and non-filterable custom profile
+	// attributes that aren't covered by the provided structured fields. See
+	// [CustomAttribute][google.cloud.talent.v4beta1.CustomAttribute] for more details.
+	//
+	// At most 100 filterable and at most 100 unfilterable keys are supported. If
+	// limit is exceeded, an error is thrown.
+	//
+	// Numeric custom attributes: each key can only map to one numeric value,
+	// otherwise an error is thrown.
+	//
+	// String custom attributes: each key can map up to 50 string values. For
+	// filterable string value, each value has a byte size of no more than 256B.
+	// For unfilterable string values, the maximum byte size of a single key is
+	// 64B. An error is thrown for any request exceeding the limit.
+	// The maximum total byte size is 10KB.
+	//
+	// Currently filterable numeric custom attributes are not supported, and
+	// they automatically set to unfilterable.
+	CustomAttributes map[string]*CustomAttribute `protobuf:"bytes,26,rep,name=custom_attributes,json=customAttributes,proto3" json:"custom_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	// Output only. Indicates if the profile is fully processed and searchable.
+	Processed bool `protobuf:"varint,27,opt,name=processed,proto3" json:"processed,omitempty"`
+	// Output only. Keyword snippet shows how the search result is related to a
+	// search query.
+	KeywordSnippet       string   `protobuf:"bytes,28,opt,name=keyword_snippet,json=keywordSnippet,proto3" json:"keyword_snippet,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Profile) Reset()         { *m = Profile{} }
+func (m *Profile) String() string { return proto.CompactTextString(m) }
+func (*Profile) ProtoMessage()    {}
+func (*Profile) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{0}
+}
+func (m *Profile) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Profile.Unmarshal(m, b)
+}
+func (m *Profile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Profile.Marshal(b, m, deterministic)
+}
+func (dst *Profile) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Profile.Merge(dst, src)
+}
+func (m *Profile) XXX_Size() int {
+	return xxx_messageInfo_Profile.Size(m)
+}
+func (m *Profile) XXX_DiscardUnknown() {
+	xxx_messageInfo_Profile.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Profile proto.InternalMessageInfo
+
+func (m *Profile) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *Profile) GetExternalId() string {
+	if m != nil {
+		return m.ExternalId
+	}
+	return ""
+}
+
+func (m *Profile) GetSource() string {
+	if m != nil {
+		return m.Source
+	}
+	return ""
+}
+
+func (m *Profile) GetUri() string {
+	if m != nil {
+		return m.Uri
+	}
+	return ""
+}
+
+func (m *Profile) GetGroupId() string {
+	if m != nil {
+		return m.GroupId
+	}
+	return ""
+}
+
+func (m *Profile) GetIsHirable() *wrappers.BoolValue {
+	if m != nil {
+		return m.IsHirable
+	}
+	return nil
+}
+
+func (m *Profile) GetCreateTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.CreateTime
+	}
+	return nil
+}
+
+func (m *Profile) GetUpdateTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.UpdateTime
+	}
+	return nil
+}
+
+func (m *Profile) GetResumeHrxml() string {
+	if m != nil {
+		return m.ResumeHrxml
+	}
+	return ""
+}
+
+func (m *Profile) GetPersonNames() []*PersonName {
+	if m != nil {
+		return m.PersonNames
+	}
+	return nil
+}
+
+func (m *Profile) GetAddresses() []*Address {
+	if m != nil {
+		return m.Addresses
+	}
+	return nil
+}
+
+func (m *Profile) GetEmailAddresses() []*Email {
+	if m != nil {
+		return m.EmailAddresses
+	}
+	return nil
+}
+
+func (m *Profile) GetPhoneNumbers() []*Phone {
+	if m != nil {
+		return m.PhoneNumbers
+	}
+	return nil
+}
+
+func (m *Profile) GetPersonalUris() []*PersonalUri {
+	if m != nil {
+		return m.PersonalUris
+	}
+	return nil
+}
+
+func (m *Profile) GetAdditionalContactInfo() []*AdditionalContactInfo {
+	if m != nil {
+		return m.AdditionalContactInfo
+	}
+	return nil
+}
+
+func (m *Profile) GetEmploymentRecords() []*EmploymentRecord {
+	if m != nil {
+		return m.EmploymentRecords
+	}
+	return nil
+}
+
+func (m *Profile) GetEducationRecords() []*EducationRecord {
+	if m != nil {
+		return m.EducationRecords
+	}
+	return nil
+}
+
+func (m *Profile) GetSkills() []*Skill {
+	if m != nil {
+		return m.Skills
+	}
+	return nil
+}
+
+func (m *Profile) GetActivities() []*Activity {
+	if m != nil {
+		return m.Activities
+	}
+	return nil
+}
+
+func (m *Profile) GetPublications() []*Publication {
+	if m != nil {
+		return m.Publications
+	}
+	return nil
+}
+
+func (m *Profile) GetPatents() []*Patent {
+	if m != nil {
+		return m.Patents
+	}
+	return nil
+}
+
+func (m *Profile) GetCertifications() []*Certification {
+	if m != nil {
+		return m.Certifications
+	}
+	return nil
+}
+
+func (m *Profile) GetJobApplications() []*JobApplication {
+	if m != nil {
+		return m.JobApplications
+	}
+	return nil
+}
+
+func (m *Profile) GetRecruitingNotes() []*RecruitingNote {
+	if m != nil {
+		return m.RecruitingNotes
+	}
+	return nil
+}
+
+func (m *Profile) GetCustomAttributes() map[string]*CustomAttribute {
+	if m != nil {
+		return m.CustomAttributes
+	}
+	return nil
+}
+
+func (m *Profile) GetProcessed() bool {
+	if m != nil {
+		return m.Processed
+	}
+	return false
+}
+
+func (m *Profile) GetKeywordSnippet() string {
+	if m != nil {
+		return m.KeywordSnippet
+	}
+	return ""
+}
+
+// Resource that represents the name of a person.
+type PersonName struct {
+	// The name of a person. It can be one of [formatted_name][] or
+	// [structured_name][].
+	//
+	// Types that are valid to be assigned to PersonName:
+	//	*PersonName_FormattedName
+	//	*PersonName_StructuredName
+	PersonName isPersonName_PersonName `protobuf_oneof:"person_name"`
+	// Optional.
+	//
+	// Preferred name for the person.
+	PreferredName        string   `protobuf:"bytes,3,opt,name=preferred_name,json=preferredName,proto3" json:"preferred_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PersonName) Reset()         { *m = PersonName{} }
+func (m *PersonName) String() string { return proto.CompactTextString(m) }
+func (*PersonName) ProtoMessage()    {}
+func (*PersonName) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{1}
+}
+func (m *PersonName) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PersonName.Unmarshal(m, b)
+}
+func (m *PersonName) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PersonName.Marshal(b, m, deterministic)
+}
+func (dst *PersonName) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PersonName.Merge(dst, src)
+}
+func (m *PersonName) XXX_Size() int {
+	return xxx_messageInfo_PersonName.Size(m)
+}
+func (m *PersonName) XXX_DiscardUnknown() {
+	xxx_messageInfo_PersonName.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PersonName proto.InternalMessageInfo
+
+type isPersonName_PersonName interface {
+	isPersonName_PersonName()
+}
+
+type PersonName_FormattedName struct {
+	FormattedName string `protobuf:"bytes,1,opt,name=formatted_name,json=formattedName,proto3,oneof"`
+}
+
+type PersonName_StructuredName struct {
+	StructuredName *PersonName_PersonStructuredName `protobuf:"bytes,2,opt,name=structured_name,json=structuredName,proto3,oneof"`
+}
+
+func (*PersonName_FormattedName) isPersonName_PersonName() {}
+
+func (*PersonName_StructuredName) isPersonName_PersonName() {}
+
+func (m *PersonName) GetPersonName() isPersonName_PersonName {
+	if m != nil {
+		return m.PersonName
+	}
+	return nil
+}
+
+func (m *PersonName) GetFormattedName() string {
+	if x, ok := m.GetPersonName().(*PersonName_FormattedName); ok {
+		return x.FormattedName
+	}
+	return ""
+}
+
+func (m *PersonName) GetStructuredName() *PersonName_PersonStructuredName {
+	if x, ok := m.GetPersonName().(*PersonName_StructuredName); ok {
+		return x.StructuredName
+	}
+	return nil
+}
+
+func (m *PersonName) GetPreferredName() string {
+	if m != nil {
+		return m.PreferredName
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*PersonName) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _PersonName_OneofMarshaler, _PersonName_OneofUnmarshaler, _PersonName_OneofSizer, []interface{}{
+		(*PersonName_FormattedName)(nil),
+		(*PersonName_StructuredName)(nil),
+	}
+}
+
+func _PersonName_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*PersonName)
+	// person_name
+	switch x := m.PersonName.(type) {
+	case *PersonName_FormattedName:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.FormattedName)
+	case *PersonName_StructuredName:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.StructuredName); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("PersonName.PersonName has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _PersonName_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*PersonName)
+	switch tag {
+	case 1: // person_name.formatted_name
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.PersonName = &PersonName_FormattedName{x}
+		return true, err
+	case 2: // person_name.structured_name
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PersonName_PersonStructuredName)
+		err := b.DecodeMessage(msg)
+		m.PersonName = &PersonName_StructuredName{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _PersonName_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*PersonName)
+	// person_name
+	switch x := m.PersonName.(type) {
+	case *PersonName_FormattedName:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.FormattedName)))
+		n += len(x.FormattedName)
+	case *PersonName_StructuredName:
+		s := proto.Size(x.StructuredName)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Resource that represents a person's structured name.
+type PersonName_PersonStructuredName struct {
+	// Optional.
+	//
+	// Given/first name.
+	//
+	// It's derived from [formatted_name][google.cloud.talent.v4beta1.PersonName.formatted_name] if not provided.
+	//
+	// Number of characters allowed is 100.
+	GivenName string `protobuf:"bytes,1,opt,name=given_name,json=givenName,proto3" json:"given_name,omitempty"`
+	// Optional.
+	//
+	// Middle initial.
+	//
+	// It's derived from [formatted_name][google.cloud.talent.v4beta1.PersonName.formatted_name] if not provided.
+	//
+	// Number of characters allowed is 20.
+	MiddleInitial string `protobuf:"bytes,2,opt,name=middle_initial,json=middleInitial,proto3" json:"middle_initial,omitempty"`
+	// Optional.
+	//
+	// Family/last name.
+	//
+	// It's derived from [formatted_name][google.cloud.talent.v4beta1.PersonName.formatted_name] if not provided.
+	//
+	// Number of characters allowed is 100.
+	FamilyName string `protobuf:"bytes,3,opt,name=family_name,json=familyName,proto3" json:"family_name,omitempty"`
+	// Optional.
+	//
+	// Suffixes.
+	//
+	// Number of characters allowed is 20.
+	Suffixes []string `protobuf:"bytes,4,rep,name=suffixes,proto3" json:"suffixes,omitempty"`
+	// Optional.
+	//
+	// Prefixes.
+	//
+	// Number of characters allowed is 20.
+	Prefixes             []string `protobuf:"bytes,5,rep,name=prefixes,proto3" json:"prefixes,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PersonName_PersonStructuredName) Reset()         { *m = PersonName_PersonStructuredName{} }
+func (m *PersonName_PersonStructuredName) String() string { return proto.CompactTextString(m) }
+func (*PersonName_PersonStructuredName) ProtoMessage()    {}
+func (*PersonName_PersonStructuredName) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{1, 0}
+}
+func (m *PersonName_PersonStructuredName) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PersonName_PersonStructuredName.Unmarshal(m, b)
+}
+func (m *PersonName_PersonStructuredName) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PersonName_PersonStructuredName.Marshal(b, m, deterministic)
+}
+func (dst *PersonName_PersonStructuredName) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PersonName_PersonStructuredName.Merge(dst, src)
+}
+func (m *PersonName_PersonStructuredName) XXX_Size() int {
+	return xxx_messageInfo_PersonName_PersonStructuredName.Size(m)
+}
+func (m *PersonName_PersonStructuredName) XXX_DiscardUnknown() {
+	xxx_messageInfo_PersonName_PersonStructuredName.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PersonName_PersonStructuredName proto.InternalMessageInfo
+
+func (m *PersonName_PersonStructuredName) GetGivenName() string {
+	if m != nil {
+		return m.GivenName
+	}
+	return ""
+}
+
+func (m *PersonName_PersonStructuredName) GetMiddleInitial() string {
+	if m != nil {
+		return m.MiddleInitial
+	}
+	return ""
+}
+
+func (m *PersonName_PersonStructuredName) GetFamilyName() string {
+	if m != nil {
+		return m.FamilyName
+	}
+	return ""
+}
+
+func (m *PersonName_PersonStructuredName) GetSuffixes() []string {
+	if m != nil {
+		return m.Suffixes
+	}
+	return nil
+}
+
+func (m *PersonName_PersonStructuredName) GetPrefixes() []string {
+	if m != nil {
+		return m.Prefixes
+	}
+	return nil
+}
+
+// Resource that represents a address.
+type Address struct {
+	// Optional.
+	//
+	// The usage of the address. For example, SCHOOL, WORK, PERSONAL.
+	Usage ContactInfoUsage `protobuf:"varint,1,opt,name=usage,proto3,enum=google.cloud.talent.v4beta1.ContactInfoUsage" json:"usage,omitempty"`
+	// The address of a person. It can be one of [unstructured_address][] or
+	// [structured_address][].
+	//
+	// Types that are valid to be assigned to Address:
+	//	*Address_UnstructuredAddress
+	//	*Address_StructuredAddress
+	Address isAddress_Address `protobuf_oneof:"address"`
+	// Optional.
+	//
+	// Indicates if it's the person's current address.
+	IsCurrent            *wrappers.BoolValue `protobuf:"bytes,4,opt,name=is_current,json=isCurrent,proto3" json:"is_current,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *Address) Reset()         { *m = Address{} }
+func (m *Address) String() string { return proto.CompactTextString(m) }
+func (*Address) ProtoMessage()    {}
+func (*Address) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{2}
+}
+func (m *Address) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Address.Unmarshal(m, b)
+}
+func (m *Address) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Address.Marshal(b, m, deterministic)
+}
+func (dst *Address) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Address.Merge(dst, src)
+}
+func (m *Address) XXX_Size() int {
+	return xxx_messageInfo_Address.Size(m)
+}
+func (m *Address) XXX_DiscardUnknown() {
+	xxx_messageInfo_Address.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Address proto.InternalMessageInfo
+
+func (m *Address) GetUsage() ContactInfoUsage {
+	if m != nil {
+		return m.Usage
+	}
+	return ContactInfoUsage_CONTACT_INFO_USAGE_UNSPECIFIED
+}
+
+type isAddress_Address interface {
+	isAddress_Address()
+}
+
+type Address_UnstructuredAddress struct {
+	UnstructuredAddress string `protobuf:"bytes,2,opt,name=unstructured_address,json=unstructuredAddress,proto3,oneof"`
+}
+
+type Address_StructuredAddress struct {
+	StructuredAddress *postaladdress.PostalAddress `protobuf:"bytes,3,opt,name=structured_address,json=structuredAddress,proto3,oneof"`
+}
+
+func (*Address_UnstructuredAddress) isAddress_Address() {}
+
+func (*Address_StructuredAddress) isAddress_Address() {}
+
+func (m *Address) GetAddress() isAddress_Address {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+func (m *Address) GetUnstructuredAddress() string {
+	if x, ok := m.GetAddress().(*Address_UnstructuredAddress); ok {
+		return x.UnstructuredAddress
+	}
+	return ""
+}
+
+func (m *Address) GetStructuredAddress() *postaladdress.PostalAddress {
+	if x, ok := m.GetAddress().(*Address_StructuredAddress); ok {
+		return x.StructuredAddress
+	}
+	return nil
+}
+
+func (m *Address) GetIsCurrent() *wrappers.BoolValue {
+	if m != nil {
+		return m.IsCurrent
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*Address) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _Address_OneofMarshaler, _Address_OneofUnmarshaler, _Address_OneofSizer, []interface{}{
+		(*Address_UnstructuredAddress)(nil),
+		(*Address_StructuredAddress)(nil),
+	}
+}
+
+func _Address_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*Address)
+	// address
+	switch x := m.Address.(type) {
+	case *Address_UnstructuredAddress:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.UnstructuredAddress)
+	case *Address_StructuredAddress:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.StructuredAddress); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("Address.Address has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _Address_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*Address)
+	switch tag {
+	case 2: // address.unstructured_address
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Address = &Address_UnstructuredAddress{x}
+		return true, err
+	case 3: // address.structured_address
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(postaladdress.PostalAddress)
+		err := b.DecodeMessage(msg)
+		m.Address = &Address_StructuredAddress{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _Address_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*Address)
+	// address
+	switch x := m.Address.(type) {
+	case *Address_UnstructuredAddress:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.UnstructuredAddress)))
+		n += len(x.UnstructuredAddress)
+	case *Address_StructuredAddress:
+		s := proto.Size(x.StructuredAddress)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Resource that represents a person's email address.
+type Email struct {
+	// Optional.
+	//
+	// The usage of the email address. For example, SCHOOL, WORK, PERSONAL.
+	Usage ContactInfoUsage `protobuf:"varint,1,opt,name=usage,proto3,enum=google.cloud.talent.v4beta1.ContactInfoUsage" json:"usage,omitempty"`
+	// Optional.
+	//
+	// Email address.
+	//
+	// Number of characters allowed is 4,000.
+	EmailAddress         string   `protobuf:"bytes,2,opt,name=email_address,json=emailAddress,proto3" json:"email_address,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Email) Reset()         { *m = Email{} }
+func (m *Email) String() string { return proto.CompactTextString(m) }
+func (*Email) ProtoMessage()    {}
+func (*Email) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{3}
+}
+func (m *Email) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Email.Unmarshal(m, b)
+}
+func (m *Email) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Email.Marshal(b, m, deterministic)
+}
+func (dst *Email) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Email.Merge(dst, src)
+}
+func (m *Email) XXX_Size() int {
+	return xxx_messageInfo_Email.Size(m)
+}
+func (m *Email) XXX_DiscardUnknown() {
+	xxx_messageInfo_Email.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Email proto.InternalMessageInfo
+
+func (m *Email) GetUsage() ContactInfoUsage {
+	if m != nil {
+		return m.Usage
+	}
+	return ContactInfoUsage_CONTACT_INFO_USAGE_UNSPECIFIED
+}
+
+func (m *Email) GetEmailAddress() string {
+	if m != nil {
+		return m.EmailAddress
+	}
+	return ""
+}
+
+// Resource that represents a person's telephone number.
+type Phone struct {
+	// Optional.
+	//
+	// The usage of the phone. For example, SCHOOL, WORK, PERSONAL.
+	Usage ContactInfoUsage `protobuf:"varint,1,opt,name=usage,proto3,enum=google.cloud.talent.v4beta1.ContactInfoUsage" json:"usage,omitempty"`
+	// Optional.
+	//
+	// The phone type. For example, LANDLINE, MOBILE, FAX.
+	Type Phone_PhoneType `protobuf:"varint,2,opt,name=type,proto3,enum=google.cloud.talent.v4beta1.Phone_PhoneType" json:"type,omitempty"`
+	// Optional.
+	//
+	// Phone number.
+	//
+	// Any phone formats are supported and only exact matches are performed on
+	// searches. For example, if a phone number in profile is provided in the
+	// format of "(xxx)xxx-xxxx", in profile searches the same phone format
+	// has to be provided.
+	//
+	// Number of characters allowed is 20.
+	Number string `protobuf:"bytes,3,opt,name=number,proto3" json:"number,omitempty"`
+	// Optional.
+	//
+	// When this number is available. Any descriptive string is expected.
+	//
+	// Number of characters allowed is 100.
+	WhenAvailable        string   `protobuf:"bytes,4,opt,name=when_available,json=whenAvailable,proto3" json:"when_available,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Phone) Reset()         { *m = Phone{} }
+func (m *Phone) String() string { return proto.CompactTextString(m) }
+func (*Phone) ProtoMessage()    {}
+func (*Phone) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{4}
+}
+func (m *Phone) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Phone.Unmarshal(m, b)
+}
+func (m *Phone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Phone.Marshal(b, m, deterministic)
+}
+func (dst *Phone) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Phone.Merge(dst, src)
+}
+func (m *Phone) XXX_Size() int {
+	return xxx_messageInfo_Phone.Size(m)
+}
+func (m *Phone) XXX_DiscardUnknown() {
+	xxx_messageInfo_Phone.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Phone proto.InternalMessageInfo
+
+func (m *Phone) GetUsage() ContactInfoUsage {
+	if m != nil {
+		return m.Usage
+	}
+	return ContactInfoUsage_CONTACT_INFO_USAGE_UNSPECIFIED
+}
+
+func (m *Phone) GetType() Phone_PhoneType {
+	if m != nil {
+		return m.Type
+	}
+	return Phone_PHONE_TYPE_UNSPECIFIED
+}
+
+func (m *Phone) GetNumber() string {
+	if m != nil {
+		return m.Number
+	}
+	return ""
+}
+
+func (m *Phone) GetWhenAvailable() string {
+	if m != nil {
+		return m.WhenAvailable
+	}
+	return ""
+}
+
+// Resource that represents a valid URI for a personal use.
+type PersonalUri struct {
+	// Optional.
+	//
+	// The personal URI.
+	//
+	// Number of characters allowed is 4,000.
+	Uri                  string   `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PersonalUri) Reset()         { *m = PersonalUri{} }
+func (m *PersonalUri) String() string { return proto.CompactTextString(m) }
+func (*PersonalUri) ProtoMessage()    {}
+func (*PersonalUri) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{5}
+}
+func (m *PersonalUri) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PersonalUri.Unmarshal(m, b)
+}
+func (m *PersonalUri) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PersonalUri.Marshal(b, m, deterministic)
+}
+func (dst *PersonalUri) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PersonalUri.Merge(dst, src)
+}
+func (m *PersonalUri) XXX_Size() int {
+	return xxx_messageInfo_PersonalUri.Size(m)
+}
+func (m *PersonalUri) XXX_DiscardUnknown() {
+	xxx_messageInfo_PersonalUri.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PersonalUri proto.InternalMessageInfo
+
+func (m *PersonalUri) GetUri() string {
+	if m != nil {
+		return m.Uri
+	}
+	return ""
+}
+
+// Resource that represents contact information other than phone, email,
+// URI and addresses.
+type AdditionalContactInfo struct {
+	// Optional.
+	//
+	// The usage of this contact method. For example, SCHOOL, WORK, PERSONAL.
+	Usage ContactInfoUsage `protobuf:"varint,1,opt,name=usage,proto3,enum=google.cloud.talent.v4beta1.ContactInfoUsage" json:"usage,omitempty"`
+	// Optional.
+	//
+	// The name of the contact method.
+	//
+	// For example, "hangout", "skype".
+	//
+	// Number of characters allowed is 100.
+	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	// Optional.
+	//
+	// The contact id.
+	//
+	// Number of characters allowed is 100.
+	ContactId            string   `protobuf:"bytes,3,opt,name=contact_id,json=contactId,proto3" json:"contact_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdditionalContactInfo) Reset()         { *m = AdditionalContactInfo{} }
+func (m *AdditionalContactInfo) String() string { return proto.CompactTextString(m) }
+func (*AdditionalContactInfo) ProtoMessage()    {}
+func (*AdditionalContactInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{6}
+}
+func (m *AdditionalContactInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdditionalContactInfo.Unmarshal(m, b)
+}
+func (m *AdditionalContactInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdditionalContactInfo.Marshal(b, m, deterministic)
+}
+func (dst *AdditionalContactInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdditionalContactInfo.Merge(dst, src)
+}
+func (m *AdditionalContactInfo) XXX_Size() int {
+	return xxx_messageInfo_AdditionalContactInfo.Size(m)
+}
+func (m *AdditionalContactInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdditionalContactInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdditionalContactInfo proto.InternalMessageInfo
+
+func (m *AdditionalContactInfo) GetUsage() ContactInfoUsage {
+	if m != nil {
+		return m.Usage
+	}
+	return ContactInfoUsage_CONTACT_INFO_USAGE_UNSPECIFIED
+}
+
+func (m *AdditionalContactInfo) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *AdditionalContactInfo) GetContactId() string {
+	if m != nil {
+		return m.ContactId
+	}
+	return ""
+}
+
+// Resource that represents an employment record of a candidate.
+type EmploymentRecord struct {
+	// Optional.
+	//
+	// Start date of the employment.
+	//
+	// It can be a partial date (only year, or only year and month), but must be
+	// valid. Otherwise an error is thrown.
+	//
+	// Examples:
+	// {"year": 2017, "month": 2, "day": 28} is valid.
+	// {"year": 2020, "month": 1, "date": 31} is valid.
+	// {"year": 2018, "month": 12} is valid (partial date).
+	// {"year": 2018} is valid (partial date).
+	// {"year": 2015, "day": 21} is not valid (month is missing but day is
+	// presented).
+	// {"year": 2018, "month": 13} is not valid (invalid month).
+	// {"year": 2017, "month": 1, "day": 32} is not valid (invalid day).
+	StartDate *date.Date `protobuf:"bytes,1,opt,name=start_date,json=startDate,proto3" json:"start_date,omitempty"`
+	// Optional.
+	//
+	// End date of the employment.
+	EndDate *date.Date `protobuf:"bytes,2,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"`
+	// Optional.
+	//
+	// The name of the employer company/organization.
+	//
+	// For example, "Google", "Alphabet", etc.
+	//
+	// Number of characters allowed is 100.
+	EmployerName string `protobuf:"bytes,3,opt,name=employer_name,json=employerName,proto3" json:"employer_name,omitempty"`
+	// Optional.
+	//
+	// The division name of the employment.
+	//
+	// For example, division, department, client, etc.
+	//
+	// Number of characters allowed is 100.
+	DivisionName string `protobuf:"bytes,4,opt,name=division_name,json=divisionName,proto3" json:"division_name,omitempty"`
+	// Optional.
+	//
+	// The physical address of the employer.
+	Address *Address `protobuf:"bytes,5,opt,name=address,proto3" json:"address,omitempty"`
+	// Optional.
+	//
+	// The job title of the employment.
+	//
+	// For example, "Software Engineer", "Data Scientist", etc.
+	//
+	// Number of characters allowed is 100.
+	JobTitle string `protobuf:"bytes,6,opt,name=job_title,json=jobTitle,proto3" json:"job_title,omitempty"`
+	// Optional.
+	//
+	// The description of job content.
+	//
+	// Number of characters allowed is 100,000.
+	JobDescription string `protobuf:"bytes,7,opt,name=job_description,json=jobDescription,proto3" json:"job_description,omitempty"`
+	// Optional.
+	//
+	// If it's a supervised position.
+	IsSupervisedPosition *wrappers.BoolValue `protobuf:"bytes,8,opt,name=is_supervised_position,json=isSupervisedPosition,proto3" json:"is_supervised_position,omitempty"`
+	// Optional.
+	//
+	// If this employment is self-employed.
+	IsSelfEmployed *wrappers.BoolValue `protobuf:"bytes,9,opt,name=is_self_employed,json=isSelfEmployed,proto3" json:"is_self_employed,omitempty"`
+	// Optional.
+	//
+	// If this employment is current.
+	IsCurrent *wrappers.BoolValue `protobuf:"bytes,10,opt,name=is_current,json=isCurrent,proto3" json:"is_current,omitempty"`
+	// Output only. The job title snippet shows how the [job_title][google.cloud.talent.v4beta1.EmploymentRecord.job_title] is related
+	// to a search query. It's empty if the [job_title][google.cloud.talent.v4beta1.EmploymentRecord.job_title] isn't related to the
+	// search query.
+	JobTitleSnippet string `protobuf:"bytes,11,opt,name=job_title_snippet,json=jobTitleSnippet,proto3" json:"job_title_snippet,omitempty"`
+	// Output only. The job description snippet shows how the [job_description][google.cloud.talent.v4beta1.EmploymentRecord.job_description]
+	// is related to a search query. It's empty if the [job_description][google.cloud.talent.v4beta1.EmploymentRecord.job_description] isn't
+	// related to the search query.
+	JobDescriptionSnippet string `protobuf:"bytes,12,opt,name=job_description_snippet,json=jobDescriptionSnippet,proto3" json:"job_description_snippet,omitempty"`
+	// Output only. The employer name snippet shows how the [employer_name][google.cloud.talent.v4beta1.EmploymentRecord.employer_name] is
+	// related to a search query. It's empty if the [employer_name][google.cloud.talent.v4beta1.EmploymentRecord.employer_name] isn't
+	// related to the search query.
+	EmployerNameSnippet  string   `protobuf:"bytes,13,opt,name=employer_name_snippet,json=employerNameSnippet,proto3" json:"employer_name_snippet,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EmploymentRecord) Reset()         { *m = EmploymentRecord{} }
+func (m *EmploymentRecord) String() string { return proto.CompactTextString(m) }
+func (*EmploymentRecord) ProtoMessage()    {}
+func (*EmploymentRecord) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{7}
+}
+func (m *EmploymentRecord) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EmploymentRecord.Unmarshal(m, b)
+}
+func (m *EmploymentRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EmploymentRecord.Marshal(b, m, deterministic)
+}
+func (dst *EmploymentRecord) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EmploymentRecord.Merge(dst, src)
+}
+func (m *EmploymentRecord) XXX_Size() int {
+	return xxx_messageInfo_EmploymentRecord.Size(m)
+}
+func (m *EmploymentRecord) XXX_DiscardUnknown() {
+	xxx_messageInfo_EmploymentRecord.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EmploymentRecord proto.InternalMessageInfo
+
+func (m *EmploymentRecord) GetStartDate() *date.Date {
+	if m != nil {
+		return m.StartDate
+	}
+	return nil
+}
+
+func (m *EmploymentRecord) GetEndDate() *date.Date {
+	if m != nil {
+		return m.EndDate
+	}
+	return nil
+}
+
+func (m *EmploymentRecord) GetEmployerName() string {
+	if m != nil {
+		return m.EmployerName
+	}
+	return ""
+}
+
+func (m *EmploymentRecord) GetDivisionName() string {
+	if m != nil {
+		return m.DivisionName
+	}
+	return ""
+}
+
+func (m *EmploymentRecord) GetAddress() *Address {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+func (m *EmploymentRecord) GetJobTitle() string {
+	if m != nil {
+		return m.JobTitle
+	}
+	return ""
+}
+
+func (m *EmploymentRecord) GetJobDescription() string {
+	if m != nil {
+		return m.JobDescription
+	}
+	return ""
+}
+
+func (m *EmploymentRecord) GetIsSupervisedPosition() *wrappers.BoolValue {
+	if m != nil {
+		return m.IsSupervisedPosition
+	}
+	return nil
+}
+
+func (m *EmploymentRecord) GetIsSelfEmployed() *wrappers.BoolValue {
+	if m != nil {
+		return m.IsSelfEmployed
+	}
+	return nil
+}
+
+func (m *EmploymentRecord) GetIsCurrent() *wrappers.BoolValue {
+	if m != nil {
+		return m.IsCurrent
+	}
+	return nil
+}
+
+func (m *EmploymentRecord) GetJobTitleSnippet() string {
+	if m != nil {
+		return m.JobTitleSnippet
+	}
+	return ""
+}
+
+func (m *EmploymentRecord) GetJobDescriptionSnippet() string {
+	if m != nil {
+		return m.JobDescriptionSnippet
+	}
+	return ""
+}
+
+func (m *EmploymentRecord) GetEmployerNameSnippet() string {
+	if m != nil {
+		return m.EmployerNameSnippet
+	}
+	return ""
+}
+
+// Resource that represents an education record of a candidate.
+type EducationRecord struct {
+	// Optional.
+	//
+	// The start date of the education.
+	StartDate *date.Date `protobuf:"bytes,1,opt,name=start_date,json=startDate,proto3" json:"start_date,omitempty"`
+	// Optional.
+	//
+	// The end date of the education.
+	EndDate *date.Date `protobuf:"bytes,2,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"`
+	// Optional.
+	//
+	// The expected graduation date if currently pursuing a degree.
+	ExpectedGraduationDate *date.Date `protobuf:"bytes,3,opt,name=expected_graduation_date,json=expectedGraduationDate,proto3" json:"expected_graduation_date,omitempty"`
+	// Optional.
+	//
+	// The name of the school or institution.
+	//
+	// For example, "Stanford University", "UC Berkeley", etc.
+	//
+	// Number of characters allowed is 100.
+	SchoolName string `protobuf:"bytes,4,opt,name=school_name,json=schoolName,proto3" json:"school_name,omitempty"`
+	// Optional.
+	//
+	// The physical address of the education institution.
+	Address *Address `protobuf:"bytes,5,opt,name=address,proto3" json:"address,omitempty"`
+	// The degree information. It can be one of [degree_description][] or
+	// [structured_degree][].
+	//
+	// Types that are valid to be assigned to Degree:
+	//	*EducationRecord_DegreeDescription
+	//	*EducationRecord_StructuredDegree
+	Degree isEducationRecord_Degree `protobuf_oneof:"degree"`
+	// Optional.
+	//
+	// The description of the education.
+	//
+	// Number of characters allowed is 100,000.
+	Description string `protobuf:"bytes,8,opt,name=description,proto3" json:"description,omitempty"`
+	// Optional.
+	//
+	// If this education is current.
+	IsCurrent *wrappers.BoolValue `protobuf:"bytes,9,opt,name=is_current,json=isCurrent,proto3" json:"is_current,omitempty"`
+	// Output only. The school name snippet shows how the [school_name][google.cloud.talent.v4beta1.EducationRecord.school_name] is
+	// related to a search query in search result. It's empty if the
+	// [school_name][google.cloud.talent.v4beta1.EducationRecord.school_name] isn't related to the search query.
+	SchoolNameSnippet string `protobuf:"bytes,10,opt,name=school_name_snippet,json=schoolNameSnippet,proto3" json:"school_name_snippet,omitempty"`
+	// Output only. The job description snippet shows how the [degree][google.cloud.talent.v4beta1.degree] is
+	// related to a search query in search result. It's empty if the [degree][google.cloud.talent.v4beta1.degree]
+	// isn't related to the search query.
+	DegreeSnippet        string   `protobuf:"bytes,11,opt,name=degree_snippet,json=degreeSnippet,proto3" json:"degree_snippet,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EducationRecord) Reset()         { *m = EducationRecord{} }
+func (m *EducationRecord) String() string { return proto.CompactTextString(m) }
+func (*EducationRecord) ProtoMessage()    {}
+func (*EducationRecord) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{8}
+}
+func (m *EducationRecord) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EducationRecord.Unmarshal(m, b)
+}
+func (m *EducationRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EducationRecord.Marshal(b, m, deterministic)
+}
+func (dst *EducationRecord) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EducationRecord.Merge(dst, src)
+}
+func (m *EducationRecord) XXX_Size() int {
+	return xxx_messageInfo_EducationRecord.Size(m)
+}
+func (m *EducationRecord) XXX_DiscardUnknown() {
+	xxx_messageInfo_EducationRecord.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EducationRecord proto.InternalMessageInfo
+
+func (m *EducationRecord) GetStartDate() *date.Date {
+	if m != nil {
+		return m.StartDate
+	}
+	return nil
+}
+
+func (m *EducationRecord) GetEndDate() *date.Date {
+	if m != nil {
+		return m.EndDate
+	}
+	return nil
+}
+
+func (m *EducationRecord) GetExpectedGraduationDate() *date.Date {
+	if m != nil {
+		return m.ExpectedGraduationDate
+	}
+	return nil
+}
+
+func (m *EducationRecord) GetSchoolName() string {
+	if m != nil {
+		return m.SchoolName
+	}
+	return ""
+}
+
+func (m *EducationRecord) GetAddress() *Address {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+type isEducationRecord_Degree interface {
+	isEducationRecord_Degree()
+}
+
+type EducationRecord_DegreeDescription struct {
+	DegreeDescription string `protobuf:"bytes,6,opt,name=degree_description,json=degreeDescription,proto3,oneof"`
+}
+
+type EducationRecord_StructuredDegree struct {
+	StructuredDegree *Degree `protobuf:"bytes,7,opt,name=structured_degree,json=structuredDegree,proto3,oneof"`
+}
+
+func (*EducationRecord_DegreeDescription) isEducationRecord_Degree() {}
+
+func (*EducationRecord_StructuredDegree) isEducationRecord_Degree() {}
+
+func (m *EducationRecord) GetDegree() isEducationRecord_Degree {
+	if m != nil {
+		return m.Degree
+	}
+	return nil
+}
+
+func (m *EducationRecord) GetDegreeDescription() string {
+	if x, ok := m.GetDegree().(*EducationRecord_DegreeDescription); ok {
+		return x.DegreeDescription
+	}
+	return ""
+}
+
+func (m *EducationRecord) GetStructuredDegree() *Degree {
+	if x, ok := m.GetDegree().(*EducationRecord_StructuredDegree); ok {
+		return x.StructuredDegree
+	}
+	return nil
+}
+
+func (m *EducationRecord) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+func (m *EducationRecord) GetIsCurrent() *wrappers.BoolValue {
+	if m != nil {
+		return m.IsCurrent
+	}
+	return nil
+}
+
+func (m *EducationRecord) GetSchoolNameSnippet() string {
+	if m != nil {
+		return m.SchoolNameSnippet
+	}
+	return ""
+}
+
+func (m *EducationRecord) GetDegreeSnippet() string {
+	if m != nil {
+		return m.DegreeSnippet
+	}
+	return ""
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*EducationRecord) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _EducationRecord_OneofMarshaler, _EducationRecord_OneofUnmarshaler, _EducationRecord_OneofSizer, []interface{}{
+		(*EducationRecord_DegreeDescription)(nil),
+		(*EducationRecord_StructuredDegree)(nil),
+	}
+}
+
+func _EducationRecord_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*EducationRecord)
+	// degree
+	switch x := m.Degree.(type) {
+	case *EducationRecord_DegreeDescription:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.DegreeDescription)
+	case *EducationRecord_StructuredDegree:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.StructuredDegree); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("EducationRecord.Degree has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _EducationRecord_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*EducationRecord)
+	switch tag {
+	case 6: // degree.degree_description
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Degree = &EducationRecord_DegreeDescription{x}
+		return true, err
+	case 7: // degree.structured_degree
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Degree)
+		err := b.DecodeMessage(msg)
+		m.Degree = &EducationRecord_StructuredDegree{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _EducationRecord_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*EducationRecord)
+	// degree
+	switch x := m.Degree.(type) {
+	case *EducationRecord_DegreeDescription:
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(len(x.DegreeDescription)))
+		n += len(x.DegreeDescription)
+	case *EducationRecord_StructuredDegree:
+		s := proto.Size(x.StructuredDegree)
+		n += 1 // tag and wire
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Resource that represents a degree pursuing or acquired by a candidate.
+type Degree struct {
+	// Optional.
+	//
+	// ISCED degree type.
+	DegreeType DegreeType `protobuf:"varint,1,opt,name=degree_type,json=degreeType,proto3,enum=google.cloud.talent.v4beta1.DegreeType" json:"degree_type,omitempty"`
+	// Optional.
+	//
+	// Full Degree name.
+	//
+	// For example, "B.S.", "Master of Arts", etc.
+	//
+	// Number of characters allowed is 100.
+	DegreeName string `protobuf:"bytes,2,opt,name=degree_name,json=degreeName,proto3" json:"degree_name,omitempty"`
+	// Optional.
+	//
+	// Fields of study for the degree.
+	//
+	// For example, "Computer science", "engineering".
+	//
+	// Number of characters allowed is 100.
+	FieldsOfStudy        []string `protobuf:"bytes,3,rep,name=fields_of_study,json=fieldsOfStudy,proto3" json:"fields_of_study,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Degree) Reset()         { *m = Degree{} }
+func (m *Degree) String() string { return proto.CompactTextString(m) }
+func (*Degree) ProtoMessage()    {}
+func (*Degree) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{9}
+}
+func (m *Degree) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Degree.Unmarshal(m, b)
+}
+func (m *Degree) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Degree.Marshal(b, m, deterministic)
+}
+func (dst *Degree) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Degree.Merge(dst, src)
+}
+func (m *Degree) XXX_Size() int {
+	return xxx_messageInfo_Degree.Size(m)
+}
+func (m *Degree) XXX_DiscardUnknown() {
+	xxx_messageInfo_Degree.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Degree proto.InternalMessageInfo
+
+func (m *Degree) GetDegreeType() DegreeType {
+	if m != nil {
+		return m.DegreeType
+	}
+	return DegreeType_DEGREE_TYPE_UNSPECIFIED
+}
+
+func (m *Degree) GetDegreeName() string {
+	if m != nil {
+		return m.DegreeName
+	}
+	return ""
+}
+
+func (m *Degree) GetFieldsOfStudy() []string {
+	if m != nil {
+		return m.FieldsOfStudy
+	}
+	return nil
+}
+
+// Resource that represents a skill of a candidate.
+type Skill struct {
+	// Optional.
+	//
+	// Skill display name.
+	//
+	// For example, "Java", "Python".
+	//
+	// Number of characters allowed is 100.
+	DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
+	// Optional.
+	//
+	// The last time this skill was used.
+	LastUsedDate *date.Date `protobuf:"bytes,2,opt,name=last_used_date,json=lastUsedDate,proto3" json:"last_used_date,omitempty"`
+	// Optional.
+	//
+	// Skill proficiency level which indicates how proficient the candidate is at
+	// this skill.
+	Level Skill_SkillProficiencyLevel `protobuf:"varint,3,opt,name=level,proto3,enum=google.cloud.talent.v4beta1.Skill_SkillProficiencyLevel" json:"level,omitempty"`
+	// Optional.
+	//
+	// A paragraph describes context of this skill.
+	//
+	// Number of characters allowed is 100,000.
+	Context string `protobuf:"bytes,4,opt,name=context,proto3" json:"context,omitempty"`
+	// Output only. Skill name snippet shows how the [display_name][google.cloud.talent.v4beta1.Skill.display_name] is related
+	// to a search query. It's empty if the [display_name][google.cloud.talent.v4beta1.Skill.display_name] isn't related to the
+	// search query.
+	SkillNameSnippet     string   `protobuf:"bytes,5,opt,name=skill_name_snippet,json=skillNameSnippet,proto3" json:"skill_name_snippet,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Skill) Reset()         { *m = Skill{} }
+func (m *Skill) String() string { return proto.CompactTextString(m) }
+func (*Skill) ProtoMessage()    {}
+func (*Skill) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{10}
+}
+func (m *Skill) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Skill.Unmarshal(m, b)
+}
+func (m *Skill) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Skill.Marshal(b, m, deterministic)
+}
+func (dst *Skill) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Skill.Merge(dst, src)
+}
+func (m *Skill) XXX_Size() int {
+	return xxx_messageInfo_Skill.Size(m)
+}
+func (m *Skill) XXX_DiscardUnknown() {
+	xxx_messageInfo_Skill.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Skill proto.InternalMessageInfo
+
+func (m *Skill) GetDisplayName() string {
+	if m != nil {
+		return m.DisplayName
+	}
+	return ""
+}
+
+func (m *Skill) GetLastUsedDate() *date.Date {
+	if m != nil {
+		return m.LastUsedDate
+	}
+	return nil
+}
+
+func (m *Skill) GetLevel() Skill_SkillProficiencyLevel {
+	if m != nil {
+		return m.Level
+	}
+	return Skill_SKILL_PROFICIENCY_LEVEL_UNSPECIFIED
+}
+
+func (m *Skill) GetContext() string {
+	if m != nil {
+		return m.Context
+	}
+	return ""
+}
+
+func (m *Skill) GetSkillNameSnippet() string {
+	if m != nil {
+		return m.SkillNameSnippet
+	}
+	return ""
+}
+
+// Resource that represents an individual or collaborative activity participated
+// in by a candidate, for example, an open-source project, a class assignment,
+// etc.
+type Activity struct {
+	// Optional.
+	//
+	// Activity display name.
+	//
+	// Number of characters allowed is 100.
+	DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
+	// Optional.
+	//
+	// Activity description.
+	//
+	// Number of characters allowed is 100,000.
+	Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+	// Optional.
+	//
+	// Activity URI.
+	//
+	// Number of characters allowed is 4,000.
+	Uri string `protobuf:"bytes,3,opt,name=uri,proto3" json:"uri,omitempty"`
+	// Optional.
+	//
+	// The first creation date of the activity.
+	CreateDate *date.Date `protobuf:"bytes,4,opt,name=create_date,json=createDate,proto3" json:"create_date,omitempty"`
+	// Optional.
+	//
+	// The last update date of the activity.
+	UpdateDate *date.Date `protobuf:"bytes,5,opt,name=update_date,json=updateDate,proto3" json:"update_date,omitempty"`
+	// Optional.
+	//
+	// A list of team members involved in this activity.
+	//
+	// Number of characters allowed is 100.
+	TeamMembers []string `protobuf:"bytes,6,rep,name=team_members,json=teamMembers,proto3" json:"team_members,omitempty"`
+	// Optional.
+	//
+	// A list of skills used in this activity.
+	SkillsUsed []*Skill `protobuf:"bytes,7,rep,name=skills_used,json=skillsUsed,proto3" json:"skills_used,omitempty"`
+	// Output only. Activity name snippet shows how the [display_name][google.cloud.talent.v4beta1.Activity.display_name] is
+	// related to a search query. It's empty if the [display_name][google.cloud.talent.v4beta1.Activity.display_name] isn't related
+	// to the search query.
+	ActivityNameSnippet string `protobuf:"bytes,8,opt,name=activity_name_snippet,json=activityNameSnippet,proto3" json:"activity_name_snippet,omitempty"`
+	// Output only. Activity description snippet shows how the
+	// [description][google.cloud.talent.v4beta1.Activity.description] is related to a search query. It's empty if the
+	// [description][google.cloud.talent.v4beta1.Activity.description] isn't related to the search query.
+	ActivityDescriptionSnippet string `protobuf:"bytes,9,opt,name=activity_description_snippet,json=activityDescriptionSnippet,proto3" json:"activity_description_snippet,omitempty"`
+	// Output only. Skill used snippet shows how the corresponding
+	// [skills_used][google.cloud.talent.v4beta1.Activity.skills_used] are related to a search query. It's empty if the
+	// corresponding [skills_used][google.cloud.talent.v4beta1.Activity.skills_used] are not related to the search query.
+	SkillsUsedSnippet    []string `protobuf:"bytes,10,rep,name=skills_used_snippet,json=skillsUsedSnippet,proto3" json:"skills_used_snippet,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Activity) Reset()         { *m = Activity{} }
+func (m *Activity) String() string { return proto.CompactTextString(m) }
+func (*Activity) ProtoMessage()    {}
+func (*Activity) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{11}
+}
+func (m *Activity) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Activity.Unmarshal(m, b)
+}
+func (m *Activity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Activity.Marshal(b, m, deterministic)
+}
+func (dst *Activity) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Activity.Merge(dst, src)
+}
+func (m *Activity) XXX_Size() int {
+	return xxx_messageInfo_Activity.Size(m)
+}
+func (m *Activity) XXX_DiscardUnknown() {
+	xxx_messageInfo_Activity.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Activity proto.InternalMessageInfo
+
+func (m *Activity) GetDisplayName() string {
+	if m != nil {
+		return m.DisplayName
+	}
+	return ""
+}
+
+func (m *Activity) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+func (m *Activity) GetUri() string {
+	if m != nil {
+		return m.Uri
+	}
+	return ""
+}
+
+func (m *Activity) GetCreateDate() *date.Date {
+	if m != nil {
+		return m.CreateDate
+	}
+	return nil
+}
+
+func (m *Activity) GetUpdateDate() *date.Date {
+	if m != nil {
+		return m.UpdateDate
+	}
+	return nil
+}
+
+func (m *Activity) GetTeamMembers() []string {
+	if m != nil {
+		return m.TeamMembers
+	}
+	return nil
+}
+
+func (m *Activity) GetSkillsUsed() []*Skill {
+	if m != nil {
+		return m.SkillsUsed
+	}
+	return nil
+}
+
+func (m *Activity) GetActivityNameSnippet() string {
+	if m != nil {
+		return m.ActivityNameSnippet
+	}
+	return ""
+}
+
+func (m *Activity) GetActivityDescriptionSnippet() string {
+	if m != nil {
+		return m.ActivityDescriptionSnippet
+	}
+	return ""
+}
+
+func (m *Activity) GetSkillsUsedSnippet() []string {
+	if m != nil {
+		return m.SkillsUsedSnippet
+	}
+	return nil
+}
+
+// Resource that represents a publication resource of a candidate.
+type Publication struct {
+	// Optional.
+	//
+	// A list of author names.
+	//
+	// Number of characters allowed is 100.
+	Authors []string `protobuf:"bytes,1,rep,name=authors,proto3" json:"authors,omitempty"`
+	// Optional.
+	//
+	// The title of the publication.
+	//
+	// Number of characters allowed is 100.
+	Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
+	// Optional.
+	//
+	// The description of the publication.
+	//
+	// Number of characters allowed is 100,000.
+	Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
+	// Optional.
+	//
+	// The journal name of the publication.
+	//
+	// Number of characters allowed is 100.
+	Journal string `protobuf:"bytes,4,opt,name=journal,proto3" json:"journal,omitempty"`
+	// Optional.
+	//
+	// Volume number.
+	//
+	// Number of characters allowed is 100.
+	Volume string `protobuf:"bytes,5,opt,name=volume,proto3" json:"volume,omitempty"`
+	// Optional.
+	//
+	// The publisher of the journal.
+	//
+	// Number of characters allowed is 100.
+	Publisher string `protobuf:"bytes,6,opt,name=publisher,proto3" json:"publisher,omitempty"`
+	// Optional.
+	//
+	// The publication date.
+	PublicationDate *date.Date `protobuf:"bytes,7,opt,name=publication_date,json=publicationDate,proto3" json:"publication_date,omitempty"`
+	// Optional.
+	//
+	// The publication type.
+	//
+	// Number of characters allowed is 100.
+	PublicationType string `protobuf:"bytes,8,opt,name=publication_type,json=publicationType,proto3" json:"publication_type,omitempty"`
+	// Optional.
+	//
+	// ISBN number.
+	//
+	// Number of characters allowed is 100.
+	Isbn                 string   `protobuf:"bytes,9,opt,name=isbn,proto3" json:"isbn,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Publication) Reset()         { *m = Publication{} }
+func (m *Publication) String() string { return proto.CompactTextString(m) }
+func (*Publication) ProtoMessage()    {}
+func (*Publication) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{12}
+}
+func (m *Publication) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Publication.Unmarshal(m, b)
+}
+func (m *Publication) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Publication.Marshal(b, m, deterministic)
+}
+func (dst *Publication) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Publication.Merge(dst, src)
+}
+func (m *Publication) XXX_Size() int {
+	return xxx_messageInfo_Publication.Size(m)
+}
+func (m *Publication) XXX_DiscardUnknown() {
+	xxx_messageInfo_Publication.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Publication proto.InternalMessageInfo
+
+func (m *Publication) GetAuthors() []string {
+	if m != nil {
+		return m.Authors
+	}
+	return nil
+}
+
+func (m *Publication) GetTitle() string {
+	if m != nil {
+		return m.Title
+	}
+	return ""
+}
+
+func (m *Publication) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+func (m *Publication) GetJournal() string {
+	if m != nil {
+		return m.Journal
+	}
+	return ""
+}
+
+func (m *Publication) GetVolume() string {
+	if m != nil {
+		return m.Volume
+	}
+	return ""
+}
+
+func (m *Publication) GetPublisher() string {
+	if m != nil {
+		return m.Publisher
+	}
+	return ""
+}
+
+func (m *Publication) GetPublicationDate() *date.Date {
+	if m != nil {
+		return m.PublicationDate
+	}
+	return nil
+}
+
+func (m *Publication) GetPublicationType() string {
+	if m != nil {
+		return m.PublicationType
+	}
+	return ""
+}
+
+func (m *Publication) GetIsbn() string {
+	if m != nil {
+		return m.Isbn
+	}
+	return ""
+}
+
+// Resource that represents the patent acquired by a candidate.
+type Patent struct {
+	// Optional.
+	//
+	// Name of the patent.
+	//
+	// Number of characters allowed is 100.
+	DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
+	// Optional.
+	//
+	// A list of inventors' names.
+	//
+	// Number of characters allowed for each is 100.
+	Inventors []string `protobuf:"bytes,2,rep,name=inventors,proto3" json:"inventors,omitempty"`
+	// Optional.
+	//
+	// The status of the patent.
+	//
+	// Number of characters allowed is 100.
+	PatentStatus string `protobuf:"bytes,3,opt,name=patent_status,json=patentStatus,proto3" json:"patent_status,omitempty"`
+	// Optional.
+	//
+	// The date the last time the status of the patent was checked.
+	PatentStatusDate *date.Date `protobuf:"bytes,4,opt,name=patent_status_date,json=patentStatusDate,proto3" json:"patent_status_date,omitempty"`
+	// Optional.
+	//
+	// The date that the patent was filed.
+	PatentFilingDate *date.Date `protobuf:"bytes,5,opt,name=patent_filing_date,json=patentFilingDate,proto3" json:"patent_filing_date,omitempty"`
+	// Optional.
+	//
+	// The name of the patent office.
+	//
+	// Number of characters allowed is 100.
+	PatentOffice string `protobuf:"bytes,6,opt,name=patent_office,json=patentOffice,proto3" json:"patent_office,omitempty"`
+	// Optional.
+	//
+	// The number of the patent.
+	//
+	// Number of characters allowed is 100.
+	PatentNumber string `protobuf:"bytes,7,opt,name=patent_number,json=patentNumber,proto3" json:"patent_number,omitempty"`
+	// Optional.
+	//
+	// The description of the patent.
+	//
+	// Number of characters allowed is 100,000.
+	PatentDescription string `protobuf:"bytes,8,opt,name=patent_description,json=patentDescription,proto3" json:"patent_description,omitempty"`
+	// Optional.
+	//
+	// The skills used in this patent.
+	SkillsUsed           []*Skill `protobuf:"bytes,9,rep,name=skills_used,json=skillsUsed,proto3" json:"skills_used,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Patent) Reset()         { *m = Patent{} }
+func (m *Patent) String() string { return proto.CompactTextString(m) }
+func (*Patent) ProtoMessage()    {}
+func (*Patent) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{13}
+}
+func (m *Patent) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Patent.Unmarshal(m, b)
+}
+func (m *Patent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Patent.Marshal(b, m, deterministic)
+}
+func (dst *Patent) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Patent.Merge(dst, src)
+}
+func (m *Patent) XXX_Size() int {
+	return xxx_messageInfo_Patent.Size(m)
+}
+func (m *Patent) XXX_DiscardUnknown() {
+	xxx_messageInfo_Patent.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Patent proto.InternalMessageInfo
+
+func (m *Patent) GetDisplayName() string {
+	if m != nil {
+		return m.DisplayName
+	}
+	return ""
+}
+
+func (m *Patent) GetInventors() []string {
+	if m != nil {
+		return m.Inventors
+	}
+	return nil
+}
+
+func (m *Patent) GetPatentStatus() string {
+	if m != nil {
+		return m.PatentStatus
+	}
+	return ""
+}
+
+func (m *Patent) GetPatentStatusDate() *date.Date {
+	if m != nil {
+		return m.PatentStatusDate
+	}
+	return nil
+}
+
+func (m *Patent) GetPatentFilingDate() *date.Date {
+	if m != nil {
+		return m.PatentFilingDate
+	}
+	return nil
+}
+
+func (m *Patent) GetPatentOffice() string {
+	if m != nil {
+		return m.PatentOffice
+	}
+	return ""
+}
+
+func (m *Patent) GetPatentNumber() string {
+	if m != nil {
+		return m.PatentNumber
+	}
+	return ""
+}
+
+func (m *Patent) GetPatentDescription() string {
+	if m != nil {
+		return m.PatentDescription
+	}
+	return ""
+}
+
+func (m *Patent) GetSkillsUsed() []*Skill {
+	if m != nil {
+		return m.SkillsUsed
+	}
+	return nil
+}
+
+// Resource that represents a job application record of a candidate.
+type JobApplication struct {
+	// Optional.
+	//
+	// The information of job which the candidate applied for.
+	//
+	// If [Job.name][google.cloud.talent.v4beta1.Job.name] is provided, the corresponding [Job][google.cloud.talent.v4beta1.Job] must be created.
+	//
+	// Otherwise, only [Job.requisition_id][google.cloud.talent.v4beta1.Job.requisition_id], [Job.title][google.cloud.talent.v4beta1.Job.title],
+	// [Job.description][google.cloud.talent.v4beta1.Job.description] and [Job.addresses][google.cloud.talent.v4beta1.Job.addresses] provided here are persisted
+	// in the application. No [Job][google.cloud.talent.v4beta1.Job] entity is created in this case.
+	Job *Job `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"`
+	// Optional.
+	//
+	// The job application id.
+	//
+	// Number of characters allowed is 100.
+	ApplicationId string `protobuf:"bytes,2,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"`
+	// Optional.
+	//
+	// The application date.
+	ApplicationDate *date.Date `protobuf:"bytes,3,opt,name=application_date,json=applicationDate,proto3" json:"application_date,omitempty"`
+	// Optional.
+	//
+	// The last stage the candidate reached in the application progress.
+	// For example, "new", "phone screen", "interview".
+	LastStage string `protobuf:"bytes,4,opt,name=last_stage,json=lastStage,proto3" json:"last_stage,omitempty"`
+	// Optional.
+	//
+	// The application state.
+	State JobApplication_ApplicationStatus `protobuf:"varint,5,opt,name=state,proto3,enum=google.cloud.talent.v4beta1.JobApplication_ApplicationStatus" json:"state,omitempty"`
+	// Optional.
+	//
+	// The average interview score.
+	AverageInterviewScore float64 `protobuf:"fixed64,6,opt,name=average_interview_score,json=averageInterviewScore,proto3" json:"average_interview_score,omitempty"`
+	// Optional.
+	//
+	// The scale id of the interview score.
+	//
+	// Number of characters allowed is 100.
+	InterviewScoreScaleId string `protobuf:"bytes,7,opt,name=interview_score_scale_id,json=interviewScoreScaleId,proto3" json:"interview_score_scale_id,omitempty"`
+	// Optional.
+	//
+	// The number of interviews.
+	NumberOfInterviews int32 `protobuf:"varint,8,opt,name=number_of_interviews,json=numberOfInterviews,proto3" json:"number_of_interviews,omitempty"`
+	// Optional.
+	//
+	// If the candidate is referred by a employee.
+	IsEmployeeReferred *wrappers.BoolValue `protobuf:"bytes,9,opt,name=is_employee_referred,json=isEmployeeReferred,proto3" json:"is_employee_referred,omitempty"`
+	// Optional.
+	//
+	// The last update timestamp.
+	UpdateTime *timestamp.Timestamp `protobuf:"bytes,10,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`
+	// Optional.
+	//
+	// The outcome reason for the job application.
+	//
+	// Number of characters allowed is 100.
+	OutcomeReason string `protobuf:"bytes,11,opt,name=outcome_reason,json=outcomeReason,proto3" json:"outcome_reason,omitempty"`
+	// Optional.
+	//
+	// Outcome positiveness shows how positive the outcome is.
+	//
+	// Currently only -1, 0 and 1 are accepted, where -1 means not positive, 0
+	// means neutral and 1 means positive. An error is thrown if other value is
+	// set.
+	OutcomePositiveness float64 `protobuf:"fixed64,12,opt,name=outcome_positiveness,json=outcomePositiveness,proto3" json:"outcome_positiveness,omitempty"`
+	// Output only. Indicates whether this job application is a match to
+	// application related filters. This value is only applicable in profile
+	// search response.
+	IsMatch *wrappers.BoolValue `protobuf:"bytes,13,opt,name=is_match,json=isMatch,proto3" json:"is_match,omitempty"`
+	// Output only. Job title snippet shows how the job title is related to a
+	// search query. It's empty if the job title isn't related to the search
+	// query.
+	JobTitleSnippet      string   `protobuf:"bytes,14,opt,name=job_title_snippet,json=jobTitleSnippet,proto3" json:"job_title_snippet,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *JobApplication) Reset()         { *m = JobApplication{} }
+func (m *JobApplication) String() string { return proto.CompactTextString(m) }
+func (*JobApplication) ProtoMessage()    {}
+func (*JobApplication) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{14}
+}
+func (m *JobApplication) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_JobApplication.Unmarshal(m, b)
+}
+func (m *JobApplication) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_JobApplication.Marshal(b, m, deterministic)
+}
+func (dst *JobApplication) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_JobApplication.Merge(dst, src)
+}
+func (m *JobApplication) XXX_Size() int {
+	return xxx_messageInfo_JobApplication.Size(m)
+}
+func (m *JobApplication) XXX_DiscardUnknown() {
+	xxx_messageInfo_JobApplication.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_JobApplication proto.InternalMessageInfo
+
+func (m *JobApplication) GetJob() *Job {
+	if m != nil {
+		return m.Job
+	}
+	return nil
+}
+
+func (m *JobApplication) GetApplicationId() string {
+	if m != nil {
+		return m.ApplicationId
+	}
+	return ""
+}
+
+func (m *JobApplication) GetApplicationDate() *date.Date {
+	if m != nil {
+		return m.ApplicationDate
+	}
+	return nil
+}
+
+func (m *JobApplication) GetLastStage() string {
+	if m != nil {
+		return m.LastStage
+	}
+	return ""
+}
+
+func (m *JobApplication) GetState() JobApplication_ApplicationStatus {
+	if m != nil {
+		return m.State
+	}
+	return JobApplication_APPLICATION_STATUS_UNSPECIFIED
+}
+
+func (m *JobApplication) GetAverageInterviewScore() float64 {
+	if m != nil {
+		return m.AverageInterviewScore
+	}
+	return 0
+}
+
+func (m *JobApplication) GetInterviewScoreScaleId() string {
+	if m != nil {
+		return m.InterviewScoreScaleId
+	}
+	return ""
+}
+
+func (m *JobApplication) GetNumberOfInterviews() int32 {
+	if m != nil {
+		return m.NumberOfInterviews
+	}
+	return 0
+}
+
+func (m *JobApplication) GetIsEmployeeReferred() *wrappers.BoolValue {
+	if m != nil {
+		return m.IsEmployeeReferred
+	}
+	return nil
+}
+
+func (m *JobApplication) GetUpdateTime() *timestamp.Timestamp {
+	if m != nil {
+		return m.UpdateTime
+	}
+	return nil
+}
+
+func (m *JobApplication) GetOutcomeReason() string {
+	if m != nil {
+		return m.OutcomeReason
+	}
+	return ""
+}
+
+func (m *JobApplication) GetOutcomePositiveness() float64 {
+	if m != nil {
+		return m.OutcomePositiveness
+	}
+	return 0
+}
+
+func (m *JobApplication) GetIsMatch() *wrappers.BoolValue {
+	if m != nil {
+		return m.IsMatch
+	}
+	return nil
+}
+
+func (m *JobApplication) GetJobTitleSnippet() string {
+	if m != nil {
+		return m.JobTitleSnippet
+	}
+	return ""
+}
+
+// Resource that represents a license or certification.
+type Certification struct {
+	// Optional.
+	//
+	// Name of license or certification.
+	//
+	// Number of characters allowed is 100.
+	DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
+	// Optional.
+	//
+	// Acquirement date or effective date of license or certification.
+	AcquireDate *date.Date `protobuf:"bytes,2,opt,name=acquire_date,json=acquireDate,proto3" json:"acquire_date,omitempty"`
+	// Optional.
+	//
+	// Expiration date of license of certification.
+	ExpireDate *date.Date `protobuf:"bytes,3,opt,name=expire_date,json=expireDate,proto3" json:"expire_date,omitempty"`
+	// Optional.
+	//
+	// Authority of license, such as government.
+	//
+	// Number of characters allowed is 100.
+	Authority string `protobuf:"bytes,4,opt,name=authority,proto3" json:"authority,omitempty"`
+	// Optional.
+	//
+	// Description of license or certification.
+	//
+	// Number of characters allowed is 100,000.
+	Description          string   `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Certification) Reset()         { *m = Certification{} }
+func (m *Certification) String() string { return proto.CompactTextString(m) }
+func (*Certification) ProtoMessage()    {}
+func (*Certification) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{15}
+}
+func (m *Certification) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Certification.Unmarshal(m, b)
+}
+func (m *Certification) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Certification.Marshal(b, m, deterministic)
+}
+func (dst *Certification) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Certification.Merge(dst, src)
+}
+func (m *Certification) XXX_Size() int {
+	return xxx_messageInfo_Certification.Size(m)
+}
+func (m *Certification) XXX_DiscardUnknown() {
+	xxx_messageInfo_Certification.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Certification proto.InternalMessageInfo
+
+func (m *Certification) GetDisplayName() string {
+	if m != nil {
+		return m.DisplayName
+	}
+	return ""
+}
+
+func (m *Certification) GetAcquireDate() *date.Date {
+	if m != nil {
+		return m.AcquireDate
+	}
+	return nil
+}
+
+func (m *Certification) GetExpireDate() *date.Date {
+	if m != nil {
+		return m.ExpireDate
+	}
+	return nil
+}
+
+func (m *Certification) GetAuthority() string {
+	if m != nil {
+		return m.Authority
+	}
+	return ""
+}
+
+func (m *Certification) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+// RecruitingNote represents a note/comment regarding the recruiting for a
+// candidate. For example, "This candidate is a potential match for a frontend
+// engineer at SF".
+type RecruitingNote struct {
+	// Optional.
+	//
+	// The content of note.
+	//
+	// Number of characters allowed is 4,000.
+	Note string `protobuf:"bytes,1,opt,name=note,proto3" json:"note,omitempty"`
+	// Optional.
+	//
+	// The person who wrote the notes.
+	//
+	// Number of characters allowed is 100.
+	Commenter string `protobuf:"bytes,2,opt,name=commenter,proto3" json:"commenter,omitempty"`
+	// Optional.
+	//
+	// The create date of the note.
+	CreateDate *date.Date `protobuf:"bytes,3,opt,name=create_date,json=createDate,proto3" json:"create_date,omitempty"`
+	// Optional.
+	//
+	// The note type.
+	//
+	// Number of characters allowed is 100.
+	Type                 string   `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RecruitingNote) Reset()         { *m = RecruitingNote{} }
+func (m *RecruitingNote) String() string { return proto.CompactTextString(m) }
+func (*RecruitingNote) ProtoMessage()    {}
+func (*RecruitingNote) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_bb9206fda8e136da, []int{16}
+}
+func (m *RecruitingNote) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RecruitingNote.Unmarshal(m, b)
+}
+func (m *RecruitingNote) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RecruitingNote.Marshal(b, m, deterministic)
+}
+func (dst *RecruitingNote) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RecruitingNote.Merge(dst, src)
+}
+func (m *RecruitingNote) XXX_Size() int {
+	return xxx_messageInfo_RecruitingNote.Size(m)
+}
+func (m *RecruitingNote) XXX_DiscardUnknown() {
+	xxx_messageInfo_RecruitingNote.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RecruitingNote proto.InternalMessageInfo
+
+func (m *RecruitingNote) GetNote() string {
+	if m != nil {
+		return m.Note
+	}
+	return ""
+}
+
+func (m *RecruitingNote) GetCommenter() string {
+	if m != nil {
+		return m.Commenter
+	}
+	return ""
+}
+
+func (m *RecruitingNote) GetCreateDate() *date.Date {
+	if m != nil {
+		return m.CreateDate
+	}
+	return nil
+}
+
+func (m *RecruitingNote) GetType() string {
+	if m != nil {
+		return m.Type
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*Profile)(nil), "google.cloud.talent.v4beta1.Profile")
+	proto.RegisterMapType((map[string]*CustomAttribute)(nil), "google.cloud.talent.v4beta1.Profile.CustomAttributesEntry")
+	proto.RegisterType((*PersonName)(nil), "google.cloud.talent.v4beta1.PersonName")
+	proto.RegisterType((*PersonName_PersonStructuredName)(nil), "google.cloud.talent.v4beta1.PersonName.PersonStructuredName")
+	proto.RegisterType((*Address)(nil), "google.cloud.talent.v4beta1.Address")
+	proto.RegisterType((*Email)(nil), "google.cloud.talent.v4beta1.Email")
+	proto.RegisterType((*Phone)(nil), "google.cloud.talent.v4beta1.Phone")
+	proto.RegisterType((*PersonalUri)(nil), "google.cloud.talent.v4beta1.PersonalUri")
+	proto.RegisterType((*AdditionalContactInfo)(nil), "google.cloud.talent.v4beta1.AdditionalContactInfo")
+	proto.RegisterType((*EmploymentRecord)(nil), "google.cloud.talent.v4beta1.EmploymentRecord")
+	proto.RegisterType((*EducationRecord)(nil), "google.cloud.talent.v4beta1.EducationRecord")
+	proto.RegisterType((*Degree)(nil), "google.cloud.talent.v4beta1.Degree")
+	proto.RegisterType((*Skill)(nil), "google.cloud.talent.v4beta1.Skill")
+	proto.RegisterType((*Activity)(nil), "google.cloud.talent.v4beta1.Activity")
+	proto.RegisterType((*Publication)(nil), "google.cloud.talent.v4beta1.Publication")
+	proto.RegisterType((*Patent)(nil), "google.cloud.talent.v4beta1.Patent")
+	proto.RegisterType((*JobApplication)(nil), "google.cloud.talent.v4beta1.JobApplication")
+	proto.RegisterType((*Certification)(nil), "google.cloud.talent.v4beta1.Certification")
+	proto.RegisterType((*RecruitingNote)(nil), "google.cloud.talent.v4beta1.RecruitingNote")
+	proto.RegisterEnum("google.cloud.talent.v4beta1.Phone_PhoneType", Phone_PhoneType_name, Phone_PhoneType_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.Skill_SkillProficiencyLevel", Skill_SkillProficiencyLevel_name, Skill_SkillProficiencyLevel_value)
+	proto.RegisterEnum("google.cloud.talent.v4beta1.JobApplication_ApplicationStatus", JobApplication_ApplicationStatus_name, JobApplication_ApplicationStatus_value)
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/profile.proto", fileDescriptor_profile_bb9206fda8e136da)
+}
+
+var fileDescriptor_profile_bb9206fda8e136da = []byte{
+	// 2880 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0x4f, 0x73, 0xdb, 0xc6,
+	0x15, 0x37, 0x45, 0x51, 0x14, 0x1f, 0xff, 0x88, 0x5a, 0x4b, 0x0a, 0xa2, 0x38, 0xb1, 0x42, 0xd7,
+	0xb5, 0x93, 0x26, 0x52, 0xa3, 0xa4, 0x4d, 0x9a, 0x3f, 0x6d, 0x28, 0x12, 0xb6, 0x10, 0x53, 0x14,
+	0x67, 0x49, 0xa9, 0x71, 0xa7, 0x33, 0x18, 0x08, 0x58, 0x52, 0xab, 0x80, 0x00, 0x82, 0x05, 0x64,
+	0xeb, 0xda, 0x63, 0xa7, 0x33, 0x9d, 0x4e, 0x67, 0x7a, 0xe9, 0xad, 0xbd, 0xa6, 0xbd, 0xf5, 0x33,
+	0xf4, 0xde, 0x4b, 0x2f, 0x3d, 0xf5, 0x2b, 0xf4, 0x0b, 0x74, 0xf6, 0x0f, 0x40, 0x90, 0x96, 0x28,
+	0xb9, 0xe3, 0x5e, 0x38, 0xd8, 0xb7, 0xef, 0xf7, 0x76, 0xf7, 0xbd, 0xb7, 0xfb, 0x7e, 0xbb, 0x84,
+	0x77, 0x46, 0xbe, 0x3f, 0x72, 0xc9, 0x8e, 0xed, 0xfa, 0xb1, 0xb3, 0x13, 0x59, 0x2e, 0xf1, 0xa2,
+	0x9d, 0xf3, 0x8f, 0x4e, 0x48, 0x64, 0x7d, 0xb0, 0x13, 0x84, 0xfe, 0x90, 0xba, 0x64, 0x3b, 0x08,
+	0xfd, 0xc8, 0x47, 0x6f, 0x48, 0xd5, 0x6d, 0xa1, 0xba, 0x2d, 0x55, 0xb7, 0x95, 0xea, 0xe6, 0x1d,
+	0x65, 0xc7, 0x0a, 0xe8, 0x8e, 0xe5, 0x79, 0x7e, 0x64, 0x45, 0xd4, 0xf7, 0x98, 0x84, 0x6e, 0x3e,
+	0x9c, 0x37, 0x8a, 0xed, 0x8f, 0xc7, 0xbe, 0xa7, 0x34, 0xef, 0xcf, 0xd3, 0x3c, 0xf3, 0x4f, 0x94,
+	0xda, 0x5d, 0xa5, 0x26, 0x5a, 0x27, 0xf1, 0x70, 0x27, 0xa2, 0x63, 0xc2, 0x22, 0x6b, 0x1c, 0x28,
+	0x85, 0xb7, 0x66, 0x15, 0x9e, 0x85, 0x56, 0x10, 0x90, 0x30, 0x99, 0xd1, 0x86, 0xea, 0x8f, 0x2e,
+	0x02, 0xb2, 0xe3, 0x58, 0x91, 0x5a, 0xe4, 0xe6, 0x56, 0x56, 0x1e, 0xf8, 0x2c, 0xb2, 0x5c, 0xd3,
+	0x72, 0x9c, 0x90, 0x30, 0x85, 0x6c, 0x7c, 0x57, 0x83, 0x62, 0x4f, 0x3a, 0x06, 0x21, 0x58, 0xf4,
+	0xac, 0x31, 0xd1, 0x72, 0x5b, 0xb9, 0x87, 0x25, 0x2c, 0xbe, 0xd1, 0x5d, 0x28, 0x93, 0xe7, 0x11,
+	0x09, 0x3d, 0xcb, 0x35, 0xa9, 0xa3, 0x2d, 0x88, 0x2e, 0x48, 0x44, 0x86, 0x83, 0x36, 0x60, 0x89,
+	0xf9, 0x71, 0x68, 0x13, 0x2d, 0x2f, 0xfa, 0x54, 0x0b, 0xd5, 0x21, 0x1f, 0x87, 0x54, 0x5b, 0x14,
+	0x42, 0xfe, 0x89, 0x5e, 0x87, 0xe5, 0x51, 0xe8, 0xc7, 0x01, 0xb7, 0x53, 0x10, 0xe2, 0xa2, 0x68,
+	0x1b, 0x0e, 0xfa, 0x09, 0x00, 0x65, 0xe6, 0x29, 0x0d, 0xad, 0x13, 0x97, 0x68, 0x4b, 0x5b, 0xb9,
+	0x87, 0xe5, 0xdd, 0xcd, 0x6d, 0x15, 0xa1, 0x64, 0xd1, 0xdb, 0x7b, 0xbe, 0xef, 0x1e, 0x5b, 0x6e,
+	0x4c, 0x70, 0x89, 0xb2, 0x7d, 0xa9, 0x8c, 0x3e, 0x83, 0xb2, 0x1d, 0x12, 0x2b, 0x22, 0x26, 0x77,
+	0x9a, 0x56, 0xbc, 0x02, 0x3b, 0x48, 0x3c, 0x8a, 0x41, 0xaa, 0x73, 0x01, 0x07, 0xc7, 0x81, 0x93,
+	0x82, 0x97, 0xaf, 0x07, 0x4b, 0x75, 0x01, 0x7e, 0x1b, 0x2a, 0x21, 0x61, 0xf1, 0x98, 0x98, 0xa7,
+	0xe1, 0xf3, 0xb1, 0xab, 0x81, 0x58, 0x53, 0x59, 0xca, 0xf6, 0xb9, 0x08, 0x7d, 0x05, 0x15, 0x1e,
+	0x25, 0xdf, 0x33, 0xb9, 0x33, 0x99, 0x56, 0xde, 0xca, 0x3f, 0x2c, 0xef, 0x3e, 0xd8, 0x9e, 0x93,
+	0x7b, 0xdb, 0x3d, 0x01, 0xe8, 0x5a, 0x63, 0x82, 0xcb, 0x41, 0xfa, 0xcd, 0xd0, 0x1e, 0x94, 0x54,
+	0xe8, 0x08, 0xd3, 0x2a, 0xc2, 0xd0, 0xf7, 0xe6, 0x1a, 0x6a, 0x4a, 0x6d, 0x3c, 0x81, 0xa1, 0x27,
+	0xb0, 0x42, 0xc6, 0x16, 0x4d, 0x93, 0x80, 0x30, 0xad, 0x2a, 0x2c, 0x35, 0xe6, 0x5a, 0xd2, 0x39,
+	0x06, 0xd7, 0x04, 0xb4, 0x99, 0x1a, 0x7b, 0x0c, 0xd5, 0xe0, 0xd4, 0xf7, 0x88, 0xe9, 0xc5, 0xe3,
+	0x13, 0x12, 0x32, 0xad, 0x76, 0x03, 0x53, 0x3d, 0x8e, 0xc0, 0x15, 0x01, 0xec, 0x4a, 0x1c, 0x3a,
+	0x80, 0xaa, 0x5c, 0xa8, 0xe5, 0x9a, 0x71, 0x48, 0x99, 0xb6, 0x22, 0x0c, 0x3d, 0xbc, 0x81, 0x9b,
+	0x2c, 0xf7, 0x28, 0xa4, 0xb8, 0x12, 0x4c, 0x1a, 0x0c, 0x9d, 0xc1, 0x6b, 0x96, 0xe3, 0x50, 0xbe,
+	0x63, 0x2d, 0xd7, 0xb4, 0x7d, 0x2f, 0xb2, 0xec, 0xc8, 0xa4, 0xde, 0xd0, 0xd7, 0xea, 0xc2, 0xf0,
+	0xee, 0x75, 0x6e, 0x53, 0xd8, 0x96, 0x84, 0x1a, 0xde, 0xd0, 0xc7, 0xeb, 0xd6, 0x65, 0x62, 0xf4,
+	0x4b, 0x40, 0x64, 0x1c, 0xb8, 0xfe, 0xc5, 0x98, 0x78, 0x91, 0x19, 0x12, 0xdb, 0x0f, 0x1d, 0xa6,
+	0xad, 0x8a, 0x61, 0xde, 0xbf, 0xc6, 0xa7, 0x09, 0x0c, 0x0b, 0x14, 0x5e, 0x25, 0x33, 0x12, 0x86,
+	0x9e, 0xc2, 0x2a, 0x71, 0x62, 0x5b, 0x1c, 0x3e, 0xa9, 0x71, 0x24, 0x8c, 0xbf, 0x37, 0xdf, 0x78,
+	0x82, 0x52, 0xb6, 0xeb, 0x64, 0x5a, 0xc0, 0xd0, 0xa7, 0xb0, 0xc4, 0xbe, 0xa1, 0xae, 0xcb, 0xb4,
+	0xdb, 0x37, 0x88, 0x5a, 0x9f, 0xab, 0x62, 0x85, 0x40, 0x3a, 0x80, 0x65, 0x47, 0xf4, 0x9c, 0x46,
+	0x94, 0x30, 0x6d, 0x4d, 0xe0, 0xef, 0xcf, 0xf7, 0xa9, 0x54, 0xbf, 0xc0, 0x19, 0x20, 0xea, 0x40,
+	0x25, 0x88, 0x4f, 0x5c, 0x2a, 0x27, 0xc6, 0xb4, 0xf5, 0x9b, 0x44, 0x7d, 0x02, 0xc0, 0x53, 0x68,
+	0xf4, 0x05, 0x14, 0x03, 0x2b, 0x22, 0x5e, 0xc4, 0xb4, 0x0d, 0x61, 0xe8, 0xde, 0x7c, 0x43, 0x42,
+	0x17, 0x27, 0x18, 0x84, 0xa1, 0x66, 0x93, 0x30, 0xa2, 0xc3, 0x74, 0x3a, 0xaf, 0x09, 0x2b, 0xef,
+	0xce, 0xb5, 0xd2, 0xca, 0x42, 0xf0, 0x8c, 0x05, 0x74, 0x0c, 0xf5, 0x33, 0xff, 0xc4, 0xb4, 0x82,
+	0x60, 0xb2, 0x48, 0x4d, 0x58, 0xfd, 0xc1, 0x5c, 0xab, 0x5f, 0xf9, 0x27, 0xcd, 0x09, 0x06, 0xaf,
+	0x9c, 0x4d, 0xb5, 0x85, 0xdd, 0x90, 0xd8, 0x61, 0x4c, 0x23, 0xea, 0x8d, 0x4c, 0xcf, 0x8f, 0x08,
+	0xd3, 0x5e, 0xbf, 0x81, 0x5d, 0x9c, 0x82, 0xba, 0x7e, 0x44, 0xf0, 0x4a, 0x38, 0xd5, 0x66, 0x68,
+	0x04, 0xab, 0x76, 0xcc, 0x22, 0x7f, 0x6c, 0x5a, 0x51, 0x14, 0xd2, 0x93, 0x98, 0x1b, 0xde, 0x14,
+	0x86, 0x3f, 0x9d, 0xef, 0x4c, 0x55, 0x59, 0x5b, 0x02, 0xdd, 0x4c, 0xc1, 0xba, 0x17, 0x85, 0x17,
+	0xb8, 0x6e, 0xcf, 0x88, 0xd1, 0x1d, 0x28, 0x05, 0xa1, 0x6f, 0xf3, 0x63, 0xc4, 0xd1, 0xde, 0xd8,
+	0xca, 0x3d, 0x5c, 0xc6, 0x13, 0x01, 0x7a, 0x00, 0x2b, 0xdf, 0x90, 0x8b, 0x67, 0x7e, 0xe8, 0x98,
+	0xcc, 0xa3, 0x41, 0x40, 0x22, 0xed, 0x8e, 0x38, 0x5a, 0x6b, 0x4a, 0xdc, 0x97, 0xd2, 0xcd, 0x6f,
+	0x61, 0xfd, 0xd2, 0x11, 0x79, 0xed, 0xf9, 0x86, 0x5c, 0xa8, 0x3a, 0xc6, 0x3f, 0xd1, 0x1e, 0x14,
+	0xce, 0x79, 0xe5, 0x10, 0x05, 0xec, 0xba, 0xdd, 0x33, 0x63, 0x14, 0x4b, 0xe8, 0xa7, 0x0b, 0x9f,
+	0xe4, 0x1a, 0xbf, 0xc9, 0x03, 0x4c, 0x0e, 0x68, 0xf4, 0x00, 0x6a, 0x43, 0x3f, 0x1c, 0x5b, 0x51,
+	0x44, 0x1c, 0x73, 0x52, 0x3b, 0xf7, 0x6f, 0xe1, 0x6a, 0x2a, 0x17, 0x8a, 0x23, 0x58, 0x61, 0x51,
+	0x18, 0xdb, 0x51, 0x1c, 0x26, 0x9a, 0x72, 0x26, 0x9f, 0xdf, 0xb0, 0x16, 0xa8, 0xcf, 0x7e, 0x6a,
+	0x84, 0x0b, 0xf7, 0x6f, 0xe1, 0x1a, 0x9b, 0x92, 0xa0, 0xfb, 0x50, 0x0b, 0x42, 0x32, 0x24, 0x61,
+	0x3a, 0x8e, 0x2c, 0xcb, 0xd5, 0x54, 0xca, 0xd5, 0x36, 0xff, 0x96, 0x83, 0xb5, 0xcb, 0x2c, 0xa2,
+	0x37, 0x01, 0x46, 0xf4, 0x9c, 0x78, 0x99, 0xd5, 0xe0, 0x92, 0x90, 0x24, 0xe6, 0xc7, 0xd4, 0x71,
+	0x5c, 0x62, 0x52, 0x8f, 0x46, 0xd4, 0x72, 0x15, 0x23, 0xa8, 0x4a, 0xa9, 0x21, 0x85, 0x9c, 0x35,
+	0x0c, 0xad, 0x31, 0x75, 0x2f, 0xb2, 0x53, 0x00, 0x29, 0x12, 0x76, 0x36, 0x61, 0x99, 0xc5, 0xc3,
+	0x21, 0x7d, 0x4e, 0x98, 0xb6, 0xb8, 0x95, 0x7f, 0x58, 0xc2, 0x69, 0x9b, 0xf7, 0xf1, 0xc9, 0x8a,
+	0xbe, 0x82, 0xec, 0x4b, 0xda, 0x7b, 0x55, 0x28, 0x67, 0x0a, 0x6a, 0xe3, 0x0f, 0x0b, 0x50, 0x54,
+	0x05, 0x09, 0xb5, 0xa0, 0x10, 0x33, 0x6b, 0x24, 0x27, 0x5d, 0xbb, 0xe6, 0xf4, 0xcd, 0x9c, 0xe1,
+	0x47, 0x1c, 0x84, 0x25, 0x16, 0x7d, 0x08, 0x6b, 0xb1, 0x97, 0x89, 0x94, 0xaa, 0x93, 0x72, 0x95,
+	0xfb, 0xb7, 0xf0, 0xed, 0x6c, 0x6f, 0x32, 0xf2, 0x13, 0x40, 0x97, 0x40, 0xf2, 0xd3, 0x64, 0x82,
+	0x53, 0xb0, 0xed, 0x9e, 0xa0, 0x60, 0x0a, 0xb7, 0x7f, 0x0b, 0xaf, 0xbe, 0x68, 0x4c, 0x52, 0x21,
+	0x3b, 0x0e, 0x43, 0xe2, 0x45, 0x82, 0x3e, 0x5d, 0x4b, 0x85, 0x5a, 0x52, 0x79, 0xaf, 0x04, 0x45,
+	0x35, 0x78, 0xe3, 0x5b, 0x28, 0x88, 0xa2, 0xfd, 0x6a, 0xbc, 0x72, 0x0f, 0xaa, 0x53, 0xb4, 0x41,
+	0x05, 0xbd, 0x92, 0x25, 0x04, 0x8d, 0xff, 0x2c, 0x40, 0x41, 0x54, 0xf7, 0x57, 0x33, 0xe6, 0x97,
+	0xb0, 0xc8, 0x5d, 0x26, 0x86, 0xaa, 0x5d, 0xb3, 0x61, 0xc5, 0xb0, 0xf2, 0x77, 0x70, 0x11, 0x10,
+	0x2c, 0x90, 0x9c, 0x99, 0x4a, 0x66, 0x92, 0x30, 0x53, 0xd9, 0xe2, 0x39, 0xfc, 0xec, 0x94, 0x78,
+	0xa6, 0x75, 0x6e, 0x51, 0x57, 0x10, 0x4e, 0x49, 0x52, 0xab, 0x5c, 0xda, 0x4c, 0x84, 0x8d, 0x3f,
+	0xe7, 0xa0, 0x94, 0x9a, 0x44, 0x9b, 0xb0, 0xd1, 0xdb, 0x3f, 0xec, 0xea, 0xe6, 0xe0, 0x69, 0x4f,
+	0x37, 0x8f, 0xba, 0xfd, 0x9e, 0xde, 0x32, 0x1e, 0x19, 0x7a, 0xbb, 0x7e, 0x0b, 0x55, 0x60, 0xb9,
+	0xd3, 0xec, 0xb6, 0x3b, 0x46, 0x57, 0xaf, 0xe7, 0x10, 0xc0, 0xd2, 0xc1, 0xe1, 0x9e, 0xd1, 0xd1,
+	0xeb, 0x0b, 0xa8, 0x08, 0xf9, 0x47, 0xcd, 0xaf, 0xeb, 0x79, 0x54, 0x82, 0x42, 0xaf, 0xf9, 0x58,
+	0xc7, 0xf5, 0x45, 0x54, 0x03, 0x18, 0x0c, 0x9e, 0x9a, 0x87, 0xd8, 0x1c, 0xb4, 0xdb, 0xf5, 0x02,
+	0xaa, 0x42, 0xe9, 0xf8, 0xd0, 0x68, 0xe9, 0x07, 0x4d, 0xa3, 0x53, 0x5f, 0x42, 0x65, 0x28, 0x1e,
+	0x1b, 0x78, 0x70, 0xd4, 0xec, 0xd4, 0x8b, 0x68, 0x19, 0x16, 0x8f, 0x0f, 0x8d, 0x5e, 0x7d, 0x19,
+	0x6d, 0x00, 0x92, 0x56, 0x39, 0x30, 0x1d, 0xad, 0xd4, 0xb8, 0x0b, 0xe5, 0x0c, 0x13, 0x4a, 0x58,
+	0x77, 0x2e, 0x65, 0xdd, 0x8d, 0xdf, 0xe6, 0x60, 0xfd, 0x52, 0x4a, 0xf3, 0x6a, 0xc2, 0x94, 0xdc,
+	0x19, 0x16, 0x32, 0x77, 0x86, 0x37, 0x01, 0x52, 0xd6, 0xe5, 0x28, 0xe7, 0x97, 0x94, 0xc4, 0x70,
+	0x1a, 0x7f, 0x29, 0x40, 0x7d, 0x96, 0xfd, 0xa0, 0x1f, 0x02, 0xb0, 0xc8, 0x0a, 0x23, 0x93, 0xd3,
+	0x6b, 0x31, 0xa3, 0xf2, 0xee, 0xea, 0xd4, 0xde, 0x69, 0x5b, 0x11, 0xc1, 0x25, 0xa1, 0xc4, 0x3f,
+	0xd1, 0x7b, 0xb0, 0x4c, 0x3c, 0x47, 0xea, 0x2f, 0x5c, 0xa5, 0x5f, 0x24, 0x9e, 0x23, 0xb4, 0x45,
+	0x0a, 0xf3, 0x31, 0x49, 0x98, 0x3d, 0x93, 0x2a, 0x89, 0x50, 0x9c, 0x4a, 0xf7, 0xa0, 0xea, 0xd0,
+	0x73, 0xca, 0xa8, 0x3a, 0x5f, 0x54, 0x62, 0x54, 0x12, 0xa1, 0x50, 0xfa, 0x69, 0xba, 0xcb, 0xc4,
+	0x2d, 0xe6, 0xa6, 0x2c, 0x3c, 0x01, 0xa1, 0x37, 0xa0, 0xc4, 0x59, 0x41, 0x44, 0x23, 0x75, 0xd5,
+	0x29, 0xe1, 0xe5, 0x33, 0xff, 0x64, 0xc0, 0xdb, 0xbc, 0xf6, 0xf1, 0x4e, 0x87, 0x30, 0x3b, 0xa4,
+	0x01, 0x8f, 0x99, 0xb8, 0xd1, 0x94, 0x70, 0xed, 0xcc, 0x3f, 0x69, 0x4f, 0xa4, 0xa8, 0x07, 0x1b,
+	0x94, 0x99, 0x2c, 0x0e, 0x48, 0x78, 0x4e, 0x19, 0x71, 0xcc, 0xc0, 0x67, 0x22, 0xc6, 0x57, 0x5e,
+	0x62, 0x26, 0x47, 0xc6, 0x1a, 0x65, 0xfd, 0x14, 0xd8, 0x53, 0x38, 0xd4, 0x86, 0x3a, 0xb7, 0x48,
+	0xdc, 0xa1, 0xa9, 0x9c, 0xe2, 0x68, 0xa5, 0x6b, 0x6d, 0xd5, 0x28, 0xeb, 0x13, 0x77, 0xa8, 0x2b,
+	0xc4, 0xcc, 0xf1, 0x05, 0x2f, 0x71, 0x7c, 0xa1, 0x77, 0x61, 0x35, 0x75, 0x4c, 0x5a, 0xf9, 0xcb,
+	0x62, 0xf5, 0x2b, 0x89, 0x83, 0x54, 0xe9, 0x47, 0x3f, 0x86, 0xd7, 0x66, 0xfc, 0x94, 0x22, 0x2a,
+	0x02, 0xb1, 0x3e, 0xed, 0xaf, 0x04, 0xb7, 0x0b, 0xeb, 0x53, 0x69, 0x90, 0xa2, 0xaa, 0x02, 0x75,
+	0x3b, 0x9b, 0x0e, 0x0a, 0xd3, 0xf8, 0xf7, 0x22, 0xac, 0xcc, 0x10, 0xea, 0xff, 0x7b, 0xba, 0x3e,
+	0x01, 0x8d, 0x3c, 0x0f, 0x88, 0xcd, 0x79, 0xc5, 0x28, 0xb4, 0x9c, 0x58, 0xde, 0x01, 0x04, 0x3a,
+	0x7f, 0x15, 0x7a, 0x23, 0x81, 0x3c, 0x4e, 0x11, 0xc2, 0xd8, 0x5d, 0x28, 0x33, 0xfb, 0xd4, 0xf7,
+	0xdd, 0x6c, 0x52, 0x83, 0x14, 0xbd, 0x92, 0x94, 0xde, 0x01, 0xe4, 0x90, 0x51, 0x48, 0xc8, 0x54,
+	0xe2, 0x2e, 0xa9, 0x9a, 0xb9, 0x2a, 0xfb, 0xb2, 0xd9, 0x8b, 0x21, 0x53, 0xf9, 0x4c, 0xd9, 0xaf,
+	0xae, 0xee, 0xf3, 0x69, 0x7b, 0x5b, 0xa8, 0xee, 0xdf, 0xc2, 0xf5, 0x09, 0x5e, 0xca, 0xd0, 0x16,
+	0x94, 0xb3, 0xa3, 0x2f, 0xcb, 0xdb, 0x78, 0x46, 0x34, 0x93, 0x9b, 0xa5, 0x97, 0xc9, 0xcd, 0x6d,
+	0xb8, 0x9d, 0x71, 0x61, 0x9a, 0x35, 0xf2, 0xca, 0xbf, 0x3a, 0x71, 0x65, 0x92, 0x67, 0xf7, 0xa1,
+	0xa6, 0x3c, 0x32, 0x9d, 0xc8, 0x55, 0x29, 0x55, 0x6a, 0x7b, 0xcb, 0xb0, 0x24, 0x05, 0x8d, 0x3f,
+	0xe6, 0x60, 0x49, 0x2d, 0x64, 0x9f, 0x2f, 0x44, 0x60, 0x45, 0x01, 0x94, 0xa7, 0xf3, 0x83, 0x1b,
+	0xb8, 0x45, 0xd4, 0x3e, 0x70, 0xd2, 0x6f, 0x1e, 0x78, 0x65, 0x29, 0x73, 0x46, 0x2b, 0x05, 0x11,
+	0xf8, 0xef, 0xc3, 0xca, 0x90, 0x12, 0xd7, 0x61, 0xa6, 0x3f, 0x34, 0x59, 0x14, 0x3b, 0x17, 0x5a,
+	0x5e, 0x30, 0xae, 0xaa, 0x14, 0x1f, 0x0e, 0xfb, 0x5c, 0xd8, 0xf8, 0x5d, 0x1e, 0x0a, 0xe2, 0x0e,
+	0x88, 0xde, 0x86, 0x8a, 0x43, 0x59, 0xe0, 0x5a, 0x17, 0x59, 0x86, 0x58, 0x56, 0x32, 0x61, 0xf4,
+	0x63, 0xa8, 0xb9, 0x16, 0x8b, 0xcc, 0x98, 0x1f, 0x4b, 0xf3, 0xf3, 0xbd, 0xc2, 0x15, 0x8f, 0x18,
+	0x91, 0x49, 0xdf, 0x85, 0x82, 0x4b, 0xce, 0x89, 0x2b, 0x32, 0xbc, 0xb6, 0xfb, 0xc9, 0xf5, 0x57,
+	0x52, 0xf9, 0x2b, 0xae, 0x1f, 0x36, 0x25, 0x9e, 0x7d, 0xd1, 0xe1, 0x78, 0x2c, 0xcd, 0x20, 0x0d,
+	0x8a, 0xbc, 0xea, 0x90, 0xe7, 0x91, 0xca, 0xf9, 0xa4, 0x89, 0xde, 0x03, 0x24, 0xee, 0xb2, 0xd3,
+	0xd1, 0x94, 0x8f, 0x52, 0x75, 0xd1, 0x93, 0x3d, 0x00, 0x7e, 0x9f, 0x83, 0xf5, 0x4b, 0x07, 0x42,
+	0x0f, 0xe0, 0x5e, 0xff, 0x89, 0xd1, 0xe9, 0x98, 0x3d, 0x7c, 0xf8, 0xc8, 0x68, 0x19, 0x7a, 0xb7,
+	0xf5, 0xd4, 0xec, 0xe8, 0xc7, 0x7a, 0x67, 0x86, 0x22, 0xbc, 0x0e, 0xeb, 0x8f, 0x8e, 0xba, 0xed,
+	0xe6, 0x81, 0xde, 0x1d, 0x34, 0x3b, 0x66, 0xf3, 0xe7, 0x4d, 0xac, 0x77, 0xf5, 0x7e, 0x5f, 0xf2,
+	0x85, 0xee, 0xe1, 0xb1, 0xd1, 0xe2, 0x7c, 0xa1, 0x0e, 0x15, 0xa3, 0x3b, 0xd0, 0xf1, 0x81, 0xde,
+	0x36, 0x9a, 0x03, 0xbd, 0x9e, 0xe7, 0xdc, 0xa2, 0xd9, 0x3e, 0x6e, 0x76, 0x5b, 0x7a, 0xbb, 0xbe,
+	0xc8, 0x75, 0xf5, 0xaf, 0x7b, 0x3a, 0x1e, 0xd4, 0x0b, 0x8d, 0x7f, 0xe6, 0x61, 0x39, 0xb9, 0x57,
+	0xdf, 0x24, 0x2c, 0x33, 0xfb, 0x63, 0xe1, 0xc5, 0xfd, 0xa1, 0xc8, 0x43, 0x7e, 0xf2, 0x64, 0xb7,
+	0x9b, 0x3e, 0xae, 0x89, 0x38, 0x2e, 0x5e, 0x15, 0x47, 0xf5, 0xa6, 0x26, 0xa2, 0xb8, 0x9b, 0xbe,
+	0xa9, 0x09, 0x4c, 0xe1, 0x4a, 0x8c, 0xd4, 0x12, 0x98, 0xb7, 0xa1, 0x12, 0x11, 0x6b, 0x6c, 0x8e,
+	0x89, 0x7c, 0x49, 0x5a, 0x12, 0x49, 0x58, 0xe6, 0xb2, 0x03, 0x29, 0x42, 0x2d, 0x28, 0xcb, 0xe7,
+	0x07, 0x91, 0x57, 0x5a, 0xf1, 0xc6, 0xaf, 0x16, 0x20, 0x61, 0x3c, 0xcb, 0xf8, 0xf1, 0xaf, 0x1e,
+	0x20, 0x2e, 0xa6, 0x43, 0x2f, 0x4f, 0x8b, 0xdb, 0x49, 0x67, 0x76, 0x2b, 0x7f, 0x09, 0x77, 0x52,
+	0xcc, 0x65, 0xf5, 0xa6, 0x24, 0xa0, 0x9b, 0x89, 0xce, 0x25, 0x45, 0x87, 0x1f, 0x1e, 0x93, 0xa9,
+	0x67, 0x0e, 0x8f, 0xbc, 0x38, 0x3c, 0xd2, 0xe9, 0x25, 0xf9, 0xf6, 0xdd, 0x02, 0x94, 0x33, 0x0f,
+	0x1d, 0x3c, 0x8f, 0xad, 0x38, 0x3a, 0xf5, 0x43, 0xa6, 0xe5, 0x04, 0x26, 0x69, 0xa2, 0x35, 0x28,
+	0x48, 0x1e, 0x21, 0xa3, 0x29, 0x1b, 0xb3, 0x91, 0xce, 0xbf, 0x18, 0x69, 0x0d, 0x8a, 0x67, 0x7e,
+	0x1c, 0x7a, 0x96, 0x9b, 0xec, 0x0c, 0xd5, 0xe4, 0xa4, 0xf9, 0xdc, 0x77, 0xe3, 0x31, 0x51, 0xbb,
+	0x41, 0xb5, 0xc4, 0x95, 0x9d, 0x4f, 0x89, 0x9d, 0x92, 0x50, 0xb1, 0x96, 0x89, 0x00, 0x7d, 0x0e,
+	0xf5, 0xcc, 0x63, 0x8c, 0x0c, 0x7c, 0xf1, 0xaa, 0xc0, 0xaf, 0x64, 0x54, 0x45, 0xf4, 0xdf, 0x99,
+	0x46, 0x8b, 0x53, 0x4f, 0x06, 0x24, 0xab, 0x2a, 0x4e, 0x34, 0x04, 0x8b, 0x94, 0x9d, 0x78, 0xca,
+	0xe9, 0xe2, 0xbb, 0xf1, 0xd7, 0x3c, 0x2c, 0xc9, 0xe7, 0x9c, 0x9b, 0x6c, 0x83, 0x3b, 0x50, 0xa2,
+	0xde, 0x39, 0xf1, 0x22, 0xee, 0xce, 0x05, 0xe1, 0xce, 0x89, 0x80, 0x33, 0x40, 0xf9, 0x22, 0x64,
+	0xb2, 0xc8, 0x8a, 0x62, 0x96, 0xd0, 0x44, 0x29, 0xec, 0x0b, 0x19, 0xfa, 0x19, 0xa0, 0x29, 0xa5,
+	0x6b, 0x36, 0x47, 0x3d, 0x0b, 0x16, 0x0b, 0x9e, 0x18, 0x18, 0x52, 0x97, 0x7a, 0xa3, 0x6b, 0x76,
+	0x8a, 0x32, 0xf0, 0x48, 0xe8, 0x26, 0x6c, 0x56, 0x19, 0xf0, 0x87, 0x43, 0x6a, 0x27, 0x3c, 0x52,
+	0x4d, 0xf3, 0x50, 0xc8, 0x32, 0x4a, 0xea, 0x1a, 0x54, 0xcc, 0x2a, 0xc9, 0xc7, 0x57, 0xf4, 0x7e,
+	0x3a, 0x95, 0x17, 0x8b, 0xe7, 0xaa, 0xec, 0xc9, 0x16, 0xee, 0x99, 0x5d, 0x58, 0xfa, 0x5f, 0x76,
+	0x61, 0xe3, 0x1f, 0x45, 0xa8, 0x4d, 0xbf, 0x71, 0xa1, 0x5d, 0xc8, 0x9f, 0xf9, 0x27, 0x8a, 0x48,
+	0x6d, 0x5d, 0xf7, 0x3a, 0x86, 0xb9, 0x32, 0xaf, 0xb1, 0x99, 0xa7, 0xb5, 0xc9, 0xbf, 0x13, 0xd5,
+	0x8c, 0xd4, 0x70, 0x78, 0x6e, 0x66, 0xd5, 0xe6, 0x53, 0xa8, 0x95, 0x8c, 0xaa, 0xf0, 0xf4, 0x9b,
+	0x00, 0xa2, 0x98, 0xb1, 0x88, 0xdf, 0x94, 0xe4, 0x66, 0x29, 0x71, 0x49, 0x9f, 0x0b, 0x50, 0x1f,
+	0x0a, 0x3c, 0x07, 0x64, 0xf0, 0x6a, 0xbb, 0x5f, 0xbc, 0xc4, 0xbb, 0xde, 0x76, 0xe6, 0x5b, 0xe6,
+	0x06, 0x96, 0xb6, 0x38, 0xb9, 0xb5, 0xce, 0x49, 0x68, 0x8d, 0x88, 0x49, 0xbd, 0x88, 0xf3, 0x74,
+	0xf2, 0xcc, 0x64, 0xb6, 0x1f, 0xca, 0x38, 0xe7, 0xf0, 0xba, 0xea, 0x36, 0x92, 0xde, 0x3e, 0xef,
+	0x44, 0x1f, 0x83, 0x36, 0xa3, 0x6f, 0x32, 0xdb, 0x72, 0x09, 0x77, 0x8d, 0x8c, 0xfd, 0x3a, 0x9d,
+	0x42, 0xf4, 0x79, 0xaf, 0xc1, 0xd9, 0xec, 0x9a, 0x4c, 0x11, 0x4e, 0x03, 0x52, 0x15, 0x26, 0xd2,
+	0xa0, 0x80, 0x91, 0xec, 0x3b, 0x1c, 0xa6, 0xc3, 0x31, 0xd4, 0x81, 0x35, 0xca, 0x92, 0x7b, 0x02,
+	0x31, 0x93, 0xb7, 0xa5, 0x1b, 0x90, 0x2a, 0x44, 0x99, 0xba, 0x2c, 0x10, 0xac, 0x50, 0xb3, 0x7f,
+	0xc3, 0xc0, 0x4b, 0xfd, 0x0d, 0x73, 0x1f, 0x6a, 0x7e, 0x1c, 0xd9, 0xfe, 0x98, 0x4f, 0xc3, 0x62,
+	0xbe, 0x97, 0x50, 0x2d, 0x25, 0xc5, 0x42, 0x88, 0x3e, 0x80, 0xb5, 0x44, 0x4d, 0x5e, 0x95, 0xce,
+	0x89, 0xc7, 0x09, 0x6f, 0x45, 0x78, 0xf4, 0xb6, 0xea, 0xeb, 0x65, 0xba, 0xd0, 0x8f, 0x60, 0x99,
+	0x32, 0x73, 0x6c, 0x45, 0xf6, 0xa9, 0xb8, 0x1f, 0xcc, 0x5f, 0x58, 0x91, 0xb2, 0x03, 0xae, 0x7a,
+	0xf9, 0x3d, 0xa6, 0x76, 0xe9, 0x3d, 0xa6, 0xf1, 0xf7, 0x1c, 0xac, 0xbe, 0x90, 0x07, 0xa8, 0x01,
+	0x6f, 0x35, 0x7b, 0xbd, 0x8e, 0xd1, 0x6a, 0x0e, 0x8c, 0xc3, 0xae, 0xd9, 0x1f, 0x34, 0x07, 0x47,
+	0xfd, 0x19, 0x46, 0x81, 0xa0, 0x76, 0xf8, 0xe8, 0x91, 0x8e, 0x4d, 0xfd, 0xeb, 0x81, 0xde, 0x6d,
+	0xeb, 0xed, 0x7a, 0x8e, 0xb3, 0x0c, 0xac, 0x7f, 0xa5, 0xb7, 0x06, 0x7a, 0xdb, 0xdc, 0x7b, 0x6a,
+	0xb6, 0x9a, 0xdd, 0xb6, 0xd1, 0xe6, 0x3c, 0x62, 0x81, 0x33, 0x87, 0x66, 0x6b, 0x60, 0x1c, 0x73,
+	0x4e, 0xa1, 0xc1, 0x5a, 0x56, 0x4d, 0x3f, 0xe8, 0x75, 0x0e, 0x9f, 0x8a, 0xb7, 0x89, 0x0d, 0x40,
+	0xfb, 0x06, 0xd6, 0xdb, 0x66, 0x4f, 0xef, 0xb6, 0x8d, 0xee, 0x63, 0x53, 0xa0, 0x0b, 0x68, 0x15,
+	0xaa, 0x52, 0xde, 0x1f, 0x34, 0xf1, 0x40, 0x6f, 0xd7, 0x97, 0x50, 0x0d, 0xa0, 0x87, 0x0f, 0xf9,
+	0x8c, 0x78, 0xbb, 0xd8, 0xf8, 0x57, 0x0e, 0xaa, 0x53, 0xcf, 0xe1, 0x37, 0x39, 0x8c, 0x3f, 0x82,
+	0x8a, 0x65, 0x7f, 0x1b, 0xd3, 0x90, 0x5c, 0x43, 0x14, 0xcb, 0x4a, 0x2d, 0x61, 0x18, 0xe4, 0x79,
+	0x90, 0x82, 0xae, 0xdc, 0xcc, 0x20, 0xb5, 0x04, 0xe6, 0x0e, 0x94, 0x64, 0xd1, 0xa4, 0xd1, 0x45,
+	0xb2, 0x8d, 0x53, 0xc1, 0x6c, 0xc5, 0x2c, 0xbc, 0x50, 0x31, 0x1b, 0xbf, 0xce, 0x41, 0x6d, 0xfa,
+	0xfd, 0x5c, 0x3c, 0x7d, 0xf8, 0xd1, 0xe4, 0xef, 0x52, 0x5f, 0x0e, 0x63, 0xfb, 0xe3, 0x31, 0xe1,
+	0x3b, 0x45, 0x1d, 0x47, 0x13, 0xc1, 0x2c, 0x9d, 0xca, 0xdf, 0x84, 0x4e, 0x21, 0xf5, 0x0e, 0x26,
+	0xe7, 0x2c, 0xbe, 0xf7, 0x7e, 0x95, 0x83, 0xbb, 0xb6, 0x3f, 0x9e, 0x77, 0xd8, 0xec, 0xad, 0xa9,
+	0x47, 0x79, 0x4c, 0xe4, 0x1f, 0xb2, 0x3d, 0x9e, 0xb1, 0xbd, 0xdc, 0x2f, 0x9a, 0x0a, 0x34, 0xf2,
+	0x5d, 0xcb, 0x1b, 0x6d, 0xfb, 0xe1, 0x68, 0x67, 0x44, 0x3c, 0x91, 0xcf, 0x3b, 0xb2, 0xcb, 0x0a,
+	0x28, 0xbb, 0xf4, 0x1f, 0xeb, 0xcf, 0x64, 0xf3, 0x4f, 0x0b, 0xf9, 0xd6, 0xa0, 0x7f, 0xb2, 0x24,
+	0x30, 0x1f, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, 0x4a, 0xaa, 0x44, 0x25, 0x74, 0x1f, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/talent/v4beta1/profile_service.pb.go b/googleapis/cloud/talent/v4beta1/profile_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..507b366bababd98cbb208a0f59d432c10128a50f
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/profile_service.pb.go
@@ -0,0 +1,1158 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/profile_service.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import empty "github.com/golang/protobuf/ptypes/empty"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+import field_mask "google.golang.org/genproto/protobuf/field_mask"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// List profiles request.
+type ListProfilesRequest struct {
+	// Required.
+	//
+	// The resource name of the company under which the job is created.
+	//
+	// The format is "projects/{project_id}/companies/{company_id}", for example,
+	// "projects/api-test-project/companies/foo".
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Optional.
+	//
+	// The token that specifies the current offset (that is, starting result).
+	//
+	// Please set the value to [ListProfilesResponse.next_page_token][google.cloud.talent.v4beta1.ListProfilesResponse.next_page_token] to
+	// continue the list.
+	PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Optional.
+	//
+	// The maximum number of profiles to be returned, at most 100.
+	//
+	// Default is 100 unless a positive number smaller than 100 is specified.
+	PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	// Optional.
+	//
+	// A field mask to specify the profile fields to be listed in response.
+	// All fields are listed if it is unset.
+	//
+	// Valid values are:
+	//
+	// * name
+	FieldMask            *field_mask.FieldMask `protobuf:"bytes,4,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *ListProfilesRequest) Reset()         { *m = ListProfilesRequest{} }
+func (m *ListProfilesRequest) String() string { return proto.CompactTextString(m) }
+func (*ListProfilesRequest) ProtoMessage()    {}
+func (*ListProfilesRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_service_0d3c32b258b0649d, []int{0}
+}
+func (m *ListProfilesRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListProfilesRequest.Unmarshal(m, b)
+}
+func (m *ListProfilesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListProfilesRequest.Marshal(b, m, deterministic)
+}
+func (dst *ListProfilesRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListProfilesRequest.Merge(dst, src)
+}
+func (m *ListProfilesRequest) XXX_Size() int {
+	return xxx_messageInfo_ListProfilesRequest.Size(m)
+}
+func (m *ListProfilesRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListProfilesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListProfilesRequest proto.InternalMessageInfo
+
+func (m *ListProfilesRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *ListProfilesRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *ListProfilesRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+func (m *ListProfilesRequest) GetFieldMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.FieldMask
+	}
+	return nil
+}
+
+// The List profiles response object.
+type ListProfilesResponse struct {
+	// Profiles for the specific company.
+	Profiles []*Profile `protobuf:"bytes,1,rep,name=profiles,proto3" json:"profiles,omitempty"`
+	// A token to retrieve the next page of results. This is empty if there are no
+	// more results.
+	NextPageToken        string   `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ListProfilesResponse) Reset()         { *m = ListProfilesResponse{} }
+func (m *ListProfilesResponse) String() string { return proto.CompactTextString(m) }
+func (*ListProfilesResponse) ProtoMessage()    {}
+func (*ListProfilesResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_service_0d3c32b258b0649d, []int{1}
+}
+func (m *ListProfilesResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ListProfilesResponse.Unmarshal(m, b)
+}
+func (m *ListProfilesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ListProfilesResponse.Marshal(b, m, deterministic)
+}
+func (dst *ListProfilesResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ListProfilesResponse.Merge(dst, src)
+}
+func (m *ListProfilesResponse) XXX_Size() int {
+	return xxx_messageInfo_ListProfilesResponse.Size(m)
+}
+func (m *ListProfilesResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ListProfilesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ListProfilesResponse proto.InternalMessageInfo
+
+func (m *ListProfilesResponse) GetProfiles() []*Profile {
+	if m != nil {
+		return m.Profiles
+	}
+	return nil
+}
+
+func (m *ListProfilesResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+// Create profile request.
+type CreateProfileRequest struct {
+	// Required.
+	//
+	// The name of the company this profile belongs to.
+	//
+	// The format is "projects/{project_id}/companies/{company_id}", for example,
+	// "projects/api-test-project/companies/foo".
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Required.
+	//
+	// The profile to be created.
+	Profile              *Profile `protobuf:"bytes,2,opt,name=profile,proto3" json:"profile,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CreateProfileRequest) Reset()         { *m = CreateProfileRequest{} }
+func (m *CreateProfileRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateProfileRequest) ProtoMessage()    {}
+func (*CreateProfileRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_service_0d3c32b258b0649d, []int{2}
+}
+func (m *CreateProfileRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateProfileRequest.Unmarshal(m, b)
+}
+func (m *CreateProfileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateProfileRequest.Marshal(b, m, deterministic)
+}
+func (dst *CreateProfileRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateProfileRequest.Merge(dst, src)
+}
+func (m *CreateProfileRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateProfileRequest.Size(m)
+}
+func (m *CreateProfileRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateProfileRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateProfileRequest proto.InternalMessageInfo
+
+func (m *CreateProfileRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *CreateProfileRequest) GetProfile() *Profile {
+	if m != nil {
+		return m.Profile
+	}
+	return nil
+}
+
+// Get profile request.
+type GetProfileRequest struct {
+	// Required.
+	//
+	// Resource name of the profile to get.
+	//
+	// The format is
+	// "projects/{project_id}/companies/{company_id}/profiles/{profile_id}",
+	// for example, "projects/api-test-project/companies/foo/profiles/bar".
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetProfileRequest) Reset()         { *m = GetProfileRequest{} }
+func (m *GetProfileRequest) String() string { return proto.CompactTextString(m) }
+func (*GetProfileRequest) ProtoMessage()    {}
+func (*GetProfileRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_service_0d3c32b258b0649d, []int{3}
+}
+func (m *GetProfileRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetProfileRequest.Unmarshal(m, b)
+}
+func (m *GetProfileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetProfileRequest.Marshal(b, m, deterministic)
+}
+func (dst *GetProfileRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetProfileRequest.Merge(dst, src)
+}
+func (m *GetProfileRequest) XXX_Size() int {
+	return xxx_messageInfo_GetProfileRequest.Size(m)
+}
+func (m *GetProfileRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetProfileRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetProfileRequest proto.InternalMessageInfo
+
+func (m *GetProfileRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// Update profile request
+type UpdateProfileRequest struct {
+	// Required.
+	//
+	// Profile to be updated.
+	Profile *Profile `protobuf:"bytes,1,opt,name=profile,proto3" json:"profile,omitempty"`
+	// Optional.
+	//
+	// A field mask to specify the profile fields to update.
+	//
+	// A full update is performed if it is unset.
+	//
+	// Valid values are:
+	//
+	// * externalId
+	// * source
+	// * uri
+	// * isHirable
+	// * createTime
+	// * updateTime
+	// * resumeHrxml
+	// * personNames
+	// * addresses
+	// * emailAddresses
+	// * phoneNumbers
+	// * personalUris
+	// * additionalContactInfo
+	// * employmentRecords
+	// * educationRecords
+	// * skills
+	// * projects
+	// * publications
+	// * patents
+	// * certifications
+	// * jobApplications
+	// * recruitingNotes
+	// * customAttributes
+	UpdateMask           *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *UpdateProfileRequest) Reset()         { *m = UpdateProfileRequest{} }
+func (m *UpdateProfileRequest) String() string { return proto.CompactTextString(m) }
+func (*UpdateProfileRequest) ProtoMessage()    {}
+func (*UpdateProfileRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_service_0d3c32b258b0649d, []int{4}
+}
+func (m *UpdateProfileRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UpdateProfileRequest.Unmarshal(m, b)
+}
+func (m *UpdateProfileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UpdateProfileRequest.Marshal(b, m, deterministic)
+}
+func (dst *UpdateProfileRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UpdateProfileRequest.Merge(dst, src)
+}
+func (m *UpdateProfileRequest) XXX_Size() int {
+	return xxx_messageInfo_UpdateProfileRequest.Size(m)
+}
+func (m *UpdateProfileRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UpdateProfileRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UpdateProfileRequest proto.InternalMessageInfo
+
+func (m *UpdateProfileRequest) GetProfile() *Profile {
+	if m != nil {
+		return m.Profile
+	}
+	return nil
+}
+
+func (m *UpdateProfileRequest) GetUpdateMask() *field_mask.FieldMask {
+	if m != nil {
+		return m.UpdateMask
+	}
+	return nil
+}
+
+// Delete profile request.
+type DeleteProfileRequest struct {
+	// Required.
+	//
+	// Resource name of the profile to be deleted.
+	//
+	// The format is
+	// "projects/{project_id}/companies/{company_id}/profiles/{profile_id}",
+	// for example, "projects/api-test-project/companies/foo/profiles/bar".
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeleteProfileRequest) Reset()         { *m = DeleteProfileRequest{} }
+func (m *DeleteProfileRequest) String() string { return proto.CompactTextString(m) }
+func (*DeleteProfileRequest) ProtoMessage()    {}
+func (*DeleteProfileRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_service_0d3c32b258b0649d, []int{5}
+}
+func (m *DeleteProfileRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeleteProfileRequest.Unmarshal(m, b)
+}
+func (m *DeleteProfileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeleteProfileRequest.Marshal(b, m, deterministic)
+}
+func (dst *DeleteProfileRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeleteProfileRequest.Merge(dst, src)
+}
+func (m *DeleteProfileRequest) XXX_Size() int {
+	return xxx_messageInfo_DeleteProfileRequest.Size(m)
+}
+func (m *DeleteProfileRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeleteProfileRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeleteProfileRequest proto.InternalMessageInfo
+
+func (m *DeleteProfileRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// The request body of the `SearchProfiles` call.
+type SearchProfilesRequest struct {
+	// Required.
+	//
+	// The resource name of the company to search within.
+	//
+	// The format is "projects/{project_id}/companies/{company_id}", for example,
+	// "projects/api-test-project/companies/foo".
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Required.
+	//
+	// The meta information collected about the profile search user. This is used
+	// to improve the search quality of the service. These values are provided by
+	// users, and must be precise and consistent.
+	RequestMetadata *RequestMetadata `protobuf:"bytes,2,opt,name=request_metadata,json=requestMetadata,proto3" json:"request_metadata,omitempty"`
+	// Optional.
+	//
+	// Search query to execute. See [ProfileQuery][google.cloud.talent.v4beta1.ProfileQuery] for more details.
+	ProfileQuery *ProfileQuery `protobuf:"bytes,3,opt,name=profile_query,json=profileQuery,proto3" json:"profile_query,omitempty"`
+	// Optional.
+	//
+	// A limit on the number of profiles returned in the search results.
+	// A value above the default value 10 can increase search response time.
+	//
+	// The maximum value allowed is 100. Otherwise an error is thrown.
+	PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+	// Optional.
+	//
+	// The pageToken, similar to offset enables users of the API to paginate
+	// through the search results. To retrieve the first page of results, set the
+	// pageToken to empty. The search response includes a
+	// [nextPageToken][google.cloud.talent.v4beta1.SearchProfilesResponse.next_page_token] field that can be
+	// used to populate the pageToken field for the next page of results. Using
+	// pageToken instead of offset increases the performance of the API,
+	// especially compared to larger offset values.
+	PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+	// Optional.
+	//
+	// An integer that specifies the current offset (that is, starting result) in
+	// search results. This field is only considered if [page_token][google.cloud.talent.v4beta1.SearchProfilesRequest.page_token] is unset.
+	//
+	// The maximum allowed value is 5000. Otherwise an error is thrown.
+	//
+	// For example, 0 means to search from the first profile, and 10 means to
+	// search from the 11th profile. This can be used for pagination, for example
+	// pageSize = 10 and offset = 10 means to search from the second page.
+	Offset int32 `protobuf:"varint,6,opt,name=offset,proto3" json:"offset,omitempty"`
+	// Optional.
+	//
+	// This flag controls the spell-check feature. If `false`, the
+	// service attempts to correct a misspelled query.
+	//
+	// For example, "enginee" is corrected to "engineer".
+	DisableSpellCheck bool `protobuf:"varint,7,opt,name=disable_spell_check,json=disableSpellCheck,proto3" json:"disable_spell_check,omitempty"`
+	// Optional.
+	//
+	// The criteria that determines how search results are sorted.
+	// Defaults is "relevance desc" if no value is specified.
+	//
+	// Supported options are:
+	//
+	// * "relevance desc": By descending relevance, as determined by the API
+	//    algorithms.
+	// * "update_date desc": Sort by [Profile.update_date][] in descending order
+	//   (recently updated profiles first).
+	// * "create_date desc": Sort by [Profile.create_date][] in descending order
+	//   (recently created profiles first).
+	// * "first_name": Sort by [PersonStrcuturedName.given_name][] in ascending
+	//   order.
+	// * "first_name desc": Sort by [PersonStrcuturedName.given_name][] in
+	//   descending order.
+	// * "last_name": Sort by [PersonStrcuturedName.family_name][] in ascending
+	//   order.
+	// * "last_name desc": Sort by [PersonStrcuturedName.family_name][] in
+	//   ascending order.
+	OrderBy string `protobuf:"bytes,8,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"`
+	// Optional.
+	//
+	// When sort by field is based on alphabetical order, sort values case
+	// sensitively (based on ASCII) when the value is set to true. Default value
+	// is case in-sensitive sort (false).
+	CaseSensitiveSort bool `protobuf:"varint,9,opt,name=case_sensitive_sort,json=caseSensitiveSort,proto3" json:"case_sensitive_sort,omitempty"`
+	// Optional.
+	//
+	// A list of expressions specifies histogram requests against matching
+	// profiles for [SearchProfilesRequest][google.cloud.talent.v4beta1.SearchProfilesRequest].
+	//
+	// The expression syntax looks like a function definition with optional
+	// parameters.
+	//
+	// Function syntax: function_name(histogram_facet[, list of buckets])
+	//
+	// Data types:
+	//
+	// * Histogram facet: facet names with format [a-zA-Z][a-zA-Z0-9_]+.
+	// * String: string like "any string with backslash escape for quote(\")."
+	// * Number: whole number and floating point number like 10, -1 and -0.01.
+	// * List: list of elements with comma(,) separator surrounded by square
+	// brackets. For example, [1, 2, 3] and ["one", "two", "three"].
+	//
+	// Built-in constants:
+	//
+	// * MIN (minimum number similar to java Double.MIN_VALUE)
+	// * MAX (maximum number similar to java Double.MAX_VALUE)
+	//
+	// Built-in functions:
+	//
+	// * bucket(start, end[, label])
+	// Bucket build-in function creates a bucket with range of [start, end). Note
+	// that the end is exclusive.
+	// For example, bucket(1, MAX, "positive number") or bucket(1, 10).
+	//
+	// Histogram Facets:
+	//
+	// * admin1: Admin1 is a global placeholder for referring to state, province,
+	// or the particular term a country uses to define the geographic structure
+	// below the country level. Examples include states codes such as "CA", "IL",
+	// "NY", and provinces, such as "BC".
+	// * locality: Locality is a global placeholder for referring to city, town,
+	// or the particular term a country uses to define the geographic structure
+	// below the admin1 level. Examples include city names such as
+	// "Mountain View" and "New York".
+	// * extended_locality: Extended locality is concatenated version of admin1
+	// and locality with comma separator. For example, "Mountain View, CA" and
+	// "New York, NY".
+	// * postal_code: Postal code of profile which follows locale code.
+	// * country: Country code (ISO-3166-1 alpha-2 code) of profile, such as US,
+	//  JP, GB.
+	// * job_title: Normalized job titles specified in EmploymentHistory.
+	// * company_name: Normalized company name of profiles to match on.
+	// * institution: The school name. For example, "MIT",
+	// "University of California, Berkeley"
+	// * degree: Highest education degree in ISCED code. Each value in degree
+	// covers specific level of education, without any expansion to upper nor
+	// lower levels of education degree.
+	// * experience_in_months: experience in months. 0 means 0 month to 1 month
+	// (exclusive).
+	// * application_date: The application date specifies application start dates.
+	// See [ApplicationDateFilter][google.cloud.talent.v4beta1.ApplicationDateFilter] for more details.
+	// * application_outcome_reason: The application outcome reason specifies the
+	// outcome reasons of job application.
+	// See [ApplicationOutcomeReasonFilter][google.cloud.talent.v4beta1.ApplicationOutcomeReasonFilter] for more details.
+	// * application_last_stage: The application last stage specifies the last
+	// stage of job application.
+	// See [ApplicationLastStageFilter][google.cloud.talent.v4beta1.ApplicationLastStageFilter] for more details.
+	// * application_job_title: The application job title specifies the job
+	// applied for in the application.
+	// See [ApplicationJobFilter][google.cloud.talent.v4beta1.ApplicationJobFilter] for more details.
+	// * application_status: The application status specifies the status of job
+	// application.
+	// See [ApplicationStatusFilter][google.cloud.talent.v4beta1.ApplicationStatusFilter] for more details.
+	// * hirable_status: Hirable status specifies the profile's hirable status.
+	// * string_custom_attribute: String custom attributes. Values can be accessed
+	// via square bracket notation like string_custom_attribute["key1"].
+	// * numeric_custom_attribute: Numeric custom attributes. Values can be
+	// accessed via square bracket notation like numeric_custom_attribute["key1"].
+	//
+	// Example expressions:
+	//
+	// * count(admin1)
+	// * count(experience_in_months, [bucket(0, 12, "1 year"),
+	// bucket(12, 36, "1-3 years"), bucket(36, MAX, "3+ years")])
+	// * count(string_custom_attribute["assigned_recruiter"])
+	// * count(numeric_custom_attribute["favorite_number"],
+	// [bucket(MIN, 0, "negative"), bucket(0, MAX, "non-negative")])
+	HistogramQueries     []*HistogramQuery `protobuf:"bytes,10,rep,name=histogram_queries,json=histogramQueries,proto3" json:"histogram_queries,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *SearchProfilesRequest) Reset()         { *m = SearchProfilesRequest{} }
+func (m *SearchProfilesRequest) String() string { return proto.CompactTextString(m) }
+func (*SearchProfilesRequest) ProtoMessage()    {}
+func (*SearchProfilesRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_service_0d3c32b258b0649d, []int{6}
+}
+func (m *SearchProfilesRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchProfilesRequest.Unmarshal(m, b)
+}
+func (m *SearchProfilesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchProfilesRequest.Marshal(b, m, deterministic)
+}
+func (dst *SearchProfilesRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchProfilesRequest.Merge(dst, src)
+}
+func (m *SearchProfilesRequest) XXX_Size() int {
+	return xxx_messageInfo_SearchProfilesRequest.Size(m)
+}
+func (m *SearchProfilesRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchProfilesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchProfilesRequest proto.InternalMessageInfo
+
+func (m *SearchProfilesRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *SearchProfilesRequest) GetRequestMetadata() *RequestMetadata {
+	if m != nil {
+		return m.RequestMetadata
+	}
+	return nil
+}
+
+func (m *SearchProfilesRequest) GetProfileQuery() *ProfileQuery {
+	if m != nil {
+		return m.ProfileQuery
+	}
+	return nil
+}
+
+func (m *SearchProfilesRequest) GetPageSize() int32 {
+	if m != nil {
+		return m.PageSize
+	}
+	return 0
+}
+
+func (m *SearchProfilesRequest) GetPageToken() string {
+	if m != nil {
+		return m.PageToken
+	}
+	return ""
+}
+
+func (m *SearchProfilesRequest) GetOffset() int32 {
+	if m != nil {
+		return m.Offset
+	}
+	return 0
+}
+
+func (m *SearchProfilesRequest) GetDisableSpellCheck() bool {
+	if m != nil {
+		return m.DisableSpellCheck
+	}
+	return false
+}
+
+func (m *SearchProfilesRequest) GetOrderBy() string {
+	if m != nil {
+		return m.OrderBy
+	}
+	return ""
+}
+
+func (m *SearchProfilesRequest) GetCaseSensitiveSort() bool {
+	if m != nil {
+		return m.CaseSensitiveSort
+	}
+	return false
+}
+
+func (m *SearchProfilesRequest) GetHistogramQueries() []*HistogramQuery {
+	if m != nil {
+		return m.HistogramQueries
+	}
+	return nil
+}
+
+// Response of SearchProfiles method.
+type SearchProfilesResponse struct {
+	// An estimation of the number of profiles that match the specified query.
+	//
+	// This number isn't guaranteed to be accurate.
+	EstimatedTotalSize int64 `protobuf:"varint,1,opt,name=estimated_total_size,json=estimatedTotalSize,proto3" json:"estimated_total_size,omitempty"`
+	// The spell checking result, and correction.
+	SpellCorrection *SpellingCorrection `protobuf:"bytes,2,opt,name=spell_correction,json=spellCorrection,proto3" json:"spell_correction,omitempty"`
+	// Additional information for the API invocation, such as the request
+	// tracking id.
+	Metadata *ResponseMetadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"`
+	// A token to retrieve the next page of results. This is empty if there are no
+	// more results.
+	NextPageToken string `protobuf:"bytes,4,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+	// The histogram results that match with specified
+	// [SearchProfilesRequest.histogram_queries][google.cloud.talent.v4beta1.SearchProfilesRequest.histogram_queries].
+	HistogramQueryResults []*HistogramQueryResult `protobuf:"bytes,5,rep,name=histogram_query_results,json=histogramQueryResults,proto3" json:"histogram_query_results,omitempty"`
+	// The profile entities that match the specified [SearchProfilesRequest][google.cloud.talent.v4beta1.SearchProfilesRequest].
+	SummarizedProfiles   []*SummarizedProfile `protobuf:"bytes,6,rep,name=summarized_profiles,json=summarizedProfiles,proto3" json:"summarized_profiles,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *SearchProfilesResponse) Reset()         { *m = SearchProfilesResponse{} }
+func (m *SearchProfilesResponse) String() string { return proto.CompactTextString(m) }
+func (*SearchProfilesResponse) ProtoMessage()    {}
+func (*SearchProfilesResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_service_0d3c32b258b0649d, []int{7}
+}
+func (m *SearchProfilesResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SearchProfilesResponse.Unmarshal(m, b)
+}
+func (m *SearchProfilesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SearchProfilesResponse.Marshal(b, m, deterministic)
+}
+func (dst *SearchProfilesResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SearchProfilesResponse.Merge(dst, src)
+}
+func (m *SearchProfilesResponse) XXX_Size() int {
+	return xxx_messageInfo_SearchProfilesResponse.Size(m)
+}
+func (m *SearchProfilesResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_SearchProfilesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SearchProfilesResponse proto.InternalMessageInfo
+
+func (m *SearchProfilesResponse) GetEstimatedTotalSize() int64 {
+	if m != nil {
+		return m.EstimatedTotalSize
+	}
+	return 0
+}
+
+func (m *SearchProfilesResponse) GetSpellCorrection() *SpellingCorrection {
+	if m != nil {
+		return m.SpellCorrection
+	}
+	return nil
+}
+
+func (m *SearchProfilesResponse) GetMetadata() *ResponseMetadata {
+	if m != nil {
+		return m.Metadata
+	}
+	return nil
+}
+
+func (m *SearchProfilesResponse) GetNextPageToken() string {
+	if m != nil {
+		return m.NextPageToken
+	}
+	return ""
+}
+
+func (m *SearchProfilesResponse) GetHistogramQueryResults() []*HistogramQueryResult {
+	if m != nil {
+		return m.HistogramQueryResults
+	}
+	return nil
+}
+
+func (m *SearchProfilesResponse) GetSummarizedProfiles() []*SummarizedProfile {
+	if m != nil {
+		return m.SummarizedProfiles
+	}
+	return nil
+}
+
+// Output only.
+//
+// Profile entry with metadata inside [SearchProfilesResponse][google.cloud.talent.v4beta1.SearchProfilesResponse].
+type SummarizedProfile struct {
+	// A list of profiles that are linked by [Profile.cluster_id][].
+	Profiles []*Profile `protobuf:"bytes,1,rep,name=profiles,proto3" json:"profiles,omitempty"`
+	// A profile summary shows the profile summary and how the profile matches the
+	// search query.
+	//
+	// In profile summary, the profiles with the same [Profile.cluster_id][] are
+	// merged together. Among profiles, same education/employment records may be
+	// slightly different but they are merged into one with best efforts.
+	//
+	// For example, in one profile the school name is "UC Berkeley" and the field
+	// study is "Computer Science" and in another one the school name is
+	// "University of California at Berkeley" and the field study is "CS". The API
+	// merges these two inputs into one and selects one value for each field. For
+	// example, the school name in summary is set to "University of California at
+	// Berkeley" and the field of study is set to "Computer Science".
+	Summary              *Profile `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SummarizedProfile) Reset()         { *m = SummarizedProfile{} }
+func (m *SummarizedProfile) String() string { return proto.CompactTextString(m) }
+func (*SummarizedProfile) ProtoMessage()    {}
+func (*SummarizedProfile) Descriptor() ([]byte, []int) {
+	return fileDescriptor_profile_service_0d3c32b258b0649d, []int{8}
+}
+func (m *SummarizedProfile) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SummarizedProfile.Unmarshal(m, b)
+}
+func (m *SummarizedProfile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SummarizedProfile.Marshal(b, m, deterministic)
+}
+func (dst *SummarizedProfile) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SummarizedProfile.Merge(dst, src)
+}
+func (m *SummarizedProfile) XXX_Size() int {
+	return xxx_messageInfo_SummarizedProfile.Size(m)
+}
+func (m *SummarizedProfile) XXX_DiscardUnknown() {
+	xxx_messageInfo_SummarizedProfile.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SummarizedProfile proto.InternalMessageInfo
+
+func (m *SummarizedProfile) GetProfiles() []*Profile {
+	if m != nil {
+		return m.Profiles
+	}
+	return nil
+}
+
+func (m *SummarizedProfile) GetSummary() *Profile {
+	if m != nil {
+		return m.Summary
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*ListProfilesRequest)(nil), "google.cloud.talent.v4beta1.ListProfilesRequest")
+	proto.RegisterType((*ListProfilesResponse)(nil), "google.cloud.talent.v4beta1.ListProfilesResponse")
+	proto.RegisterType((*CreateProfileRequest)(nil), "google.cloud.talent.v4beta1.CreateProfileRequest")
+	proto.RegisterType((*GetProfileRequest)(nil), "google.cloud.talent.v4beta1.GetProfileRequest")
+	proto.RegisterType((*UpdateProfileRequest)(nil), "google.cloud.talent.v4beta1.UpdateProfileRequest")
+	proto.RegisterType((*DeleteProfileRequest)(nil), "google.cloud.talent.v4beta1.DeleteProfileRequest")
+	proto.RegisterType((*SearchProfilesRequest)(nil), "google.cloud.talent.v4beta1.SearchProfilesRequest")
+	proto.RegisterType((*SearchProfilesResponse)(nil), "google.cloud.talent.v4beta1.SearchProfilesResponse")
+	proto.RegisterType((*SummarizedProfile)(nil), "google.cloud.talent.v4beta1.SummarizedProfile")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// ProfileServiceClient is the client API for ProfileService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ProfileServiceClient interface {
+	// Lists profiles by filter. The order is unspecified.
+	ListProfiles(ctx context.Context, in *ListProfilesRequest, opts ...grpc.CallOption) (*ListProfilesResponse, error)
+	// Creates and returns a new profile.
+	CreateProfile(ctx context.Context, in *CreateProfileRequest, opts ...grpc.CallOption) (*Profile, error)
+	// Gets the specified profile.
+	GetProfile(ctx context.Context, in *GetProfileRequest, opts ...grpc.CallOption) (*Profile, error)
+	// Updates the specified profile and returns the updated result.
+	UpdateProfile(ctx context.Context, in *UpdateProfileRequest, opts ...grpc.CallOption) (*Profile, error)
+	// Deletes the specified profile.
+	DeleteProfile(ctx context.Context, in *DeleteProfileRequest, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Searches for profiles within a company.
+	//
+	// For example, search by raw queries "software engineer in Mountain View" or
+	// search by structured filters (location filter, education filter, etc.).
+	//
+	// See [SearchProfilesRequest][google.cloud.talent.v4beta1.SearchProfilesRequest] for more information.
+	SearchProfiles(ctx context.Context, in *SearchProfilesRequest, opts ...grpc.CallOption) (*SearchProfilesResponse, error)
+}
+
+type profileServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewProfileServiceClient(cc *grpc.ClientConn) ProfileServiceClient {
+	return &profileServiceClient{cc}
+}
+
+func (c *profileServiceClient) ListProfiles(ctx context.Context, in *ListProfilesRequest, opts ...grpc.CallOption) (*ListProfilesResponse, error) {
+	out := new(ListProfilesResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.ProfileService/ListProfiles", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *profileServiceClient) CreateProfile(ctx context.Context, in *CreateProfileRequest, opts ...grpc.CallOption) (*Profile, error) {
+	out := new(Profile)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.ProfileService/CreateProfile", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *profileServiceClient) GetProfile(ctx context.Context, in *GetProfileRequest, opts ...grpc.CallOption) (*Profile, error) {
+	out := new(Profile)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.ProfileService/GetProfile", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *profileServiceClient) UpdateProfile(ctx context.Context, in *UpdateProfileRequest, opts ...grpc.CallOption) (*Profile, error) {
+	out := new(Profile)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.ProfileService/UpdateProfile", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *profileServiceClient) DeleteProfile(ctx context.Context, in *DeleteProfileRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.ProfileService/DeleteProfile", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *profileServiceClient) SearchProfiles(ctx context.Context, in *SearchProfilesRequest, opts ...grpc.CallOption) (*SearchProfilesResponse, error) {
+	out := new(SearchProfilesResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.ProfileService/SearchProfiles", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ProfileServiceServer is the server API for ProfileService service.
+type ProfileServiceServer interface {
+	// Lists profiles by filter. The order is unspecified.
+	ListProfiles(context.Context, *ListProfilesRequest) (*ListProfilesResponse, error)
+	// Creates and returns a new profile.
+	CreateProfile(context.Context, *CreateProfileRequest) (*Profile, error)
+	// Gets the specified profile.
+	GetProfile(context.Context, *GetProfileRequest) (*Profile, error)
+	// Updates the specified profile and returns the updated result.
+	UpdateProfile(context.Context, *UpdateProfileRequest) (*Profile, error)
+	// Deletes the specified profile.
+	DeleteProfile(context.Context, *DeleteProfileRequest) (*empty.Empty, error)
+	// Searches for profiles within a company.
+	//
+	// For example, search by raw queries "software engineer in Mountain View" or
+	// search by structured filters (location filter, education filter, etc.).
+	//
+	// See [SearchProfilesRequest][google.cloud.talent.v4beta1.SearchProfilesRequest] for more information.
+	SearchProfiles(context.Context, *SearchProfilesRequest) (*SearchProfilesResponse, error)
+}
+
+func RegisterProfileServiceServer(s *grpc.Server, srv ProfileServiceServer) {
+	s.RegisterService(&_ProfileService_serviceDesc, srv)
+}
+
+func _ProfileService_ListProfiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ListProfilesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ProfileServiceServer).ListProfiles(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.ProfileService/ListProfiles",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ProfileServiceServer).ListProfiles(ctx, req.(*ListProfilesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ProfileService_CreateProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CreateProfileRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ProfileServiceServer).CreateProfile(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.ProfileService/CreateProfile",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ProfileServiceServer).CreateProfile(ctx, req.(*CreateProfileRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ProfileService_GetProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetProfileRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ProfileServiceServer).GetProfile(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.ProfileService/GetProfile",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ProfileServiceServer).GetProfile(ctx, req.(*GetProfileRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ProfileService_UpdateProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateProfileRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ProfileServiceServer).UpdateProfile(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.ProfileService/UpdateProfile",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ProfileServiceServer).UpdateProfile(ctx, req.(*UpdateProfileRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ProfileService_DeleteProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteProfileRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ProfileServiceServer).DeleteProfile(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.ProfileService/DeleteProfile",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ProfileServiceServer).DeleteProfile(ctx, req.(*DeleteProfileRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _ProfileService_SearchProfiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SearchProfilesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ProfileServiceServer).SearchProfiles(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.ProfileService/SearchProfiles",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ProfileServiceServer).SearchProfiles(ctx, req.(*SearchProfilesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ProfileService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.cloud.talent.v4beta1.ProfileService",
+	HandlerType: (*ProfileServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "ListProfiles",
+			Handler:    _ProfileService_ListProfiles_Handler,
+		},
+		{
+			MethodName: "CreateProfile",
+			Handler:    _ProfileService_CreateProfile_Handler,
+		},
+		{
+			MethodName: "GetProfile",
+			Handler:    _ProfileService_GetProfile_Handler,
+		},
+		{
+			MethodName: "UpdateProfile",
+			Handler:    _ProfileService_UpdateProfile_Handler,
+		},
+		{
+			MethodName: "DeleteProfile",
+			Handler:    _ProfileService_DeleteProfile_Handler,
+		},
+		{
+			MethodName: "SearchProfiles",
+			Handler:    _ProfileService_SearchProfiles_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/cloud/talent/v4beta1/profile_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/profile_service.proto", fileDescriptor_profile_service_0d3c32b258b0649d)
+}
+
+var fileDescriptor_profile_service_0d3c32b258b0649d = []byte{
+	// 1060 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0x5f, 0x6f, 0xdc, 0x44,
+	0x10, 0x97, 0xf3, 0xf7, 0x32, 0x69, 0x9a, 0x64, 0x93, 0x06, 0x73, 0x05, 0x71, 0xb2, 0x10, 0x5c,
+	0xaf, 0x60, 0x37, 0x97, 0x0a, 0x29, 0x29, 0x44, 0x90, 0x94, 0x7f, 0x12, 0x45, 0xc1, 0x17, 0x04,
+	0xea, 0x8b, 0xb5, 0xb9, 0x9b, 0xbb, 0x98, 0xd8, 0x5e, 0xd7, 0xbb, 0x17, 0x71, 0x41, 0x95, 0x28,
+	0xaf, 0x3c, 0x56, 0x7d, 0xe4, 0x05, 0x21, 0x1e, 0x79, 0xe3, 0x93, 0xf0, 0x15, 0xe0, 0x7b, 0xa0,
+	0x5d, 0xaf, 0x9d, 0xdc, 0x9d, 0x71, 0xee, 0x2a, 0xde, 0xbc, 0x3b, 0xf3, 0x9b, 0xf9, 0xed, 0xcf,
+	0xb3, 0x33, 0x0b, 0xdb, 0x3d, 0xc6, 0x7a, 0x01, 0x3a, 0xed, 0x80, 0xf5, 0x3b, 0x8e, 0xa0, 0x01,
+	0x46, 0xc2, 0x39, 0xbf, 0x7f, 0x82, 0x82, 0x6e, 0x3b, 0x71, 0xc2, 0xba, 0x7e, 0x80, 0x1e, 0xc7,
+	0xe4, 0xdc, 0x6f, 0xa3, 0x1d, 0x27, 0x4c, 0x30, 0x72, 0x3b, 0x85, 0xd8, 0x0a, 0x62, 0xa7, 0x10,
+	0x5b, 0x43, 0xaa, 0xaf, 0xe9, 0x78, 0x34, 0xf6, 0x1d, 0x1a, 0x45, 0x4c, 0x50, 0xe1, 0xb3, 0x88,
+	0xa7, 0xd0, 0x6a, 0xbd, 0x2c, 0x5b, 0x9b, 0x85, 0x21, 0x8b, 0xb4, 0xe7, 0x9d, 0x32, 0xcf, 0xae,
+	0x1f, 0x08, 0x4c, 0xb2, 0xa0, 0x77, 0xcb, 0x5c, 0x4f, 0x7d, 0x2e, 0x58, 0x2f, 0xa1, 0xe1, 0x24,
+	0x71, 0xf5, 0x79, 0xb5, 0xab, 0x3e, 0xa7, 0xa3, 0x56, 0x27, 0xfd, 0xae, 0x83, 0x61, 0x2c, 0x06,
+	0xda, 0x58, 0x1b, 0x35, 0x76, 0x7d, 0x0c, 0x3a, 0x5e, 0x48, 0xf9, 0x59, 0xea, 0x61, 0xfd, 0x66,
+	0xc0, 0xc6, 0x17, 0x3e, 0x17, 0x47, 0x69, 0x50, 0xee, 0xe2, 0x93, 0x3e, 0x72, 0x41, 0xb6, 0x60,
+	0x21, 0xa6, 0x09, 0x46, 0xc2, 0x34, 0x6a, 0x46, 0x7d, 0xc9, 0xd5, 0x2b, 0xf2, 0x3a, 0x40, 0x4c,
+	0x7b, 0xe8, 0x09, 0x76, 0x86, 0x91, 0x39, 0xa3, 0x6c, 0x4b, 0x72, 0xe7, 0x58, 0x6e, 0x90, 0xdb,
+	0xa0, 0x16, 0x1e, 0xf7, 0x2f, 0xd0, 0x9c, 0xad, 0x19, 0xf5, 0x79, 0xb7, 0x22, 0x37, 0x5a, 0xfe,
+	0x05, 0x92, 0x5d, 0x80, 0xcb, 0xfc, 0xe6, 0x5c, 0xcd, 0xa8, 0x2f, 0x37, 0xab, 0xb6, 0xfe, 0x4f,
+	0x19, 0x45, 0xfb, 0x13, 0xe9, 0xf2, 0x88, 0xf2, 0x33, 0x77, 0xa9, 0x9b, 0x7d, 0x5a, 0x3f, 0x1a,
+	0xb0, 0x39, 0x4c, 0x93, 0xc7, 0x2c, 0xe2, 0x48, 0x3e, 0x84, 0x8a, 0xd6, 0x83, 0x9b, 0x46, 0x6d,
+	0xb6, 0xbe, 0xdc, 0x7c, 0xd3, 0x2e, 0xf9, 0xf3, 0xb6, 0x0e, 0xe0, 0xe6, 0x28, 0xf2, 0x16, 0xac,
+	0x46, 0xf8, 0xbd, 0xf0, 0xc6, 0x8e, 0xb5, 0x22, 0xb7, 0x8f, 0xb2, 0xa3, 0x59, 0x11, 0x6c, 0x1e,
+	0x26, 0x48, 0x05, 0x66, 0x21, 0xae, 0x51, 0x6a, 0x1f, 0x16, 0x75, 0x0e, 0x15, 0x6f, 0x52, 0x62,
+	0x19, 0xc8, 0x7a, 0x1b, 0xd6, 0x3f, 0x45, 0x31, 0x92, 0x8c, 0xc0, 0x5c, 0x44, 0x43, 0xd4, 0xa9,
+	0xd4, 0xb7, 0xf5, 0xdc, 0x80, 0xcd, 0xaf, 0xe3, 0xce, 0x38, 0xb3, 0x2b, 0x0c, 0x8c, 0x97, 0x60,
+	0x40, 0x1e, 0xc0, 0x72, 0x5f, 0xc5, 0x4d, 0x7f, 0xd8, 0xcc, 0xb5, 0x3f, 0x0c, 0x52, 0x77, 0xf5,
+	0xc7, 0x1a, 0xb0, 0xf9, 0x10, 0x03, 0x1c, 0x23, 0x55, 0x74, 0x82, 0x67, 0x73, 0x70, 0xab, 0x85,
+	0x34, 0x69, 0x9f, 0x4e, 0x5a, 0x86, 0xdf, 0xc0, 0x5a, 0x92, 0xba, 0x78, 0x21, 0x0a, 0xda, 0xa1,
+	0x82, 0x6a, 0x7e, 0xef, 0x94, 0x9e, 0x51, 0xc7, 0x7d, 0xa4, 0x31, 0xee, 0x6a, 0x32, 0xbc, 0x41,
+	0xbe, 0x84, 0x95, 0xac, 0x9f, 0x3c, 0xe9, 0x63, 0x32, 0x50, 0x45, 0xbc, 0xdc, 0xbc, 0x33, 0x89,
+	0x72, 0x5f, 0x49, 0x80, 0x7b, 0x23, 0xbe, 0xb2, 0x1a, 0xbe, 0x10, 0x73, 0x23, 0x17, 0x62, 0xf8,
+	0x32, 0xcd, 0x8f, 0x5e, 0xa6, 0x2d, 0x58, 0x60, 0xdd, 0x2e, 0x47, 0x61, 0x2e, 0x28, 0xa0, 0x5e,
+	0x11, 0x1b, 0x36, 0x3a, 0x3e, 0xa7, 0x27, 0xb2, 0xe7, 0xc5, 0x18, 0x04, 0x5e, 0xfb, 0x14, 0xdb,
+	0x67, 0xe6, 0x62, 0xcd, 0xa8, 0x57, 0xdc, 0x75, 0x6d, 0x6a, 0x49, 0xcb, 0xa1, 0x34, 0x90, 0x57,
+	0xa1, 0xc2, 0x92, 0x0e, 0x26, 0xde, 0xc9, 0xc0, 0xac, 0xa8, 0x24, 0x8b, 0x6a, 0x7d, 0x30, 0x90,
+	0xa1, 0xda, 0x94, 0xcb, 0xde, 0x19, 0x71, 0x5f, 0xf8, 0xe7, 0xe8, 0x71, 0x96, 0x08, 0x73, 0x29,
+	0x0d, 0x25, 0x4d, 0xad, 0xcc, 0xd2, 0x62, 0x89, 0x20, 0xdf, 0xc2, 0x7a, 0xde, 0xab, 0x94, 0x40,
+	0x3e, 0x72, 0x13, 0xd4, 0xbd, 0xbb, 0x5b, 0x2a, 0xd1, 0x67, 0x19, 0x2a, 0x15, 0x69, 0xed, 0xf4,
+	0xea, 0xda, 0x47, 0x6e, 0xfd, 0x33, 0x0b, 0x5b, 0xa3, 0x35, 0xa0, 0xef, 0xf8, 0x3d, 0xd8, 0x44,
+	0x2e, 0xfc, 0x90, 0x0a, 0xec, 0x78, 0x82, 0x09, 0x1a, 0xa4, 0x72, 0xca, 0x92, 0x98, 0x75, 0x49,
+	0x6e, 0x3b, 0x96, 0x26, 0x25, 0xec, 0x63, 0x58, 0xd3, 0xca, 0xb0, 0x24, 0xc1, 0xb6, 0x6c, 0xee,
+	0xba, 0x3c, 0x9c, 0x52, 0x96, 0x4a, 0x34, 0x3f, 0xea, 0x1d, 0xe6, 0x30, 0x77, 0x55, 0x05, 0xba,
+	0xdc, 0x20, 0x9f, 0x43, 0x25, 0x2f, 0xb9, 0xb4, 0x38, 0xde, 0xbd, 0xa6, 0xe4, 0xd2, 0x63, 0xe4,
+	0x35, 0x97, 0xc3, 0x8b, 0x5a, 0xcf, 0x5c, 0x41, 0xeb, 0x21, 0x3e, 0xbc, 0x32, 0xac, 0xfa, 0xc0,
+	0x4b, 0x90, 0xf7, 0x03, 0xc1, 0xcd, 0x79, 0xa5, 0xfd, 0xf6, 0x34, 0xda, 0x2b, 0xa4, 0x7b, 0xeb,
+	0xb4, 0x60, 0x97, 0x13, 0x0f, 0x36, 0x78, 0x3f, 0x0c, 0x69, 0xe2, 0x5f, 0x60, 0xc7, 0xcb, 0x5b,
+	0xeb, 0x82, 0x4a, 0x63, 0x97, 0x8b, 0x97, 0xe3, 0xb2, 0x2b, 0x4f, 0xf8, 0xe8, 0x16, 0xb7, 0x5e,
+	0x18, 0xb0, 0x3e, 0xe6, 0xf9, 0x3f, 0xb4, 0xf1, 0x7d, 0x58, 0x4c, 0xb3, 0x0d, 0xa6, 0x6b, 0xb7,
+	0x1a, 0xd4, 0xfc, 0xb9, 0x02, 0x37, 0xf5, 0x66, 0x2b, 0x7d, 0x48, 0x90, 0x3f, 0x0c, 0xb8, 0x71,
+	0x75, 0xe8, 0x90, 0x7b, 0xa5, 0x21, 0x0b, 0xc6, 0x68, 0x75, 0x7b, 0x0a, 0x44, 0x5a, 0x26, 0xd6,
+	0xee, 0x4f, 0x7f, 0xfd, 0xfd, 0x7c, 0x66, 0x87, 0x6c, 0xe7, 0x03, 0xff, 0x87, 0xb4, 0xe9, 0x7d,
+	0x10, 0x27, 0xec, 0x3b, 0x6c, 0x0b, 0xee, 0x34, 0xe4, 0x2b, 0x24, 0xa6, 0x91, 0x8f, 0xdc, 0x69,
+	0x3c, 0x75, 0x72, 0x0d, 0x7e, 0x37, 0x60, 0x65, 0x68, 0x46, 0x91, 0xf2, 0xfc, 0x45, 0xf3, 0xac,
+	0x3a, 0x91, 0x6e, 0xd6, 0xfb, 0x8a, 0xe5, 0x7b, 0xd6, 0xf4, 0x2c, 0xf7, 0x8c, 0x06, 0xf9, 0xc5,
+	0x00, 0xb8, 0x1c, 0x6e, 0xa4, 0xbc, 0xae, 0xc6, 0xa6, 0xe0, 0x84, 0x14, 0x0b, 0x84, 0x94, 0xd3,
+	0xe6, 0x3f, 0x08, 0xe6, 0xfc, 0x9c, 0xc6, 0x53, 0xf9, 0xe7, 0x57, 0x86, 0x46, 0xea, 0x35, 0x42,
+	0x16, 0x8d, 0xdf, 0x09, 0x59, 0x3e, 0x54, 0x2c, 0xf7, 0x9b, 0xbb, 0x57, 0x84, 0xd4, 0x0f, 0xbc,
+	0x09, 0xd9, 0x4a, 0x41, 0x5f, 0x18, 0xb0, 0x32, 0x34, 0x6e, 0xaf, 0x21, 0x5c, 0x34, 0x9a, 0xab,
+	0x5b, 0x63, 0xa3, 0xfd, 0x63, 0xf9, 0x96, 0xcc, 0x84, 0x6c, 0xbc, 0x84, 0x90, 0x7f, 0x1a, 0x70,
+	0x73, 0xb8, 0xab, 0x93, 0x66, 0x79, 0x13, 0x29, 0x7a, 0x06, 0x54, 0x77, 0xa6, 0xc2, 0xe8, 0x8b,
+	0xb4, 0xa7, 0x68, 0xdf, 0xb7, 0x9c, 0x49, 0x4b, 0x74, 0x8f, 0xab, 0x40, 0x7b, 0x46, 0xe3, 0xe0,
+	0x99, 0x01, 0x6f, 0xb4, 0x59, 0x58, 0x96, 0xf6, 0x60, 0x63, 0xb8, 0x5d, 0x1c, 0x49, 0xd1, 0x8e,
+	0x8c, 0xc7, 0x1f, 0x69, 0x4c, 0x8f, 0x05, 0x34, 0xea, 0xd9, 0x2c, 0xe9, 0x39, 0x3d, 0x8c, 0x94,
+	0xa4, 0x4e, 0x6a, 0xa2, 0xb1, 0xcf, 0x0b, 0x9f, 0xf6, 0x0f, 0xd2, 0xe5, 0xaf, 0x33, 0xb3, 0x87,
+	0xc7, 0xad, 0x93, 0x05, 0x85, 0xd9, 0xf9, 0x37, 0x00, 0x00, 0xff, 0xff, 0x96, 0x1f, 0x85, 0xb7,
+	0xfd, 0x0c, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/talent/v4beta1/resume_service.pb.go b/googleapis/cloud/talent/v4beta1/resume_service.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..78aecb09638d7529609fee44b97f6bfc31a84cae
--- /dev/null
+++ b/googleapis/cloud/talent/v4beta1/resume_service.pb.go
@@ -0,0 +1,331 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/cloud/talent/v4beta1/resume_service.proto
+
+package talent // import "google.golang.org/genproto/googleapis/cloud/talent/v4beta1"
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import _ "google.golang.org/genproto/googleapis/api/annotations"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Parse resume request.
+type ParseResumeRequest struct {
+	// Required.
+	//
+	// The resource name of the project.
+	//
+	// The format is "projects/{project_id}", for example,
+	// "projects/api-test-project".
+	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
+	// Required.
+	//
+	// The bytes of the resume file in common format. Currently the API supports
+	// the following formats:
+	// PDF, TXT, DOC, RTF and DOCX.
+	Resume []byte `protobuf:"bytes,2,opt,name=resume,proto3" json:"resume,omitempty"`
+	// Optional.
+	//
+	// The region code indicating where the resume is from. Values
+	// are as per the ISO-3166-2 format. For example, US, FR, DE.
+	//
+	// This value is optional, but providing this value improves the resume
+	// parsing quality and performance.
+	//
+	// An error is thrown if the regionCode is invalid.
+	RegionCode string `protobuf:"bytes,3,opt,name=region_code,json=regionCode,proto3" json:"region_code,omitempty"`
+	// Optional.
+	//
+	// The language code of contents in the resume.
+	//
+	// Language codes must be in BCP-47 format, such as "en-US" or "sr-Latn".
+	// For more information, see
+	// [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47){:
+	// class="external" target="_blank" }.
+	LanguageCode         string   `protobuf:"bytes,4,opt,name=language_code,json=languageCode,proto3" json:"language_code,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ParseResumeRequest) Reset()         { *m = ParseResumeRequest{} }
+func (m *ParseResumeRequest) String() string { return proto.CompactTextString(m) }
+func (*ParseResumeRequest) ProtoMessage()    {}
+func (*ParseResumeRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_resume_service_1cf6bb11c787af60, []int{0}
+}
+func (m *ParseResumeRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ParseResumeRequest.Unmarshal(m, b)
+}
+func (m *ParseResumeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ParseResumeRequest.Marshal(b, m, deterministic)
+}
+func (dst *ParseResumeRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ParseResumeRequest.Merge(dst, src)
+}
+func (m *ParseResumeRequest) XXX_Size() int {
+	return xxx_messageInfo_ParseResumeRequest.Size(m)
+}
+func (m *ParseResumeRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ParseResumeRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ParseResumeRequest proto.InternalMessageInfo
+
+func (m *ParseResumeRequest) GetParent() string {
+	if m != nil {
+		return m.Parent
+	}
+	return ""
+}
+
+func (m *ParseResumeRequest) GetResume() []byte {
+	if m != nil {
+		return m.Resume
+	}
+	return nil
+}
+
+func (m *ParseResumeRequest) GetRegionCode() string {
+	if m != nil {
+		return m.RegionCode
+	}
+	return ""
+}
+
+func (m *ParseResumeRequest) GetLanguageCode() string {
+	if m != nil {
+		return m.LanguageCode
+	}
+	return ""
+}
+
+// Parse resume response.
+type ParseResumeResponse struct {
+	// The profile parsed from resume.
+	Profile *Profile `protobuf:"bytes,1,opt,name=profile,proto3" json:"profile,omitempty"`
+	// Raw text from resume.
+	RawText              string   `protobuf:"bytes,2,opt,name=raw_text,json=rawText,proto3" json:"raw_text,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ParseResumeResponse) Reset()         { *m = ParseResumeResponse{} }
+func (m *ParseResumeResponse) String() string { return proto.CompactTextString(m) }
+func (*ParseResumeResponse) ProtoMessage()    {}
+func (*ParseResumeResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_resume_service_1cf6bb11c787af60, []int{1}
+}
+func (m *ParseResumeResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ParseResumeResponse.Unmarshal(m, b)
+}
+func (m *ParseResumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ParseResumeResponse.Marshal(b, m, deterministic)
+}
+func (dst *ParseResumeResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ParseResumeResponse.Merge(dst, src)
+}
+func (m *ParseResumeResponse) XXX_Size() int {
+	return xxx_messageInfo_ParseResumeResponse.Size(m)
+}
+func (m *ParseResumeResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ParseResumeResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ParseResumeResponse proto.InternalMessageInfo
+
+func (m *ParseResumeResponse) GetProfile() *Profile {
+	if m != nil {
+		return m.Profile
+	}
+	return nil
+}
+
+func (m *ParseResumeResponse) GetRawText() string {
+	if m != nil {
+		return m.RawText
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*ParseResumeRequest)(nil), "google.cloud.talent.v4beta1.ParseResumeRequest")
+	proto.RegisterType((*ParseResumeResponse)(nil), "google.cloud.talent.v4beta1.ParseResumeResponse")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// ResumeServiceClient is the client API for ResumeService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type ResumeServiceClient interface {
+	// Parses a resume into a [Profile][google.cloud.talent.v4beta1.Profile]. The API attempts to fill out the
+	// following profile fields if present within the resume:
+	//
+	// * personNames
+	// * addresses
+	// * emailAddress
+	// * phoneNumbers
+	// * personalUris
+	// * employmentRecords
+	// * educationRecords
+	// * skills
+	//
+	// Note that some attributes in these fields may not be populated if they're
+	// not present within the resume or unrecognizable by the resume parser.
+	//
+	// This API does not save the resume or profile. To create a profile from this
+	// resume, clients need to call the CreateProfile method again with the
+	// profile returned.
+	//
+	// This API supports the following list of formats:
+	//
+	// * PDF
+	// * TXT
+	// * DOC
+	// * RTF
+	// * DOCX
+	//
+	// An error is thrown if the input format is not supported.
+	ParseResume(ctx context.Context, in *ParseResumeRequest, opts ...grpc.CallOption) (*ParseResumeResponse, error)
+}
+
+type resumeServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewResumeServiceClient(cc *grpc.ClientConn) ResumeServiceClient {
+	return &resumeServiceClient{cc}
+}
+
+func (c *resumeServiceClient) ParseResume(ctx context.Context, in *ParseResumeRequest, opts ...grpc.CallOption) (*ParseResumeResponse, error) {
+	out := new(ParseResumeResponse)
+	err := c.cc.Invoke(ctx, "/google.cloud.talent.v4beta1.ResumeService/ParseResume", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ResumeServiceServer is the server API for ResumeService service.
+type ResumeServiceServer interface {
+	// Parses a resume into a [Profile][google.cloud.talent.v4beta1.Profile]. The API attempts to fill out the
+	// following profile fields if present within the resume:
+	//
+	// * personNames
+	// * addresses
+	// * emailAddress
+	// * phoneNumbers
+	// * personalUris
+	// * employmentRecords
+	// * educationRecords
+	// * skills
+	//
+	// Note that some attributes in these fields may not be populated if they're
+	// not present within the resume or unrecognizable by the resume parser.
+	//
+	// This API does not save the resume or profile. To create a profile from this
+	// resume, clients need to call the CreateProfile method again with the
+	// profile returned.
+	//
+	// This API supports the following list of formats:
+	//
+	// * PDF
+	// * TXT
+	// * DOC
+	// * RTF
+	// * DOCX
+	//
+	// An error is thrown if the input format is not supported.
+	ParseResume(context.Context, *ParseResumeRequest) (*ParseResumeResponse, error)
+}
+
+func RegisterResumeServiceServer(s *grpc.Server, srv ResumeServiceServer) {
+	s.RegisterService(&_ResumeService_serviceDesc, srv)
+}
+
+func _ResumeService_ParseResume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ParseResumeRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ResumeServiceServer).ParseResume(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/google.cloud.talent.v4beta1.ResumeService/ParseResume",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ResumeServiceServer).ParseResume(ctx, req.(*ParseResumeRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _ResumeService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "google.cloud.talent.v4beta1.ResumeService",
+	HandlerType: (*ResumeServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "ParseResume",
+			Handler:    _ResumeService_ParseResume_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "google/cloud/talent/v4beta1/resume_service.proto",
+}
+
+func init() {
+	proto.RegisterFile("google/cloud/talent/v4beta1/resume_service.proto", fileDescriptor_resume_service_1cf6bb11c787af60)
+}
+
+var fileDescriptor_resume_service_1cf6bb11c787af60 = []byte{
+	// 396 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0xaa, 0x13, 0x31,
+	0x14, 0x86, 0x49, 0xaf, 0xdc, 0xeb, 0x4d, 0xef, 0xdd, 0x44, 0x90, 0x5a, 0x85, 0x7b, 0x19, 0x5d,
+	0xd4, 0x2e, 0x26, 0xb5, 0xea, 0xa6, 0xa2, 0x60, 0xfb, 0x02, 0xc3, 0xb4, 0x2b, 0x37, 0x25, 0x9d,
+	0x1e, 0xc3, 0xc8, 0x34, 0x27, 0x26, 0x99, 0xb6, 0x20, 0x82, 0xb8, 0x74, 0xeb, 0x1b, 0xb8, 0xf1,
+	0x19, 0x7c, 0x0e, 0x5f, 0xc1, 0x07, 0x91, 0x49, 0x52, 0xb1, 0x28, 0xc3, 0x5d, 0x9e, 0x93, 0xf3,
+	0xe5, 0xff, 0xf3, 0xe7, 0xd0, 0x91, 0x44, 0x94, 0x15, 0xf0, 0xa2, 0xc2, 0x7a, 0xcd, 0x9d, 0xa8,
+	0x40, 0x39, 0xbe, 0x7d, 0xb6, 0x02, 0x27, 0x9e, 0x70, 0x03, 0xb6, 0xde, 0xc0, 0xd2, 0x82, 0xd9,
+	0x96, 0x05, 0xa4, 0xda, 0xa0, 0x43, 0x76, 0x3f, 0x10, 0xa9, 0x27, 0xd2, 0x40, 0xa4, 0x91, 0xe8,
+	0x3f, 0x88, 0xd7, 0x09, 0x5d, 0x72, 0xa1, 0x14, 0x3a, 0xe1, 0x4a, 0x54, 0x36, 0xa0, 0xfd, 0xc7,
+	0x6d, 0x62, 0xda, 0xe0, 0xdb, 0xb2, 0x8a, 0x2a, 0xc9, 0x17, 0x42, 0x59, 0x26, 0x8c, 0x85, 0xdc,
+	0x7b, 0xc8, 0xe1, 0x7d, 0x0d, 0xd6, 0xb1, 0xbb, 0xf4, 0x54, 0x0b, 0x03, 0xca, 0xf5, 0xc8, 0x35,
+	0x19, 0x9c, 0xe7, 0xb1, 0x6a, 0xfa, 0xc1, 0x6c, 0xaf, 0x73, 0x4d, 0x06, 0x17, 0x79, 0xac, 0xd8,
+	0x15, 0xed, 0x1a, 0x90, 0x25, 0xaa, 0x65, 0x81, 0x6b, 0xe8, 0x9d, 0x78, 0x88, 0x86, 0xd6, 0x0c,
+	0xd7, 0xc0, 0x1e, 0xd2, 0xcb, 0x4a, 0x28, 0x59, 0x0b, 0x09, 0x61, 0xe4, 0x96, 0x1f, 0xb9, 0x38,
+	0x34, 0x9b, 0xa1, 0x44, 0xd3, 0x3b, 0x47, 0x5e, 0xac, 0x46, 0x65, 0x81, 0xbd, 0xa2, 0x67, 0xd1,
+	0xb4, 0x77, 0xd3, 0x1d, 0x3f, 0x4a, 0x5b, 0xb2, 0x49, 0xb3, 0x30, 0x9b, 0x1f, 0x20, 0x76, 0x8f,
+	0xde, 0x36, 0x62, 0xb7, 0x74, 0xb0, 0x77, 0xde, 0xf6, 0x79, 0x7e, 0x66, 0xc4, 0x6e, 0x01, 0x7b,
+	0x37, 0xfe, 0x41, 0xe8, 0x65, 0x50, 0x9b, 0x87, 0xf0, 0xd9, 0x77, 0x42, 0xbb, 0x7f, 0x99, 0x60,
+	0xbc, 0x5d, 0xeb, 0x9f, 0xe8, 0xfa, 0xa3, 0x9b, 0x03, 0xe1, 0x7d, 0xc9, 0xf3, 0xcf, 0x3f, 0x7f,
+	0x7d, 0xed, 0xf0, 0x64, 0xf8, 0xe7, 0x8f, 0x3e, 0x84, 0xb8, 0x5f, 0x6a, 0x83, 0xef, 0xa0, 0x70,
+	0x96, 0x0f, 0x3f, 0xc6, 0x25, 0xb1, 0x13, 0xdd, 0xdc, 0x30, 0x21, 0xc3, 0xe9, 0x27, 0x42, 0xaf,
+	0x0a, 0xdc, 0xb4, 0xc9, 0x4d, 0xd9, 0xd1, 0xe3, 0xb2, 0xe6, 0xcb, 0x33, 0xf2, 0xe6, 0x75, 0x44,
+	0x24, 0x36, 0xf1, 0xa7, 0x68, 0x24, 0x97, 0xa0, 0xfc, 0x42, 0xf0, 0x70, 0x24, 0x74, 0x69, 0xff,
+	0xbb, 0x3e, 0x2f, 0x42, 0xf9, 0xad, 0x73, 0x32, 0x5b, 0xcc, 0x57, 0xa7, 0x9e, 0x79, 0xfa, 0x3b,
+	0x00, 0x00, 0xff, 0xff, 0x62, 0x8f, 0xa7, 0xd2, 0xde, 0x02, 0x00, 0x00,
+}
diff --git a/googleapis/cloud/tasks/v2beta3/queue.pb.go b/googleapis/cloud/tasks/v2beta3/queue.pb.go
index a42d719a18debe381a65e8de95fbf85fbc5ccb95..2200ceef19a2681510fcf721c4f861b471cff8ae 100644
--- a/googleapis/cloud/tasks/v2beta3/queue.pb.go
+++ b/googleapis/cloud/tasks/v2beta3/queue.pb.go
@@ -43,9 +43,11 @@ const (
 	// The queue is disabled.
 	//
 	// A queue becomes `DISABLED` when
-	// [queue.yaml](https://cloud.google.com/appengine/docs/python/config/queueref) or
-	// [queue.xml](https://cloud.google.com/appengine/docs/standard/java/config/queueref) is uploaded
-	// which does not contain the queue. You cannot directly disable a queue.
+	// [queue.yaml](https://cloud.google.com/appengine/docs/python/config/queueref)
+	// or
+	// [queue.xml](https://cloud.google.com/appengine/docs/standard/java/config/queueref)
+	// is uploaded which does not contain the queue. You cannot directly disable
+	// a queue.
 	//
 	// When a queue is disabled, tasks can still be added to a queue
 	// but the tasks are not dispatched.
@@ -72,7 +74,7 @@ func (x Queue_State) String() string {
 	return proto.EnumName(Queue_State_name, int32(x))
 }
 func (Queue_State) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_queue_794838e549a7d9e7, []int{0, 0}
+	return fileDescriptor_queue_a25af721e5e14a04, []int{0, 0}
 }
 
 // A queue is a container of related tasks. Queues are configured to manage
@@ -98,23 +100,14 @@ type Queue struct {
 	// * `QUEUE_ID` can contain letters ([A-Za-z]), numbers ([0-9]), or
 	//   hyphens (-). The maximum length is 100 characters.
 	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
-	// Caller-specified and required in [CreateQueue][google.cloud.tasks.v2beta3.CloudTasks.CreateQueue][],
-	// after which the queue config type becomes output only, though fields within
-	// the config are mutable.
-	//
-	// The queue's type.
-	//
-	// The type applies to all tasks in the queue.
-	//
 	// Types that are valid to be assigned to QueueType:
 	//	*Queue_AppEngineHttpQueue
 	QueueType isQueue_QueueType `protobuf_oneof:"queue_type"`
 	// Rate limits for task dispatches.
 	//
-	// [rate_limits][google.cloud.tasks.v2beta3.Queue.rate_limits] and
-	// [retry_config][google.cloud.tasks.v2beta3.Queue.retry_config] are related because they both
-	// control task attempts however they control how tasks are
-	// attempted in different ways:
+	// [rate_limits][google.cloud.tasks.v2beta3.Queue.rate_limits] and [retry_config][google.cloud.tasks.v2beta3.Queue.retry_config] are
+	// related because they both control task attempts. However they control task
+	// attempts in different ways:
 	//
 	// * [rate_limits][google.cloud.tasks.v2beta3.Queue.rate_limits] controls the total rate of
 	//   dispatches from a queue (i.e. all traffic dispatched from the
@@ -124,6 +117,16 @@ type Queue struct {
 	//   particular a task after its first attempt fails. That is,
 	//   [retry_config][google.cloud.tasks.v2beta3.Queue.retry_config] controls task retries (the
 	//   second attempt, third attempt, etc).
+	//
+	// The queue's actual dispatch rate is the result of:
+	//
+	// * Number of tasks in the queue
+	// * User-specified throttling: [rate limits][Queue.RateLimits]
+	//   [retry configuration][Queue.RetryConfig], and the
+	//   [queue's state][google.cloud.tasks.v2beta3.Queue.state].
+	// * System throttling due to `429` (Too Many Requests) or `503` (Service
+	//   Unavailable) responses from the worker, high error rates, or to smooth
+	//   sudden large traffic spikes.
 	RateLimits *RateLimits `protobuf:"bytes,4,opt,name=rate_limits,json=rateLimits,proto3" json:"rate_limits,omitempty"`
 	// Settings that determine the retry behavior.
 	//
@@ -163,7 +166,7 @@ func (m *Queue) Reset()         { *m = Queue{} }
 func (m *Queue) String() string { return proto.CompactTextString(m) }
 func (*Queue) ProtoMessage()    {}
 func (*Queue) Descriptor() ([]byte, []int) {
-	return fileDescriptor_queue_794838e549a7d9e7, []int{0}
+	return fileDescriptor_queue_a25af721e5e14a04, []int{0}
 }
 func (m *Queue) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Queue.Unmarshal(m, b)
@@ -375,7 +378,7 @@ func (m *RateLimits) Reset()         { *m = RateLimits{} }
 func (m *RateLimits) String() string { return proto.CompactTextString(m) }
 func (*RateLimits) ProtoMessage()    {}
 func (*RateLimits) Descriptor() ([]byte, []int) {
-	return fileDescriptor_queue_794838e549a7d9e7, []int{1}
+	return fileDescriptor_queue_a25af721e5e14a04, []int{1}
 }
 func (m *RateLimits) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_RateLimits.Unmarshal(m, b)
@@ -517,7 +520,7 @@ func (m *RetryConfig) Reset()         { *m = RetryConfig{} }
 func (m *RetryConfig) String() string { return proto.CompactTextString(m) }
 func (*RetryConfig) ProtoMessage()    {}
 func (*RetryConfig) Descriptor() ([]byte, []int) {
-	return fileDescriptor_queue_794838e549a7d9e7, []int{2}
+	return fileDescriptor_queue_a25af721e5e14a04, []int{2}
 }
 func (m *RetryConfig) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_RetryConfig.Unmarshal(m, b)
@@ -580,10 +583,10 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/tasks/v2beta3/queue.proto", fileDescriptor_queue_794838e549a7d9e7)
+	proto.RegisterFile("google/cloud/tasks/v2beta3/queue.proto", fileDescriptor_queue_a25af721e5e14a04)
 }
 
-var fileDescriptor_queue_794838e549a7d9e7 = []byte{
+var fileDescriptor_queue_a25af721e5e14a04 = []byte{
 	// 646 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0xcf, 0x4e, 0xdb, 0x4e,
 	0x10, 0xc7, 0x31, 0x10, 0xf8, 0x31, 0xce, 0x0f, 0xa5, 0x2b, 0xd1, 0x86, 0xa8, 0xa2, 0x69, 0x5a,
diff --git a/googleapis/cloud/tasks/v2beta3/target.pb.go b/googleapis/cloud/tasks/v2beta3/target.pb.go
index faee65ebf3c4af2805fdb57be4f6e03a459cff03..31335a92eb6970294b54648826009f1b28cf562c 100644
--- a/googleapis/cloud/tasks/v2beta3/target.pb.go
+++ b/googleapis/cloud/tasks/v2beta3/target.pb.go
@@ -35,6 +35,10 @@ const (
 	HttpMethod_PUT HttpMethod = 4
 	// HTTP DELETE
 	HttpMethod_DELETE HttpMethod = 5
+	// HTTP PATCH
+	HttpMethod_PATCH HttpMethod = 6
+	// HTTP OPTIONS
+	HttpMethod_OPTIONS HttpMethod = 7
 )
 
 var HttpMethod_name = map[int32]string{
@@ -44,6 +48,8 @@ var HttpMethod_name = map[int32]string{
 	3: "HEAD",
 	4: "PUT",
 	5: "DELETE",
+	6: "PATCH",
+	7: "OPTIONS",
 }
 var HttpMethod_value = map[string]int32{
 	"HTTP_METHOD_UNSPECIFIED": 0,
@@ -52,13 +58,15 @@ var HttpMethod_value = map[string]int32{
 	"HEAD":                    3,
 	"PUT":                     4,
 	"DELETE":                  5,
+	"PATCH":                   6,
+	"OPTIONS":                 7,
 }
 
 func (x HttpMethod) String() string {
 	return proto.EnumName(HttpMethod_name, int32(x))
 }
 func (HttpMethod) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_target_d181648443660751, []int{0}
+	return fileDescriptor_target_890b1f7b57da6ed3, []int{0}
 }
 
 // App Engine HTTP queue.
@@ -91,7 +99,7 @@ func (m *AppEngineHttpQueue) Reset()         { *m = AppEngineHttpQueue{} }
 func (m *AppEngineHttpQueue) String() string { return proto.CompactTextString(m) }
 func (*AppEngineHttpQueue) ProtoMessage()    {}
 func (*AppEngineHttpQueue) Descriptor() ([]byte, []int) {
-	return fileDescriptor_target_d181648443660751, []int{0}
+	return fileDescriptor_target_890b1f7b57da6ed3, []int{0}
 }
 func (m *AppEngineHttpQueue) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_AppEngineHttpQueue.Unmarshal(m, b)
@@ -138,6 +146,11 @@ func (m *AppEngineHttpQueue) GetAppEngineRoutingOverride() *AppEngineRouting {
 // [How Requests are Routed](https://cloud.google.com/appengine/docs/standard/python/how-requests-are-routed)
 // and how routing is affected by
 // [dispatch files](https://cloud.google.com/appengine/docs/python/config/dispatchref).
+// Traffic is encrypted during transport and never leaves Google datacenters.
+// Because this traffic is carried over a communication mechanism internal to
+// Google, you cannot explicitly set the protocol (for example, HTTP or HTTPS).
+// The request to the handler, however, will appear to have used the HTTP
+// protocol.
 //
 // The [AppEngineRouting][google.cloud.tasks.v2beta3.AppEngineRouting] used to construct the URL that the task is
 // delivered to can be set at the queue-level or task-level:
@@ -154,6 +167,14 @@ func (m *AppEngineHttpQueue) GetAppEngineRoutingOverride() *AppEngineRouting {
 // * `url =` [host][google.cloud.tasks.v2beta3.AppEngineRouting.host] `+`
 //   [relative_uri][google.cloud.tasks.v2beta3.AppEngineHttpRequest.relative_uri]
 //
+// Tasks can be dispatched to secure app handlers, unsecure app handlers, and
+// URIs restricted with
+// [`login: admin`](https://cloud.google.com/appengine/docs/standard/python/config/appref).
+// Because tasks are not run as any user, they cannot be dispatched to URIs
+// restricted with
+// [`login: required`](https://cloud.google.com/appengine/docs/standard/python/config/appref)
+// Task dispatches also do not follow redirects.
+//
 // The task attempt has succeeded if the app's request handler returns
 // an HTTP response code in the range [`200` - `299`]. `503` is
 // considered an App Engine system error instead of an application
@@ -242,7 +263,7 @@ func (m *AppEngineHttpRequest) Reset()         { *m = AppEngineHttpRequest{} }
 func (m *AppEngineHttpRequest) String() string { return proto.CompactTextString(m) }
 func (*AppEngineHttpRequest) ProtoMessage()    {}
 func (*AppEngineHttpRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_target_d181648443660751, []int{1}
+	return fileDescriptor_target_890b1f7b57da6ed3, []int{1}
 }
 func (m *AppEngineHttpRequest) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_AppEngineHttpRequest.Unmarshal(m, b)
@@ -299,14 +320,8 @@ func (m *AppEngineHttpRequest) GetBody() []byte {
 
 // App Engine Routing.
 //
-// Specifies the target URI. Since this target type dispatches tasks to secure
-// app handlers, unsecure app handlers, and URIs restricted with
-// [`login: admin`](https://cloud.google.com/appengine/docs/standard/python/config/appref)
-// the protocol (for example, HTTP or HTTPS) cannot be explictly specified.
-// Task dispatches do not follow redirects and cannot target URI paths
-// restricted with
-// [`login: required`](https://cloud.google.com/appengine/docs/standard/python/config/appref)
-// because tasks are not run as any user.
+// Defines routing characteristics specific to App Engine - service, version,
+// and instance.
 //
 // For more information about services, versions, and instances see
 // [An Overview of App Engine](https://cloud.google.com/appengine/docs/python/an-overview-of-app-engine),
@@ -379,7 +394,7 @@ func (m *AppEngineRouting) Reset()         { *m = AppEngineRouting{} }
 func (m *AppEngineRouting) String() string { return proto.CompactTextString(m) }
 func (*AppEngineRouting) ProtoMessage()    {}
 func (*AppEngineRouting) Descriptor() ([]byte, []int) {
-	return fileDescriptor_target_d181648443660751, []int{2}
+	return fileDescriptor_target_890b1f7b57da6ed3, []int{2}
 }
 func (m *AppEngineRouting) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_AppEngineRouting.Unmarshal(m, b)
@@ -436,41 +451,43 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/tasks/v2beta3/target.proto", fileDescriptor_target_d181648443660751)
+	proto.RegisterFile("google/cloud/tasks/v2beta3/target.proto", fileDescriptor_target_890b1f7b57da6ed3)
 }
 
-var fileDescriptor_target_d181648443660751 = []byte{
-	// 511 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0x51, 0x6b, 0xd3, 0x50,
-	0x14, 0x36, 0x4d, 0xbb, 0xae, 0xa7, 0x45, 0xc2, 0x65, 0x60, 0xe8, 0x44, 0x6a, 0x1f, 0xb4, 0x88,
-	0x24, 0xd0, 0xbd, 0xc8, 0x44, 0x64, 0xb3, 0x71, 0x1d, 0x38, 0x1b, 0xb3, 0x14, 0x61, 0x3e, 0x84,
-	0xdb, 0xf6, 0x90, 0x5e, 0xda, 0xdd, 0x1b, 0x6f, 0x6e, 0x02, 0x7d, 0xf4, 0xc9, 0xbf, 0x2d, 0xb9,
-	0x49, 0xeb, 0xac, 0x3a, 0xc4, 0xb7, 0xf3, 0x7d, 0xf9, 0xce, 0x77, 0xee, 0xf9, 0xc2, 0x81, 0xe7,
-	0xb1, 0x10, 0xf1, 0x1a, 0xdd, 0xf9, 0x5a, 0x64, 0x0b, 0x57, 0xd1, 0x74, 0x95, 0xba, 0xf9, 0x70,
-	0x86, 0x8a, 0x9e, 0xb8, 0x8a, 0xca, 0x18, 0x95, 0x93, 0x48, 0xa1, 0x04, 0xe9, 0x96, 0x42, 0x47,
-	0x0b, 0x1d, 0x2d, 0x74, 0x2a, 0x61, 0xf7, 0x71, 0x65, 0x42, 0x13, 0xe6, 0x52, 0xce, 0x85, 0xa2,
-	0x8a, 0x09, 0x9e, 0x96, 0x9d, 0xfd, 0x6f, 0x06, 0x90, 0xb3, 0x24, 0xf1, 0x78, 0xcc, 0x38, 0x8e,
-	0x95, 0x4a, 0x3e, 0x65, 0x98, 0x21, 0x59, 0xc1, 0x31, 0x4d, 0x92, 0x08, 0x35, 0x1d, 0x49, 0x91,
-	0x29, 0xc6, 0xe3, 0x48, 0xe4, 0x28, 0x25, 0x5b, 0xa0, 0x6d, 0xf4, 0x8c, 0x41, 0x7b, 0xf8, 0xd2,
-	0xf9, 0xfb, 0x58, 0x67, 0x67, 0x1a, 0x94, 0xcd, 0x81, 0x4d, 0xf7, 0x98, 0x49, 0xe5, 0xd6, 0xff,
-	0x6e, 0xc2, 0xd1, 0x2f, 0x6f, 0x08, 0xf0, 0x6b, 0x86, 0xa9, 0x22, 0x17, 0xd0, 0x5e, 0x2a, 0x95,
-	0x44, 0xb7, 0xa8, 0x96, 0x62, 0xa1, 0xa7, 0x3e, 0x1c, 0x3e, 0xbb, 0x6f, 0x6a, 0xd1, 0x7d, 0xa5,
-	0xd5, 0x01, 0x2c, 0x77, 0x35, 0xb9, 0x01, 0xf2, 0xfb, 0x3a, 0x76, 0xed, 0x3f, 0xb6, 0xb0, 0xf6,
-	0xb7, 0x20, 0x4f, 0xa1, 0x23, 0x71, 0x4d, 0x15, 0xcb, 0x31, 0xca, 0x24, 0xb3, 0xcd, 0x9e, 0x31,
-	0x68, 0x05, 0xed, 0x2d, 0x37, 0x95, 0x8c, 0x7c, 0x86, 0xe6, 0x12, 0xe9, 0x02, 0x65, 0x6a, 0xd7,
-	0x7b, 0xe6, 0xa0, 0x3d, 0x7c, 0xf3, 0x4f, 0x33, 0xef, 0x44, 0xe1, 0x8c, 0xcb, 0x7e, 0x8f, 0x2b,
-	0xb9, 0x09, 0xb6, 0x6e, 0x84, 0x40, 0x7d, 0x26, 0x16, 0x1b, 0xbb, 0xd1, 0x33, 0x06, 0x9d, 0x40,
-	0xd7, 0xdd, 0x53, 0xe8, 0xdc, 0x15, 0x13, 0x0b, 0xcc, 0x15, 0x6e, 0x74, 0x78, 0xad, 0xa0, 0x28,
-	0xc9, 0x11, 0x34, 0x72, 0xba, 0xce, 0x50, 0x07, 0xd0, 0x0a, 0x4a, 0x70, 0x5a, 0x7b, 0x65, 0xf4,
-	0x73, 0xb0, 0xf6, 0x37, 0x26, 0x36, 0x34, 0x53, 0x94, 0x39, 0x9b, 0x63, 0xe5, 0xb1, 0x85, 0xc5,
-	0x97, 0x1c, 0x65, 0xca, 0x04, 0xaf, 0x9c, 0xb6, 0x90, 0x74, 0xe1, 0x90, 0xf1, 0x54, 0x51, 0x3e,
-	0xc7, 0x2a, 0x8f, 0x1d, 0x2e, 0xde, 0xbc, 0x14, 0xa9, 0xb2, 0xeb, 0x9a, 0xd7, 0xf5, 0x8b, 0x2f,
-	0x00, 0x3f, 0xff, 0x1c, 0x39, 0x86, 0x47, 0xe3, 0x30, 0xf4, 0xa3, 0x2b, 0x2f, 0x1c, 0x4f, 0x46,
-	0xd1, 0xf4, 0xe3, 0xb5, 0xef, 0xbd, 0xbb, 0x7c, 0x7f, 0xe9, 0x8d, 0xac, 0x07, 0xe4, 0x10, 0xea,
-	0xfe, 0xe4, 0x3a, 0xb4, 0x0c, 0xd2, 0x04, 0xf3, 0xc2, 0x0b, 0xad, 0x5a, 0x41, 0x8d, 0xbd, 0xb3,
-	0x91, 0x65, 0x16, 0x94, 0x3f, 0x0d, 0xad, 0x3a, 0x01, 0x38, 0x18, 0x79, 0x1f, 0xbc, 0xd0, 0xb3,
-	0x1a, 0xe7, 0x09, 0x3c, 0x99, 0x8b, 0xdb, 0x7b, 0x12, 0x3f, 0x6f, 0x87, 0xfa, 0x98, 0xfc, 0xe2,
-	0x22, 0x7c, 0xe3, 0xe6, 0x6d, 0x25, 0x8d, 0xc5, 0x9a, 0xf2, 0xd8, 0x11, 0x32, 0x76, 0x63, 0xe4,
-	0xfa, 0x5e, 0xdc, 0xf2, 0x13, 0x4d, 0x58, 0xfa, 0xa7, 0xab, 0x7c, 0xad, 0xd1, 0xec, 0x40, 0x6b,
-	0x4f, 0x7e, 0x04, 0x00, 0x00, 0xff, 0xff, 0x8e, 0x26, 0x4d, 0x45, 0xc0, 0x03, 0x00, 0x00,
+var fileDescriptor_target_890b1f7b57da6ed3 = []byte{
+	// 532 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0xcf, 0x6b, 0xdb, 0x4c,
+	0x10, 0xfd, 0x64, 0xf9, 0x47, 0x3c, 0x32, 0x1f, 0x62, 0x09, 0x54, 0x38, 0xa5, 0xb8, 0x3e, 0xb4,
+	0xa6, 0x14, 0x09, 0x9c, 0x4b, 0x49, 0x29, 0xc5, 0x89, 0xd5, 0xc8, 0xd0, 0xc4, 0xaa, 0x2c, 0x53,
+	0xc8, 0x45, 0xac, 0xed, 0x45, 0x5e, 0xec, 0xec, 0xaa, 0xab, 0x95, 0xc0, 0xc7, 0x9e, 0xfa, 0x6f,
+	0x17, 0xad, 0x64, 0x37, 0x75, 0xdb, 0x50, 0x7a, 0x9b, 0xf7, 0xf6, 0xcd, 0x9b, 0x9d, 0x19, 0x06,
+	0x5e, 0xc6, 0x9c, 0xc7, 0x5b, 0xe2, 0x2c, 0xb7, 0x3c, 0x5b, 0x39, 0x12, 0xa7, 0x9b, 0xd4, 0xc9,
+	0x87, 0x0b, 0x22, 0xf1, 0xb9, 0x23, 0xb1, 0x88, 0x89, 0xb4, 0x13, 0xc1, 0x25, 0x47, 0xdd, 0x52,
+	0x68, 0x2b, 0xa1, 0xad, 0x84, 0x76, 0x25, 0xec, 0x3e, 0xad, 0x4c, 0x70, 0x42, 0x1d, 0xcc, 0x18,
+	0x97, 0x58, 0x52, 0xce, 0xd2, 0x32, 0xb3, 0xff, 0x55, 0x03, 0x34, 0x4a, 0x12, 0x97, 0xc5, 0x94,
+	0x11, 0x4f, 0xca, 0xe4, 0x53, 0x46, 0x32, 0x82, 0x36, 0x70, 0x86, 0x93, 0x24, 0x22, 0x8a, 0x8e,
+	0x04, 0xcf, 0x24, 0x65, 0x71, 0xc4, 0x73, 0x22, 0x04, 0x5d, 0x11, 0x4b, 0xeb, 0x69, 0x03, 0x63,
+	0xf8, 0xda, 0xfe, 0x73, 0x59, 0xfb, 0x60, 0x1a, 0x94, 0xc9, 0x81, 0x85, 0x8f, 0x98, 0x69, 0xe5,
+	0xd6, 0xff, 0xa6, 0xc3, 0xe9, 0x4f, 0x7f, 0x08, 0xc8, 0x97, 0x8c, 0xa4, 0x12, 0x5d, 0x83, 0xb1,
+	0x96, 0x32, 0x89, 0xee, 0x89, 0x5c, 0xf3, 0x95, 0xaa, 0xfa, 0xff, 0xf0, 0xc5, 0x63, 0x55, 0x8b,
+	0xec, 0x1b, 0xa5, 0x0e, 0x60, 0x7d, 0x88, 0xd1, 0x1d, 0xa0, 0x5f, 0xdb, 0xb1, 0x6a, 0xff, 0xd0,
+	0x85, 0x79, 0xdc, 0x05, 0x7a, 0x0e, 0x1d, 0x41, 0xb6, 0x58, 0xd2, 0x9c, 0x44, 0x99, 0xa0, 0x96,
+	0xde, 0xd3, 0x06, 0xed, 0xc0, 0xd8, 0x73, 0x73, 0x41, 0xd1, 0x67, 0x68, 0xad, 0x09, 0x5e, 0x11,
+	0x91, 0x5a, 0xf5, 0x9e, 0x3e, 0x30, 0x86, 0xef, 0xfe, 0xaa, 0xe6, 0x83, 0x51, 0xd8, 0x5e, 0x99,
+	0xef, 0x32, 0x29, 0x76, 0xc1, 0xde, 0x0d, 0x21, 0xa8, 0x2f, 0xf8, 0x6a, 0x67, 0x35, 0x7a, 0xda,
+	0xa0, 0x13, 0xa8, 0xb8, 0x7b, 0x01, 0x9d, 0x87, 0x62, 0x64, 0x82, 0xbe, 0x21, 0x3b, 0x35, 0xbc,
+	0x76, 0x50, 0x84, 0xe8, 0x14, 0x1a, 0x39, 0xde, 0x66, 0x44, 0x0d, 0xa0, 0x1d, 0x94, 0xe0, 0xa2,
+	0xf6, 0x46, 0xeb, 0xe7, 0x60, 0x1e, 0x77, 0x8c, 0x2c, 0x68, 0xa5, 0x44, 0xe4, 0x74, 0x49, 0x2a,
+	0x8f, 0x3d, 0x2c, 0x5e, 0x72, 0x22, 0x52, 0xca, 0x59, 0xe5, 0xb4, 0x87, 0xa8, 0x0b, 0x27, 0x94,
+	0xa5, 0x12, 0xb3, 0x25, 0xa9, 0xe6, 0x71, 0xc0, 0xc5, 0x9f, 0xd7, 0x3c, 0x95, 0x56, 0x5d, 0xf1,
+	0x2a, 0x7e, 0x95, 0x02, 0xfc, 0xd8, 0x1c, 0x3a, 0x83, 0x27, 0x5e, 0x18, 0xfa, 0xd1, 0x8d, 0x1b,
+	0x7a, 0xd3, 0x71, 0x34, 0xbf, 0x9d, 0xf9, 0xee, 0xd5, 0xe4, 0xc3, 0xc4, 0x1d, 0x9b, 0xff, 0xa1,
+	0x13, 0xa8, 0xfb, 0xd3, 0x59, 0x68, 0x6a, 0xa8, 0x05, 0xfa, 0xb5, 0x1b, 0x9a, 0xb5, 0x82, 0xf2,
+	0xdc, 0xd1, 0xd8, 0xd4, 0x0b, 0xca, 0x9f, 0x87, 0x66, 0x1d, 0x01, 0x34, 0xc7, 0xee, 0x47, 0x37,
+	0x74, 0xcd, 0x06, 0x6a, 0x43, 0xc3, 0x1f, 0x85, 0x57, 0x9e, 0xd9, 0x44, 0x06, 0xb4, 0xa6, 0x7e,
+	0x38, 0x99, 0xde, 0xce, 0xcc, 0xd6, 0x65, 0x02, 0xcf, 0x96, 0xfc, 0xfe, 0x91, 0x4d, 0x5c, 0x1a,
+	0xa1, 0x3a, 0x32, 0xbf, 0xb8, 0x14, 0x5f, 0xbb, 0x7b, 0x5f, 0x49, 0x63, 0xbe, 0xc5, 0x2c, 0xb6,
+	0xb9, 0x88, 0x9d, 0x98, 0x30, 0x75, 0x47, 0x4e, 0xf9, 0x84, 0x13, 0x9a, 0xfe, 0xee, 0x5a, 0xdf,
+	0x2a, 0xb4, 0x68, 0x2a, 0xed, 0xf9, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9b, 0xa0, 0x77, 0xa5,
+	0xd8, 0x03, 0x00, 0x00,
 }
diff --git a/googleapis/cloud/tasks/v2beta3/task.pb.go b/googleapis/cloud/tasks/v2beta3/task.pb.go
index f89c19592706b7658cf070f3227b5d11571f5e78..6bbe62ffdb13eccd7d062323a94ef6083b74805f 100644
--- a/googleapis/cloud/tasks/v2beta3/task.pb.go
+++ b/googleapis/cloud/tasks/v2beta3/task.pb.go
@@ -6,6 +6,7 @@ package tasks // import "google.golang.org/genproto/googleapis/cloud/tasks/v2bet
 import proto "github.com/golang/protobuf/proto"
 import fmt "fmt"
 import math "math"
+import duration "github.com/golang/protobuf/ptypes/duration"
 import timestamp "github.com/golang/protobuf/ptypes/timestamp"
 import _ "google.golang.org/genproto/googleapis/api/annotations"
 import status "google.golang.org/genproto/googleapis/rpc/status"
@@ -65,7 +66,7 @@ func (x Task_View) String() string {
 	return proto.EnumName(Task_View_name, int32(x))
 }
 func (Task_View) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_task_949e38cc41c5c152, []int{0, 0}
+	return fileDescriptor_task_488a6ad1b0a4e333, []int{0, 0}
 }
 
 // A unit of scheduled work.
@@ -90,10 +91,7 @@ type Task struct {
 	// * `TASK_ID` can contain only letters ([A-Za-z]), numbers ([0-9]),
 	//   hyphens (-), or underscores (_). The maximum length is 500 characters.
 	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
-	// Required.
-	//
-	// The task's payload is used by the task's target to process the task.
-	// A payload is valid only if it is compatible with the queue's target.
+	// Required. The message to send to the worker.
 	//
 	// Types that are valid to be assigned to PayloadType:
 	//	*Task_AppEngineHttpRequest
@@ -108,6 +106,35 @@ type Task struct {
 	//
 	// `create_time` will be truncated to the nearest second.
 	CreateTime *timestamp.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
+	// The deadline for requests sent to the worker. If the worker does not
+	// respond by this deadline then the request is cancelled and the attempt
+	// is marked as a `DEADLINE_EXCEEDED` failure. Cloud Tasks will retry the
+	// task according to the [RetryConfig][google.cloud.tasks.v2beta3.RetryConfig].
+	//
+	// Note that when the request is cancelled, Cloud Tasks will stop listing for
+	// the response, but whether the worker stops processing depends on the
+	// worker. For example, if the worker is stuck, it may not react to cancelled
+	// requests.
+	//
+	// The default and maximum values depend on the type of request:
+	//
+	//
+	// * For [App Engine tasks][google.cloud.tasks.v2beta3.AppEngineHttpRequest], 0 indicates that the
+	//   request has the default deadline. The default deadline depends on the
+	//   [scaling type](https://cloud.google.com/appengine/docs/standard/go/how-instances-are-managed#instance_scaling)
+	//   of the service: 10 minutes for standard apps with automatic scaling, 24
+	//   hours for standard apps with manual and basic scaling, and 60 minutes for
+	//   flex apps. If the request deadline is set, it must be in the interval [15
+	//   seconds, 24 hours 15 seconds]. Regardless of the task's
+	//   `dispatch_deadline`, the app handler will not run for longer than than
+	//   the service's timeout. We recommend setting the `dispatch_deadline` to
+	//   at most a few seconds more than the app handler's timeout. For more
+	//   information see
+	//   [Timeouts](https://cloud.google.com/tasks/docs/creating-appengine-handlers#timeouts).
+	//
+	// `dispatch_deadline` will be truncated to the nearest millisecond. The
+	// deadline is an approximate deadline.
+	DispatchDeadline *duration.Duration `protobuf:"bytes,12,opt,name=dispatch_deadline,json=dispatchDeadline,proto3" json:"dispatch_deadline,omitempty"`
 	// Output only. The number of attempts dispatched.
 	//
 	// This count includes tasks which have been dispatched but haven't
@@ -134,7 +161,7 @@ func (m *Task) Reset()         { *m = Task{} }
 func (m *Task) String() string { return proto.CompactTextString(m) }
 func (*Task) ProtoMessage()    {}
 func (*Task) Descriptor() ([]byte, []int) {
-	return fileDescriptor_task_949e38cc41c5c152, []int{0}
+	return fileDescriptor_task_488a6ad1b0a4e333, []int{0}
 }
 func (m *Task) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Task.Unmarshal(m, b)
@@ -199,6 +226,13 @@ func (m *Task) GetCreateTime() *timestamp.Timestamp {
 	return nil
 }
 
+func (m *Task) GetDispatchDeadline() *duration.Duration {
+	if m != nil {
+		return m.DispatchDeadline
+	}
+	return nil
+}
+
 func (m *Task) GetDispatchCount() int32 {
 	if m != nil {
 		return m.DispatchCount
@@ -303,7 +337,7 @@ type Attempt struct {
 	//
 	// `response_time` will be truncated to the nearest microsecond.
 	ResponseTime *timestamp.Timestamp `protobuf:"bytes,3,opt,name=response_time,json=responseTime,proto3" json:"response_time,omitempty"`
-	// Output only. The response from the target for this attempt.
+	// Output only. The response from the worker for this attempt.
 	//
 	// If `response_time` is unset, then the task has not been attempted or is
 	// currently running and the `response_status` field is meaningless.
@@ -317,7 +351,7 @@ func (m *Attempt) Reset()         { *m = Attempt{} }
 func (m *Attempt) String() string { return proto.CompactTextString(m) }
 func (*Attempt) ProtoMessage()    {}
 func (*Attempt) Descriptor() ([]byte, []int) {
-	return fileDescriptor_task_949e38cc41c5c152, []int{1}
+	return fileDescriptor_task_488a6ad1b0a4e333, []int{1}
 }
 func (m *Attempt) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Attempt.Unmarshal(m, b)
@@ -372,43 +406,45 @@ func init() {
 }
 
 func init() {
-	proto.RegisterFile("google/cloud/tasks/v2beta3/task.proto", fileDescriptor_task_949e38cc41c5c152)
-}
-
-var fileDescriptor_task_949e38cc41c5c152 = []byte{
-	// 538 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xcd, 0x6e, 0xda, 0x40,
-	0x10, 0xc7, 0xe3, 0xc4, 0xf9, 0x60, 0x03, 0x14, 0xad, 0x22, 0xc5, 0x42, 0x55, 0x8b, 0xa8, 0x50,
-	0x39, 0xd9, 0x2d, 0x39, 0x55, 0x39, 0xa0, 0x40, 0x41, 0x20, 0x45, 0x15, 0x32, 0x49, 0x2a, 0xf5,
-	0x62, 0x2d, 0x66, 0x63, 0xac, 0x98, 0xdd, 0xad, 0x77, 0x9c, 0x28, 0x8f, 0xd0, 0xc7, 0xec, 0x9b,
-	0x54, 0xde, 0x0f, 0x54, 0xa9, 0x29, 0xb4, 0x37, 0xcf, 0xec, 0xef, 0xff, 0x9f, 0x59, 0xcf, 0xd8,
-	0xa8, 0x93, 0x70, 0x9e, 0x64, 0x34, 0x88, 0x33, 0x5e, 0x2c, 0x03, 0x20, 0xf2, 0x41, 0x06, 0x8f,
-	0xbd, 0x05, 0x05, 0x72, 0xa1, 0x22, 0x5f, 0xe4, 0x1c, 0x38, 0x6e, 0x6a, 0xcc, 0x57, 0x98, 0xaf,
-	0x30, 0xdf, 0x60, 0xcd, 0xd7, 0xc6, 0x82, 0x88, 0x34, 0x20, 0x8c, 0x71, 0x20, 0x90, 0x72, 0x26,
-	0xb5, 0xb2, 0xf9, 0x7e, 0x6b, 0x81, 0x3c, 0xa1, 0x60, 0xc0, 0xb7, 0x06, 0x54, 0xd1, 0xa2, 0xb8,
-	0x0f, 0x20, 0x5d, 0x53, 0x09, 0x64, 0x2d, 0x0c, 0x70, 0x6e, 0x80, 0x5c, 0xc4, 0x81, 0x04, 0x02,
-	0x85, 0x29, 0xd1, 0xfe, 0xe9, 0x22, 0xf7, 0x86, 0xc8, 0x07, 0x8c, 0x91, 0xcb, 0xc8, 0x9a, 0x7a,
-	0x4e, 0xcb, 0xe9, 0x56, 0x42, 0xf5, 0x8c, 0x53, 0x74, 0x4e, 0x84, 0x88, 0x28, 0x4b, 0x52, 0x46,
-	0xa3, 0x15, 0x80, 0x88, 0x72, 0xfa, 0xbd, 0xa0, 0x12, 0xbc, 0x83, 0x96, 0xd3, 0x3d, 0xed, 0x7d,
-	0xf0, 0xff, 0x7e, 0x37, 0xff, 0x4a, 0x88, 0x91, 0x52, 0x4e, 0x00, 0x44, 0xa8, 0x75, 0x93, 0xbd,
-	0xf0, 0x8c, 0xbc, 0x90, 0xc7, 0x7d, 0x54, 0x93, 0xf1, 0x8a, 0x2e, 0x8b, 0x8c, 0x46, 0x65, 0xf3,
-	0x9e, 0xab, 0x0a, 0x34, 0x6d, 0x01, 0x7b, 0x33, 0xff, 0xc6, 0xde, 0x2c, 0xac, 0x5a, 0x41, 0x99,
-	0xc2, 0x97, 0xe8, 0x34, 0xce, 0x29, 0x01, 0x23, 0x3f, 0xdc, 0x29, 0x47, 0x1a, 0x57, 0xe2, 0x0e,
-	0xaa, 0x2f, 0x53, 0x29, 0x08, 0xc4, 0xab, 0x28, 0xe6, 0x05, 0x03, 0xef, 0xa8, 0xe5, 0x74, 0x0f,
-	0xc3, 0x9a, 0xcd, 0x0e, 0xcb, 0x64, 0x89, 0xe5, 0x54, 0x0a, 0xce, 0x24, 0x35, 0xd8, 0xb1, 0xc6,
-	0x6c, 0x56, 0x63, 0x13, 0x54, 0xbb, 0x4f, 0x73, 0x09, 0x11, 0x01, 0xa0, 0x6b, 0x01, 0xde, 0x89,
-	0x6a, 0xe6, 0xdd, 0xd6, 0x97, 0xa5, 0xd1, 0xb0, 0xaa, 0x94, 0x26, 0xc2, 0x63, 0x54, 0xcd, 0xc8,
-	0x6f, 0x46, 0x95, 0x7f, 0x37, 0x3a, 0x2d, 0x85, 0xd6, 0xe7, 0x13, 0x72, 0x1f, 0x53, 0xfa, 0xe4,
-	0xa1, 0x96, 0xd3, 0xad, 0xf7, 0x3a, 0xdb, 0xf4, 0xe5, 0x32, 0xf8, 0x77, 0x29, 0x7d, 0x0a, 0x95,
-	0xa4, 0xfd, 0x11, 0xb9, 0x65, 0x84, 0xcf, 0x50, 0xe3, 0x6e, 0x3a, 0xfa, 0x1a, 0xdd, 0x7e, 0x99,
-	0xcf, 0x46, 0xc3, 0xe9, 0x78, 0x3a, 0xfa, 0xdc, 0xd8, 0xc3, 0x15, 0x74, 0x38, 0xb8, 0x9a, 0x4f,
-	0x87, 0x0d, 0x07, 0x9f, 0x20, 0x77, 0x7c, 0x7b, 0x7d, 0xdd, 0xd8, 0x1f, 0xd4, 0x51, 0x55, 0x90,
-	0xe7, 0x8c, 0x93, 0x65, 0x04, 0xcf, 0x82, 0xb6, 0x7f, 0xec, 0xa3, 0x63, 0xdb, 0xc9, 0x1f, 0x73,
-	0x76, 0xfe, 0x73, 0xce, 0x7d, 0xb4, 0x19, 0x8a, 0x36, 0xd8, 0xdf, 0x6d, 0x60, 0x05, 0xd6, 0x60,
-	0x33, 0x44, 0x65, 0x70, 0xb0, 0xdb, 0xc0, 0x0a, 0xcc, 0xa6, 0xbd, 0xda, 0x18, 0xe8, 0x6f, 0xc9,
-	0x2c, 0x2b, 0xb6, 0x16, 0xb9, 0x88, 0xfd, 0xb9, 0x3a, 0x09, 0x37, 0x0b, 0xa3, 0xe3, 0x01, 0x43,
-	0x6f, 0x62, 0xbe, 0xde, 0x32, 0x80, 0x41, 0xa5, 0x9c, 0xc0, 0xac, 0x6c, 0x62, 0xe6, 0x7c, 0xeb,
-	0x1b, 0x30, 0xe1, 0x19, 0x61, 0x89, 0xcf, 0xf3, 0x24, 0x48, 0x28, 0x53, 0x2d, 0x06, 0xfa, 0x88,
-	0x88, 0x54, 0xbe, 0xf4, 0x83, 0xb8, 0x54, 0xd1, 0xe2, 0x48, 0xb1, 0x17, 0xbf, 0x02, 0x00, 0x00,
-	0xff, 0xff, 0xa7, 0x0f, 0xef, 0xad, 0xac, 0x04, 0x00, 0x00,
+	proto.RegisterFile("google/cloud/tasks/v2beta3/task.proto", fileDescriptor_task_488a6ad1b0a4e333)
+}
+
+var fileDescriptor_task_488a6ad1b0a4e333 = []byte{
+	// 574 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xdf, 0x4e, 0xdb, 0x30,
+	0x14, 0xc6, 0x09, 0xa4, 0x40, 0x4d, 0x61, 0x9d, 0x85, 0x44, 0x56, 0x4d, 0xac, 0x62, 0xaa, 0xd6,
+	0xab, 0x64, 0x2b, 0x57, 0x13, 0x17, 0x15, 0xfd, 0xa7, 0x56, 0x42, 0x53, 0x95, 0x02, 0x93, 0x76,
+	0x13, 0xb9, 0x89, 0x49, 0x23, 0x52, 0xdb, 0x8b, 0x4f, 0x40, 0x3c, 0xc2, 0x1e, 0x65, 0x6f, 0x39,
+	0xc5, 0xb1, 0xab, 0x69, 0xb0, 0x76, 0xbb, 0xeb, 0x39, 0xe7, 0xf7, 0x7d, 0x3e, 0xf6, 0x39, 0x0d,
+	0x6a, 0xc5, 0x9c, 0xc7, 0x29, 0xf5, 0xc2, 0x94, 0xe7, 0x91, 0x07, 0x44, 0xde, 0x4b, 0xef, 0xa1,
+	0x33, 0xa7, 0x40, 0xce, 0x55, 0xe4, 0x8a, 0x8c, 0x03, 0xc7, 0x8d, 0x12, 0x73, 0x15, 0xe6, 0x2a,
+	0xcc, 0xd5, 0x58, 0xe3, 0xad, 0xb6, 0x20, 0x22, 0xf1, 0x08, 0x63, 0x1c, 0x08, 0x24, 0x9c, 0xc9,
+	0x52, 0xd9, 0xf8, 0xb0, 0xf6, 0x80, 0x2c, 0xa6, 0xa0, 0xc1, 0x53, 0x0d, 0xaa, 0x68, 0x9e, 0xdf,
+	0x79, 0x51, 0x9e, 0x29, 0x27, 0x5d, 0x7f, 0xf7, 0x67, 0x1d, 0x92, 0x25, 0x95, 0x40, 0x96, 0x42,
+	0x03, 0x27, 0x1a, 0xc8, 0x44, 0xe8, 0x49, 0x20, 0x90, 0xeb, 0x16, 0xce, 0x7e, 0x56, 0x90, 0x7d,
+	0x4d, 0xe4, 0x3d, 0xc6, 0xc8, 0x66, 0x64, 0x49, 0x1d, 0xab, 0x69, 0xb5, 0xab, 0xbe, 0xfa, 0x8d,
+	0x13, 0x74, 0x42, 0x84, 0x08, 0x28, 0x8b, 0x13, 0x46, 0x83, 0x05, 0x80, 0x08, 0x32, 0xfa, 0x3d,
+	0xa7, 0x12, 0x9c, 0x9d, 0xa6, 0xd5, 0x3e, 0xe8, 0x7c, 0x74, 0xff, 0x7e, 0x77, 0xf7, 0x52, 0x88,
+	0xa1, 0x52, 0x8e, 0x01, 0x84, 0x5f, 0xea, 0xc6, 0x5b, 0xfe, 0x31, 0x79, 0x21, 0x8f, 0xbb, 0xe8,
+	0x50, 0x86, 0x0b, 0x1a, 0xe5, 0x29, 0x0d, 0x8a, 0xe6, 0x1d, 0x5b, 0x1d, 0xd0, 0x30, 0x07, 0x98,
+	0x9b, 0xb9, 0xd7, 0xe6, 0x66, 0x7e, 0xcd, 0x08, 0x8a, 0x14, 0xbe, 0x40, 0x07, 0x61, 0x46, 0x09,
+	0x68, 0x79, 0x65, 0xa3, 0x1c, 0x95, 0xb8, 0x12, 0x8f, 0xd0, 0xeb, 0x28, 0x91, 0x82, 0x40, 0xb8,
+	0x08, 0x22, 0x4a, 0xa2, 0x34, 0x61, 0xd4, 0xa9, 0x29, 0x8b, 0x37, 0xcf, 0x2c, 0x06, 0xfa, 0xed,
+	0xfd, 0xba, 0xd1, 0x0c, 0xb4, 0x04, 0xb7, 0xd0, 0xd1, 0xca, 0x27, 0xe4, 0x39, 0x03, 0x67, 0xb7,
+	0x69, 0xb5, 0x2b, 0xfe, 0xa1, 0xc9, 0xf6, 0x8b, 0x64, 0x81, 0x65, 0x54, 0x0a, 0xce, 0x24, 0xd5,
+	0xd8, 0x5e, 0x89, 0x99, 0x6c, 0x89, 0x8d, 0xd1, 0xe1, 0x5d, 0x92, 0x49, 0x08, 0x08, 0x00, 0x5d,
+	0x0a, 0x70, 0xf6, 0x55, 0x47, 0xef, 0xd7, 0x3e, 0x7a, 0x89, 0xfa, 0x35, 0xa5, 0xd4, 0x11, 0x1e,
+	0xa1, 0x5a, 0x4a, 0x7e, 0x33, 0xaa, 0xfe, 0xbb, 0xd1, 0x41, 0x21, 0x34, 0x3e, 0x9f, 0x91, 0xfd,
+	0x90, 0xd0, 0x47, 0x07, 0x35, 0xad, 0xf6, 0x51, 0xa7, 0xb5, 0x4e, 0x5f, 0x2c, 0x95, 0x7b, 0x9b,
+	0xd0, 0x47, 0x5f, 0x49, 0xce, 0x3e, 0x21, 0xbb, 0x88, 0xf0, 0x31, 0xaa, 0xdf, 0x4e, 0x86, 0x5f,
+	0x83, 0x9b, 0x2f, 0xb3, 0xe9, 0xb0, 0x3f, 0x19, 0x4d, 0x86, 0x83, 0xfa, 0x16, 0xae, 0xa2, 0x4a,
+	0xef, 0x72, 0x36, 0xe9, 0xd7, 0x2d, 0xbc, 0x8f, 0xec, 0xd1, 0xcd, 0xd5, 0x55, 0x7d, 0xbb, 0x77,
+	0x84, 0x6a, 0x82, 0x3c, 0xa5, 0x9c, 0x44, 0x01, 0x3c, 0x09, 0x7a, 0xf6, 0x63, 0x1b, 0xed, 0x99,
+	0x4e, 0x9e, 0xed, 0x8b, 0xf5, 0x9f, 0xfb, 0xd2, 0x45, 0xab, 0xa1, 0x94, 0x06, 0xdb, 0x9b, 0x0d,
+	0x8c, 0xc0, 0x18, 0xac, 0x86, 0xa8, 0x0c, 0x76, 0x36, 0x1b, 0x18, 0x81, 0xde, 0xd8, 0x57, 0x2b,
+	0x83, 0xf2, 0x3f, 0xa9, 0x97, 0x1e, 0x1b, 0x8b, 0x4c, 0x84, 0xee, 0x4c, 0x55, 0xfc, 0xd5, 0xc2,
+	0x94, 0x71, 0x8f, 0xa1, 0xd3, 0x90, 0x2f, 0xd7, 0x0c, 0xa0, 0x57, 0x2d, 0x26, 0x30, 0x2d, 0x9a,
+	0x98, 0x5a, 0xdf, 0xba, 0x1a, 0x8c, 0x79, 0x4a, 0x58, 0xec, 0xf2, 0x2c, 0xf6, 0x62, 0xca, 0x54,
+	0x8b, 0x5e, 0x59, 0x22, 0x22, 0x91, 0x2f, 0x7d, 0x88, 0x2e, 0x54, 0x34, 0xdf, 0x55, 0xec, 0xf9,
+	0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3b, 0xae, 0x17, 0x4c, 0x14, 0x05, 0x00, 0x00,
 }