From 0e7d8ad3ed0b2e8d7034c3e1b84044cdff933dae Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Thu, 22 Aug 2024 17:24:23 +0000 Subject: [PATCH 01/27] dataflux initial commit --- storage/dataflux/fast_list.go | 81 +++++++ storage/dataflux/object_lister.go | 48 ++++ storage/dataflux/range_splitter.go | 338 +++++++++++++++++++++++++++++ storage/dataflux/sequential.go | 14 ++ storage/dataflux/worksteal.go | 40 ++++ 5 files changed, 521 insertions(+) create mode 100644 storage/dataflux/fast_list.go create mode 100644 storage/dataflux/object_lister.go create mode 100644 storage/dataflux/range_splitter.go create mode 100644 storage/dataflux/sequential.go create mode 100644 storage/dataflux/worksteal.go diff --git a/storage/dataflux/fast_list.go b/storage/dataflux/fast_list.go new file mode 100644 index 000000000000..ee4003a5dcbb --- /dev/null +++ b/storage/dataflux/fast_list.go @@ -0,0 +1,81 @@ +package dataflux + +import ( + "context" + + "cloud.google.com/go/storage" +) + +// listingMethod represents the method of listing. +type listingMethod int + +const ( + // open when any method can be used to list. + open listingMethod = iota + // sequential when the listing is done sequentially. + sequential + // worksteal when the listing is done using work stealing algorithm. + worksteal +) + +// Input contains options for listing objects. +type Input struct { + // Client is the storage client to list objects from. + Client *storage.Client + // BucketName is the name of the bucket to list objects from. + BucketName string + // Parallelism is number of parallel workers to use for listing. + Parallelism int + // pageSize is the number of objects to list. + BatchSize int + // query is the query to filter objects for listing. + Query storage.Query + // SkipDirectoryObjects is to indicate whether to list directory objects. + SkipDirectoryObjects bool +} + +// Lister is used for interacting with Dataflux fast-listing. +// The caller should initialize it with NewLister() instead of creating it directly. +type Lister struct { + // method indicates the listing method(open, sequential, worksteal) to be used for listing. + method listingMethod + // pageToken is the token to use for sequential listing. + pageToken string + // ranges is the channel to store the start and end ranges to be listed by the workers in worksteal listing. + ranges chan *listRange + // bucket is the bucket handle to list objects from. + bucket *storage.BucketHandle + // parallelism is number of parallel workers to use for listing. + parallelism int + // batchSize is the number of objects to list. + batchSize int + // query is the query to filter objects for listing. + query storage.Query + // skipDirectoryObjects is to indicate whether to list directory objects. + skipDirectoryObjects bool +} + +// CloseFunc is the function to close the range channel of a Lister. +type CloseFunc func() + +// NewLister creates a new dataflux Lister to list objects in the give bucket. +func NewLister(opts *Input) (*Lister, CloseFunc) { + + lister := &Lister{} + return lister, func() { lister.Close() } +} + +// NextBatch runs worksteal algorithm and sequential listing in parallel to quickly +// return a list of objects in the bucket. For buckets with smaller dataset, +// sequential listing is expected to be faster. For buckets with larger dataset, +// worksteal listing is expected to be faster. +func (c *Lister) NextBatch(ctx context.Context) ([]*storage.ObjectAttrs, error) { + return nil, nil +} + +// Close closes the range channel of the Lister. +func (c *Lister) Close() { + if c.ranges != nil { + close(c.ranges) + } +} diff --git a/storage/dataflux/object_lister.go b/storage/dataflux/object_lister.go new file mode 100644 index 000000000000..94054ef56997 --- /dev/null +++ b/storage/dataflux/object_lister.go @@ -0,0 +1,48 @@ +package dataflux + +import ( + "context" + + "cloud.google.com/go/storage" +) + +// newObjectListerOpts specifies options for instantiating the NewObjectLister. +type newObjectListerOpts struct { + // startRange is the start offset of the objects to be listed. + startRange string + // endRange is the end offset of the objects to be listed. + endRange string + // bucketHandle is the bucket handle of the bucket to be listed. + bucketHandle *storage.BucketHandle + // query is the storage.Query to filter objects for listing. + query storage.Query + // skipDirectoryObjects is to indicate whether to list directory objects. + skipDirectoryObjects bool + // generation is the generation number of the last object in the page. + generation int64 +} + +// nextPageResult holds the next page of object names and indicates whether the +// lister has completed listing (no more objects to retrieve). +type nextPageResult struct { + // items is the list of objects listed. + items []*storage.ObjectAttrs + // doneListing indicates whether the lister has completed listing. + doneListing bool + // nextStartRange is the start offset of the next page of objects to be listed. + nextStartRange string + // generation is the generation number of the last object in the page. + generation int64 +} + +// newObjectLister creates a new ObjectLister using the given lister options. +func newObjectLister(ctx context.Context, opts newObjectListerOpts) (*nextPageResult, error) { + return &nextPageResult{}, nil +} + +func addPrefix(name, prefix string) string { + if name != "" { + return prefix + name + } + return name +} diff --git a/storage/dataflux/range_splitter.go b/storage/dataflux/range_splitter.go new file mode 100644 index 000000000000..9b370e6f61a9 --- /dev/null +++ b/storage/dataflux/range_splitter.go @@ -0,0 +1,338 @@ +package dataflux + +import ( + "fmt" + "math/big" + "sort" + "sync" +) + +// rangeSplitter specifies the a list and a map of sorted alphabets. +type rangeSplitter struct { + mu sync.Mutex + sortedAlphabet *[]rune + alphabetMap map[rune]int +} + +// minimalIntRange specifies start and end range in base-10 form, along with the +// minimal string length for the split range strings. +type minimalIntRange struct { + startInteger *big.Int + endInteger *big.Int + minimalLength int +} + +// generateSplitsOpts specifies the parameters needed to generate the split +// range strings. +type generateSplitsOpts struct { + minimalIntRange *minimalIntRange + numSplits int + startRange string + endRange string +} + +// listRange specifies the start and end range for the range splitter. +type listRange struct { + startRange string + endRange string +} + +// The minimum number of split points needed for the range splitter. +const ( + minimumSplits = 2 +) + +// newRangeSplitter creates a new RangeSplitter with the given alphabets. +func newRangeSplitter(alphabet string) (*rangeSplitter, error) { + + // Validate that we do not have empty alphabet passed in. + if len(alphabet) == 0 { + return nil, fmt.Errorf("no alphabet specified for the range splitter") + } + + // Sort the alphabet lexicographically and store a mapping of each alphabet + // to its index. We need a mapping for efficient index lookup in later operations. + sortedAlphabet := sortAlphabet([]rune(alphabet)) + alphabetMap := constructAlphabetMap(sortedAlphabet) + + return &rangeSplitter{ + alphabetMap: alphabetMap, + sortedAlphabet: sortedAlphabet, + }, nil +} + +// splitRange creates a given number of splits based on a provided start and end range. +func (rs *rangeSplitter) splitRange(startRange, endRange string, numSplits int) ([]string, error) { + + // Number of splits has to be at least one, otherwise it is not splittable. + if numSplits < 1 { + return nil, fmt.Errorf("number of splits should be at least %d, got %d", minimumSplits, numSplits) + } + + // End range (if specified) has to be lexicographically greater than the start range + // for the range to be valid. + if len(endRange) != 0 && startRange >= endRange { + return nil, fmt.Errorf("start range %q cannot be lexicographically greater end range %q", startRange, endRange) + } + + rs.addCharsToAlphabet([]rune(startRange)) + rs.addCharsToAlphabet([]rune(endRange)) + + // Validate start range characters and convert into character array form. + startRangeCharArray, err := rs.convertRangeStringToArray(startRange) + if err != nil { + return nil, fmt.Errorf("unable to convert start range %q to array: %v", startRange, err) + } + + // Validate end range characters and convert into character array form. + endRangeCharArray, err := rs.convertRangeStringToArray(endRange) + if err != nil { + return nil, fmt.Errorf("unable to convert end range %q to array: %v", endRange, err) + } + + // Construct the final split ranges to be returned. + var splitPoints []string + + // If the start and end string ranges are equal with padding, no splitting is + // necessary. In such cases, an empty array of split ranges is returned. + if rs.isRangeEqualWithPadding(startRangeCharArray, endRangeCharArray) { + return splitPoints, nil + } + // Convert the range strings from base-N to base-10 and employ a greedy approach + // to determine the smallest splittable integer range difference. + minimalIntRange, err := rs.convertStringRangeToMinimalIntRange( + startRangeCharArray, endRangeCharArray, numSplits) + if err != nil { + return nil, fmt.Errorf("range splitting with start range %q and end range %q: %v", + startRange, endRange, err) + } + + // Generate the split points and return them. + splitPoints = rs.generateSplits(generateSplitsOpts{ + startRange: startRange, + endRange: endRange, + numSplits: numSplits, + minimalIntRange: minimalIntRange, + }) + + return splitPoints, nil +} + +// generateSplits generates the split points using the specified options. +func (rs *rangeSplitter) generateSplits(opts generateSplitsOpts) []string { + + startInteger := opts.minimalIntRange.startInteger + endInteger := opts.minimalIntRange.endInteger + minimalLength := opts.minimalIntRange.minimalLength + + rangeDifference := new(big.Int).Sub(endInteger, startInteger) + + var splitPoints []string + + // The number of intervals is one more than the number of split points. + rangeInterval := new(big.Int).SetInt64(int64(opts.numSplits + 1)) + + for i := 1; i <= opts.numSplits; i++ { + // Combine the range interval and index to determine the split point in base-10 form. + rangeDiffWithIdx := new(big.Int).Mul(rangeDifference, big.NewInt(int64(i))) + rangeInterval := new(big.Int).Div(rangeDiffWithIdx, rangeInterval) + splitPoint := new(big.Int).Add(rangeInterval, startInteger) + + // Convert the split point back from base-10 to base-N. + splitString := rs.convertIntToString(splitPoint, minimalLength) + + // Due to the approximate nature on how the minimal int range is derived, we need to perform + // another validation to check to ensure each split point falls in valid range. + isGreaterThanStart := len(splitString) > 0 && splitString > opts.startRange + isLessThanEnd := len(opts.endRange) == 0 || (len(splitString) > 0 && splitString < opts.endRange) + if isGreaterThanStart && isLessThanEnd { + splitPoints = append(splitPoints, splitString) + } + } + return splitPoints +} + +// isRangeEqualWithPadding checks if two range strings are identical. Equality +// encompasses any padding using the smallest alphabet character from the set. +func (rs *rangeSplitter) isRangeEqualWithPadding(startRange, endRange *[]rune) bool { + + sortedAlphabet := rs.sortedAlphabet + + // When the end range is unspecified, it's interpreted as a sequence of the + // highest possible characters. Consequently, they are not deemed equal. + if len(*endRange) == 0 { + return false + } + + // Get the longer length of the two range strings. + maxLength := len(*startRange) + if len(*endRange) > maxLength { + maxLength = len(*endRange) + } + + smallestChar := (*sortedAlphabet)[0] + + // Loop through the string range. + for i := 0; i < maxLength; i++ { + + // In cases where a character is absent at a specific position (due to a length + // difference), the position is padded with the smallest character in the alphabet. + charStart := charAtOrDefault(startRange, i, smallestChar) + charEnd := charAtOrDefault(endRange, i, smallestChar) + + // As soon as we find a difference, we conclude the two strings are different. + if charStart != charEnd { + return false + } + } + + // Otherwise, we conclude the two strings are equal. + return true +} + +// convertStringRangeToMinimalIntRange gradually extends the start and end string +// range in base-10 representation, until the difference reaches a threshold +// suitable for splitting. +func (rs *rangeSplitter) convertStringRangeToMinimalIntRange( + startRange, endRange *[]rune, numSplits int) (*minimalIntRange, error) { + + startInteger := big.NewInt(0) + endInteger := big.NewInt(0) + + alphabetLength := len(*rs.sortedAlphabet) + startChar := (*rs.sortedAlphabet)[0] + endChar := (*rs.sortedAlphabet)[alphabetLength-1] + + endDefaultChar := startChar + if len(*endRange) == 0 { + endDefaultChar = endChar + } + + for i := 0; ; i++ { + + // Convert each character of the start range string into a big integer + // based on the alphabet system. + startPosition, err := rs.charPosition(charAtOrDefault(startRange, i, startChar)) + if err != nil { + return nil, err + } + startInteger.Mul(startInteger, big.NewInt(int64(alphabetLength))) + startInteger.Add(startInteger, big.NewInt(int64(startPosition))) + + // Convert each character of the end range string into a big integer + // based on the alphabet system. + endPosition, err := rs.charPosition(charAtOrDefault(endRange, i, endDefaultChar)) + if err != nil { + return nil, err + } + endInteger.Mul(endInteger, big.NewInt(int64(alphabetLength))) + endInteger.Add(endInteger, big.NewInt(int64(endPosition))) + + // Calculate the difference between the start and end range in big integer representation. + difference := new(big.Int).Sub(endInteger, startInteger) + + // If the difference is bigger than the number of split points, we are done. + // In particular, the minimal length is one greater than the index (due to zero indexing). + if difference.Cmp(big.NewInt(int64(numSplits))) > 0 { + return &minimalIntRange{ + startInteger: startInteger, + endInteger: endInteger, + minimalLength: i + 1, + }, nil + } + + } +} + +// convertIntToString converts the split point from base-10 to base-N. +func (rs *rangeSplitter) convertIntToString(splitPoint *big.Int, stringLength int) string { + + remainder := new(big.Int) + + var splitChar []rune + alphabetSize := big.NewInt(int64(len(*rs.sortedAlphabet))) + + // Iterate through the split point and convert alphabet by alphabet. + for i := 0; i < stringLength; i++ { + remainder.Mod(splitPoint, alphabetSize) + splitPoint.Div(splitPoint, alphabetSize) + splitChar = append(splitChar, (*rs.sortedAlphabet)[(int)(remainder.Int64())]) + } + + // Reverse the converted alphabet order because we originally processed from right to left. + for i, j := 0, len(splitChar)-1; i < j; i, j = i+1, j-1 { + splitChar[i], splitChar[j] = splitChar[j], splitChar[i] + } + + return string(splitChar) +} + +// sortAlphabet sorts the alphabets string lexicographically. +func sortAlphabet(unsortedAlphabet []rune) *[]rune { + sortedAlphabet := unsortedAlphabet + sort.Slice(sortedAlphabet, func(i, j int) bool { + return sortedAlphabet[i] < sortedAlphabet[j] + }) + + return &sortedAlphabet +} + +// constructAlphabetMap constructs a mapping from each character in the +// alphabets to its index in the alphabet array. +func constructAlphabetMap(alphabet *[]rune) map[rune]int { + alphabetMap := make(map[rune]int) + for i, char := range *alphabet { + alphabetMap[char] = i + } + return alphabetMap +} + +// charAtOrDefault returns the character at the specified position, or the default character if +// the position is out of bounds. +func charAtOrDefault(charArray *[]rune, position int, defaultChar rune) rune { + if position < 0 || position >= len(*charArray) { + return defaultChar + } + + return (*charArray)[position] +} + +// charPosition returns the index of the character in the alphabet set. +func (rs *rangeSplitter) charPosition(ch rune) (int, error) { + if idx, ok := rs.alphabetMap[ch]; ok { + return idx, nil + } + return -1, fmt.Errorf("character %c is not found in the alphabet map %v", ch, rs.alphabetMap) +} + +// convertRangeStringToArray transforms the range string into a rune slice while +// verifying the presence of each character in the alphabets. +func (rs *rangeSplitter) convertRangeStringToArray(rangeString string) (*[]rune, error) { + for _, char := range rangeString { + if _, exists := rs.alphabetMap[char]; !exists { + return nil, fmt.Errorf("character %c in range string %q is not found in the alphabet array", char, rangeString) + } + } + characterArray := []rune(rangeString) + return &characterArray, nil +} + +// addCharsToAlphabet adds a character to the known alphabet. +func (rs *rangeSplitter) addCharsToAlphabet(characters []rune) { + rs.mu.Lock() // Acquire the lock + defer rs.mu.Unlock() // Release the lock when the function exits + allAlphabet := *rs.sortedAlphabet + newChars := false + for _, char := range characters { + if _, exists := rs.alphabetMap[char]; exists { + continue + } + allAlphabet = append(allAlphabet, char) + newChars = true + rs.alphabetMap[char] = 0 + } + if newChars { + rs.sortedAlphabet = sortAlphabet(allAlphabet) + rs.alphabetMap = constructAlphabetMap(rs.sortedAlphabet) + } +} diff --git a/storage/dataflux/sequential.go b/storage/dataflux/sequential.go new file mode 100644 index 000000000000..ce0c186069f3 --- /dev/null +++ b/storage/dataflux/sequential.go @@ -0,0 +1,14 @@ +package dataflux + +import ( + "context" + + "cloud.google.com/go/storage" +) + +// Listing performs a sequential listing on the given bucket. +// It returns a list of objects and the next token to use to continue listing. +// If the next token is empty, then listing is complete. +func Listing(ctx context.Context, opts Lister) ([]*storage.ObjectAttrs, string, error) { + return nil, "", nil +} diff --git a/storage/dataflux/worksteal.go b/storage/dataflux/worksteal.go new file mode 100644 index 000000000000..471f7b27b8b7 --- /dev/null +++ b/storage/dataflux/worksteal.go @@ -0,0 +1,40 @@ +package dataflux + +import ( + "context" + "sync" + + "cloud.google.com/go/storage" +) + +// WorkerStatus indicates the status of a worker. +type WorkerStatus int + +const ( + // Idle status shows that the worker is currently not listing. + Idle WorkerStatus = iota + // Active status shows that the worker is currently listing objects within assigned range. + Active +) + +type listerResult struct { + mu sync.Mutex + objects []*storage.ObjectAttrs +} + +type worker struct { + goroutineID int + startRange string + endRange string + status WorkerStatus + rangesplitter *rangeSplitter + idleChannel chan int + result *listerResult + generation int64 +} + +// workstealListing is the main entry point of the worksteal algorithm. +// It performs worksteal to achieve highly dynamic object listing. +func workstealListing(ctx context.Context, opts Lister) ([]*storage.ObjectAttrs, error) { + return nil, nil +} From b21866c994be16d8e02693d77277680c12941859 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Thu, 22 Aug 2024 17:31:08 +0000 Subject: [PATCH 02/27] interface for range splitter --- storage/dataflux/range_splitter.go | 313 +---------------------------- 1 file changed, 2 insertions(+), 311 deletions(-) diff --git a/storage/dataflux/range_splitter.go b/storage/dataflux/range_splitter.go index 9b370e6f61a9..352060ab3b9f 100644 --- a/storage/dataflux/range_splitter.go +++ b/storage/dataflux/range_splitter.go @@ -1,9 +1,6 @@ package dataflux import ( - "fmt" - "math/big" - "sort" "sync" ) @@ -14,325 +11,19 @@ type rangeSplitter struct { alphabetMap map[rune]int } -// minimalIntRange specifies start and end range in base-10 form, along with the -// minimal string length for the split range strings. -type minimalIntRange struct { - startInteger *big.Int - endInteger *big.Int - minimalLength int -} - -// generateSplitsOpts specifies the parameters needed to generate the split -// range strings. -type generateSplitsOpts struct { - minimalIntRange *minimalIntRange - numSplits int - startRange string - endRange string -} - // listRange specifies the start and end range for the range splitter. type listRange struct { startRange string endRange string } -// The minimum number of split points needed for the range splitter. -const ( - minimumSplits = 2 -) - // newRangeSplitter creates a new RangeSplitter with the given alphabets. func newRangeSplitter(alphabet string) (*rangeSplitter, error) { - // Validate that we do not have empty alphabet passed in. - if len(alphabet) == 0 { - return nil, fmt.Errorf("no alphabet specified for the range splitter") - } - - // Sort the alphabet lexicographically and store a mapping of each alphabet - // to its index. We need a mapping for efficient index lookup in later operations. - sortedAlphabet := sortAlphabet([]rune(alphabet)) - alphabetMap := constructAlphabetMap(sortedAlphabet) - - return &rangeSplitter{ - alphabetMap: alphabetMap, - sortedAlphabet: sortedAlphabet, - }, nil + return &rangeSplitter{}, nil } // splitRange creates a given number of splits based on a provided start and end range. func (rs *rangeSplitter) splitRange(startRange, endRange string, numSplits int) ([]string, error) { - - // Number of splits has to be at least one, otherwise it is not splittable. - if numSplits < 1 { - return nil, fmt.Errorf("number of splits should be at least %d, got %d", minimumSplits, numSplits) - } - - // End range (if specified) has to be lexicographically greater than the start range - // for the range to be valid. - if len(endRange) != 0 && startRange >= endRange { - return nil, fmt.Errorf("start range %q cannot be lexicographically greater end range %q", startRange, endRange) - } - - rs.addCharsToAlphabet([]rune(startRange)) - rs.addCharsToAlphabet([]rune(endRange)) - - // Validate start range characters and convert into character array form. - startRangeCharArray, err := rs.convertRangeStringToArray(startRange) - if err != nil { - return nil, fmt.Errorf("unable to convert start range %q to array: %v", startRange, err) - } - - // Validate end range characters and convert into character array form. - endRangeCharArray, err := rs.convertRangeStringToArray(endRange) - if err != nil { - return nil, fmt.Errorf("unable to convert end range %q to array: %v", endRange, err) - } - - // Construct the final split ranges to be returned. - var splitPoints []string - - // If the start and end string ranges are equal with padding, no splitting is - // necessary. In such cases, an empty array of split ranges is returned. - if rs.isRangeEqualWithPadding(startRangeCharArray, endRangeCharArray) { - return splitPoints, nil - } - // Convert the range strings from base-N to base-10 and employ a greedy approach - // to determine the smallest splittable integer range difference. - minimalIntRange, err := rs.convertStringRangeToMinimalIntRange( - startRangeCharArray, endRangeCharArray, numSplits) - if err != nil { - return nil, fmt.Errorf("range splitting with start range %q and end range %q: %v", - startRange, endRange, err) - } - - // Generate the split points and return them. - splitPoints = rs.generateSplits(generateSplitsOpts{ - startRange: startRange, - endRange: endRange, - numSplits: numSplits, - minimalIntRange: minimalIntRange, - }) - - return splitPoints, nil -} - -// generateSplits generates the split points using the specified options. -func (rs *rangeSplitter) generateSplits(opts generateSplitsOpts) []string { - - startInteger := opts.minimalIntRange.startInteger - endInteger := opts.minimalIntRange.endInteger - minimalLength := opts.minimalIntRange.minimalLength - - rangeDifference := new(big.Int).Sub(endInteger, startInteger) - - var splitPoints []string - - // The number of intervals is one more than the number of split points. - rangeInterval := new(big.Int).SetInt64(int64(opts.numSplits + 1)) - - for i := 1; i <= opts.numSplits; i++ { - // Combine the range interval and index to determine the split point in base-10 form. - rangeDiffWithIdx := new(big.Int).Mul(rangeDifference, big.NewInt(int64(i))) - rangeInterval := new(big.Int).Div(rangeDiffWithIdx, rangeInterval) - splitPoint := new(big.Int).Add(rangeInterval, startInteger) - - // Convert the split point back from base-10 to base-N. - splitString := rs.convertIntToString(splitPoint, minimalLength) - - // Due to the approximate nature on how the minimal int range is derived, we need to perform - // another validation to check to ensure each split point falls in valid range. - isGreaterThanStart := len(splitString) > 0 && splitString > opts.startRange - isLessThanEnd := len(opts.endRange) == 0 || (len(splitString) > 0 && splitString < opts.endRange) - if isGreaterThanStart && isLessThanEnd { - splitPoints = append(splitPoints, splitString) - } - } - return splitPoints -} - -// isRangeEqualWithPadding checks if two range strings are identical. Equality -// encompasses any padding using the smallest alphabet character from the set. -func (rs *rangeSplitter) isRangeEqualWithPadding(startRange, endRange *[]rune) bool { - - sortedAlphabet := rs.sortedAlphabet - - // When the end range is unspecified, it's interpreted as a sequence of the - // highest possible characters. Consequently, they are not deemed equal. - if len(*endRange) == 0 { - return false - } - - // Get the longer length of the two range strings. - maxLength := len(*startRange) - if len(*endRange) > maxLength { - maxLength = len(*endRange) - } - - smallestChar := (*sortedAlphabet)[0] - - // Loop through the string range. - for i := 0; i < maxLength; i++ { - - // In cases where a character is absent at a specific position (due to a length - // difference), the position is padded with the smallest character in the alphabet. - charStart := charAtOrDefault(startRange, i, smallestChar) - charEnd := charAtOrDefault(endRange, i, smallestChar) - - // As soon as we find a difference, we conclude the two strings are different. - if charStart != charEnd { - return false - } - } - - // Otherwise, we conclude the two strings are equal. - return true -} - -// convertStringRangeToMinimalIntRange gradually extends the start and end string -// range in base-10 representation, until the difference reaches a threshold -// suitable for splitting. -func (rs *rangeSplitter) convertStringRangeToMinimalIntRange( - startRange, endRange *[]rune, numSplits int) (*minimalIntRange, error) { - - startInteger := big.NewInt(0) - endInteger := big.NewInt(0) - - alphabetLength := len(*rs.sortedAlphabet) - startChar := (*rs.sortedAlphabet)[0] - endChar := (*rs.sortedAlphabet)[alphabetLength-1] - - endDefaultChar := startChar - if len(*endRange) == 0 { - endDefaultChar = endChar - } - - for i := 0; ; i++ { - - // Convert each character of the start range string into a big integer - // based on the alphabet system. - startPosition, err := rs.charPosition(charAtOrDefault(startRange, i, startChar)) - if err != nil { - return nil, err - } - startInteger.Mul(startInteger, big.NewInt(int64(alphabetLength))) - startInteger.Add(startInteger, big.NewInt(int64(startPosition))) - - // Convert each character of the end range string into a big integer - // based on the alphabet system. - endPosition, err := rs.charPosition(charAtOrDefault(endRange, i, endDefaultChar)) - if err != nil { - return nil, err - } - endInteger.Mul(endInteger, big.NewInt(int64(alphabetLength))) - endInteger.Add(endInteger, big.NewInt(int64(endPosition))) - - // Calculate the difference between the start and end range in big integer representation. - difference := new(big.Int).Sub(endInteger, startInteger) - - // If the difference is bigger than the number of split points, we are done. - // In particular, the minimal length is one greater than the index (due to zero indexing). - if difference.Cmp(big.NewInt(int64(numSplits))) > 0 { - return &minimalIntRange{ - startInteger: startInteger, - endInteger: endInteger, - minimalLength: i + 1, - }, nil - } - - } -} - -// convertIntToString converts the split point from base-10 to base-N. -func (rs *rangeSplitter) convertIntToString(splitPoint *big.Int, stringLength int) string { - - remainder := new(big.Int) - - var splitChar []rune - alphabetSize := big.NewInt(int64(len(*rs.sortedAlphabet))) - - // Iterate through the split point and convert alphabet by alphabet. - for i := 0; i < stringLength; i++ { - remainder.Mod(splitPoint, alphabetSize) - splitPoint.Div(splitPoint, alphabetSize) - splitChar = append(splitChar, (*rs.sortedAlphabet)[(int)(remainder.Int64())]) - } - - // Reverse the converted alphabet order because we originally processed from right to left. - for i, j := 0, len(splitChar)-1; i < j; i, j = i+1, j-1 { - splitChar[i], splitChar[j] = splitChar[j], splitChar[i] - } - - return string(splitChar) -} - -// sortAlphabet sorts the alphabets string lexicographically. -func sortAlphabet(unsortedAlphabet []rune) *[]rune { - sortedAlphabet := unsortedAlphabet - sort.Slice(sortedAlphabet, func(i, j int) bool { - return sortedAlphabet[i] < sortedAlphabet[j] - }) - - return &sortedAlphabet -} - -// constructAlphabetMap constructs a mapping from each character in the -// alphabets to its index in the alphabet array. -func constructAlphabetMap(alphabet *[]rune) map[rune]int { - alphabetMap := make(map[rune]int) - for i, char := range *alphabet { - alphabetMap[char] = i - } - return alphabetMap -} - -// charAtOrDefault returns the character at the specified position, or the default character if -// the position is out of bounds. -func charAtOrDefault(charArray *[]rune, position int, defaultChar rune) rune { - if position < 0 || position >= len(*charArray) { - return defaultChar - } - - return (*charArray)[position] -} - -// charPosition returns the index of the character in the alphabet set. -func (rs *rangeSplitter) charPosition(ch rune) (int, error) { - if idx, ok := rs.alphabetMap[ch]; ok { - return idx, nil - } - return -1, fmt.Errorf("character %c is not found in the alphabet map %v", ch, rs.alphabetMap) -} - -// convertRangeStringToArray transforms the range string into a rune slice while -// verifying the presence of each character in the alphabets. -func (rs *rangeSplitter) convertRangeStringToArray(rangeString string) (*[]rune, error) { - for _, char := range rangeString { - if _, exists := rs.alphabetMap[char]; !exists { - return nil, fmt.Errorf("character %c in range string %q is not found in the alphabet array", char, rangeString) - } - } - characterArray := []rune(rangeString) - return &characterArray, nil -} - -// addCharsToAlphabet adds a character to the known alphabet. -func (rs *rangeSplitter) addCharsToAlphabet(characters []rune) { - rs.mu.Lock() // Acquire the lock - defer rs.mu.Unlock() // Release the lock when the function exits - allAlphabet := *rs.sortedAlphabet - newChars := false - for _, char := range characters { - if _, exists := rs.alphabetMap[char]; exists { - continue - } - allAlphabet = append(allAlphabet, char) - newChars = true - rs.alphabetMap[char] = 0 - } - if newChars { - rs.sortedAlphabet = sortAlphabet(allAlphabet) - rs.alphabetMap = constructAlphabetMap(rs.sortedAlphabet) - } + return nil, nil } From a3e269ec31024422060bca46b4cdad89e533b3b5 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Thu, 22 Aug 2024 17:35:50 +0000 Subject: [PATCH 03/27] add a valid license header --- storage/dataflux/doc.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 storage/dataflux/doc.go diff --git a/storage/dataflux/doc.go b/storage/dataflux/doc.go new file mode 100644 index 000000000000..752eadd82dad --- /dev/null +++ b/storage/dataflux/doc.go @@ -0,0 +1,27 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* +Package dataflux provides an easy way to parallelize listing in Google +Cloud Storage. + +More information about Google Cloud Storage is available at +https://cloud.google.com/storage/docs. + +See https://pkg.go.dev/cloud.google.com/go for authentication, timeouts, +connection pooling and similar aspects of this package. + +NOTE: This package is in preview. It is not stable, and is likely to change. +*/ +package dataflux // import "cloud.google.com/go/storage/dataflux" From 863fa26ddbb5133ae278a0c8e7c8267ef9297915 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Thu, 22 Aug 2024 17:48:45 +0000 Subject: [PATCH 04/27] add a valid license header to all dataflux files --- storage/dataflux/fast_list.go | 14 ++++++++++++++ storage/dataflux/object_lister.go | 14 ++++++++++++++ storage/dataflux/range_splitter.go | 14 ++++++++++++++ storage/dataflux/sequential.go | 14 ++++++++++++++ storage/dataflux/worksteal.go | 14 ++++++++++++++ 5 files changed, 70 insertions(+) diff --git a/storage/dataflux/fast_list.go b/storage/dataflux/fast_list.go index ee4003a5dcbb..1daa5a541c73 100644 --- a/storage/dataflux/fast_list.go +++ b/storage/dataflux/fast_list.go @@ -1,3 +1,17 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package dataflux import ( diff --git a/storage/dataflux/object_lister.go b/storage/dataflux/object_lister.go index 94054ef56997..542f904b5edf 100644 --- a/storage/dataflux/object_lister.go +++ b/storage/dataflux/object_lister.go @@ -1,3 +1,17 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package dataflux import ( diff --git a/storage/dataflux/range_splitter.go b/storage/dataflux/range_splitter.go index 352060ab3b9f..7ee38ec72a5c 100644 --- a/storage/dataflux/range_splitter.go +++ b/storage/dataflux/range_splitter.go @@ -1,3 +1,17 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package dataflux import ( diff --git a/storage/dataflux/sequential.go b/storage/dataflux/sequential.go index ce0c186069f3..cd4a923337f9 100644 --- a/storage/dataflux/sequential.go +++ b/storage/dataflux/sequential.go @@ -1,3 +1,17 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package dataflux import ( diff --git a/storage/dataflux/worksteal.go b/storage/dataflux/worksteal.go index 471f7b27b8b7..5539190aea73 100644 --- a/storage/dataflux/worksteal.go +++ b/storage/dataflux/worksteal.go @@ -1,3 +1,17 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package dataflux import ( From 03aecaa43f06265a53c701c7e127e7ae4c0efea2 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Mon, 26 Aug 2024 20:55:24 +0000 Subject: [PATCH 05/27] resolved comments --- storage/dataflux/README.md | 60 +++++++++++++++++++ storage/dataflux/example_test.go | 95 ++++++++++++++++++++++++++++++ storage/dataflux/fast_list.go | 33 +++++++---- storage/dataflux/object_lister.go | 62 ------------------- storage/dataflux/range_splitter.go | 4 +- storage/dataflux/sequential.go | 4 +- storage/dataflux/worksteal.go | 45 +++++++++++++- 7 files changed, 223 insertions(+), 80 deletions(-) create mode 100644 storage/dataflux/README.md create mode 100644 storage/dataflux/example_test.go delete mode 100644 storage/dataflux/object_lister.go diff --git a/storage/dataflux/README.md b/storage/dataflux/README.md new file mode 100644 index 000000000000..edb8ce2de7a8 --- /dev/null +++ b/storage/dataflux/README.md @@ -0,0 +1,60 @@ +# Dataflux for Google Cloud Storage Go client library + +## Overview +The purpose of this client is to quickly list data stored in GCS. The core functionalities of this client can be broken down into two key parts. + +## Fast List +The fast list component of this client leverages GCS API to parallelize the listing of files within a GCS bucket. It does this by implementing a workstealing algorithm, where each worker in the list operation is able to steal work from its siblings once it has finished all currently stated listing work. This parallelization leads to a significant real world speed increase than sequential listing. Note that paralellization is limited by the machine on which the client runs. Benchmarking has demonstrated that the larger the object count, the better Dataflux performs when compared to a linear listing. + +### Example Usage + +First create a `storage.Client` to use throughout your application: + +[snip]:# (storage-1) +```go +ctx := context.Background() +client, err := storage.NewClient(ctx) +if err != nil { + log.Fatal(err) +} +``` + +[snip]:# (storage-2) +```go + +// storage.Query to filter objects that the user wants to list. +query := storage.Query{} +// Input for fast-listing. +dfopts := dataflux.ListerInput{ + BucketName: bucketName, + Parallelism: parallelism, + BatchSize: batchSize, + Query: query, +} + +// Construct a dataflux lister. +df, close = dataflux.NewLister(sc, dfopts) +defer close() + +// List objects in GCS bucket. +for { + objects, err := df.NextBatch(ctx) + + if err == iterator.Done { + // No more objects in the bucket to list. + break + } + if err != nil { + log.Fatal(err) + } +} +``` + +### Fast List Benchmark Results + +|File Count|VM Core Count|List Time Without Dataflux |List Time With Dataflux| +|------------|-------------|--------------------------|-----------------------| +|5000000 Obj |48 Core |319.72s |17.35s | +|1999032 Obj |48 Core |139.54s |8.98s | +|578703 Obj |48 Core |32.90s |5.71s | +|10448 Obj |48 Core |750.50ms |637.17ms | \ No newline at end of file diff --git a/storage/dataflux/example_test.go b/storage/dataflux/example_test.go new file mode 100644 index 000000000000..2c120637891f --- /dev/null +++ b/storage/dataflux/example_test.go @@ -0,0 +1,95 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package dataflux_test + +import ( + "context" + "log" + + "cloud.google.com/go/storage" + "cloud.google.com/go/storage/dataflux" + "google.golang.org/api/iterator" +) + +func ExampleNextBatch_batch() { + ctx := context.Background() + // Pass in any client opts or set retry policy here. + client, err := storage.NewClient(ctx) + if err != nil { + // handle error + } + + // Create dataflux fast-list input and provide desired options, + // including number of workers, batch size, query to filer objects, etc. + in := &dataflux.ListerInput{ + BucketName: "mybucket", + // Optionally specify params to apply to lister. + Parallelism: 100, + BatchSize: 500000, + Query: storage.Query{}, + SkipDirectoryObjects: false, + } + + // Create Lister with desired options, including number of workers, + // part size, per operation timeout, etc. + df, close := dataflux.NewLister(client, in) + defer close() + + var numOfObjects int + + for { + objects := df.NextBatch(ctx) + + if err == iterator.Done { + numOfObjects += len(objects) + // No more objects in the bucket to list. + break + } + if err != nil { + // handle error + } + numOfObjects += len(objects) + } + log.Printf("listing %d objects in bucket %q is complete.", numOfObjects, in.BucketName) +} + +func ExampleNextBatch_all() { + ctx := context.Background() + // Pass in any client opts or set retry policy here. + client, err := storage.NewClient(ctx) + if err != nil { + // handle error + } + + // Create dataflux fast-list input and provide desired options, + // including number of workers, batch size, query to filer objects, etc. + in := &dataflux.ListerInput{ + BucketName: "mybucket", + // Optionally specify params to apply to lister. + Parallelism: 100, + Query: storage.Query{}, + SkipDirectoryObjects: false, + } + + // Create Lister with desired options, including number of workers, + // part size, per operation timeout, etc. + df, close := dataflux.NewLister(client, in) + defer close() + + objects := df.NextBatch(ctx) + numOfObjects := len(objects) + + log.Printf("listing %d objects in bucket %q is complete.", numOfObjects, in.BucketName) +} diff --git a/storage/dataflux/fast_list.go b/storage/dataflux/fast_list.go index 1daa5a541c73..ecb3673b9b78 100644 --- a/storage/dataflux/fast_list.go +++ b/storage/dataflux/fast_list.go @@ -32,19 +32,21 @@ const ( worksteal ) -// Input contains options for listing objects. -type Input struct { - // Client is the storage client to list objects from. - Client *storage.Client - // BucketName is the name of the bucket to list objects from. +// ListerInput contains options for listing objects. +type ListerInput struct { + // BucketName is the name of the bucket to list objects from. Required. BucketName string - // Parallelism is number of parallel workers to use for listing. + + // Parallelism is number of parallel workers to use for listing. Optional. Parallelism int - // pageSize is the number of objects to list. + + // BatchSize is the number of objects to list. Optional. BatchSize int - // query is the query to filter objects for listing. + + // Query is the query to filter objects for listing. Optional. Query storage.Query - // SkipDirectoryObjects is to indicate whether to list directory objects. + + // SkipDirectoryObjects is to indicate whether to list directory objects. Optional. SkipDirectoryObjects bool } @@ -53,18 +55,25 @@ type Input struct { type Lister struct { // method indicates the listing method(open, sequential, worksteal) to be used for listing. method listingMethod + // pageToken is the token to use for sequential listing. pageToken string + // ranges is the channel to store the start and end ranges to be listed by the workers in worksteal listing. ranges chan *listRange + // bucket is the bucket handle to list objects from. bucket *storage.BucketHandle + // parallelism is number of parallel workers to use for listing. parallelism int + // batchSize is the number of objects to list. batchSize int + // query is the query to filter objects for listing. query storage.Query + // skipDirectoryObjects is to indicate whether to list directory objects. skipDirectoryObjects bool } @@ -73,7 +82,7 @@ type Lister struct { type CloseFunc func() // NewLister creates a new dataflux Lister to list objects in the give bucket. -func NewLister(opts *Input) (*Lister, CloseFunc) { +func NewLister(c *storage.Client, opts *ListerInput) (*Lister, CloseFunc) { lister := &Lister{} return lister, func() { lister.Close() } @@ -83,8 +92,8 @@ func NewLister(opts *Input) (*Lister, CloseFunc) { // return a list of objects in the bucket. For buckets with smaller dataset, // sequential listing is expected to be faster. For buckets with larger dataset, // worksteal listing is expected to be faster. -func (c *Lister) NextBatch(ctx context.Context) ([]*storage.ObjectAttrs, error) { - return nil, nil +func (c *Lister) NextBatch(ctx context.Context) []*storage.ObjectAttrs { + return nil } // Close closes the range channel of the Lister. diff --git a/storage/dataflux/object_lister.go b/storage/dataflux/object_lister.go deleted file mode 100644 index 542f904b5edf..000000000000 --- a/storage/dataflux/object_lister.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package dataflux - -import ( - "context" - - "cloud.google.com/go/storage" -) - -// newObjectListerOpts specifies options for instantiating the NewObjectLister. -type newObjectListerOpts struct { - // startRange is the start offset of the objects to be listed. - startRange string - // endRange is the end offset of the objects to be listed. - endRange string - // bucketHandle is the bucket handle of the bucket to be listed. - bucketHandle *storage.BucketHandle - // query is the storage.Query to filter objects for listing. - query storage.Query - // skipDirectoryObjects is to indicate whether to list directory objects. - skipDirectoryObjects bool - // generation is the generation number of the last object in the page. - generation int64 -} - -// nextPageResult holds the next page of object names and indicates whether the -// lister has completed listing (no more objects to retrieve). -type nextPageResult struct { - // items is the list of objects listed. - items []*storage.ObjectAttrs - // doneListing indicates whether the lister has completed listing. - doneListing bool - // nextStartRange is the start offset of the next page of objects to be listed. - nextStartRange string - // generation is the generation number of the last object in the page. - generation int64 -} - -// newObjectLister creates a new ObjectLister using the given lister options. -func newObjectLister(ctx context.Context, opts newObjectListerOpts) (*nextPageResult, error) { - return &nextPageResult{}, nil -} - -func addPrefix(name, prefix string) string { - if name != "" { - return prefix + name - } - return name -} diff --git a/storage/dataflux/range_splitter.go b/storage/dataflux/range_splitter.go index 7ee38ec72a5c..7c50e793c926 100644 --- a/storage/dataflux/range_splitter.go +++ b/storage/dataflux/range_splitter.go @@ -32,9 +32,9 @@ type listRange struct { } // newRangeSplitter creates a new RangeSplitter with the given alphabets. -func newRangeSplitter(alphabet string) (*rangeSplitter, error) { +func newRangeSplitter(alphabet string) *rangeSplitter { - return &rangeSplitter{}, nil + return &rangeSplitter{} } // splitRange creates a given number of splits based on a provided start and end range. diff --git a/storage/dataflux/sequential.go b/storage/dataflux/sequential.go index cd4a923337f9..dcda2d6a68b3 100644 --- a/storage/dataflux/sequential.go +++ b/storage/dataflux/sequential.go @@ -23,6 +23,6 @@ import ( // Listing performs a sequential listing on the given bucket. // It returns a list of objects and the next token to use to continue listing. // If the next token is empty, then listing is complete. -func Listing(ctx context.Context, opts Lister) ([]*storage.ObjectAttrs, string, error) { - return nil, "", nil +func sequentialListing(ctx context.Context, opts Lister) ([]*storage.ObjectAttrs, string) { + return nil, "" } diff --git a/storage/dataflux/worksteal.go b/storage/dataflux/worksteal.go index 5539190aea73..57c82ae382b5 100644 --- a/storage/dataflux/worksteal.go +++ b/storage/dataflux/worksteal.go @@ -47,8 +47,49 @@ type worker struct { generation int64 } +// newObjectListerOpts specifies options for instantiating the NewObjectLister. +type newObjectListerOpts struct { + // startRange is the start offset of the objects to be listed. + startRange string + // endRange is the end offset of the objects to be listed. + endRange string + // bucketHandle is the bucket handle of the bucket to be listed. + bucketHandle *storage.BucketHandle + // query is the storage.Query to filter objects for listing. + query storage.Query + // skipDirectoryObjects is to indicate whether to list directory objects. + skipDirectoryObjects bool + // generation is the generation number of the last object in the page. + generation int64 +} + +// nextPageResult holds the next page of object names and indicates whether the +// lister has completed listing (no more objects to retrieve). +type nextPageResult struct { + // items is the list of objects listed. + items []*storage.ObjectAttrs + // doneListing indicates whether the lister has completed listing. + doneListing bool + // nextStartRange is the start offset of the next page of objects to be listed. + nextStartRange string + // generation is the generation number of the last object in the page. + generation int64 +} + // workstealListing is the main entry point of the worksteal algorithm. // It performs worksteal to achieve highly dynamic object listing. -func workstealListing(ctx context.Context, opts Lister) ([]*storage.ObjectAttrs, error) { - return nil, nil +func workstealListing(ctx context.Context, opts Lister) []*storage.ObjectAttrs { + return nil +} + +// newObjectLister creates a new ObjectLister using the given lister options. +func newObjectLister(ctx context.Context, opts newObjectListerOpts) *nextPageResult { + return &nextPageResult{} +} + +func addPrefix(name, prefix string) string { + if name != "" { + return prefix + name + } + return name } From d3056e0f3fc5811f6eb42cd7994f2eb78fc14021 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Mon, 26 Aug 2024 21:13:40 +0000 Subject: [PATCH 06/27] update sequential listing comment --- storage/dataflux/sequential.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/dataflux/sequential.go b/storage/dataflux/sequential.go index dcda2d6a68b3..7a126063d3a7 100644 --- a/storage/dataflux/sequential.go +++ b/storage/dataflux/sequential.go @@ -20,7 +20,7 @@ import ( "cloud.google.com/go/storage" ) -// Listing performs a sequential listing on the given bucket. +// sequentialListing performs a sequential listing on the given bucket. // It returns a list of objects and the next token to use to continue listing. // If the next token is empty, then listing is complete. func sequentialListing(ctx context.Context, opts Lister) ([]*storage.ObjectAttrs, string) { From b48d5834463fbae15ce24de95299b9fdcc866f84 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Mon, 26 Aug 2024 23:14:35 +0000 Subject: [PATCH 07/27] add end-to-end sequential listing --- storage/dataflux/example_test.go | 10 ++++- storage/dataflux/fast_list.go | 68 ++++++++++++++++++++++++++++---- storage/dataflux/sequential.go | 62 ++++++++++++++++++++++++++++- 3 files changed, 129 insertions(+), 11 deletions(-) diff --git a/storage/dataflux/example_test.go b/storage/dataflux/example_test.go index 2c120637891f..3e87411f57ef 100644 --- a/storage/dataflux/example_test.go +++ b/storage/dataflux/example_test.go @@ -50,7 +50,10 @@ func ExampleNextBatch_batch() { var numOfObjects int for { - objects := df.NextBatch(ctx) + objects, err := df.NextBatch(ctx) + if err != nil { + // handle error + } if err == iterator.Done { numOfObjects += len(objects) @@ -88,7 +91,10 @@ func ExampleNextBatch_all() { df, close := dataflux.NewLister(client, in) defer close() - objects := df.NextBatch(ctx) + objects, err := df.NextBatch(ctx) + if err != nil { + // handle error + } numOfObjects := len(objects) log.Printf("listing %d objects in bucket %q is complete.", numOfObjects, in.BucketName) diff --git a/storage/dataflux/fast_list.go b/storage/dataflux/fast_list.go index ecb3673b9b78..0b6498c988a3 100644 --- a/storage/dataflux/fast_list.go +++ b/storage/dataflux/fast_list.go @@ -16,8 +16,12 @@ package dataflux import ( "context" + "errors" + "fmt" "cloud.google.com/go/storage" + "golang.org/x/sync/errgroup" + "google.golang.org/api/iterator" ) // listingMethod represents the method of listing. @@ -82,18 +86,68 @@ type Lister struct { type CloseFunc func() // NewLister creates a new dataflux Lister to list objects in the give bucket. -func NewLister(c *storage.Client, opts *ListerInput) (*Lister, CloseFunc) { - - lister := &Lister{} +func NewLister(c *storage.Client, in *ListerInput) (*Lister, CloseFunc) { + bucket := c.Bucket(in.BucketName) + lister := &Lister{ + method: open, + pageToken: "", + bucket: bucket, + batchSize: in.BatchSize, + query: in.Query, + skipDirectoryObjects: in.SkipDirectoryObjects, + } return lister, func() { lister.Close() } } // NextBatch runs worksteal algorithm and sequential listing in parallel to quickly -// return a list of objects in the bucket. For buckets with smaller dataset, -// sequential listing is expected to be faster. For buckets with larger dataset, +// return a list of objects in the bucket. For smaller dataset, +// sequential listing is expected to be faster. For larger dataset, // worksteal listing is expected to be faster. -func (c *Lister) NextBatch(ctx context.Context) []*storage.ObjectAttrs { - return nil +func (c *Lister) NextBatch(ctx context.Context) ([]*storage.ObjectAttrs, error) { + // countError tracks the number of failed listing methods. + countError := 0 + var results []*storage.ObjectAttrs + ctx, cancel := context.WithCancel(ctx) + defer cancel() + g, childCtx := errgroup.WithContext(ctx) + + // Run worksteal listing when method is Open or WorkSteal. + // Run sequential listing when method is Open or Sequential. + if c.method != worksteal { + + g.Go(func() error { + objects, nextToken, err := sequentialListing(childCtx, *c) + if err != nil { + countError++ + return fmt.Errorf("error in running sequential listing: %w", err) + } + // If sequential listing completes first, set method to sequential listing and ranges to nil. + // The nextToken will be used to continue sequential listing. + results = objects + c.pageToken = nextToken + c.method = sequential + c.ranges = nil + // Close context when sequential listing is complete. + cancel() + return nil + }) + } + + // Close all functions if either sequential listing or worksteal listing is complete. + err := g.Wait() + + // If error is not nil and context is not canceled, then return error. + // As one of the listing method completes, it is expected to cancel context for the other method. + // If both sequential and worksteal listing fail due to context canceled, then return error. + if err != nil && (!errors.Is(err, context.Canceled) || countError > 1) { + return nil, fmt.Errorf("failed waiting for sequntial and work steal lister : %w", err) + } + + // If ranges for worksteal and pageToken for sequential listing is empty, then listing is complete. + if len(c.ranges) == 0 && c.pageToken == "" { + return results, iterator.Done + } + return results, nil } // Close closes the range channel of the Lister. diff --git a/storage/dataflux/sequential.go b/storage/dataflux/sequential.go index 7a126063d3a7..b90fd4327156 100644 --- a/storage/dataflux/sequential.go +++ b/storage/dataflux/sequential.go @@ -16,13 +16,71 @@ package dataflux import ( "context" + "fmt" + "strings" "cloud.google.com/go/storage" + "google.golang.org/api/iterator" +) + +const ( + // defaultPageSize specifies the number of object results to include on a single page. + defaultPageSize = 5000 ) // sequentialListing performs a sequential listing on the given bucket. // It returns a list of objects and the next token to use to continue listing. // If the next token is empty, then listing is complete. -func sequentialListing(ctx context.Context, opts Lister) ([]*storage.ObjectAttrs, string) { - return nil, "" +func sequentialListing(ctx context.Context, opts Lister) ([]*storage.ObjectAttrs, string, error) { + var result []*storage.ObjectAttrs + objectIterator := opts.bucket.Objects(ctx, &opts.query) + // Number of pages to request from GCS pagination. + numPageRequest := opts.batchSize / defaultPageSize + var lastToken string + i := 0 + for { + // If page size is set, then stop listing after numPageRequest. + if opts.batchSize > 0 && i >= numPageRequest { + break + } + i++ + objects, nextToken, err := doListing(opts, objectIterator) + if err != nil { + return nil, "", fmt.Errorf("failed while listing objects: %w", err) + } + result = append(result, objects...) + lastToken = nextToken + if nextToken == "" { + break + } + opts.pageToken = nextToken + } + return result, lastToken, nil +} + +func doListing(opts Lister, objectIterator *storage.ObjectIterator) ([]*storage.ObjectAttrs, string, error) { + + var objects []*storage.ObjectAttrs + + pageInfo := objectIterator.PageInfo() + pageInfo.MaxSize = defaultPageSize + pageInfo.Token = opts.pageToken + for { + attrs, err := objectIterator.Next() + // When last item for the assigned range is listed, then stop listing. + if err == iterator.Done { + break + } + if err != nil { + return nil, "", fmt.Errorf("iterating through objects %w", err) + } + if !(opts.skipDirectoryObjects && strings.HasSuffix(attrs.Name, "/")) { + objects = append(objects, attrs) + } + if defaultPageSize != 0 && (pageInfo.Remaining() == 0) { + break + } + } + nextToken := objectIterator.PageInfo().Token + return objects, nextToken, nil } From b1e7712c63a193b99048577758eb64f30e9c5041 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Tue, 27 Aug 2024 06:50:25 +0000 Subject: [PATCH 08/27] adding basic integration test --- storage/dataflux/fast_list.go | 2 +- storage/dataflux/integration_test.go | 263 +++++++++++++++++++++++++++ storage/dataflux/worksteal.go | 12 +- 3 files changed, 270 insertions(+), 7 deletions(-) create mode 100644 storage/dataflux/integration_test.go diff --git a/storage/dataflux/fast_list.go b/storage/dataflux/fast_list.go index 0b6498c988a3..2bcafdd7caf5 100644 --- a/storage/dataflux/fast_list.go +++ b/storage/dataflux/fast_list.go @@ -136,7 +136,7 @@ func (c *Lister) NextBatch(ctx context.Context) ([]*storage.ObjectAttrs, error) // Close all functions if either sequential listing or worksteal listing is complete. err := g.Wait() - // If error is not nil and context is not canceled, then return error. + // If there is not context.Canceled, then return error. // As one of the listing method completes, it is expected to cancel context for the other method. // If both sequential and worksteal listing fail due to context canceled, then return error. if err != nil && (!errors.Is(err, context.Canceled) || countError > 1) { diff --git a/storage/dataflux/integration_test.go b/storage/dataflux/integration_test.go new file mode 100644 index 000000000000..48d19057fa9b --- /dev/null +++ b/storage/dataflux/integration_test.go @@ -0,0 +1,263 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package dataflux + +import ( + "context" + crand "crypto/rand" + "flag" + "fmt" + "hash/crc32" + "io" + "log" + "math/rand" + "testing" + "time" + + "cloud.google.com/go/internal/testutil" + "cloud.google.com/go/internal/uid" + "cloud.google.com/go/storage" + "google.golang.org/api/iterator" +) + +const ( + testPrefix = "go-integration-test-tm" + grpcTestPrefix = "golang-grpc-test-tm" + bucketExpiryAge = 24 * time.Hour + minObjectSize = 1024 + maxObjectSize = 1024 * 1024 +) + +var ( + uidSpace = uid.NewSpace("", nil) + // These buckets are shared amongst download tests. They are created, + // populated with objects and cleaned up in TestMain. + httpTestBucket = downloadTestBucket{} + grpcTestBucket = downloadTestBucket{} +) + +func TestMain(m *testing.M) { + flag.Parse() + fmt.Println("creating bucket") + if err := httpTestBucket.Create(testPrefix); err != nil { + log.Fatalf("test bucket creation failed: %v", err) + } + + m.Run() + + if err := httpTestBucket.Cleanup(); err != nil { + log.Printf("test bucket cleanup failed: %v", err) + } + + if err := deleteExpiredBuckets(testPrefix); err != nil { + log.Printf("expired http bucket cleanup failed: %v", err) + } +} + +// Lists the all the objects in the bucket. +func TestIntegration_NextBatch(t *testing.T) { + if testing.Short() { + t.Skip("Integration tests skipped in short mode") + } + ctx := context.Background() + c, err := storage.NewClient(ctx) + if err != nil { + t.Fatalf("NewClient: %v", err) + } + in := &ListerInput{ + BucketName: httpTestBucket.bucket, + } + + df, close := NewLister(c, in) + defer close() + + objects, err := df.NextBatch(ctx) + if err != nil && err != iterator.Done { + t.Errorf("df.NextBatch(: %v", err) + } + + if len(objects) != len(httpTestBucket.objects) { + t.Errorf("expected to receive %d results, got %d results", len(httpTestBucket.objects), len(objects)) + } +} + +// generateRandomFileInGCS uploads a file with random contents to GCS and returns +// the crc32c hash of the contents. +func generateFileInGCS(ctx context.Context, o *storage.ObjectHandle, size int64) (uint32, error) { + w := o.Retryer(storage.WithPolicy(storage.RetryAlways)).NewWriter(ctx) + + crc32cHash := crc32.New(crc32.MakeTable(crc32.Castagnoli)) + mw := io.MultiWriter(w, crc32cHash) + + if _, err := io.CopyN(mw, crand.Reader, size); err != nil { + w.Close() + return 0, err + } + return crc32cHash.Sum32(), w.Close() +} + +// randomInt64 returns a value in the closed interval [min, max]. +// That is, the endpoints are possible return values. +func randomInt64(min, max int64) int64 { + if min > max { + log.Fatalf("min cannot be larger than max; min: %d max: %d", min, max) + } + return rand.Int63n(max-min+1) + min +} + +func deleteExpiredBuckets(prefix string) error { + if testing.Short() { + return nil + } + + ctx := context.Background() + client, err := storage.NewClient(ctx) + if err != nil { + return fmt.Errorf("NewClient: %v", err) + } + + projectID := testutil.ProjID() + it := client.Buckets(ctx, projectID) + it.Prefix = prefix + for { + bktAttrs, err := it.Next() + if err == iterator.Done { + break + } + if err != nil { + return err + } + if time.Since(bktAttrs.Created) > bucketExpiryAge { + log.Printf("deleting bucket %q, which is more than %s old", bktAttrs.Name, bucketExpiryAge) + if err := killBucket(ctx, client, bktAttrs.Name); err != nil { + return err + } + } + } + return nil +} + +// killBucket deletes a bucket and all its objects. +func killBucket(ctx context.Context, client *storage.Client, bucketName string) error { + bkt := client.Bucket(bucketName) + // Bucket must be empty to delete. + it := bkt.Objects(ctx, nil) + for { + objAttrs, err := it.Next() + if err == iterator.Done { + break + } + if err != nil { + return err + } + if err := bkt.Object(objAttrs.Name).Delete(ctx); err != nil { + return fmt.Errorf("deleting %q: %v", bucketName+"/"+objAttrs.Name, err) + } + } + // GCS is eventually consistent, so this delete may fail because the + // replica still sees an object in the bucket. We log the error and expect + // a later test run to delete the bucket. + if err := bkt.Delete(ctx); err != nil { + log.Printf("deleting %q: %v", bucketName, err) + } + return nil +} + +// downloadTestBucket provides a bucket that can be reused for tests that only +// download from the bucket. +type downloadTestBucket struct { + bucket string + objects []string + contentHashes map[string]uint32 + objectSizes map[string]int64 +} + +// Create initializes the downloadTestBucket, creating a bucket and populating +// objects in it. All objects are of the same size but with different contents +// and can be mapped to their respective crc32c hash in contentHashes. +func (tb *downloadTestBucket) Create(prefix string) error { + if testing.Short() { + return nil + } + ctx := context.Background() + + tb.bucket = prefix + uidSpace.New() + tb.objects = []string{ + "!#$&'()*+,:;=,?@,[] and spaces", + "./obj", + "obj1", + "obj2", + "dir/file", + "dir/objA", + "dir/objB", + "dir/objC", + "dir/nested/objA", + "dir/nested/again/obj1", + "anotherDir/objC", + } + tb.contentHashes = make(map[string]uint32) + tb.objectSizes = make(map[string]int64) + + client, err := storage.NewClient(ctx) + if err != nil { + return fmt.Errorf("NewClient: %v", err) + } + defer client.Close() + + b := client.Bucket(tb.bucket) + if err := b.Create(ctx, testutil.ProjID(), nil); err != nil { + return fmt.Errorf("bucket(%q).Create: %v", tb.bucket, err) + } + + // Write objects. + for _, obj := range tb.objects { + size := randomInt64(minObjectSize, maxObjectSize) + crc, err := generateFileInGCS(ctx, b.Object(obj), size) + if err != nil { + return fmt.Errorf("generateFileInGCS: %v", err) + } + tb.contentHashes[obj] = crc + tb.objectSizes[obj] = size + } + return nil +} + +// Cleanup deletes the objects and bucket created in Create. +func (tb *downloadTestBucket) Cleanup() error { + if testing.Short() { + return nil + } + ctx := context.Background() + + client, err := storage.NewClient(ctx) + if err != nil { + return fmt.Errorf("NewClient: %v", err) + } + defer client.Close() + + b := client.Bucket(tb.bucket) + + for _, obj := range tb.objects { + if err := b.Object(obj).Delete(ctx); err != nil { + return fmt.Errorf("object.Delete: %v", err) + } + } + + return b.Delete(ctx) +} + +func crc32c(b []byte) uint32 { + return crc32.Checksum(b, crc32.MakeTable(crc32.Castagnoli)) +} diff --git a/storage/dataflux/worksteal.go b/storage/dataflux/worksteal.go index 57c82ae382b5..1d304e032063 100644 --- a/storage/dataflux/worksteal.go +++ b/storage/dataflux/worksteal.go @@ -47,6 +47,12 @@ type worker struct { generation int64 } +// workstealListing is the main entry point of the worksteal algorithm. +// It performs worksteal to achieve highly dynamic object listing. +func workstealListing(ctx context.Context, opts Lister) []*storage.ObjectAttrs { + return nil +} + // newObjectListerOpts specifies options for instantiating the NewObjectLister. type newObjectListerOpts struct { // startRange is the start offset of the objects to be listed. @@ -76,12 +82,6 @@ type nextPageResult struct { generation int64 } -// workstealListing is the main entry point of the worksteal algorithm. -// It performs worksteal to achieve highly dynamic object listing. -func workstealListing(ctx context.Context, opts Lister) []*storage.ObjectAttrs { - return nil -} - // newObjectLister creates a new ObjectLister using the given lister options. func newObjectLister(ctx context.Context, opts newObjectListerOpts) *nextPageResult { return &nextPageResult{} From c90c6fc268ed15a065784aac0b19a9d1fde989e7 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 16:50:29 +0000 Subject: [PATCH 09/27] chore: update gapic-generator-go to 0.47.0 (#10848) - [ ] Regenerate this pull request now. PiperOrigin-RevId: 673380763 Source-Link: https://togithub.com/googleapis/googleapis/commit/8ebfd76bd91ba97b86491de9161c9e5e6884a68a Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/c7314d1edf63123ef0efbe9bc4d996391025fb44 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYzczMTRkMWVkZjYzMTIzZWYwZWZiZTliYzRkOTk2MzkxMDI1ZmI0NCJ9 BEGIN_NESTED_COMMIT feat(bigtable/admin): Add support for Cloud Bigtable Row Affinity in App Profiles PiperOrigin-RevId: 673093969 Source-Link: https://togithub.com/googleapis/googleapis/commit/cbf696d38a963c5ab333f85fc9a910b5698ad415 Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/a2f7ec1191813304b3bd0097caa33956bdb3b637 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYTJmN2VjMTE5MTgxMzMwNGIzYmQwMDk3Y2FhMzM5NTZiZGIzYjYzNyJ9 END_NESTED_COMMIT BEGIN_NESTED_COMMIT feat(aiplatform): add Pinecone and Vector Search integration for Vertex RAG PiperOrigin-RevId: 673087899 Source-Link: https://togithub.com/googleapis/googleapis/commit/afb6b3599d50103e022e9c22c5057bf94be9dcf8 Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/00a4515ab465e98d56627075675209631ee51f39 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMDBhNDUxNWFiNDY1ZTk4ZDU2NjI3MDc1Njc1MjA5NjMxZWU1MWYzOSJ9 END_NESTED_COMMIT --- .../apiv1/generative_client.go | 2 + ai/generativelanguage/apiv1/model_client.go | 2 + .../apiv1beta/cache_client.go | 2 + .../apiv1beta/discuss_client.go | 2 + .../apiv1beta/file_client.go | 2 + .../apiv1beta/generative_client.go | 2 + .../apiv1beta/model_client.go | 2 + .../apiv1beta/permission_client.go | 2 + .../apiv1beta/retriever_client.go | 2 + .../apiv1beta/text_client.go | 2 + .../apiv1beta2/discuss_client.go | 2 + .../apiv1beta2/model_client.go | 2 + .../apiv1beta2/text_client.go | 2 + aiplatform/apiv1/dataset_client.go | 1 + .../apiv1/deployment_resource_pool_client.go | 1 + aiplatform/apiv1/endpoint_client.go | 1 + aiplatform/apiv1/evaluation_client.go | 1 + .../feature_online_store_admin_client.go | 1 + .../apiv1/feature_online_store_client.go | 1 + aiplatform/apiv1/feature_registry_client.go | 1 + aiplatform/apiv1/featurestore_client.go | 1 + .../featurestore_online_serving_client.go | 1 + aiplatform/apiv1/gen_ai_tuning_client.go | 1 + aiplatform/apiv1/index_client.go | 1 + aiplatform/apiv1/index_endpoint_client.go | 1 + aiplatform/apiv1/job_client.go | 1 + aiplatform/apiv1/llm_utility_client.go | 1 + aiplatform/apiv1/match_client.go | 1 + aiplatform/apiv1/metadata_client.go | 1 + aiplatform/apiv1/migration_client.go | 1 + aiplatform/apiv1/model_client.go | 1 + aiplatform/apiv1/model_garden_client.go | 1 + aiplatform/apiv1/notebook_client.go | 1 + .../apiv1/persistent_resource_client.go | 1 + aiplatform/apiv1/pipeline_client.go | 1 + aiplatform/apiv1/prediction_client.go | 1 + aiplatform/apiv1/schedule_client.go | 1 + aiplatform/apiv1/specialist_pool_client.go | 1 + aiplatform/apiv1/tensorboard_client.go | 1 + aiplatform/apiv1/vizier_client.go | 1 + .../aiplatformpb/vertex_rag_data.pb.go | 813 +++++++++++------- aiplatform/apiv1beta1/dataset_client.go | 2 + .../deployment_resource_pool_client.go | 2 + aiplatform/apiv1beta1/endpoint_client.go | 2 + aiplatform/apiv1beta1/evaluation_client.go | 2 + .../apiv1beta1/extension_execution_client.go | 2 + .../apiv1beta1/extension_registry_client.go | 2 + .../feature_online_store_admin_client.go | 2 + .../apiv1beta1/feature_online_store_client.go | 2 + .../apiv1beta1/feature_registry_client.go | 2 + aiplatform/apiv1beta1/featurestore_client.go | 2 + .../featurestore_online_serving_client.go | 2 + aiplatform/apiv1beta1/gen_ai_cache_client.go | 2 + aiplatform/apiv1beta1/gen_ai_tuning_client.go | 2 + aiplatform/apiv1beta1/index_client.go | 2 + .../apiv1beta1/index_endpoint_client.go | 2 + aiplatform/apiv1beta1/job_client.go | 2 + aiplatform/apiv1beta1/llm_utility_client.go | 2 + aiplatform/apiv1beta1/match_client.go | 2 + aiplatform/apiv1beta1/metadata_client.go | 2 + aiplatform/apiv1beta1/migration_client.go | 2 + aiplatform/apiv1beta1/model_client.go | 2 + aiplatform/apiv1beta1/model_garden_client.go | 2 + .../apiv1beta1/model_monitoring_client.go | 2 + aiplatform/apiv1beta1/notebook_client.go | 2 + .../apiv1beta1/persistent_resource_client.go | 2 + aiplatform/apiv1beta1/pipeline_client.go | 2 + aiplatform/apiv1beta1/prediction_client.go | 2 + .../apiv1beta1/reasoning_engine_client.go | 2 + .../reasoning_engine_execution_client.go | 2 + aiplatform/apiv1beta1/schedule_client.go | 2 + .../apiv1beta1/specialist_pool_client.go | 2 + aiplatform/apiv1beta1/tensorboard_client.go | 2 + aiplatform/apiv1beta1/vertex_rag_client.go | 2 + .../apiv1beta1/vertex_rag_data_client.go | 2 + aiplatform/apiv1beta1/vizier_client.go | 2 + .../apiv1/analytics_hub_client.go | 2 + bigquery/biglake/apiv1/metastore_client.go | 2 + .../biglake/apiv1alpha1/metastore_client.go | 2 + .../apiv1beta1/analytics_hub_client.go | 2 + bigtable/admin/apiv2/adminpb/instance.pb.go | 375 +++++--- cloudprofiler/apiv2/export_client.go | 2 + cloudprofiler/apiv2/profiler_client.go | 2 + compute/apiv1/operations.go | 2 +- .../admin/apiv1/datastore_admin_client.go | 2 + .../apiv1/admin/firestore_admin_client.go | 2 + firestore/apiv1/firestore_client.go | 2 + logging/apiv2/config_client.go | 1 + logging/apiv2/logging_client.go | 1 + logging/apiv2/metrics_client.go | 1 + pubsub/apiv1/publisher_client.go | 2 + pubsub/apiv1/schema_client.go | 2 + pubsub/apiv1/subscriber_client.go | 2 + pubsublite/apiv1/admin_client.go | 1 + pubsublite/apiv1/cursor_client.go | 1 + .../apiv1/partition_assignment_client.go | 1 + pubsublite/apiv1/publisher_client.go | 1 + pubsublite/apiv1/subscriber_client.go | 1 + pubsublite/apiv1/topic_stats_client.go | 1 + .../database/apiv1/database_admin_client.go | 2 + .../instance/apiv1/instance_admin_client.go | 2 + spanner/apiv1/spanner_client.go | 2 + 102 files changed, 910 insertions(+), 442 deletions(-) diff --git a/ai/generativelanguage/apiv1/generative_client.go b/ai/generativelanguage/apiv1/generative_client.go index 4849381a98cc..0c5ba2b8bc79 100755 --- a/ai/generativelanguage/apiv1/generative_client.go +++ b/ai/generativelanguage/apiv1/generative_client.go @@ -66,6 +66,7 @@ func defaultGenerativeGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -429,6 +430,7 @@ func defaultGenerativeRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/ai/generativelanguage/apiv1/model_client.go b/ai/generativelanguage/apiv1/model_client.go index 6369a5326d8e..242f8c0f6d9f 100755 --- a/ai/generativelanguage/apiv1/model_client.go +++ b/ai/generativelanguage/apiv1/model_client.go @@ -59,6 +59,7 @@ func defaultModelGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -283,6 +284,7 @@ func defaultModelRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/ai/generativelanguage/apiv1beta/cache_client.go b/ai/generativelanguage/apiv1beta/cache_client.go index e947b3ff70ae..2dd5f073002e 100755 --- a/ai/generativelanguage/apiv1beta/cache_client.go +++ b/ai/generativelanguage/apiv1beta/cache_client.go @@ -58,6 +58,7 @@ func defaultCacheGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -282,6 +283,7 @@ func defaultCacheRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/ai/generativelanguage/apiv1beta/discuss_client.go b/ai/generativelanguage/apiv1beta/discuss_client.go index dc478eb27654..2e19c3f209e5 100755 --- a/ai/generativelanguage/apiv1beta/discuss_client.go +++ b/ai/generativelanguage/apiv1beta/discuss_client.go @@ -55,6 +55,7 @@ func defaultDiscussGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -297,6 +298,7 @@ func defaultDiscussRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/ai/generativelanguage/apiv1beta/file_client.go b/ai/generativelanguage/apiv1beta/file_client.go index 64eb2283bf82..94e1370d7f28 100755 --- a/ai/generativelanguage/apiv1beta/file_client.go +++ b/ai/generativelanguage/apiv1beta/file_client.go @@ -57,6 +57,7 @@ func defaultFileGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -264,6 +265,7 @@ func defaultFileRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/ai/generativelanguage/apiv1beta/generative_client.go b/ai/generativelanguage/apiv1beta/generative_client.go index c23045efe916..e2b43d99606d 100755 --- a/ai/generativelanguage/apiv1beta/generative_client.go +++ b/ai/generativelanguage/apiv1beta/generative_client.go @@ -61,6 +61,7 @@ func defaultGenerativeGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -427,6 +428,7 @@ func defaultGenerativeRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/ai/generativelanguage/apiv1beta/model_client.go b/ai/generativelanguage/apiv1beta/model_client.go index a8aca4901404..0a0280b307be 100755 --- a/ai/generativelanguage/apiv1beta/model_client.go +++ b/ai/generativelanguage/apiv1beta/model_client.go @@ -65,6 +65,7 @@ func defaultModelGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -498,6 +499,7 @@ func defaultModelRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/ai/generativelanguage/apiv1beta/permission_client.go b/ai/generativelanguage/apiv1beta/permission_client.go index 9bd3a94f4fe0..3159cea53619 100755 --- a/ai/generativelanguage/apiv1beta/permission_client.go +++ b/ai/generativelanguage/apiv1beta/permission_client.go @@ -61,6 +61,7 @@ func defaultPermissionGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -391,6 +392,7 @@ func defaultPermissionRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/ai/generativelanguage/apiv1beta/retriever_client.go b/ai/generativelanguage/apiv1beta/retriever_client.go index 21807bae8039..10391b9eb01e 100755 --- a/ai/generativelanguage/apiv1beta/retriever_client.go +++ b/ai/generativelanguage/apiv1beta/retriever_client.go @@ -75,6 +75,7 @@ func defaultRetrieverGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -746,6 +747,7 @@ func defaultRetrieverRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/ai/generativelanguage/apiv1beta/text_client.go b/ai/generativelanguage/apiv1beta/text_client.go index 28392a8e1f68..7f39590ad6a5 100755 --- a/ai/generativelanguage/apiv1beta/text_client.go +++ b/ai/generativelanguage/apiv1beta/text_client.go @@ -57,6 +57,7 @@ func defaultTextGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -358,6 +359,7 @@ func defaultTextRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/ai/generativelanguage/apiv1beta2/discuss_client.go b/ai/generativelanguage/apiv1beta2/discuss_client.go index d221670398cb..3d825b92f048 100755 --- a/ai/generativelanguage/apiv1beta2/discuss_client.go +++ b/ai/generativelanguage/apiv1beta2/discuss_client.go @@ -55,6 +55,7 @@ func defaultDiscussGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -297,6 +298,7 @@ func defaultDiscussRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/ai/generativelanguage/apiv1beta2/model_client.go b/ai/generativelanguage/apiv1beta2/model_client.go index 68b6309b2dc5..fcaec22365ba 100755 --- a/ai/generativelanguage/apiv1beta2/model_client.go +++ b/ai/generativelanguage/apiv1beta2/model_client.go @@ -56,6 +56,7 @@ func defaultModelGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -289,6 +290,7 @@ func defaultModelRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/ai/generativelanguage/apiv1beta2/text_client.go b/ai/generativelanguage/apiv1beta2/text_client.go index d49cf83a180c..0a75df99c636 100755 --- a/ai/generativelanguage/apiv1beta2/text_client.go +++ b/ai/generativelanguage/apiv1beta2/text_client.go @@ -55,6 +55,7 @@ func defaultTextGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -297,6 +298,7 @@ func defaultTextRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://generativelanguage.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1/dataset_client.go b/aiplatform/apiv1/dataset_client.go index 803b5b02d726..1aa00412137a 100755 --- a/aiplatform/apiv1/dataset_client.go +++ b/aiplatform/apiv1/dataset_client.go @@ -81,6 +81,7 @@ func defaultDatasetGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/deployment_resource_pool_client.go b/aiplatform/apiv1/deployment_resource_pool_client.go index 112f60177893..db79eef0f4db 100755 --- a/aiplatform/apiv1/deployment_resource_pool_client.go +++ b/aiplatform/apiv1/deployment_resource_pool_client.go @@ -68,6 +68,7 @@ func defaultDeploymentResourcePoolGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/endpoint_client.go b/aiplatform/apiv1/endpoint_client.go index 01a0d6598759..373ddcce6416 100755 --- a/aiplatform/apiv1/endpoint_client.go +++ b/aiplatform/apiv1/endpoint_client.go @@ -70,6 +70,7 @@ func defaultEndpointGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/evaluation_client.go b/aiplatform/apiv1/evaluation_client.go index f9c46689e362..d0ff6981653f 100755 --- a/aiplatform/apiv1/evaluation_client.go +++ b/aiplatform/apiv1/evaluation_client.go @@ -61,6 +61,7 @@ func defaultEvaluationGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/feature_online_store_admin_client.go b/aiplatform/apiv1/feature_online_store_admin_client.go index cb64a814df33..9b1ee77b7e56 100755 --- a/aiplatform/apiv1/feature_online_store_admin_client.go +++ b/aiplatform/apiv1/feature_online_store_admin_client.go @@ -75,6 +75,7 @@ func defaultFeatureOnlineStoreAdminGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/feature_online_store_client.go b/aiplatform/apiv1/feature_online_store_client.go index 9a8e4f854d97..65d1afe26746 100755 --- a/aiplatform/apiv1/feature_online_store_client.go +++ b/aiplatform/apiv1/feature_online_store_client.go @@ -62,6 +62,7 @@ func defaultFeatureOnlineStoreGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/feature_registry_client.go b/aiplatform/apiv1/feature_registry_client.go index 6577b9cc8453..cf5cbd1b14c1 100755 --- a/aiplatform/apiv1/feature_registry_client.go +++ b/aiplatform/apiv1/feature_registry_client.go @@ -72,6 +72,7 @@ func defaultFeatureRegistryGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/featurestore_client.go b/aiplatform/apiv1/featurestore_client.go index 736f02dbcaf9..2b7c68799fa4 100755 --- a/aiplatform/apiv1/featurestore_client.go +++ b/aiplatform/apiv1/featurestore_client.go @@ -83,6 +83,7 @@ func defaultFeaturestoreGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/featurestore_online_serving_client.go b/aiplatform/apiv1/featurestore_online_serving_client.go index 1fb8c65cc938..83128b01eb21 100755 --- a/aiplatform/apiv1/featurestore_online_serving_client.go +++ b/aiplatform/apiv1/featurestore_online_serving_client.go @@ -63,6 +63,7 @@ func defaultFeaturestoreOnlineServingGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/gen_ai_tuning_client.go b/aiplatform/apiv1/gen_ai_tuning_client.go index 406b570ef93b..7fb7aec25d74 100755 --- a/aiplatform/apiv1/gen_ai_tuning_client.go +++ b/aiplatform/apiv1/gen_ai_tuning_client.go @@ -64,6 +64,7 @@ func defaultGenAiTuningGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/index_client.go b/aiplatform/apiv1/index_client.go index d57edf3003a0..7a120b062252 100755 --- a/aiplatform/apiv1/index_client.go +++ b/aiplatform/apiv1/index_client.go @@ -69,6 +69,7 @@ func defaultIndexGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/index_endpoint_client.go b/aiplatform/apiv1/index_endpoint_client.go index 39190080a180..3c8a24c47a65 100755 --- a/aiplatform/apiv1/index_endpoint_client.go +++ b/aiplatform/apiv1/index_endpoint_client.go @@ -70,6 +70,7 @@ func defaultIndexEndpointGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/job_client.go b/aiplatform/apiv1/job_client.go index 31ef831fb578..e4db8e714a1c 100755 --- a/aiplatform/apiv1/job_client.go +++ b/aiplatform/apiv1/job_client.go @@ -97,6 +97,7 @@ func defaultJobGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/llm_utility_client.go b/aiplatform/apiv1/llm_utility_client.go index 46734fdbae79..fdc98687a8a7 100755 --- a/aiplatform/apiv1/llm_utility_client.go +++ b/aiplatform/apiv1/llm_utility_client.go @@ -62,6 +62,7 @@ func defaultLlmUtilityGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/match_client.go b/aiplatform/apiv1/match_client.go index 300f31a33ef3..6f62acba8b68 100755 --- a/aiplatform/apiv1/match_client.go +++ b/aiplatform/apiv1/match_client.go @@ -62,6 +62,7 @@ func defaultMatchGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/metadata_client.go b/aiplatform/apiv1/metadata_client.go index 66078eab3aee..f979720bdeac 100755 --- a/aiplatform/apiv1/metadata_client.go +++ b/aiplatform/apiv1/metadata_client.go @@ -94,6 +94,7 @@ func defaultMetadataGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/migration_client.go b/aiplatform/apiv1/migration_client.go index f2efef79ae6b..a942a9c2234e 100755 --- a/aiplatform/apiv1/migration_client.go +++ b/aiplatform/apiv1/migration_client.go @@ -64,6 +64,7 @@ func defaultMigrationGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/model_client.go b/aiplatform/apiv1/model_client.go index 581042e9ceae..0aae61d295c1 100755 --- a/aiplatform/apiv1/model_client.go +++ b/aiplatform/apiv1/model_client.go @@ -80,6 +80,7 @@ func defaultModelGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/model_garden_client.go b/aiplatform/apiv1/model_garden_client.go index fe5d077c532c..5e264981e531 100755 --- a/aiplatform/apiv1/model_garden_client.go +++ b/aiplatform/apiv1/model_garden_client.go @@ -61,6 +61,7 @@ func defaultModelGardenGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/notebook_client.go b/aiplatform/apiv1/notebook_client.go index 3c91675cda62..1d90b44ecf65 100755 --- a/aiplatform/apiv1/notebook_client.go +++ b/aiplatform/apiv1/notebook_client.go @@ -77,6 +77,7 @@ func defaultNotebookGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/persistent_resource_client.go b/aiplatform/apiv1/persistent_resource_client.go index aa1a9760b7cc..2453bc315d60 100755 --- a/aiplatform/apiv1/persistent_resource_client.go +++ b/aiplatform/apiv1/persistent_resource_client.go @@ -68,6 +68,7 @@ func defaultPersistentResourceGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/pipeline_client.go b/aiplatform/apiv1/pipeline_client.go index 651f6a49c70b..a8aa6d47d04b 100755 --- a/aiplatform/apiv1/pipeline_client.go +++ b/aiplatform/apiv1/pipeline_client.go @@ -74,6 +74,7 @@ func defaultPipelineGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/prediction_client.go b/aiplatform/apiv1/prediction_client.go index 5e3a791e2360..d67972e2f2f7 100755 --- a/aiplatform/apiv1/prediction_client.go +++ b/aiplatform/apiv1/prediction_client.go @@ -74,6 +74,7 @@ func defaultPredictionGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/schedule_client.go b/aiplatform/apiv1/schedule_client.go index e90f8c11c810..eb2baa312841 100755 --- a/aiplatform/apiv1/schedule_client.go +++ b/aiplatform/apiv1/schedule_client.go @@ -69,6 +69,7 @@ func defaultScheduleGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/specialist_pool_client.go b/aiplatform/apiv1/specialist_pool_client.go index 8385baa12257..447660ff7705 100755 --- a/aiplatform/apiv1/specialist_pool_client.go +++ b/aiplatform/apiv1/specialist_pool_client.go @@ -67,6 +67,7 @@ func defaultSpecialistPoolGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/tensorboard_client.go b/aiplatform/apiv1/tensorboard_client.go index 74fd6a1f2107..a282d4157aa3 100755 --- a/aiplatform/apiv1/tensorboard_client.go +++ b/aiplatform/apiv1/tensorboard_client.go @@ -92,6 +92,7 @@ func defaultTensorboardGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1/vizier_client.go b/aiplatform/apiv1/vizier_client.go index adb4a66043e5..fac312f35dfb 100755 --- a/aiplatform/apiv1/vizier_client.go +++ b/aiplatform/apiv1/vizier_client.go @@ -77,6 +77,7 @@ func defaultVizierGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go index 70c2bc5a795d..ba3a943985f9 100755 --- a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go +++ b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go @@ -304,7 +304,9 @@ type RagVectorDbConfig struct { // // *RagVectorDbConfig_RagManagedDb_ // *RagVectorDbConfig_Weaviate_ + // *RagVectorDbConfig_Pinecone_ // *RagVectorDbConfig_VertexFeatureStore_ + // *RagVectorDbConfig_VertexVectorSearch_ VectorDb isRagVectorDbConfig_VectorDb `protobuf_oneof:"vector_db"` // Authentication config for the chosen Vector DB. ApiAuth *ApiAuth `protobuf:"bytes,5,opt,name=api_auth,json=apiAuth,proto3" json:"api_auth,omitempty"` @@ -363,6 +365,13 @@ func (x *RagVectorDbConfig) GetWeaviate() *RagVectorDbConfig_Weaviate { return nil } +func (x *RagVectorDbConfig) GetPinecone() *RagVectorDbConfig_Pinecone { + if x, ok := x.GetVectorDb().(*RagVectorDbConfig_Pinecone_); ok { + return x.Pinecone + } + return nil +} + func (x *RagVectorDbConfig) GetVertexFeatureStore() *RagVectorDbConfig_VertexFeatureStore { if x, ok := x.GetVectorDb().(*RagVectorDbConfig_VertexFeatureStore_); ok { return x.VertexFeatureStore @@ -370,6 +379,13 @@ func (x *RagVectorDbConfig) GetVertexFeatureStore() *RagVectorDbConfig_VertexFea return nil } +func (x *RagVectorDbConfig) GetVertexVectorSearch() *RagVectorDbConfig_VertexVectorSearch { + if x, ok := x.GetVectorDb().(*RagVectorDbConfig_VertexVectorSearch_); ok { + return x.VertexVectorSearch + } + return nil +} + func (x *RagVectorDbConfig) GetApiAuth() *ApiAuth { if x != nil { return x.ApiAuth @@ -391,17 +407,31 @@ type RagVectorDbConfig_Weaviate_ struct { Weaviate *RagVectorDbConfig_Weaviate `protobuf:"bytes,2,opt,name=weaviate,proto3,oneof"` } +type RagVectorDbConfig_Pinecone_ struct { + // The config for the Pinecone. + Pinecone *RagVectorDbConfig_Pinecone `protobuf:"bytes,3,opt,name=pinecone,proto3,oneof"` +} + type RagVectorDbConfig_VertexFeatureStore_ struct { // The config for the Vertex Feature Store. VertexFeatureStore *RagVectorDbConfig_VertexFeatureStore `protobuf:"bytes,4,opt,name=vertex_feature_store,json=vertexFeatureStore,proto3,oneof"` } +type RagVectorDbConfig_VertexVectorSearch_ struct { + // The config for the Vertex Vector Search. + VertexVectorSearch *RagVectorDbConfig_VertexVectorSearch `protobuf:"bytes,6,opt,name=vertex_vector_search,json=vertexVectorSearch,proto3,oneof"` +} + func (*RagVectorDbConfig_RagManagedDb_) isRagVectorDbConfig_VectorDb() {} func (*RagVectorDbConfig_Weaviate_) isRagVectorDbConfig_VectorDb() {} +func (*RagVectorDbConfig_Pinecone_) isRagVectorDbConfig_VectorDb() {} + func (*RagVectorDbConfig_VertexFeatureStore_) isRagVectorDbConfig_VectorDb() {} +func (*RagVectorDbConfig_VertexVectorSearch_) isRagVectorDbConfig_VectorDb() {} + // RagFile status. type FileStatus struct { state protoimpl.MessageState @@ -1594,6 +1624,56 @@ func (x *RagVectorDbConfig_Weaviate) GetCollectionName() string { return "" } +// The config for the Pinecone. +type RagVectorDbConfig_Pinecone struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Pinecone index name. + // This value cannot be changed after it's set. + IndexName string `protobuf:"bytes,1,opt,name=index_name,json=indexName,proto3" json:"index_name,omitempty"` +} + +func (x *RagVectorDbConfig_Pinecone) Reset() { + *x = RagVectorDbConfig_Pinecone{} + if protoimpl.UnsafeEnabled { + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RagVectorDbConfig_Pinecone) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RagVectorDbConfig_Pinecone) ProtoMessage() {} + +func (x *RagVectorDbConfig_Pinecone) ProtoReflect() protoreflect.Message { + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RagVectorDbConfig_Pinecone.ProtoReflect.Descriptor instead. +func (*RagVectorDbConfig_Pinecone) Descriptor() ([]byte, []int) { + return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{1, 2} +} + +func (x *RagVectorDbConfig_Pinecone) GetIndexName() string { + if x != nil { + return x.IndexName + } + return "" +} + // The config for the Vertex Feature Store. type RagVectorDbConfig_VertexFeatureStore struct { state protoimpl.MessageState @@ -1609,7 +1689,7 @@ type RagVectorDbConfig_VertexFeatureStore struct { func (x *RagVectorDbConfig_VertexFeatureStore) Reset() { *x = RagVectorDbConfig_VertexFeatureStore{} if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[16] + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1622,7 +1702,7 @@ func (x *RagVectorDbConfig_VertexFeatureStore) String() string { func (*RagVectorDbConfig_VertexFeatureStore) ProtoMessage() {} func (x *RagVectorDbConfig_VertexFeatureStore) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[16] + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1635,7 +1715,7 @@ func (x *RagVectorDbConfig_VertexFeatureStore) ProtoReflect() protoreflect.Messa // Deprecated: Use RagVectorDbConfig_VertexFeatureStore.ProtoReflect.Descriptor instead. func (*RagVectorDbConfig_VertexFeatureStore) Descriptor() ([]byte, []int) { - return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{1, 2} + return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{1, 3} } func (x *RagVectorDbConfig_VertexFeatureStore) GetFeatureViewResourceName() string { @@ -1645,6 +1725,68 @@ func (x *RagVectorDbConfig_VertexFeatureStore) GetFeatureViewResourceName() stri return "" } +// The config for the Vertex Vector Search. +type RagVectorDbConfig_VertexVectorSearch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The resource name of the Index Endpoint. + // Format: + // `projects/{project}/locations/{location}/indexEndpoints/{index_endpoint}` + IndexEndpoint string `protobuf:"bytes,1,opt,name=index_endpoint,json=indexEndpoint,proto3" json:"index_endpoint,omitempty"` + // The resource name of the Index. + // Format: + // `projects/{project}/locations/{location}/indexes/{index}` + Index string `protobuf:"bytes,2,opt,name=index,proto3" json:"index,omitempty"` +} + +func (x *RagVectorDbConfig_VertexVectorSearch) Reset() { + *x = RagVectorDbConfig_VertexVectorSearch{} + if protoimpl.UnsafeEnabled { + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RagVectorDbConfig_VertexVectorSearch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RagVectorDbConfig_VertexVectorSearch) ProtoMessage() {} + +func (x *RagVectorDbConfig_VertexVectorSearch) ProtoReflect() protoreflect.Message { + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RagVectorDbConfig_VertexVectorSearch.ProtoReflect.Descriptor instead. +func (*RagVectorDbConfig_VertexVectorSearch) Descriptor() ([]byte, []int) { + return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{1, 4} +} + +func (x *RagVectorDbConfig_VertexVectorSearch) GetIndexEndpoint() string { + if x != nil { + return x.IndexEndpoint + } + return "" +} + +func (x *RagVectorDbConfig_VertexVectorSearch) GetIndex() string { + if x != nil { + return x.Index + } + return "" +} + var File_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto protoreflect.FileDescriptor var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = []byte{ @@ -1735,7 +1877,7 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = []byte{ 0x41, 0x02, 0x52, 0x25, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x0e, 0x0a, 0x0c, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xe1, 0x04, 0x0a, 0x11, 0x52, 0x61, + 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xb5, 0x07, 0x0a, 0x11, 0x52, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x67, 0x0a, 0x0e, 0x72, 0x61, 0x67, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x64, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, @@ -1749,273 +1891,294 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = []byte{ 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x65, 0x61, 0x76, 0x69, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x77, 0x65, 0x61, 0x76, 0x69, - 0x61, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x14, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x59, 0x0a, 0x08, 0x70, 0x69, 0x6e, 0x65, 0x63, 0x6f, 0x6e, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x44, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x69, 0x6e, 0x65, 0x63, 0x6f, + 0x6e, 0x65, 0x48, 0x00, 0x52, 0x08, 0x70, 0x69, 0x6e, 0x65, 0x63, 0x6f, 0x6e, 0x65, 0x12, 0x79, + 0x0a, 0x14, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, + 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x48, 0x00, 0x52, 0x12, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x79, 0x0a, 0x14, 0x76, 0x65, 0x72, + 0x74, 0x65, 0x78, 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x56, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x44, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x74, + 0x65, 0x78, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x48, 0x00, + 0x52, 0x12, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x12, 0x43, 0x0a, 0x08, 0x61, 0x70, 0x69, 0x5f, 0x61, 0x75, 0x74, 0x68, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x69, 0x41, 0x75, 0x74, 0x68, + 0x52, 0x07, 0x61, 0x70, 0x69, 0x41, 0x75, 0x74, 0x68, 0x1a, 0x0e, 0x0a, 0x0c, 0x52, 0x61, 0x67, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x44, 0x62, 0x1a, 0x58, 0x0a, 0x08, 0x57, 0x65, 0x61, + 0x76, 0x69, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x65, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68, 0x74, + 0x74, 0x70, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x1a, 0x29, 0x0a, 0x08, 0x50, 0x69, 0x6e, 0x65, 0x63, 0x6f, 0x6e, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x51, + 0x0a, 0x12, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, + 0x76, 0x69, 0x65, 0x77, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x1a, 0x51, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x56, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x42, 0x0b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x64, + 0x62, 0x22, 0xb9, 0x01, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x4c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, + 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, + 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x35, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, + 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x22, 0xc4, 0x01, + 0x0a, 0x0c, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, + 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x3c, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, + 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, + 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, + 0x4f, 0x52, 0x10, 0x03, 0x22, 0xbf, 0x05, 0x0a, 0x09, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, + 0x75, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7d, 0x0a, 0x1a, 0x72, 0x61, + 0x67, 0x5f, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x52, 0x61, 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, + 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0xe0, 0x41, 0x01, 0xe0, 0x41, 0x05, + 0x52, 0x17, 0x72, 0x61, 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, + 0x64, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6b, 0x0a, 0x14, 0x72, 0x61, 0x67, + 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x62, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x56, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x44, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0xe0, 0x41, 0x01, + 0xe0, 0x41, 0x05, 0x52, 0x11, 0x72, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x62, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x63, 0x6f, + 0x72, 0x70, 0x75, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x62, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x48, 0x00, 0x52, 0x12, 0x76, 0x65, 0x72, 0x74, - 0x65, 0x78, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x43, - 0x0a, 0x08, 0x61, 0x70, 0x69, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, - 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x41, 0x70, 0x69, 0x41, 0x75, 0x74, 0x68, 0x52, 0x07, 0x61, 0x70, 0x69, 0x41, - 0x75, 0x74, 0x68, 0x1a, 0x0e, 0x0a, 0x0c, 0x52, 0x61, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x64, 0x44, 0x62, 0x1a, 0x58, 0x0a, 0x08, 0x57, 0x65, 0x61, 0x76, 0x69, 0x61, 0x74, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68, 0x74, 0x74, 0x70, 0x45, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x51, 0x0a, - 0x12, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, - 0x69, 0x65, 0x77, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x56, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x42, 0x0b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x62, 0x22, 0xb9, 0x01, - 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4c, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x69, - 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x35, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x09, - 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x22, 0xc4, 0x01, 0x0a, 0x0c, 0x43, 0x6f, - 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x70, - 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x3c, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x49, 0x54, - 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, - 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, - 0x22, 0xbf, 0x05, 0x0a, 0x09, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x17, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, - 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7d, 0x0a, 0x1a, 0x72, 0x61, 0x67, 0x5f, 0x65, 0x6d, - 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, - 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0xe0, 0x41, 0x01, 0xe0, 0x41, 0x05, 0x52, 0x17, 0x72, 0x61, - 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6b, 0x0a, 0x14, 0x72, 0x61, 0x67, 0x5f, 0x76, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x62, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, - 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0xe0, 0x41, 0x01, 0xe0, 0x41, 0x05, 0x52, - 0x11, 0x72, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x62, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x3a, 0x80, 0x01, 0xea, 0x41, 0x7d, 0x0a, 0x23, 0x61, 0x69, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x3f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, + 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2a, + 0x0a, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x32, 0x09, 0x72, 0x61, 0x67, + 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x22, 0x9a, 0x09, 0x0a, 0x07, 0x52, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x69, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, + 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x6c, 0x0a, 0x14, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3a, - 0x80, 0x01, 0xea, 0x41, 0x7d, 0x0a, 0x23, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x12, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, + 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, + 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, + 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x0d, + 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x52, 0x61, + 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, + 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, + 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, + 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x51, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x5a, 0x0a, 0x0b, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x54, 0x58, 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, + 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x44, 0x46, 0x10, 0x02, 0x3a, 0x8f, + 0x01, 0xea, 0x41, 0x8b, 0x01, 0x0a, 0x21, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x3f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, - 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2a, 0x0a, 0x72, 0x61, 0x67, - 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x32, 0x09, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, - 0x75, 0x73, 0x22, 0x9a, 0x09, 0x0a, 0x07, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x50, - 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x69, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, - 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x2f, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, + 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, + 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x7d, 0x2a, 0x08, 0x72, + 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x32, 0x07, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, + 0x42, 0x11, 0x0a, 0x0f, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x22, 0x5b, 0x0a, 0x15, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, + 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, + 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, + 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, + 0x22, 0x4f, 0x0a, 0x14, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, + 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x5f, + 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x70, 0x64, 0x66, 0x5f, 0x70, 0x61, 0x72, + 0x73, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x75, 0x73, 0x65, 0x41, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x64, 0x66, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, + 0x67, 0x22, 0x86, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x67, 0x46, + 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, + 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, + 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x8a, 0x08, 0x0a, 0x14, 0x49, + 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x4b, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x64, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, + 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x14, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x12, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x70, 0x6c, - 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x73, 0x6c, 0x61, - 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, - 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, - 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4e, 0x0a, 0x0b, - 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, + 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, + 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, + 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, + 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x11, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, + 0x6a, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, + 0x72, 0x65, 0x5f, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, - 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, - 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x73, - 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x0d, 0x72, 0x61, 0x67, 0x5f, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, - 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x72, 0x61, 0x67, 0x46, - 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x66, - 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, - 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, - 0x41, 0x03, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5a, - 0x0a, 0x0b, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, - 0x19, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, - 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x58, - 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x44, 0x46, 0x10, 0x02, 0x3a, 0x8f, 0x01, 0xea, 0x41, 0x8b, - 0x01, 0x0a, 0x21, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, - 0x46, 0x69, 0x6c, 0x65, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, - 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, - 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, - 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x7d, 0x2a, 0x08, 0x72, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x32, 0x07, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x42, 0x11, 0x0a, 0x0f, - 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, - 0x5b, 0x0a, 0x15, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, - 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x75, 0x6e, - 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x68, - 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x75, 0x6e, 0x6b, - 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, - 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x22, 0x4f, 0x0a, 0x14, - 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x64, 0x76, 0x61, - 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x70, 0x64, 0x66, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x75, 0x73, 0x65, 0x41, 0x64, 0x76, 0x61, 0x6e, - 0x63, 0x65, 0x64, 0x50, 0x64, 0x66, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x86, 0x01, - 0x0a, 0x13, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, - 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x8a, 0x08, 0x0a, 0x14, 0x49, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x4b, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, - 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, - 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, - 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, + 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, + 0x6c, 0x75, 0x72, 0x65, 0x47, 0x63, 0x73, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x79, 0x0a, 0x1d, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x62, + 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x6a, 0x0a, 0x18, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x67, - 0x63, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x1a, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x42, 0x69, 0x67, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, + 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6c, 0x0a, 0x17, 0x72, 0x61, 0x67, 0x5f, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x14, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x47, 0x0a, 0x1e, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x6d, 0x62, + 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, + 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, + 0x41, 0x01, 0x52, 0x1a, 0x6d, 0x61, 0x78, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x42, 0x0f, + 0x0a, 0x0d, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, + 0x16, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, + 0x72, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x42, 0xe9, 0x01, 0x0a, 0x23, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, - 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x47, 0x63, 0x73, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x79, 0x0a, 0x1d, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x62, 0x69, 0x67, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x42, 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x1a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x46, - 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x42, 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x69, - 0x6e, 0x6b, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, - 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, - 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x15, 0x72, 0x61, - 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x6c, 0x0a, 0x17, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, - 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, - 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x14, 0x72, 0x61, 0x67, - 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x47, 0x0a, 0x1e, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, - 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x1a, - 0x6d, 0x61, 0x78, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x69, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x16, 0x0a, 0x14, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x73, - 0x69, 0x6e, 0x6b, 0x42, 0xe9, 0x01, 0x0a, 0x23, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x12, 0x56, 0x65, 0x72, - 0x74, 0x65, 0x78, 0x52, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x43, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x69, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0x3b, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x56, 0x31, 0x42, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xea, 0x02, 0x22, 0x47, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x41, 0x49, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, + 0x12, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x52, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x43, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0x3b, 0x61, 0x69, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x56, 0x31, 0x42, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1f, 0x47, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x41, 0x49, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xea, 0x02, + 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, + 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2031,7 +2194,7 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP() [] } var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes = make([]protoimpl.MessageInfo, 19) var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_goTypes = []any{ (FileStatus_State)(0), // 0: google.cloud.aiplatform.v1beta1.FileStatus.State (CorpusStatus_State)(0), // 1: google.cloud.aiplatform.v1beta1.CorpusStatus.State @@ -2052,59 +2215,63 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_goTypes = []any{ (*RagEmbeddingModelConfig_SparseEmbeddingConfig_Bm25)(nil), // 16: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig.Bm25 (*RagVectorDbConfig_RagManagedDb)(nil), // 17: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.RagManagedDb (*RagVectorDbConfig_Weaviate)(nil), // 18: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.Weaviate - (*RagVectorDbConfig_VertexFeatureStore)(nil), // 19: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.VertexFeatureStore - (*ApiAuth)(nil), // 20: google.cloud.aiplatform.v1beta1.ApiAuth - (*timestamppb.Timestamp)(nil), // 21: google.protobuf.Timestamp - (*GcsSource)(nil), // 22: google.cloud.aiplatform.v1beta1.GcsSource - (*GoogleDriveSource)(nil), // 23: google.cloud.aiplatform.v1beta1.GoogleDriveSource - (*DirectUploadSource)(nil), // 24: google.cloud.aiplatform.v1beta1.DirectUploadSource - (*SlackSource)(nil), // 25: google.cloud.aiplatform.v1beta1.SlackSource - (*JiraSource)(nil), // 26: google.cloud.aiplatform.v1beta1.JiraSource - (*SharePointSources)(nil), // 27: google.cloud.aiplatform.v1beta1.SharePointSources - (*GcsDestination)(nil), // 28: google.cloud.aiplatform.v1beta1.GcsDestination - (*BigQueryDestination)(nil), // 29: google.cloud.aiplatform.v1beta1.BigQueryDestination + (*RagVectorDbConfig_Pinecone)(nil), // 19: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.Pinecone + (*RagVectorDbConfig_VertexFeatureStore)(nil), // 20: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.VertexFeatureStore + (*RagVectorDbConfig_VertexVectorSearch)(nil), // 21: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.VertexVectorSearch + (*ApiAuth)(nil), // 22: google.cloud.aiplatform.v1beta1.ApiAuth + (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp + (*GcsSource)(nil), // 24: google.cloud.aiplatform.v1beta1.GcsSource + (*GoogleDriveSource)(nil), // 25: google.cloud.aiplatform.v1beta1.GoogleDriveSource + (*DirectUploadSource)(nil), // 26: google.cloud.aiplatform.v1beta1.DirectUploadSource + (*SlackSource)(nil), // 27: google.cloud.aiplatform.v1beta1.SlackSource + (*JiraSource)(nil), // 28: google.cloud.aiplatform.v1beta1.JiraSource + (*SharePointSources)(nil), // 29: google.cloud.aiplatform.v1beta1.SharePointSources + (*GcsDestination)(nil), // 30: google.cloud.aiplatform.v1beta1.GcsDestination + (*BigQueryDestination)(nil), // 31: google.cloud.aiplatform.v1beta1.BigQueryDestination } var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_depIdxs = []int32{ 13, // 0: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.vertex_prediction_endpoint:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.VertexPredictionEndpoint 15, // 1: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.hybrid_search_config:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.HybridSearchConfig 17, // 2: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.rag_managed_db:type_name -> google.cloud.aiplatform.v1beta1.RagVectorDbConfig.RagManagedDb 18, // 3: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.weaviate:type_name -> google.cloud.aiplatform.v1beta1.RagVectorDbConfig.Weaviate - 19, // 4: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.vertex_feature_store:type_name -> google.cloud.aiplatform.v1beta1.RagVectorDbConfig.VertexFeatureStore - 20, // 5: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.api_auth:type_name -> google.cloud.aiplatform.v1beta1.ApiAuth - 0, // 6: google.cloud.aiplatform.v1beta1.FileStatus.state:type_name -> google.cloud.aiplatform.v1beta1.FileStatus.State - 1, // 7: google.cloud.aiplatform.v1beta1.CorpusStatus.state:type_name -> google.cloud.aiplatform.v1beta1.CorpusStatus.State - 3, // 8: google.cloud.aiplatform.v1beta1.RagCorpus.rag_embedding_model_config:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig - 4, // 9: google.cloud.aiplatform.v1beta1.RagCorpus.rag_vector_db_config:type_name -> google.cloud.aiplatform.v1beta1.RagVectorDbConfig - 21, // 10: google.cloud.aiplatform.v1beta1.RagCorpus.create_time:type_name -> google.protobuf.Timestamp - 21, // 11: google.cloud.aiplatform.v1beta1.RagCorpus.update_time:type_name -> google.protobuf.Timestamp - 6, // 12: google.cloud.aiplatform.v1beta1.RagCorpus.corpus_status:type_name -> google.cloud.aiplatform.v1beta1.CorpusStatus - 22, // 13: google.cloud.aiplatform.v1beta1.RagFile.gcs_source:type_name -> google.cloud.aiplatform.v1beta1.GcsSource - 23, // 14: google.cloud.aiplatform.v1beta1.RagFile.google_drive_source:type_name -> google.cloud.aiplatform.v1beta1.GoogleDriveSource - 24, // 15: google.cloud.aiplatform.v1beta1.RagFile.direct_upload_source:type_name -> google.cloud.aiplatform.v1beta1.DirectUploadSource - 25, // 16: google.cloud.aiplatform.v1beta1.RagFile.slack_source:type_name -> google.cloud.aiplatform.v1beta1.SlackSource - 26, // 17: google.cloud.aiplatform.v1beta1.RagFile.jira_source:type_name -> google.cloud.aiplatform.v1beta1.JiraSource - 2, // 18: google.cloud.aiplatform.v1beta1.RagFile.rag_file_type:type_name -> google.cloud.aiplatform.v1beta1.RagFile.RagFileType - 21, // 19: google.cloud.aiplatform.v1beta1.RagFile.create_time:type_name -> google.protobuf.Timestamp - 21, // 20: google.cloud.aiplatform.v1beta1.RagFile.update_time:type_name -> google.protobuf.Timestamp - 5, // 21: google.cloud.aiplatform.v1beta1.RagFile.file_status:type_name -> google.cloud.aiplatform.v1beta1.FileStatus - 9, // 22: google.cloud.aiplatform.v1beta1.UploadRagFileConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig - 22, // 23: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.gcs_source:type_name -> google.cloud.aiplatform.v1beta1.GcsSource - 23, // 24: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.google_drive_source:type_name -> google.cloud.aiplatform.v1beta1.GoogleDriveSource - 25, // 25: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.slack_source:type_name -> google.cloud.aiplatform.v1beta1.SlackSource - 26, // 26: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.jira_source:type_name -> google.cloud.aiplatform.v1beta1.JiraSource - 27, // 27: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.share_point_sources:type_name -> google.cloud.aiplatform.v1beta1.SharePointSources - 28, // 28: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.partial_failure_gcs_sink:type_name -> google.cloud.aiplatform.v1beta1.GcsDestination - 29, // 29: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.partial_failure_bigquery_sink:type_name -> google.cloud.aiplatform.v1beta1.BigQueryDestination - 9, // 30: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig - 10, // 31: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_parsing_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileParsingConfig - 16, // 32: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig.bm25:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig.Bm25 - 14, // 33: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.HybridSearchConfig.sparse_embedding_config:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig - 13, // 34: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.HybridSearchConfig.dense_embedding_model_prediction_endpoint:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.VertexPredictionEndpoint - 35, // [35:35] is the sub-list for method output_type - 35, // [35:35] is the sub-list for method input_type - 35, // [35:35] is the sub-list for extension type_name - 35, // [35:35] is the sub-list for extension extendee - 0, // [0:35] is the sub-list for field type_name + 19, // 4: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.pinecone:type_name -> google.cloud.aiplatform.v1beta1.RagVectorDbConfig.Pinecone + 20, // 5: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.vertex_feature_store:type_name -> google.cloud.aiplatform.v1beta1.RagVectorDbConfig.VertexFeatureStore + 21, // 6: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.vertex_vector_search:type_name -> google.cloud.aiplatform.v1beta1.RagVectorDbConfig.VertexVectorSearch + 22, // 7: google.cloud.aiplatform.v1beta1.RagVectorDbConfig.api_auth:type_name -> google.cloud.aiplatform.v1beta1.ApiAuth + 0, // 8: google.cloud.aiplatform.v1beta1.FileStatus.state:type_name -> google.cloud.aiplatform.v1beta1.FileStatus.State + 1, // 9: google.cloud.aiplatform.v1beta1.CorpusStatus.state:type_name -> google.cloud.aiplatform.v1beta1.CorpusStatus.State + 3, // 10: google.cloud.aiplatform.v1beta1.RagCorpus.rag_embedding_model_config:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig + 4, // 11: google.cloud.aiplatform.v1beta1.RagCorpus.rag_vector_db_config:type_name -> google.cloud.aiplatform.v1beta1.RagVectorDbConfig + 23, // 12: google.cloud.aiplatform.v1beta1.RagCorpus.create_time:type_name -> google.protobuf.Timestamp + 23, // 13: google.cloud.aiplatform.v1beta1.RagCorpus.update_time:type_name -> google.protobuf.Timestamp + 6, // 14: google.cloud.aiplatform.v1beta1.RagCorpus.corpus_status:type_name -> google.cloud.aiplatform.v1beta1.CorpusStatus + 24, // 15: google.cloud.aiplatform.v1beta1.RagFile.gcs_source:type_name -> google.cloud.aiplatform.v1beta1.GcsSource + 25, // 16: google.cloud.aiplatform.v1beta1.RagFile.google_drive_source:type_name -> google.cloud.aiplatform.v1beta1.GoogleDriveSource + 26, // 17: google.cloud.aiplatform.v1beta1.RagFile.direct_upload_source:type_name -> google.cloud.aiplatform.v1beta1.DirectUploadSource + 27, // 18: google.cloud.aiplatform.v1beta1.RagFile.slack_source:type_name -> google.cloud.aiplatform.v1beta1.SlackSource + 28, // 19: google.cloud.aiplatform.v1beta1.RagFile.jira_source:type_name -> google.cloud.aiplatform.v1beta1.JiraSource + 2, // 20: google.cloud.aiplatform.v1beta1.RagFile.rag_file_type:type_name -> google.cloud.aiplatform.v1beta1.RagFile.RagFileType + 23, // 21: google.cloud.aiplatform.v1beta1.RagFile.create_time:type_name -> google.protobuf.Timestamp + 23, // 22: google.cloud.aiplatform.v1beta1.RagFile.update_time:type_name -> google.protobuf.Timestamp + 5, // 23: google.cloud.aiplatform.v1beta1.RagFile.file_status:type_name -> google.cloud.aiplatform.v1beta1.FileStatus + 9, // 24: google.cloud.aiplatform.v1beta1.UploadRagFileConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig + 24, // 25: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.gcs_source:type_name -> google.cloud.aiplatform.v1beta1.GcsSource + 25, // 26: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.google_drive_source:type_name -> google.cloud.aiplatform.v1beta1.GoogleDriveSource + 27, // 27: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.slack_source:type_name -> google.cloud.aiplatform.v1beta1.SlackSource + 28, // 28: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.jira_source:type_name -> google.cloud.aiplatform.v1beta1.JiraSource + 29, // 29: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.share_point_sources:type_name -> google.cloud.aiplatform.v1beta1.SharePointSources + 30, // 30: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.partial_failure_gcs_sink:type_name -> google.cloud.aiplatform.v1beta1.GcsDestination + 31, // 31: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.partial_failure_bigquery_sink:type_name -> google.cloud.aiplatform.v1beta1.BigQueryDestination + 9, // 32: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig + 10, // 33: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_parsing_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileParsingConfig + 16, // 34: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig.bm25:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig.Bm25 + 14, // 35: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.HybridSearchConfig.sparse_embedding_config:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig + 13, // 36: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.HybridSearchConfig.dense_embedding_model_prediction_endpoint:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.VertexPredictionEndpoint + 37, // [37:37] is the sub-list for method output_type + 37, // [37:37] is the sub-list for method input_type + 37, // [37:37] is the sub-list for extension type_name + 37, // [37:37] is the sub-list for extension extendee + 0, // [0:37] is the sub-list for field type_name } func init() { file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() } @@ -2308,6 +2475,18 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { } } file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[16].Exporter = func(v any, i int) any { + switch v := v.(*RagVectorDbConfig_Pinecone); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*RagVectorDbConfig_VertexFeatureStore); i { case 0: return &v.state @@ -2319,6 +2498,18 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { return nil } } + file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[18].Exporter = func(v any, i int) any { + switch v := v.(*RagVectorDbConfig_VertexVectorSearch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[0].OneofWrappers = []any{ (*RagEmbeddingModelConfig_VertexPredictionEndpoint_)(nil), @@ -2327,7 +2518,9 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[1].OneofWrappers = []any{ (*RagVectorDbConfig_RagManagedDb_)(nil), (*RagVectorDbConfig_Weaviate_)(nil), + (*RagVectorDbConfig_Pinecone_)(nil), (*RagVectorDbConfig_VertexFeatureStore_)(nil), + (*RagVectorDbConfig_VertexVectorSearch_)(nil), } file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[5].OneofWrappers = []any{ (*RagFile_GcsSource)(nil), @@ -2355,7 +2548,7 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc, NumEnums: 3, - NumMessages: 17, + NumMessages: 19, NumExtensions: 0, NumServices: 0, }, diff --git a/aiplatform/apiv1beta1/dataset_client.go b/aiplatform/apiv1beta1/dataset_client.go index d14e7a1c1f7d..3da547c0b299 100755 --- a/aiplatform/apiv1beta1/dataset_client.go +++ b/aiplatform/apiv1beta1/dataset_client.go @@ -88,6 +88,7 @@ func defaultDatasetGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -647,6 +648,7 @@ func defaultDatasetRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/deployment_resource_pool_client.go b/aiplatform/apiv1beta1/deployment_resource_pool_client.go index b2fc649f30cd..824152080fed 100755 --- a/aiplatform/apiv1beta1/deployment_resource_pool_client.go +++ b/aiplatform/apiv1beta1/deployment_resource_pool_client.go @@ -74,6 +74,7 @@ func defaultDeploymentResourcePoolGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -454,6 +455,7 @@ func defaultDeploymentResourcePoolRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/endpoint_client.go b/aiplatform/apiv1beta1/endpoint_client.go index ef9402ad397c..8852e5b10f8a 100755 --- a/aiplatform/apiv1beta1/endpoint_client.go +++ b/aiplatform/apiv1beta1/endpoint_client.go @@ -77,6 +77,7 @@ func defaultEndpointGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -519,6 +520,7 @@ func defaultEndpointRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/evaluation_client.go b/aiplatform/apiv1beta1/evaluation_client.go index 682faff67162..7ab408a79dbf 100755 --- a/aiplatform/apiv1beta1/evaluation_client.go +++ b/aiplatform/apiv1beta1/evaluation_client.go @@ -68,6 +68,7 @@ func defaultEvaluationGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -355,6 +356,7 @@ func defaultEvaluationRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/extension_execution_client.go b/aiplatform/apiv1beta1/extension_execution_client.go index 5e3b37b40b35..7495edc5e268 100755 --- a/aiplatform/apiv1beta1/extension_execution_client.go +++ b/aiplatform/apiv1beta1/extension_execution_client.go @@ -68,6 +68,7 @@ func defaultExtensionExecutionGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -359,6 +360,7 @@ func defaultExtensionExecutionRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/extension_registry_client.go b/aiplatform/apiv1beta1/extension_registry_client.go index 653f7f4c8e1f..258aa4d94781 100755 --- a/aiplatform/apiv1beta1/extension_registry_client.go +++ b/aiplatform/apiv1beta1/extension_registry_client.go @@ -73,6 +73,7 @@ func defaultExtensionRegistryGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -438,6 +439,7 @@ func defaultExtensionRegistryRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/feature_online_store_admin_client.go b/aiplatform/apiv1beta1/feature_online_store_admin_client.go index 258726d6949b..dd655250fe27 100755 --- a/aiplatform/apiv1beta1/feature_online_store_admin_client.go +++ b/aiplatform/apiv1beta1/feature_online_store_admin_client.go @@ -82,6 +82,7 @@ func defaultFeatureOnlineStoreAdminGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -583,6 +584,7 @@ func defaultFeatureOnlineStoreAdminRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/feature_online_store_client.go b/aiplatform/apiv1beta1/feature_online_store_client.go index 3b80c9ce37db..017757f40773 100755 --- a/aiplatform/apiv1beta1/feature_online_store_client.go +++ b/aiplatform/apiv1beta1/feature_online_store_client.go @@ -70,6 +70,7 @@ func defaultFeatureOnlineStoreGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -375,6 +376,7 @@ func defaultFeatureOnlineStoreRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/feature_registry_client.go b/aiplatform/apiv1beta1/feature_registry_client.go index a13f601651ee..f6eba087bc66 100755 --- a/aiplatform/apiv1beta1/feature_registry_client.go +++ b/aiplatform/apiv1beta1/feature_registry_client.go @@ -78,6 +78,7 @@ func defaultFeatureRegistryGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -514,6 +515,7 @@ func defaultFeatureRegistryRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/featurestore_client.go b/aiplatform/apiv1beta1/featurestore_client.go index daa091889ec5..699d308dedb1 100755 --- a/aiplatform/apiv1beta1/featurestore_client.go +++ b/aiplatform/apiv1beta1/featurestore_client.go @@ -90,6 +90,7 @@ func defaultFeaturestoreGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -766,6 +767,7 @@ func defaultFeaturestoreRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/featurestore_online_serving_client.go b/aiplatform/apiv1beta1/featurestore_online_serving_client.go index ad6f807d471c..3de69fd1ddc8 100755 --- a/aiplatform/apiv1beta1/featurestore_online_serving_client.go +++ b/aiplatform/apiv1beta1/featurestore_online_serving_client.go @@ -72,6 +72,7 @@ func defaultFeaturestoreOnlineServingGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -385,6 +386,7 @@ func defaultFeaturestoreOnlineServingRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/gen_ai_cache_client.go b/aiplatform/apiv1beta1/gen_ai_cache_client.go index 296ad7508b52..2dc4ad5317d4 100755 --- a/aiplatform/apiv1beta1/gen_ai_cache_client.go +++ b/aiplatform/apiv1beta1/gen_ai_cache_client.go @@ -71,6 +71,7 @@ func defaultGenAiCacheGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -387,6 +388,7 @@ func defaultGenAiCacheRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/gen_ai_tuning_client.go b/aiplatform/apiv1beta1/gen_ai_tuning_client.go index 8316022cc51a..b3280b2194a9 100755 --- a/aiplatform/apiv1beta1/gen_ai_tuning_client.go +++ b/aiplatform/apiv1beta1/gen_ai_tuning_client.go @@ -70,6 +70,7 @@ func defaultGenAiTuningGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -389,6 +390,7 @@ func defaultGenAiTuningRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/index_client.go b/aiplatform/apiv1beta1/index_client.go index 9b5218a2102e..9ad1685a1600 100755 --- a/aiplatform/apiv1beta1/index_client.go +++ b/aiplatform/apiv1beta1/index_client.go @@ -76,6 +76,7 @@ func defaultIndexGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -487,6 +488,7 @@ func defaultIndexRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/index_endpoint_client.go b/aiplatform/apiv1beta1/index_endpoint_client.go index a6d1f07c9df9..697cea2edffe 100755 --- a/aiplatform/apiv1beta1/index_endpoint_client.go +++ b/aiplatform/apiv1beta1/index_endpoint_client.go @@ -77,6 +77,7 @@ func defaultIndexEndpointGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -518,6 +519,7 @@ func defaultIndexEndpointRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/job_client.go b/aiplatform/apiv1beta1/job_client.go index 9f0ac7d9d68d..4f21ecb35020 100755 --- a/aiplatform/apiv1beta1/job_client.go +++ b/aiplatform/apiv1beta1/job_client.go @@ -104,6 +104,7 @@ func defaultJobGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -913,6 +914,7 @@ func defaultJobRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/llm_utility_client.go b/aiplatform/apiv1beta1/llm_utility_client.go index 4a8ed1e5a8b3..388210f75b3b 100755 --- a/aiplatform/apiv1beta1/llm_utility_client.go +++ b/aiplatform/apiv1beta1/llm_utility_client.go @@ -67,6 +67,7 @@ func defaultLlmUtilityGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -350,6 +351,7 @@ func defaultLlmUtilityRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/match_client.go b/aiplatform/apiv1beta1/match_client.go index 50f28019f471..a76d4085e7e2 100755 --- a/aiplatform/apiv1beta1/match_client.go +++ b/aiplatform/apiv1beta1/match_client.go @@ -68,6 +68,7 @@ func defaultMatchGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -363,6 +364,7 @@ func defaultMatchRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/metadata_client.go b/aiplatform/apiv1beta1/metadata_client.go index 84f046bbdcc8..c17c4fdc3d7f 100755 --- a/aiplatform/apiv1beta1/metadata_client.go +++ b/aiplatform/apiv1beta1/metadata_client.go @@ -101,6 +101,7 @@ func defaultMetadataGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -840,6 +841,7 @@ func defaultMetadataRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/migration_client.go b/aiplatform/apiv1beta1/migration_client.go index bb769f4c4544..4f0c007fa168 100755 --- a/aiplatform/apiv1beta1/migration_client.go +++ b/aiplatform/apiv1beta1/migration_client.go @@ -70,6 +70,7 @@ func defaultMigrationGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -410,6 +411,7 @@ func defaultMigrationRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/model_client.go b/aiplatform/apiv1beta1/model_client.go index 54a7ce38bceb..3d45d0b415fb 100755 --- a/aiplatform/apiv1beta1/model_client.go +++ b/aiplatform/apiv1beta1/model_client.go @@ -87,6 +87,7 @@ func defaultModelGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -649,6 +650,7 @@ func defaultModelRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/model_garden_client.go b/aiplatform/apiv1beta1/model_garden_client.go index fe84db10f5a9..2200858819f9 100755 --- a/aiplatform/apiv1beta1/model_garden_client.go +++ b/aiplatform/apiv1beta1/model_garden_client.go @@ -68,6 +68,7 @@ func defaultModelGardenGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -359,6 +360,7 @@ func defaultModelGardenRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/model_monitoring_client.go b/aiplatform/apiv1beta1/model_monitoring_client.go index fddfdc1eb62c..748e9b52be09 100755 --- a/aiplatform/apiv1beta1/model_monitoring_client.go +++ b/aiplatform/apiv1beta1/model_monitoring_client.go @@ -79,6 +79,7 @@ func defaultModelMonitoringGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -514,6 +515,7 @@ func defaultModelMonitoringRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/notebook_client.go b/aiplatform/apiv1beta1/notebook_client.go index fec64a8d983f..0513944fccbf 100755 --- a/aiplatform/apiv1beta1/notebook_client.go +++ b/aiplatform/apiv1beta1/notebook_client.go @@ -83,6 +83,7 @@ func defaultNotebookGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -571,6 +572,7 @@ func defaultNotebookRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/persistent_resource_client.go b/aiplatform/apiv1beta1/persistent_resource_client.go index 55a3696b1017..bcb99407df86 100755 --- a/aiplatform/apiv1beta1/persistent_resource_client.go +++ b/aiplatform/apiv1beta1/persistent_resource_client.go @@ -74,6 +74,7 @@ func defaultPersistentResourceGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -461,6 +462,7 @@ func defaultPersistentResourceRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/pipeline_client.go b/aiplatform/apiv1beta1/pipeline_client.go index 374dd647f655..ccbc9d3d8ef3 100755 --- a/aiplatform/apiv1beta1/pipeline_client.go +++ b/aiplatform/apiv1beta1/pipeline_client.go @@ -81,6 +81,7 @@ func defaultPipelineGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -576,6 +577,7 @@ func defaultPipelineRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/prediction_client.go b/aiplatform/apiv1beta1/prediction_client.go index 31a1134c898a..a5a67d210876 100755 --- a/aiplatform/apiv1beta1/prediction_client.go +++ b/aiplatform/apiv1beta1/prediction_client.go @@ -85,6 +85,7 @@ func defaultPredictionGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -522,6 +523,7 @@ func defaultPredictionRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/reasoning_engine_client.go b/aiplatform/apiv1beta1/reasoning_engine_client.go index 317f4085a9f4..f941bbba60fc 100755 --- a/aiplatform/apiv1beta1/reasoning_engine_client.go +++ b/aiplatform/apiv1beta1/reasoning_engine_client.go @@ -73,6 +73,7 @@ func defaultReasoningEngineGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -445,6 +446,7 @@ func defaultReasoningEngineRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/reasoning_engine_execution_client.go b/aiplatform/apiv1beta1/reasoning_engine_execution_client.go index 10145015b1a2..6aca4de94d00 100755 --- a/aiplatform/apiv1beta1/reasoning_engine_execution_client.go +++ b/aiplatform/apiv1beta1/reasoning_engine_execution_client.go @@ -67,6 +67,7 @@ func defaultReasoningEngineExecutionGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -350,6 +351,7 @@ func defaultReasoningEngineExecutionRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/schedule_client.go b/aiplatform/apiv1beta1/schedule_client.go index 4d82f307a767..a92ab04e35d2 100755 --- a/aiplatform/apiv1beta1/schedule_client.go +++ b/aiplatform/apiv1beta1/schedule_client.go @@ -75,6 +75,7 @@ func defaultScheduleGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -468,6 +469,7 @@ func defaultScheduleRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/specialist_pool_client.go b/aiplatform/apiv1beta1/specialist_pool_client.go index 6a78da9aa838..e95c5b88d454 100755 --- a/aiplatform/apiv1beta1/specialist_pool_client.go +++ b/aiplatform/apiv1beta1/specialist_pool_client.go @@ -74,6 +74,7 @@ func defaultSpecialistPoolGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -481,6 +482,7 @@ func defaultSpecialistPoolRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/tensorboard_client.go b/aiplatform/apiv1beta1/tensorboard_client.go index 9d6b6ac43b50..0f56502dfef6 100755 --- a/aiplatform/apiv1beta1/tensorboard_client.go +++ b/aiplatform/apiv1beta1/tensorboard_client.go @@ -100,6 +100,7 @@ func defaultTensorboardGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -707,6 +708,7 @@ func defaultTensorboardRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/vertex_rag_client.go b/aiplatform/apiv1beta1/vertex_rag_client.go index 9afb20fa6048..72a63c9f6c59 100755 --- a/aiplatform/apiv1beta1/vertex_rag_client.go +++ b/aiplatform/apiv1beta1/vertex_rag_client.go @@ -67,6 +67,7 @@ func defaultVertexRagGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -350,6 +351,7 @@ func defaultVertexRagRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/vertex_rag_data_client.go b/aiplatform/apiv1beta1/vertex_rag_data_client.go index 4d6ba31a6be5..b3a2d1471ff4 100755 --- a/aiplatform/apiv1beta1/vertex_rag_data_client.go +++ b/aiplatform/apiv1beta1/vertex_rag_data_client.go @@ -78,6 +78,7 @@ func defaultVertexRagDataGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -504,6 +505,7 @@ func defaultVertexRagDataRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/aiplatform/apiv1beta1/vizier_client.go b/aiplatform/apiv1beta1/vizier_client.go index 3c5ba3d079c7..58aa6f036f03 100755 --- a/aiplatform/apiv1beta1/vizier_client.go +++ b/aiplatform/apiv1beta1/vizier_client.go @@ -84,6 +84,7 @@ func defaultVizierGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -615,6 +616,7 @@ func defaultVizierRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://aiplatform.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/bigquery/analyticshub/apiv1/analytics_hub_client.go b/bigquery/analyticshub/apiv1/analytics_hub_client.go index 8ef7ace2a68b..33139b04f708 100755 --- a/bigquery/analyticshub/apiv1/analytics_hub_client.go +++ b/bigquery/analyticshub/apiv1/analytics_hub_client.go @@ -81,6 +81,7 @@ func defaultGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://analyticshub.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -1019,6 +1020,7 @@ func defaultRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://analyticshub.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/bigquery/biglake/apiv1/metastore_client.go b/bigquery/biglake/apiv1/metastore_client.go index fceae756d54f..1d2a2fa71ae2 100755 --- a/bigquery/biglake/apiv1/metastore_client.go +++ b/bigquery/biglake/apiv1/metastore_client.go @@ -70,6 +70,7 @@ func defaultMetastoreGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://biglake.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -749,6 +750,7 @@ func defaultMetastoreRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://biglake.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/bigquery/biglake/apiv1alpha1/metastore_client.go b/bigquery/biglake/apiv1alpha1/metastore_client.go index 9ed9c7ca8315..0a51c2cb8323 100755 --- a/bigquery/biglake/apiv1alpha1/metastore_client.go +++ b/bigquery/biglake/apiv1alpha1/metastore_client.go @@ -74,6 +74,7 @@ func defaultMetastoreGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://biglake.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -877,6 +878,7 @@ func defaultMetastoreRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://biglake.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/bigquery/dataexchange/apiv1beta1/analytics_hub_client.go b/bigquery/dataexchange/apiv1beta1/analytics_hub_client.go index fc9b0d6b9153..a4347aa57064 100755 --- a/bigquery/dataexchange/apiv1beta1/analytics_hub_client.go +++ b/bigquery/dataexchange/apiv1beta1/analytics_hub_client.go @@ -74,6 +74,7 @@ func defaultAnalyticsHubGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://analyticshub.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -754,6 +755,7 @@ func defaultAnalyticsHubRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://analyticshub.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/bigtable/admin/apiv2/adminpb/instance.pb.go b/bigtable/admin/apiv2/adminpb/instance.pb.go index 5fec7f86af29..0fc21d396ded 100755 --- a/bigtable/admin/apiv2/adminpb/instance.pb.go +++ b/bigtable/admin/apiv2/adminpb/instance.pb.go @@ -1186,6 +1186,19 @@ type AppProfile_MultiClusterRoutingUseAny struct { // The set of clusters to route to. The order is ignored; clusters will be // tried in order of distance. If left empty, all clusters are eligible. ClusterIds []string `protobuf:"bytes,1,rep,name=cluster_ids,json=clusterIds,proto3" json:"cluster_ids,omitempty"` + // Possible algorithms for routing affinity. If enabled, Bigtable will + // route between equidistant clusters in a deterministic order rather than + // choosing randomly. + // + // This mechanism gives read-your-writes consistency for *most* requests + // under *most* circumstances, without sacrificing availability. Consistency + // is *not* guaranteed, as requests might still fail over between clusters + // in the event of errors or latency. + // + // Types that are assignable to Affinity: + // + // *AppProfile_MultiClusterRoutingUseAny_RowAffinity_ + Affinity isAppProfile_MultiClusterRoutingUseAny_Affinity `protobuf_oneof:"affinity"` } func (x *AppProfile_MultiClusterRoutingUseAny) Reset() { @@ -1227,6 +1240,33 @@ func (x *AppProfile_MultiClusterRoutingUseAny) GetClusterIds() []string { return nil } +func (m *AppProfile_MultiClusterRoutingUseAny) GetAffinity() isAppProfile_MultiClusterRoutingUseAny_Affinity { + if m != nil { + return m.Affinity + } + return nil +} + +func (x *AppProfile_MultiClusterRoutingUseAny) GetRowAffinity() *AppProfile_MultiClusterRoutingUseAny_RowAffinity { + if x, ok := x.GetAffinity().(*AppProfile_MultiClusterRoutingUseAny_RowAffinity_); ok { + return x.RowAffinity + } + return nil +} + +type isAppProfile_MultiClusterRoutingUseAny_Affinity interface { + isAppProfile_MultiClusterRoutingUseAny_Affinity() +} + +type AppProfile_MultiClusterRoutingUseAny_RowAffinity_ struct { + // Row affinity sticky routing based on the row key of the request. + // Requests that span multiple rows are routed non-deterministically. + RowAffinity *AppProfile_MultiClusterRoutingUseAny_RowAffinity `protobuf:"bytes,3,opt,name=row_affinity,json=rowAffinity,proto3,oneof"` +} + +func (*AppProfile_MultiClusterRoutingUseAny_RowAffinity_) isAppProfile_MultiClusterRoutingUseAny_Affinity() { +} + // Unconditionally routes all read/write requests to a specific cluster. // This option preserves read-your-writes consistency but does not improve // availability. @@ -1399,6 +1439,53 @@ func (x *AppProfile_DataBoostIsolationReadOnly) GetComputeBillingOwner() AppProf return AppProfile_DataBoostIsolationReadOnly_COMPUTE_BILLING_OWNER_UNSPECIFIED } +// If enabled, Bigtable will route the request based on the row key of the +// request, rather than randomly. Instead, each row key will be assigned +// to a cluster, and will stick to that cluster. If clusters are added or +// removed, then this may affect which row keys stick to which clusters. +// To avoid this, users can use a cluster group to specify which clusters +// are to be used. In this case, new clusters that are not a part of the +// cluster group will not be routed to, and routing will be unaffected by +// the new cluster. Moreover, clusters specified in the cluster group cannot +// be deleted unless removed from the cluster group. +type AppProfile_MultiClusterRoutingUseAny_RowAffinity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *AppProfile_MultiClusterRoutingUseAny_RowAffinity) Reset() { + *x = AppProfile_MultiClusterRoutingUseAny_RowAffinity{} + if protoimpl.UnsafeEnabled { + mi := &file_google_bigtable_admin_v2_instance_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AppProfile_MultiClusterRoutingUseAny_RowAffinity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AppProfile_MultiClusterRoutingUseAny_RowAffinity) ProtoMessage() {} + +func (x *AppProfile_MultiClusterRoutingUseAny_RowAffinity) ProtoReflect() protoreflect.Message { + mi := &file_google_bigtable_admin_v2_instance_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AppProfile_MultiClusterRoutingUseAny_RowAffinity.ProtoReflect.Descriptor instead. +func (*AppProfile_MultiClusterRoutingUseAny_RowAffinity) Descriptor() ([]byte, []int) { + return file_google_bigtable_admin_v2_instance_proto_rawDescGZIP(), []int{4, 0, 0} +} + var File_google_bigtable_admin_v2_instance_proto protoreflect.FileDescriptor var file_google_bigtable_admin_v2_instance_proto_rawDesc = []byte{ @@ -1543,8 +1630,8 @@ var file_google_bigtable_admin_v2_instance_proto_rawDesc = []byte{ 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x7d, 0x42, 0x08, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xa8, - 0x0b, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, + 0x74, 0x65, 0x72, 0x7d, 0x42, 0x08, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xb5, + 0x0c, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, @@ -1585,107 +1672,116 @@ var file_google_bigtable_admin_v2_instance_proto_rawDesc = []byte{ 0x73, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x48, 0x01, 0x52, 0x1a, 0x64, 0x61, 0x74, 0x61, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, - 0x79, 0x1a, 0x3c, 0x0a, 0x19, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x55, 0x73, 0x65, 0x41, 0x6e, 0x79, 0x12, 0x1f, - 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, 0x1a, - 0x73, 0x0a, 0x14, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x1a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x73, 0x1a, 0x5e, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, - 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x08, 0x70, 0x72, 0x69, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x62, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x1a, 0x92, 0x02, 0x0a, 0x1a, 0x44, 0x61, 0x74, 0x61, 0x42, 0x6f, 0x6f, - 0x73, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x4f, - 0x6e, 0x6c, 0x79, 0x12, 0x8c, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, - 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x53, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x62, 0x69, 0x67, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, - 0x70, 0x70, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x42, 0x6f, - 0x6f, 0x73, 0x74, 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x64, - 0x4f, 0x6e, 0x6c, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x42, 0x69, 0x6c, 0x6c, - 0x69, 0x6e, 0x67, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x70, - 0x75, 0x74, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x88, - 0x01, 0x01, 0x22, 0x4b, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x42, 0x69, 0x6c, - 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x21, 0x43, 0x4f, 0x4d, - 0x50, 0x55, 0x54, 0x45, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x57, 0x4e, - 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x4f, 0x53, 0x54, 0x5f, 0x50, 0x41, 0x59, 0x53, 0x10, 0x01, 0x42, - 0x18, 0x0a, 0x16, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6c, 0x6c, - 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0x5e, 0x0a, 0x08, 0x50, 0x72, 0x69, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, - 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4c, 0x4f, 0x57, 0x10, - 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, - 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, - 0x54, 0x59, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x10, 0x03, 0x3a, 0x6f, 0xea, 0x41, 0x6c, 0x0a, 0x27, - 0x62, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x41, 0x70, 0x70, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x41, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x7d, - 0x2f, 0x61, 0x70, 0x70, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x61, 0x70, - 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x7d, 0x42, 0x10, 0x0a, 0x0e, 0x72, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0b, 0x0a, 0x09, - 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd4, 0x03, 0x0a, 0x09, 0x48, 0x6f, - 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x27, 0xfa, 0x41, 0x24, 0x0a, 0x22, 0x62, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, - 0x65, 0x6e, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, - 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x16, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x70, - 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x02, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x13, 0x6e, 0x6f, 0x64, 0x65, - 0x43, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x3a, - 0x7f, 0xea, 0x41, 0x7c, 0x0a, 0x26, 0x62, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x48, 0x6f, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x52, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, - 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x68, 0x6f, 0x74, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x7d, - 0x42, 0xcb, 0x02, 0xea, 0x41, 0x78, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, + 0x79, 0x1a, 0xc8, 0x01, 0x0a, 0x19, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x55, 0x73, 0x65, 0x41, 0x6e, 0x79, 0x12, + 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x73, + 0x12, 0x6f, 0x0a, 0x0c, 0x72, 0x6f, 0x77, 0x5f, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x62, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, + 0x55, 0x73, 0x65, 0x41, 0x6e, 0x79, 0x2e, 0x52, 0x6f, 0x77, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x6f, 0x77, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x1a, 0x0d, 0x0a, 0x0b, 0x52, 0x6f, 0x77, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x42, 0x0a, 0x0a, 0x08, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x1a, 0x73, 0x0a, 0x14, + 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x75, + 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x1a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x73, 0x1a, 0x5e, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x49, 0x73, 0x6f, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x62, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x50, + 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, + 0x79, 0x1a, 0x92, 0x02, 0x0a, 0x1a, 0x44, 0x61, 0x74, 0x61, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x49, + 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, + 0x12, 0x8c, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6c, + 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x53, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x62, 0x69, 0x67, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x70, 0x70, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x42, 0x6f, 0x6f, 0x73, 0x74, + 0x49, 0x73, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, + 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, + 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, + 0x42, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x88, 0x01, 0x01, 0x22, + 0x4b, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x69, 0x6e, + 0x67, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x21, 0x43, 0x4f, 0x4d, 0x50, 0x55, 0x54, + 0x45, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, + 0x09, 0x48, 0x4f, 0x53, 0x54, 0x5f, 0x50, 0x41, 0x59, 0x53, 0x10, 0x01, 0x42, 0x18, 0x0a, 0x16, + 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, + 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0x5e, 0x0a, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, + 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x01, 0x12, 0x13, + 0x0a, 0x0f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, + 0x4d, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, + 0x48, 0x49, 0x47, 0x48, 0x10, 0x03, 0x3a, 0x6f, 0xea, 0x41, 0x6c, 0x0a, 0x27, 0x62, 0x69, 0x67, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x41, 0x70, 0x70, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x12, 0x41, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x7d, 0x2f, 0x61, 0x70, + 0x70, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x7d, 0x42, 0x10, 0x0a, 0x0e, 0x72, 0x6f, 0x75, 0x74, 0x69, + 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0b, 0x0a, 0x09, 0x69, 0x73, 0x6f, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd4, 0x03, 0x0a, 0x09, 0x48, 0x6f, 0x74, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, 0xfa, 0x41, + 0x24, 0x0a, 0x22, 0x62, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x52, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, - 0x5f, 0x72, 0x69, 0x6e, 0x67, 0x7d, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, - 0x73, 0x2f, 0x7b, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x5f, 0x6b, 0x65, 0x79, 0x7d, 0x0a, 0x1c, - 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x62, 0x69, 0x67, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x0d, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x6f, 0x2f, 0x62, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x70, 0x62, 0x3b, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x70, 0x62, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x42, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x42, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x5c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x5c, 0x56, 0x32, 0xea, 0x02, 0x22, 0x47, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x42, 0x69, 0x67, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x3a, 0x3a, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x3e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x6e, 0x64, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x64, 0x4b, + 0x65, 0x79, 0x12, 0x38, 0x0a, 0x16, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, + 0x73, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x02, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x13, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x70, 0x75, + 0x55, 0x73, 0x61, 0x67, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x3a, 0x7f, 0xea, 0x41, + 0x7c, 0x0a, 0x26, 0x62, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x48, 0x6f, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x52, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x68, 0x6f, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, + 0x2f, 0x7b, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x7d, 0x42, 0xcb, 0x02, + 0xea, 0x41, 0x78, 0x0a, 0x21, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x6b, 0x6d, 0x73, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, + 0x6b, 0x65, 0x79, 0x52, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x69, + 0x6e, 0x67, 0x7d, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x4b, 0x65, 0x79, 0x73, 0x2f, 0x7b, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x5f, 0x6b, 0x65, 0x79, 0x7d, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x62, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, + 0x62, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x61, + 0x70, 0x69, 0x76, 0x32, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x70, 0x62, 0x3b, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x70, 0x62, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x2e, 0x42, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x41, 0x64, 0x6d, + 0x69, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x42, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5c, 0x41, 0x64, + 0x6d, 0x69, 0x6e, 0x5c, 0x56, 0x32, 0xea, 0x02, 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, + 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x42, 0x69, 0x67, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x3a, 0x3a, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -1701,56 +1797,58 @@ func file_google_bigtable_admin_v2_instance_proto_rawDescGZIP() []byte { } var file_google_bigtable_admin_v2_instance_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_google_bigtable_admin_v2_instance_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_google_bigtable_admin_v2_instance_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_google_bigtable_admin_v2_instance_proto_goTypes = []any{ (Instance_State)(0), // 0: google.bigtable.admin.v2.Instance.State (Instance_Type)(0), // 1: google.bigtable.admin.v2.Instance.Type (Cluster_State)(0), // 2: google.bigtable.admin.v2.Cluster.State (AppProfile_Priority)(0), // 3: google.bigtable.admin.v2.AppProfile.Priority (AppProfile_DataBoostIsolationReadOnly_ComputeBillingOwner)(0), // 4: google.bigtable.admin.v2.AppProfile.DataBoostIsolationReadOnly.ComputeBillingOwner - (*Instance)(nil), // 5: google.bigtable.admin.v2.Instance - (*AutoscalingTargets)(nil), // 6: google.bigtable.admin.v2.AutoscalingTargets - (*AutoscalingLimits)(nil), // 7: google.bigtable.admin.v2.AutoscalingLimits - (*Cluster)(nil), // 8: google.bigtable.admin.v2.Cluster - (*AppProfile)(nil), // 9: google.bigtable.admin.v2.AppProfile - (*HotTablet)(nil), // 10: google.bigtable.admin.v2.HotTablet - nil, // 11: google.bigtable.admin.v2.Instance.LabelsEntry - (*Cluster_ClusterAutoscalingConfig)(nil), // 12: google.bigtable.admin.v2.Cluster.ClusterAutoscalingConfig - (*Cluster_ClusterConfig)(nil), // 13: google.bigtable.admin.v2.Cluster.ClusterConfig - (*Cluster_EncryptionConfig)(nil), // 14: google.bigtable.admin.v2.Cluster.EncryptionConfig - (*AppProfile_MultiClusterRoutingUseAny)(nil), // 15: google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - (*AppProfile_SingleClusterRouting)(nil), // 16: google.bigtable.admin.v2.AppProfile.SingleClusterRouting - (*AppProfile_StandardIsolation)(nil), // 17: google.bigtable.admin.v2.AppProfile.StandardIsolation - (*AppProfile_DataBoostIsolationReadOnly)(nil), // 18: google.bigtable.admin.v2.AppProfile.DataBoostIsolationReadOnly - (*timestamppb.Timestamp)(nil), // 19: google.protobuf.Timestamp - (StorageType)(0), // 20: google.bigtable.admin.v2.StorageType + (*Instance)(nil), // 5: google.bigtable.admin.v2.Instance + (*AutoscalingTargets)(nil), // 6: google.bigtable.admin.v2.AutoscalingTargets + (*AutoscalingLimits)(nil), // 7: google.bigtable.admin.v2.AutoscalingLimits + (*Cluster)(nil), // 8: google.bigtable.admin.v2.Cluster + (*AppProfile)(nil), // 9: google.bigtable.admin.v2.AppProfile + (*HotTablet)(nil), // 10: google.bigtable.admin.v2.HotTablet + nil, // 11: google.bigtable.admin.v2.Instance.LabelsEntry + (*Cluster_ClusterAutoscalingConfig)(nil), // 12: google.bigtable.admin.v2.Cluster.ClusterAutoscalingConfig + (*Cluster_ClusterConfig)(nil), // 13: google.bigtable.admin.v2.Cluster.ClusterConfig + (*Cluster_EncryptionConfig)(nil), // 14: google.bigtable.admin.v2.Cluster.EncryptionConfig + (*AppProfile_MultiClusterRoutingUseAny)(nil), // 15: google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny + (*AppProfile_SingleClusterRouting)(nil), // 16: google.bigtable.admin.v2.AppProfile.SingleClusterRouting + (*AppProfile_StandardIsolation)(nil), // 17: google.bigtable.admin.v2.AppProfile.StandardIsolation + (*AppProfile_DataBoostIsolationReadOnly)(nil), // 18: google.bigtable.admin.v2.AppProfile.DataBoostIsolationReadOnly + (*AppProfile_MultiClusterRoutingUseAny_RowAffinity)(nil), // 19: google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny.RowAffinity + (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp + (StorageType)(0), // 21: google.bigtable.admin.v2.StorageType } var file_google_bigtable_admin_v2_instance_proto_depIdxs = []int32{ 0, // 0: google.bigtable.admin.v2.Instance.state:type_name -> google.bigtable.admin.v2.Instance.State 1, // 1: google.bigtable.admin.v2.Instance.type:type_name -> google.bigtable.admin.v2.Instance.Type 11, // 2: google.bigtable.admin.v2.Instance.labels:type_name -> google.bigtable.admin.v2.Instance.LabelsEntry - 19, // 3: google.bigtable.admin.v2.Instance.create_time:type_name -> google.protobuf.Timestamp + 20, // 3: google.bigtable.admin.v2.Instance.create_time:type_name -> google.protobuf.Timestamp 2, // 4: google.bigtable.admin.v2.Cluster.state:type_name -> google.bigtable.admin.v2.Cluster.State 13, // 5: google.bigtable.admin.v2.Cluster.cluster_config:type_name -> google.bigtable.admin.v2.Cluster.ClusterConfig - 20, // 6: google.bigtable.admin.v2.Cluster.default_storage_type:type_name -> google.bigtable.admin.v2.StorageType + 21, // 6: google.bigtable.admin.v2.Cluster.default_storage_type:type_name -> google.bigtable.admin.v2.StorageType 14, // 7: google.bigtable.admin.v2.Cluster.encryption_config:type_name -> google.bigtable.admin.v2.Cluster.EncryptionConfig 15, // 8: google.bigtable.admin.v2.AppProfile.multi_cluster_routing_use_any:type_name -> google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny 16, // 9: google.bigtable.admin.v2.AppProfile.single_cluster_routing:type_name -> google.bigtable.admin.v2.AppProfile.SingleClusterRouting 3, // 10: google.bigtable.admin.v2.AppProfile.priority:type_name -> google.bigtable.admin.v2.AppProfile.Priority 17, // 11: google.bigtable.admin.v2.AppProfile.standard_isolation:type_name -> google.bigtable.admin.v2.AppProfile.StandardIsolation 18, // 12: google.bigtable.admin.v2.AppProfile.data_boost_isolation_read_only:type_name -> google.bigtable.admin.v2.AppProfile.DataBoostIsolationReadOnly - 19, // 13: google.bigtable.admin.v2.HotTablet.start_time:type_name -> google.protobuf.Timestamp - 19, // 14: google.bigtable.admin.v2.HotTablet.end_time:type_name -> google.protobuf.Timestamp + 20, // 13: google.bigtable.admin.v2.HotTablet.start_time:type_name -> google.protobuf.Timestamp + 20, // 14: google.bigtable.admin.v2.HotTablet.end_time:type_name -> google.protobuf.Timestamp 7, // 15: google.bigtable.admin.v2.Cluster.ClusterAutoscalingConfig.autoscaling_limits:type_name -> google.bigtable.admin.v2.AutoscalingLimits 6, // 16: google.bigtable.admin.v2.Cluster.ClusterAutoscalingConfig.autoscaling_targets:type_name -> google.bigtable.admin.v2.AutoscalingTargets 12, // 17: google.bigtable.admin.v2.Cluster.ClusterConfig.cluster_autoscaling_config:type_name -> google.bigtable.admin.v2.Cluster.ClusterAutoscalingConfig - 3, // 18: google.bigtable.admin.v2.AppProfile.StandardIsolation.priority:type_name -> google.bigtable.admin.v2.AppProfile.Priority - 4, // 19: google.bigtable.admin.v2.AppProfile.DataBoostIsolationReadOnly.compute_billing_owner:type_name -> google.bigtable.admin.v2.AppProfile.DataBoostIsolationReadOnly.ComputeBillingOwner - 20, // [20:20] is the sub-list for method output_type - 20, // [20:20] is the sub-list for method input_type - 20, // [20:20] is the sub-list for extension type_name - 20, // [20:20] is the sub-list for extension extendee - 0, // [0:20] is the sub-list for field type_name + 19, // 18: google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny.row_affinity:type_name -> google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny.RowAffinity + 3, // 19: google.bigtable.admin.v2.AppProfile.StandardIsolation.priority:type_name -> google.bigtable.admin.v2.AppProfile.Priority + 4, // 20: google.bigtable.admin.v2.AppProfile.DataBoostIsolationReadOnly.compute_billing_owner:type_name -> google.bigtable.admin.v2.AppProfile.DataBoostIsolationReadOnly.ComputeBillingOwner + 21, // [21:21] is the sub-list for method output_type + 21, // [21:21] is the sub-list for method input_type + 21, // [21:21] is the sub-list for extension type_name + 21, // [21:21] is the sub-list for extension extendee + 0, // [0:21] is the sub-list for field type_name } func init() { file_google_bigtable_admin_v2_instance_proto_init() } @@ -1916,6 +2014,18 @@ func file_google_bigtable_admin_v2_instance_proto_init() { return nil } } + file_google_bigtable_admin_v2_instance_proto_msgTypes[14].Exporter = func(v any, i int) any { + switch v := v.(*AppProfile_MultiClusterRoutingUseAny_RowAffinity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_google_bigtable_admin_v2_instance_proto_msgTypes[0].OneofWrappers = []any{} file_google_bigtable_admin_v2_instance_proto_msgTypes[3].OneofWrappers = []any{ @@ -1928,6 +2038,9 @@ func file_google_bigtable_admin_v2_instance_proto_init() { (*AppProfile_StandardIsolation_)(nil), (*AppProfile_DataBoostIsolationReadOnly_)(nil), } + file_google_bigtable_admin_v2_instance_proto_msgTypes[10].OneofWrappers = []any{ + (*AppProfile_MultiClusterRoutingUseAny_RowAffinity_)(nil), + } file_google_bigtable_admin_v2_instance_proto_msgTypes[13].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ @@ -1935,7 +2048,7 @@ func file_google_bigtable_admin_v2_instance_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_bigtable_admin_v2_instance_proto_rawDesc, NumEnums: 5, - NumMessages: 14, + NumMessages: 15, NumExtensions: 0, NumServices: 0, }, diff --git a/cloudprofiler/apiv2/export_client.go b/cloudprofiler/apiv2/export_client.go index 58f16cb25653..aee3fabb6e9d 100755 --- a/cloudprofiler/apiv2/export_client.go +++ b/cloudprofiler/apiv2/export_client.go @@ -55,6 +55,7 @@ func defaultExportGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://cloudprofiler.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -263,6 +264,7 @@ func defaultExportRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://cloudprofiler.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/cloudprofiler/apiv2/profiler_client.go b/cloudprofiler/apiv2/profiler_client.go index ee2e9e6e1834..5e13d98daf56 100755 --- a/cloudprofiler/apiv2/profiler_client.go +++ b/cloudprofiler/apiv2/profiler_client.go @@ -55,6 +55,7 @@ func defaultProfilerGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://cloudprofiler.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -310,6 +311,7 @@ func defaultProfilerRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://cloudprofiler.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/compute/apiv1/operations.go b/compute/apiv1/operations.go index 406f792b97cf..bfee8ff96524 100755 --- a/compute/apiv1/operations.go +++ b/compute/apiv1/operations.go @@ -44,7 +44,7 @@ func (o *Operation) Name() string { } // Wait blocks until the operation is complete, polling regularly -// after an intial period of backing off between attempts. +// after an initial period of backing off between attempts. func (o *Operation) Wait(ctx context.Context, opts ...gax.CallOption) error { bo := gax.Backoff{ Initial: time.Second, diff --git a/datastore/admin/apiv1/datastore_admin_client.go b/datastore/admin/apiv1/datastore_admin_client.go index 15213d8af2d1..f79403abe608 100755 --- a/datastore/admin/apiv1/datastore_admin_client.go +++ b/datastore/admin/apiv1/datastore_admin_client.go @@ -68,6 +68,7 @@ func defaultDatastoreAdminGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://datastore.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -650,6 +651,7 @@ func defaultDatastoreAdminRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://datastore.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/firestore/apiv1/admin/firestore_admin_client.go b/firestore/apiv1/admin/firestore_admin_client.go index ed4d92524566..d7bf4e991233 100755 --- a/firestore/apiv1/admin/firestore_admin_client.go +++ b/firestore/apiv1/admin/firestore_admin_client.go @@ -86,6 +86,7 @@ func defaultFirestoreAdminGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://firestore.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -878,6 +879,7 @@ func defaultFirestoreAdminRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://firestore.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/firestore/apiv1/firestore_client.go b/firestore/apiv1/firestore_client.go index 22b16720069d..97a15e007989 100755 --- a/firestore/apiv1/firestore_client.go +++ b/firestore/apiv1/firestore_client.go @@ -78,6 +78,7 @@ func defaultGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://firestore.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -853,6 +854,7 @@ func defaultRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://firestore.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/logging/apiv2/config_client.go b/logging/apiv2/config_client.go index e5c64baab711..7c347f7aaf89 100755 --- a/logging/apiv2/config_client.go +++ b/logging/apiv2/config_client.go @@ -87,6 +87,7 @@ func defaultConfigGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://logging.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/logging/apiv2/logging_client.go b/logging/apiv2/logging_client.go index a640cebc24d6..a06056b15300 100755 --- a/logging/apiv2/logging_client.go +++ b/logging/apiv2/logging_client.go @@ -60,6 +60,7 @@ func defaultGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://logging.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/logging/apiv2/metrics_client.go b/logging/apiv2/metrics_client.go index c2a35aabcb15..50108fc13ba5 100755 --- a/logging/apiv2/metrics_client.go +++ b/logging/apiv2/metrics_client.go @@ -58,6 +58,7 @@ func defaultMetricsGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://logging.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/pubsub/apiv1/publisher_client.go b/pubsub/apiv1/publisher_client.go index 03ac865cf48f..cae0b96f505c 100755 --- a/pubsub/apiv1/publisher_client.go +++ b/pubsub/apiv1/publisher_client.go @@ -68,6 +68,7 @@ func defaultPublisherGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://pubsub.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -587,6 +588,7 @@ func defaultPublisherRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://pubsub.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/pubsub/apiv1/schema_client.go b/pubsub/apiv1/schema_client.go index 4013a77e9e4b..18ea325b8528 100755 --- a/pubsub/apiv1/schema_client.go +++ b/pubsub/apiv1/schema_client.go @@ -69,6 +69,7 @@ func defaultSchemaGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://pubsub.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -572,6 +573,7 @@ func defaultSchemaRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://pubsub.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/pubsub/apiv1/subscriber_client.go b/pubsub/apiv1/subscriber_client.go index 65d3ce16c3b2..6b673129277a 100755 --- a/pubsub/apiv1/subscriber_client.go +++ b/pubsub/apiv1/subscriber_client.go @@ -76,6 +76,7 @@ func defaultSubscriberGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://pubsub.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -876,6 +877,7 @@ func defaultSubscriberRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://pubsub.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/pubsublite/apiv1/admin_client.go b/pubsublite/apiv1/admin_client.go index 40ac35ac5fc5..4f11fc7a78eb 100755 --- a/pubsublite/apiv1/admin_client.go +++ b/pubsublite/apiv1/admin_client.go @@ -75,6 +75,7 @@ func defaultAdminGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://pubsublite.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/pubsublite/apiv1/cursor_client.go b/pubsublite/apiv1/cursor_client.go index e7f2e00c7cca..d8ae12aa6f39 100755 --- a/pubsublite/apiv1/cursor_client.go +++ b/pubsublite/apiv1/cursor_client.go @@ -57,6 +57,7 @@ func defaultCursorGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://pubsublite.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/pubsublite/apiv1/partition_assignment_client.go b/pubsublite/apiv1/partition_assignment_client.go index 9bead0c19a5d..6b8fd9333f59 100755 --- a/pubsublite/apiv1/partition_assignment_client.go +++ b/pubsublite/apiv1/partition_assignment_client.go @@ -55,6 +55,7 @@ func defaultPartitionAssignmentGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://pubsublite.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/pubsublite/apiv1/publisher_client.go b/pubsublite/apiv1/publisher_client.go index b8372a71a203..9368d4f9f54f 100755 --- a/pubsublite/apiv1/publisher_client.go +++ b/pubsublite/apiv1/publisher_client.go @@ -55,6 +55,7 @@ func defaultPublisherGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://pubsublite.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/pubsublite/apiv1/subscriber_client.go b/pubsublite/apiv1/subscriber_client.go index c6eb6cb5907b..2ce3567d9d30 100755 --- a/pubsublite/apiv1/subscriber_client.go +++ b/pubsublite/apiv1/subscriber_client.go @@ -55,6 +55,7 @@ func defaultSubscriberGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://pubsublite.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/pubsublite/apiv1/topic_stats_client.go b/pubsublite/apiv1/topic_stats_client.go index ee55bc1f718c..faaa5d2599df 100755 --- a/pubsublite/apiv1/topic_stats_client.go +++ b/pubsublite/apiv1/topic_stats_client.go @@ -57,6 +57,7 @@ func defaultTopicStatsGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://pubsublite.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } diff --git a/spanner/admin/database/apiv1/database_admin_client.go b/spanner/admin/database/apiv1/database_admin_client.go index b8ad16739576..c067a3755185 100755 --- a/spanner/admin/database/apiv1/database_admin_client.go +++ b/spanner/admin/database/apiv1/database_admin_client.go @@ -88,6 +88,7 @@ func defaultDatabaseAdminGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://spanner.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -1208,6 +1209,7 @@ func defaultDatabaseAdminRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://spanner.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/spanner/admin/instance/apiv1/instance_admin_client.go b/spanner/admin/instance/apiv1/instance_admin_client.go index a3d7c9314c33..9d109e4acde1 100755 --- a/spanner/admin/instance/apiv1/instance_admin_client.go +++ b/spanner/admin/instance/apiv1/instance_admin_client.go @@ -80,6 +80,7 @@ func defaultInstanceAdminGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://spanner.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -1111,6 +1112,7 @@ func defaultInstanceAdminRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://spanner.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } diff --git a/spanner/apiv1/spanner_client.go b/spanner/apiv1/spanner_client.go index ccc6aa769daa..e59d2c92c9e9 100755 --- a/spanner/apiv1/spanner_client.go +++ b/spanner/apiv1/spanner_client.go @@ -73,6 +73,7 @@ func defaultGRPCClientOptions() []option.ClientOption { internaloption.WithDefaultAudience("https://spanner.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), internaloption.EnableJwtWithScope(), + internaloption.EnableNewAuthLibrary(), option.WithGRPCDialOption(grpc.WithDefaultCallOptions( grpc.MaxCallRecvMsgSize(math.MaxInt32))), } @@ -822,6 +823,7 @@ func defaultRESTClientOptions() []option.ClientOption { internaloption.WithDefaultUniverseDomain("googleapis.com"), internaloption.WithDefaultAudience("https://spanner.googleapis.com/"), internaloption.WithDefaultScopes(DefaultAuthScopes()...), + internaloption.EnableNewAuthLibrary(), } } From 39ee892bca270c1ee26a0e1d20a01183fbea9743 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 11:14:38 -0600 Subject: [PATCH 10/27] chore(main): release auth 0.9.4 (#10846) --- .release-please-manifest-individual.json | 2 +- auth/CHANGES.md | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.release-please-manifest-individual.json b/.release-please-manifest-individual.json index 23187e45522b..f358748c4053 100644 --- a/.release-please-manifest-individual.json +++ b/.release-please-manifest-individual.json @@ -1,7 +1,7 @@ { "ai": "0.8.2", "aiplatform": "1.68.0", - "auth": "0.9.3", + "auth": "0.9.4", "auth/oauth2adapt": "0.2.4", "bigquery": "1.62.0", "bigtable": "1.32.0", diff --git a/auth/CHANGES.md b/auth/CHANGES.md index 5584c350b0a7..e82cf5a901a9 100644 --- a/auth/CHANGES.md +++ b/auth/CHANGES.md @@ -1,5 +1,12 @@ # Changelog +## [0.9.4](https://github.com/googleapis/google-cloud-go/compare/auth/v0.9.3...auth/v0.9.4) (2024-09-11) + + +### Bug Fixes + +* **auth:** Enable self-signed JWT for non-GDU universe domain ([#10831](https://github.com/googleapis/google-cloud-go/issues/10831)) ([f9869f7](https://github.com/googleapis/google-cloud-go/commit/f9869f7903cfd34d1b97c25d0dc5669d2c5138e6)) + ## [0.9.3](https://github.com/googleapis/google-cloud-go/compare/auth/v0.9.2...auth/v0.9.3) (2024-09-03) From bb69df72eaeaef5f89bc56cf2268db983666f4f8 Mon Sep 17 00:00:00 2001 From: Baha Aiman Date: Wed, 11 Sep 2024 13:02:11 -0700 Subject: [PATCH 11/27] feat(firestore): Adding distance threshold and result field (#10802) * feat(firestore): Adding distance threshold and result field * refactor(firestore): Renaming method names * refactor(firestore): Move threshold and result field to options. Rename FindNearestOptions * refactor(firestore): Rename to FindNearestOptions * refactor(firestore): Refactoring code --- firestore/examples_test.go | 5 +- firestore/fieldpath.go | 5 +- firestore/integration_test.go | 97 ++++++++++++++++------- firestore/query.go | 37 ++++++++- firestore/query_test.go | 145 ++++++++++++++++++++++++++-------- 5 files changed, 223 insertions(+), 66 deletions(-) diff --git a/firestore/examples_test.go b/firestore/examples_test.go index 4ab7eb9f1c59..70bec366016d 100644 --- a/firestore/examples_test.go +++ b/firestore/examples_test.go @@ -502,7 +502,10 @@ func ExampleQuery_FindNearest() { // q := client.Collection("descriptions"). - FindNearest("Embedding", []float32{1, 2, 3}, 5, firestore.DistanceMeasureDotProduct, nil) + FindNearest("Embedding", []float32{1, 2, 3}, 5, firestore.DistanceMeasureDotProduct, &firestore.FindNearestOptions{ + DistanceThreshold: firestore.Ptr(20.0), + DistanceResultField: "vector_distance", + }) iter1 := q.Documents(ctx) _ = iter1 // TODO: Use iter1. } diff --git a/firestore/fieldpath.go b/firestore/fieldpath.go index a50ead70d6dc..3bb8ac666a6a 100644 --- a/firestore/fieldpath.go +++ b/firestore/fieldpath.go @@ -28,6 +28,8 @@ import ( "cloud.google.com/go/internal/fields" ) +const invalidRunes = "~*/[]" + // A FieldPath is a non-empty sequence of non-empty fields that reference a value. // // A FieldPath value should only be necessary if one of the field names contains @@ -54,9 +56,8 @@ type FieldPath []string // including attempts to quote field path compontents. So "a.`b.c`.d" is parsed into // four parts, "a", "`b", "c`" and "d". func parseDotSeparatedString(s string) (FieldPath, error) { - const invalidRunes = "~*/[]" if strings.ContainsAny(s, invalidRunes) { - return nil, fmt.Errorf("firestore: %q contains an invalid rune (one of %s)", s, invalidRunes) + return nil, errInvalidRunesField(s) } fp := FieldPath(strings.Split(s, ".")) if err := fp.validate(); err != nil { diff --git a/firestore/integration_test.go b/firestore/integration_test.go index b7fe0ab6e4c4..2ada3830a8fd 100644 --- a/firestore/integration_test.go +++ b/firestore/integration_test.go @@ -3218,6 +3218,7 @@ func TestIntegration_FindNearest(t *testing.T) { cancel() }) queryField := "EmbeddedField64" + resultField := "vector_distance" indexNames := createVectorIndexes(adminCtx, t, wantDBPath, []vectorIndex{ { fieldPath: queryField, @@ -3229,34 +3230,46 @@ func TestIntegration_FindNearest(t *testing.T) { }) type coffeeBean struct { - ID string + ID int EmbeddedField64 Vector64 EmbeddedField32 Vector32 Float32s []float32 // When querying, saving and retrieving, this should be retrieved as []float32 and not Vector32 } beans := []coffeeBean{ - { - ID: "Robusta", + { // Euclidean Distance from {1, 2, 3} = 0 + ID: 0, EmbeddedField64: []float64{1, 2, 3}, EmbeddedField32: []float32{1, 2, 3}, Float32s: []float32{1, 2, 3}, }, - { - ID: "Excelsa", + { // Euclidean Distance from {1, 2, 3} = 5.19 + ID: 1, EmbeddedField64: []float64{4, 5, 6}, EmbeddedField32: []float32{4, 5, 6}, Float32s: []float32{4, 5, 6}, }, + { // Euclidean Distance from {1, 2, 3} = 10.39 + ID: 2, + EmbeddedField64: []float64{7, 8, 9}, + EmbeddedField32: []float32{7, 8, 9}, + Float32s: []float32{7, 8, 9}, + }, + { // Euclidean Distance from {1, 2, 3} = 15.58 + ID: 3, + EmbeddedField64: []float64{10, 11, 12}, + EmbeddedField32: []float32{10, 11, 12}, + Float32s: []float32{10, 11, 12}, + }, { - ID: "Arabica", + // Euclidean Distance from {1, 2, 3} = 370.42 + ID: 4, EmbeddedField64: []float64{100, 200, 300}, // too far from query vector. not within findNearest limit EmbeddedField32: []float32{100, 200, 300}, Float32s: []float32{100, 200, 300}, }, - { - ID: "Liberica", + ID: 5, EmbeddedField64: []float64{1, 2}, // Not enough dimensions as compared to query vector. EmbeddedField32: []float32{1, 2}, Float32s: []float32{1, 2}, @@ -3277,27 +3290,55 @@ func TestIntegration_FindNearest(t *testing.T) { h.mustCreate(doc, beans[i]) } - // Query documents with a vector field - vectorQuery := collRef.FindNearest(queryField, []float64{1, 2, 3}, 2, DistanceMeasureEuclidean, nil) - - iter := vectorQuery.Documents(ctx) - gotDocs, err := iter.GetAll() - if err != nil { - t.Fatalf("GetAll: %+v", err) - } + for _, tc := range []struct { + desc string + vq VectorQuery + wantBeans []coffeeBean + wantResField string + }{ + { + desc: "FindNearest without threshold without resultField", + vq: collRef.FindNearest(queryField, []float64{1, 2, 3}, 2, DistanceMeasureEuclidean, nil), + wantBeans: beans[:2], + }, + { + desc: "FindNearest threshold and resultField", + vq: collRef.FindNearest(queryField, []float64{1, 2, 3}, 3, DistanceMeasureEuclidean, &FindNearestOptions{ + DistanceThreshold: Ptr(20.0), + DistanceResultField: resultField, + }), + wantBeans: beans[:3], + wantResField: resultField, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + iter := tc.vq.Documents(ctx) + gotDocs, err := iter.GetAll() + if err != nil { + t.Fatalf("GetAll: %+v", err) + } - if len(gotDocs) != 2 { - t.Fatalf("Expected 2 results, got %d", len(gotDocs)) - } + if len(gotDocs) != len(tc.wantBeans) { + t.Fatalf("Expected %v results, got %d", len(tc.wantBeans), len(gotDocs)) + } - for i, doc := range gotDocs { - gotBean := coffeeBean{} - err := doc.DataTo(&gotBean) - if err != nil { - t.Errorf("#%v: DataTo: %+v", doc.Ref.ID, err) - } - if beans[i].ID != gotBean.ID { - t.Errorf("#%v: want: %v, got: %v", i, beans[i].ID, gotBean.ID) - } + for i, doc := range gotDocs { + var gotBean coffeeBean + if len(tc.wantResField) != 0 { + _, ok := doc.Data()[tc.wantResField] + if !ok { + t.Errorf("Expected %v field to exist in %v", tc.wantResField, doc.Data()) + } + } + err := doc.DataTo(&gotBean) + if err != nil { + t.Errorf("#%v: DataTo: %+v", doc.Ref.ID, err) + continue + } + if tc.wantBeans[i].ID != gotBean.ID { + t.Errorf("#%v: want: %v, got: %v", i, beans[i].ID, gotBean.ID) + } + } + }) } } diff --git a/firestore/query.go b/firestore/query.go index 9e77e2a4f6ae..021747e46723 100644 --- a/firestore/query.go +++ b/firestore/query.go @@ -33,9 +33,15 @@ import ( ) var ( - errMetricsBeforeEnd = errors.New("firestore: ExplainMetrics are available only after the iterator reaches the end") + errMetricsBeforeEnd = errors.New("firestore: ExplainMetrics are available only after the iterator reaches the end") + errInvalidVector = errors.New("firestore: queryVector must be Vector32 or Vector64") + errMalformedVectorQuery = errors.New("firestore: Malformed VectorQuery. Use FindNearest or FindNearestPath to create VectorQuery") ) +func errInvalidRunesField(field string) error { + return fmt.Errorf("firestore: %q contains an invalid rune (one of %s)", field, invalidRunes) +} + // Query represents a Firestore query. // // Query values are immutable. Each Query method creates @@ -517,9 +523,27 @@ const ( DistanceMeasureDotProduct DistanceMeasure = DistanceMeasure(pb.StructuredQuery_FindNearest_DOT_PRODUCT) ) +// Ptr returns a pointer to its argument. +// It can be used to initialize pointer fields: +// +// findNearestOptions.DistanceThreshold = firestore.Ptr[float64](0.1) +func Ptr[T any](t T) *T { return &t } + // FindNearestOptions are options for a FindNearest vector query. -// At present, there are no options. type FindNearestOptions struct { + // DistanceThreshold specifies a threshold for which no less similar documents + // will be returned. The behavior of the specified [DistanceMeasure] will + // affect the meaning of the distance threshold. Since [DistanceMeasureDotProduct] + // distances increase when the vectors are more similar, the comparison is inverted. + // For [DistanceMeasureEuclidean], [DistanceMeasureCosine]: WHERE distance <= distanceThreshold + // For [DistanceMeasureDotProduct]: WHERE distance >= distance_threshold + DistanceThreshold *float64 + + // DistanceResultField specifies name of the document field to output the result of + // the vector distance calculation. + // If the field already exists in the document, its value get overwritten with the distance calculation. + // Otherwise, a new field gets added to the document. + DistanceResultField string } // VectorQuery represents a query that uses [Query.FindNearest] or [Query.FindNearestPath]. @@ -582,7 +606,7 @@ func (q Query) FindNearestPath(vectorFieldPath FieldPath, queryVector any, limit case []float64: fnvq = vectorToProtoValue(v) default: - vq.q.err = errors.New("firestore: queryVector must be Vector32 or Vector64") + vq.q.err = errInvalidVector return vq } @@ -592,6 +616,13 @@ func (q Query) FindNearestPath(vectorFieldPath FieldPath, queryVector any, limit Limit: &wrapperspb.Int32Value{Value: trunc32(limit)}, DistanceMeasure: pb.StructuredQuery_FindNearest_DistanceMeasure(measure), } + + if options != nil { + if options.DistanceThreshold != nil { + vq.q.findNearest.DistanceThreshold = &wrapperspb.DoubleValue{Value: *options.DistanceThreshold} + } + vq.q.findNearest.DistanceResultField = *&options.DistanceResultField + } return vq } diff --git a/firestore/query_test.go b/firestore/query_test.go index 5d369198546c..2eb2119c790c 100644 --- a/firestore/query_test.go +++ b/firestore/query_test.go @@ -25,6 +25,7 @@ import ( pb "cloud.google.com/go/firestore/apiv1/firestorepb" "cloud.google.com/go/internal/pretty" "github.com/google/go-cmp/cmp" + "google.golang.org/protobuf/reflect/protoreflect" "google.golang.org/protobuf/testing/protocmp" tspb "google.golang.org/protobuf/types/known/timestamppb" "google.golang.org/protobuf/types/known/wrapperspb" @@ -1747,12 +1748,16 @@ func TestQueryRunOptionsAndGetAllWithOptions(t *testing.T) { t.Fatal(err) } } - func TestFindNearest(t *testing.T) { ctx := context.Background() c, srv, cleanup := newMock(t) - defer cleanup() + t.Cleanup(func() { cleanup() }) + collName := "C" + limit := 2 + threshold := float64(24) + resultField := "res" + vectorField := "path" const dbPath = "projects/projectID/databases/(default)" mapFields := map[string]*pb.Value{ typeKey: {ValueType: &pb.Value_StringValue{StringValue: typeValVector}}, @@ -1770,55 +1775,131 @@ func TestFindNearest(t *testing.T) { } wantPBDocs := []*pb.Document{ { - Name: dbPath + "/documents/C/a", + Name: dbPath + "/documents/" + collName + "/a", CreateTime: aTimestamp, UpdateTime: aTimestamp, Fields: map[string]*pb.Value{"EmbeddedField": mapval(mapFields)}, }, } + wantQueryVector := &pb.Value{ + ValueType: &pb.Value_MapValue{ + MapValue: &pb.MapValue{ + Fields: map[string]*pb.Value{ + "__type__": { + ValueType: &pb.Value_StringValue{StringValue: "__vector__"}, + }, + "value": { + ValueType: &pb.Value_ArrayValue{ + ArrayValue: &pb.ArrayValue{ + Values: []*pb.Value{ + { + ValueType: &pb.Value_DoubleValue{DoubleValue: 5}, + }, + { + ValueType: &pb.Value_DoubleValue{DoubleValue: 6}, + }, + { + ValueType: &pb.Value_DoubleValue{DoubleValue: 7}, + }, + }, + }, + }, + }, + }, + }, + }, + } + wantReq := pb.RunQueryRequest{ + Parent: fmt.Sprintf("%v/documents", dbPath), + QueryType: &pb.RunQueryRequest_StructuredQuery{ + StructuredQuery: &pb.StructuredQuery{ + From: []*pb.StructuredQuery_CollectionSelector{{CollectionId: collName}}, + FindNearest: &pb.StructuredQuery_FindNearest{ + VectorField: &pb.StructuredQuery_FieldReference{FieldPath: vectorField}, + QueryVector: wantQueryVector, + Limit: &wrapperspb.Int32Value{Value: int32(limit)}, + DistanceMeasure: pb.StructuredQuery_FindNearest_EUCLIDEAN, + }, + }, + }, + } + + wantReqThresholdField := pb.RunQueryRequest{ + Parent: fmt.Sprintf("%v/documents", dbPath), + QueryType: &pb.RunQueryRequest_StructuredQuery{ + StructuredQuery: &pb.StructuredQuery{ + From: []*pb.StructuredQuery_CollectionSelector{{CollectionId: collName}}, + FindNearest: &pb.StructuredQuery_FindNearest{ + VectorField: &pb.StructuredQuery_FieldReference{FieldPath: vectorField}, + QueryVector: wantQueryVector, + Limit: &wrapperspb.Int32Value{Value: int32(limit)}, + DistanceMeasure: pb.StructuredQuery_FindNearest_EUCLIDEAN, + DistanceThreshold: &wrapperspb.DoubleValue{Value: float64(threshold)}, + DistanceResultField: resultField, + }, + }, + }, + } testcases := []struct { - desc string - path string - queryVector interface{} - wantErr bool + desc string + vQuery VectorQuery + wantReq protoreflect.ProtoMessage + wantErr error }{ { - desc: "Invalid path", - path: "path*", - wantErr: true, + desc: "Invalid path", + vQuery: c.Collection(collName). + FindNearest("path*", nil, limit, DistanceMeasureEuclidean, nil), + wantErr: errInvalidRunesField("path*"), }, { - desc: "Valid path", - path: "path", - queryVector: []float64{5, 6, 7}, - wantErr: false, + desc: "Invalid vector type", + vQuery: c.Collection(collName). + FindNearest("path", "abcd", limit, DistanceMeasureEuclidean, nil), + wantErr: errInvalidVector, }, { - desc: "Invalid vector type", - path: "path", - queryVector: "abcd", - wantErr: true, + desc: "Valid path with valid vector type []float64", + vQuery: c.Collection(collName). + FindNearest("path", []float64{5, 6, 7}, limit, DistanceMeasureEuclidean, nil), + wantReq: &wantReq, }, { - desc: "Valid vector type", - path: "path", - queryVector: []float32{5, 6, 7}, - wantErr: false, + desc: "Valid path with valid vector type []float32", + vQuery: c.Collection(collName). + FindNearest("path", []float32{5, 6, 7}, limit, DistanceMeasureEuclidean, nil), + wantReq: &wantReq, + }, + { + desc: "Valid path with valid vector type WithDistanceResultField and WithDistanceThreshold ", + vQuery: c.Collection(collName). + FindNearest("path", []float32{5, 6, 7}, limit, DistanceMeasureEuclidean, &FindNearestOptions{ + DistanceThreshold: Ptr[float64](threshold), + DistanceResultField: resultField, + }), + wantReq: &wantReqThresholdField, }, } for _, tc := range testcases { - srv.reset() - srv.addRPC(nil, []interface{}{ - &pb.RunQueryResponse{Document: wantPBDocs[0]}, + t.Run(tc.desc, func(t *testing.T) { + srv.reset() + if tc.wantErr == nil { + srv.addRPC(tc.wantReq, []interface{}{ + &pb.RunQueryResponse{Document: wantPBDocs[0]}, + }) + } + _, gotErr := tc.vQuery.Documents(ctx).GetAll() + if !errorsMatch(gotErr, tc.wantErr) { + t.Fatalf("got %v, want %v", gotErr, tc.wantErr) + } }) - vQuery := c.Collection("C").FindNearest(tc.path, tc.queryVector, 2, DistanceMeasureEuclidean, nil) + } +} - _, err := vQuery.Documents(ctx).GetAll() - if err == nil && tc.wantErr { - t.Fatalf("%s: got nil wanted error", tc.desc) - } else if err != nil && !tc.wantErr { - t.Fatalf("%s: got %v, want nil", tc.desc, err) - } +func errorsMatch(got, want error) bool { + if got == nil || want == nil { + return got == want } + return strings.Contains(got.Error(), want.Error()) } From 0feb25805d3ecf79cd36dc6735de250da5c93cf4 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Wed, 11 Sep 2024 21:21:11 +0000 Subject: [PATCH 12/27] remove pagination within sequential listing --- storage/dataflux/README.md | 17 +++++++----- storage/dataflux/fast_list.go | 18 +++++-------- storage/dataflux/sequential.go | 48 ++++++++++++---------------------- storage/dataflux/worksteal.go | 5 ---- 4 files changed, 34 insertions(+), 54 deletions(-) diff --git a/storage/dataflux/README.md b/storage/dataflux/README.md index edb8ce2de7a8..012d68cfdf5b 100644 --- a/storage/dataflux/README.md +++ b/storage/dataflux/README.md @@ -1,10 +1,12 @@ # Dataflux for Google Cloud Storage Go client library ## Overview -The purpose of this client is to quickly list data stored in GCS. The core functionalities of this client can be broken down into two key parts. +The purpose of this client is to quickly list data stored in GCS. ## Fast List -The fast list component of this client leverages GCS API to parallelize the listing of files within a GCS bucket. It does this by implementing a workstealing algorithm, where each worker in the list operation is able to steal work from its siblings once it has finished all currently stated listing work. This parallelization leads to a significant real world speed increase than sequential listing. Note that paralellization is limited by the machine on which the client runs. Benchmarking has demonstrated that the larger the object count, the better Dataflux performs when compared to a linear listing. +The fast list component of this client leverages GCS API to parallelize the listing of files within a GCS bucket. It does this by implementing a workstealing algorithm, where each worker in the list operation is able to steal work from its siblings once it has finished all currently stated listing work. This parallelization leads to a significant real world speed increase than sequential listing. Note that paralellization is limited by the machine on which the client runs. + +Benchmarking has demonstrated that the larger the object count, the better Dataflux performs when compared to a linear listing. Around 100k objects, users will see improvemement in listing speed. ### Example Usage @@ -26,9 +28,9 @@ if err != nil { query := storage.Query{} // Input for fast-listing. dfopts := dataflux.ListerInput{ - BucketName: bucketName, - Parallelism: parallelism, - BatchSize: batchSize, + BucketName: "bucket", + Parallelism: 500, + BatchSize: 500000, Query: query, } @@ -47,11 +49,14 @@ for { if err != nil { log.Fatal(err) } + // TODO: process objects } ``` ### Fast List Benchmark Results - +VM used : n2d-standard-48 +Region: us-central1-a +NIC type: gVNIC |File Count|VM Core Count|List Time Without Dataflux |List Time With Dataflux| |------------|-------------|--------------------------|-----------------------| |5000000 Obj |48 Core |319.72s |17.35s | diff --git a/storage/dataflux/fast_list.go b/storage/dataflux/fast_list.go index 2bcafdd7caf5..368c30d6a6a6 100644 --- a/storage/dataflux/fast_list.go +++ b/storage/dataflux/fast_list.go @@ -63,15 +63,9 @@ type Lister struct { // pageToken is the token to use for sequential listing. pageToken string - // ranges is the channel to store the start and end ranges to be listed by the workers in worksteal listing. - ranges chan *listRange - // bucket is the bucket handle to list objects from. bucket *storage.BucketHandle - // parallelism is number of parallel workers to use for listing. - parallelism int - // batchSize is the number of objects to list. batchSize int @@ -111,7 +105,9 @@ func (c *Lister) NextBatch(ctx context.Context) ([]*storage.ObjectAttrs, error) defer cancel() g, childCtx := errgroup.WithContext(ctx) - // Run worksteal listing when method is Open or WorkSteal. + // To start listing method is Open and runs both worksteal and sequential listing in parallel. + // The method which completes first is used for all subsequent runs. + // TODO: Run worksteal listing when method is Open or WorkSteal. // Run sequential listing when method is Open or Sequential. if c.method != worksteal { @@ -126,7 +122,6 @@ func (c *Lister) NextBatch(ctx context.Context) ([]*storage.ObjectAttrs, error) results = objects c.pageToken = nextToken c.method = sequential - c.ranges = nil // Close context when sequential listing is complete. cancel() return nil @@ -144,7 +139,7 @@ func (c *Lister) NextBatch(ctx context.Context) ([]*storage.ObjectAttrs, error) } // If ranges for worksteal and pageToken for sequential listing is empty, then listing is complete. - if len(c.ranges) == 0 && c.pageToken == "" { + if c.pageToken == "" { return results, iterator.Done } return results, nil @@ -152,7 +147,6 @@ func (c *Lister) NextBatch(ctx context.Context) ([]*storage.ObjectAttrs, error) // Close closes the range channel of the Lister. func (c *Lister) Close() { - if c.ranges != nil { - close(c.ranges) - } + + // TODO: Close range channel for worksteal lister. } diff --git a/storage/dataflux/sequential.go b/storage/dataflux/sequential.go index b90fd4327156..717308d5d31f 100644 --- a/storage/dataflux/sequential.go +++ b/storage/dataflux/sequential.go @@ -17,6 +17,7 @@ package dataflux import ( "context" "fmt" + "math" "strings" "cloud.google.com/go/storage" @@ -33,39 +34,28 @@ const ( // If the next token is empty, then listing is complete. func sequentialListing(ctx context.Context, opts Lister) ([]*storage.ObjectAttrs, string, error) { var result []*storage.ObjectAttrs + objectIterator := opts.bucket.Objects(ctx, &opts.query) - // Number of pages to request from GCS pagination. - numPageRequest := opts.batchSize / defaultPageSize - var lastToken string + + var numObject int + if opts.batchSize < defaultPageSize { + numObject = defaultPageSize + } else { + numObject = int(math.Floor(float64(opts.batchSize)/float64(defaultPageSize))) * defaultPageSize + } + + pageInfo := objectIterator.PageInfo() + pageInfo.MaxSize = defaultPageSize + pageInfo.Token = opts.pageToken + i := 0 for { // If page size is set, then stop listing after numPageRequest. - if opts.batchSize > 0 && i >= numPageRequest { + if opts.batchSize > 0 && i >= numObject { break } i++ - objects, nextToken, err := doListing(opts, objectIterator) - if err != nil { - return nil, "", fmt.Errorf("failed while listing objects: %w", err) - } - result = append(result, objects...) - lastToken = nextToken - if nextToken == "" { - break - } - opts.pageToken = nextToken - } - return result, lastToken, nil -} -func doListing(opts Lister, objectIterator *storage.ObjectIterator) ([]*storage.ObjectAttrs, string, error) { - - var objects []*storage.ObjectAttrs - - pageInfo := objectIterator.PageInfo() - pageInfo.MaxSize = defaultPageSize - pageInfo.Token = opts.pageToken - for { attrs, err := objectIterator.Next() // When last item for the assigned range is listed, then stop listing. if err == iterator.Done { @@ -75,12 +65,8 @@ func doListing(opts Lister, objectIterator *storage.ObjectIterator) ([]*storage. return nil, "", fmt.Errorf("iterating through objects %w", err) } if !(opts.skipDirectoryObjects && strings.HasSuffix(attrs.Name, "/")) { - objects = append(objects, attrs) - } - if defaultPageSize != 0 && (pageInfo.Remaining() == 0) { - break + result = append(result, attrs) } } - nextToken := objectIterator.PageInfo().Token - return objects, nextToken, nil + return result, objectIterator.PageInfo().Token, nil } diff --git a/storage/dataflux/worksteal.go b/storage/dataflux/worksteal.go index 1d304e032063..df56f01a0c95 100644 --- a/storage/dataflux/worksteal.go +++ b/storage/dataflux/worksteal.go @@ -82,11 +82,6 @@ type nextPageResult struct { generation int64 } -// newObjectLister creates a new ObjectLister using the given lister options. -func newObjectLister(ctx context.Context, opts newObjectListerOpts) *nextPageResult { - return &nextPageResult{} -} - func addPrefix(name, prefix string) string { if name != "" { return prefix + name From 8b147b237145cd7dcc81716d845b4e210b11a184 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Wed, 11 Sep 2024 21:42:41 +0000 Subject: [PATCH 13/27] remove nextBatch_all example --- storage/dataflux/example_test.go | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/storage/dataflux/example_test.go b/storage/dataflux/example_test.go index 3e87411f57ef..a63046cd043b 100644 --- a/storage/dataflux/example_test.go +++ b/storage/dataflux/example_test.go @@ -67,35 +67,3 @@ func ExampleNextBatch_batch() { } log.Printf("listing %d objects in bucket %q is complete.", numOfObjects, in.BucketName) } - -func ExampleNextBatch_all() { - ctx := context.Background() - // Pass in any client opts or set retry policy here. - client, err := storage.NewClient(ctx) - if err != nil { - // handle error - } - - // Create dataflux fast-list input and provide desired options, - // including number of workers, batch size, query to filer objects, etc. - in := &dataflux.ListerInput{ - BucketName: "mybucket", - // Optionally specify params to apply to lister. - Parallelism: 100, - Query: storage.Query{}, - SkipDirectoryObjects: false, - } - - // Create Lister with desired options, including number of workers, - // part size, per operation timeout, etc. - df, close := dataflux.NewLister(client, in) - defer close() - - objects, err := df.NextBatch(ctx) - if err != nil { - // handle error - } - numOfObjects := len(objects) - - log.Printf("listing %d objects in bucket %q is complete.", numOfObjects, in.BucketName) -} From 8f8b7ac2db7ee00219b3aed52eabadf10fd69ca9 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Wed, 11 Sep 2024 21:53:00 +0000 Subject: [PATCH 14/27] remove close function from NewLister return value --- storage/dataflux/fast_list.go | 7 ++----- storage/dataflux/integration_test.go | 4 ++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/storage/dataflux/fast_list.go b/storage/dataflux/fast_list.go index 368c30d6a6a6..19a6ea72a1a6 100644 --- a/storage/dataflux/fast_list.go +++ b/storage/dataflux/fast_list.go @@ -76,11 +76,8 @@ type Lister struct { skipDirectoryObjects bool } -// CloseFunc is the function to close the range channel of a Lister. -type CloseFunc func() - // NewLister creates a new dataflux Lister to list objects in the give bucket. -func NewLister(c *storage.Client, in *ListerInput) (*Lister, CloseFunc) { +func NewLister(c *storage.Client, in *ListerInput) *Lister { bucket := c.Bucket(in.BucketName) lister := &Lister{ method: open, @@ -90,7 +87,7 @@ func NewLister(c *storage.Client, in *ListerInput) (*Lister, CloseFunc) { query: in.Query, skipDirectoryObjects: in.SkipDirectoryObjects, } - return lister, func() { lister.Close() } + return lister } // NextBatch runs worksteal algorithm and sequential listing in parallel to quickly diff --git a/storage/dataflux/integration_test.go b/storage/dataflux/integration_test.go index 48d19057fa9b..7a0b5630d106 100644 --- a/storage/dataflux/integration_test.go +++ b/storage/dataflux/integration_test.go @@ -80,8 +80,8 @@ func TestIntegration_NextBatch(t *testing.T) { BucketName: httpTestBucket.bucket, } - df, close := NewLister(c, in) - defer close() + df := NewLister(c, in) + defer df.Close() objects, err := df.NextBatch(ctx) if err != nil && err != iterator.Done { From 18cffa648766a2ed130516591f6a6e35cc66adf0 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Wed, 11 Sep 2024 21:53:42 +0000 Subject: [PATCH 15/27] remove close function from NewLister return value --- storage/dataflux/example_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/storage/dataflux/example_test.go b/storage/dataflux/example_test.go index a63046cd043b..922461b09716 100644 --- a/storage/dataflux/example_test.go +++ b/storage/dataflux/example_test.go @@ -44,8 +44,8 @@ func ExampleNextBatch_batch() { // Create Lister with desired options, including number of workers, // part size, per operation timeout, etc. - df, close := dataflux.NewLister(client, in) - defer close() + df := dataflux.NewLister(client, in) + defer df.Close() var numOfObjects int From 67bb404da056f79ecdb92192a54d0048ba610275 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Fri, 13 Sep 2024 19:50:23 +0000 Subject: [PATCH 16/27] change listing as method of Lister --- storage/dataflux/fast_list.go | 18 +++++++++++------- storage/dataflux/integration_test.go | 7 +------ storage/dataflux/range_splitter.go | 1 - storage/dataflux/sequential.go | 14 +++++++------- storage/dataflux/worksteal.go | 2 +- 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/storage/dataflux/fast_list.go b/storage/dataflux/fast_list.go index 19a6ea72a1a6..8103aa55f0a9 100644 --- a/storage/dataflux/fast_list.go +++ b/storage/dataflux/fast_list.go @@ -41,16 +41,16 @@ type ListerInput struct { // BucketName is the name of the bucket to list objects from. Required. BucketName string - // Parallelism is number of parallel workers to use for listing. Optional. + // Parallelism is number of parallel workers to use for listing. Default value is 10x number of available CPU. Optional. Parallelism int - // BatchSize is the number of objects to list. Optional. + // BatchSize is the number of objects to list. Default value returns all objects at once. Optional. BatchSize int - // Query is the query to filter objects for listing. Optional. + // Query is the query to filter objects for listing. Default value is nil. Optional. Query storage.Query - // SkipDirectoryObjects is to indicate whether to list directory objects. Optional. + // SkipDirectoryObjects is to indicate whether to list directory objects. Default value is false. Optional. SkipDirectoryObjects bool } @@ -100,6 +100,8 @@ func (c *Lister) NextBatch(ctx context.Context) ([]*storage.ObjectAttrs, error) var results []*storage.ObjectAttrs ctx, cancel := context.WithCancel(ctx) defer cancel() + // Errgroup takes care of running both methods in parallel. As soon as one of the method + // is complete, the running method also stops. g, childCtx := errgroup.WithContext(ctx) // To start listing method is Open and runs both worksteal and sequential listing in parallel. @@ -109,7 +111,7 @@ func (c *Lister) NextBatch(ctx context.Context) ([]*storage.ObjectAttrs, error) if c.method != worksteal { g.Go(func() error { - objects, nextToken, err := sequentialListing(childCtx, *c) + objects, nextToken, err := c.sequentialListing(childCtx) if err != nil { countError++ return fmt.Errorf("error in running sequential listing: %w", err) @@ -128,9 +130,11 @@ func (c *Lister) NextBatch(ctx context.Context) ([]*storage.ObjectAttrs, error) // Close all functions if either sequential listing or worksteal listing is complete. err := g.Wait() - // If there is not context.Canceled, then return error. + // If the error is not context.Canceled, then return error instead of falling back + // to the other method. This is so that the error can be fixed and user can take + // advantage of fast-listing. // As one of the listing method completes, it is expected to cancel context for the other method. - // If both sequential and worksteal listing fail due to context canceled, then return error. + // If both sequential and worksteal listing fail due to context canceled, only then return error. if err != nil && (!errors.Is(err, context.Canceled) || countError > 1) { return nil, fmt.Errorf("failed waiting for sequntial and work steal lister : %w", err) } diff --git a/storage/dataflux/integration_test.go b/storage/dataflux/integration_test.go index 7a0b5630d106..985205a5071c 100644 --- a/storage/dataflux/integration_test.go +++ b/storage/dataflux/integration_test.go @@ -45,7 +45,6 @@ var ( // These buckets are shared amongst download tests. They are created, // populated with objects and cleaned up in TestMain. httpTestBucket = downloadTestBucket{} - grpcTestBucket = downloadTestBucket{} ) func TestMain(m *testing.M) { @@ -85,7 +84,7 @@ func TestIntegration_NextBatch(t *testing.T) { objects, err := df.NextBatch(ctx) if err != nil && err != iterator.Done { - t.Errorf("df.NextBatch(: %v", err) + t.Errorf("df.NextBatch : %v", err) } if len(objects) != len(httpTestBucket.objects) { @@ -257,7 +256,3 @@ func (tb *downloadTestBucket) Cleanup() error { return b.Delete(ctx) } - -func crc32c(b []byte) uint32 { - return crc32.Checksum(b, crc32.MakeTable(crc32.Castagnoli)) -} diff --git a/storage/dataflux/range_splitter.go b/storage/dataflux/range_splitter.go index 7c50e793c926..4c3564ecc54b 100644 --- a/storage/dataflux/range_splitter.go +++ b/storage/dataflux/range_splitter.go @@ -33,7 +33,6 @@ type listRange struct { // newRangeSplitter creates a new RangeSplitter with the given alphabets. func newRangeSplitter(alphabet string) *rangeSplitter { - return &rangeSplitter{} } diff --git a/storage/dataflux/sequential.go b/storage/dataflux/sequential.go index 717308d5d31f..ce76a0ec4df1 100644 --- a/storage/dataflux/sequential.go +++ b/storage/dataflux/sequential.go @@ -32,26 +32,26 @@ const ( // sequentialListing performs a sequential listing on the given bucket. // It returns a list of objects and the next token to use to continue listing. // If the next token is empty, then listing is complete. -func sequentialListing(ctx context.Context, opts Lister) ([]*storage.ObjectAttrs, string, error) { +func (c *Lister) sequentialListing(ctx context.Context) ([]*storage.ObjectAttrs, string, error) { var result []*storage.ObjectAttrs - objectIterator := opts.bucket.Objects(ctx, &opts.query) + objectIterator := c.bucket.Objects(ctx, &c.query) var numObject int - if opts.batchSize < defaultPageSize { + if c.batchSize < defaultPageSize { numObject = defaultPageSize } else { - numObject = int(math.Floor(float64(opts.batchSize)/float64(defaultPageSize))) * defaultPageSize + numObject = int(math.Floor(float64(c.batchSize)/float64(defaultPageSize))) * defaultPageSize } pageInfo := objectIterator.PageInfo() pageInfo.MaxSize = defaultPageSize - pageInfo.Token = opts.pageToken + pageInfo.Token = c.pageToken i := 0 for { // If page size is set, then stop listing after numPageRequest. - if opts.batchSize > 0 && i >= numObject { + if c.batchSize > 0 && i >= numObject { break } i++ @@ -64,7 +64,7 @@ func sequentialListing(ctx context.Context, opts Lister) ([]*storage.ObjectAttrs if err != nil { return nil, "", fmt.Errorf("iterating through objects %w", err) } - if !(opts.skipDirectoryObjects && strings.HasSuffix(attrs.Name, "/")) { + if !(c.skipDirectoryObjects && strings.HasSuffix(attrs.Name, "/")) { result = append(result, attrs) } } diff --git a/storage/dataflux/worksteal.go b/storage/dataflux/worksteal.go index df56f01a0c95..0c89de1cefe9 100644 --- a/storage/dataflux/worksteal.go +++ b/storage/dataflux/worksteal.go @@ -49,7 +49,7 @@ type worker struct { // workstealListing is the main entry point of the worksteal algorithm. // It performs worksteal to achieve highly dynamic object listing. -func workstealListing(ctx context.Context, opts Lister) []*storage.ObjectAttrs { +func (c *Lister) workstealListing(ctx context.Context) []*storage.ObjectAttrs { return nil } From 206f47ef76e5883e321cae080331402fc011f954 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 16:50:29 +0000 Subject: [PATCH 17/27] chore: update gapic-generator-go to 0.47.0 (#10848) - [ ] Regenerate this pull request now. PiperOrigin-RevId: 673380763 Source-Link: https://togithub.com/googleapis/googleapis/commit/8ebfd76bd91ba97b86491de9161c9e5e6884a68a Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/c7314d1edf63123ef0efbe9bc4d996391025fb44 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYzczMTRkMWVkZjYzMTIzZWYwZWZiZTliYzRkOTk2MzkxMDI1ZmI0NCJ9 BEGIN_NESTED_COMMIT feat(bigtable/admin): Add support for Cloud Bigtable Row Affinity in App Profiles PiperOrigin-RevId: 673093969 Source-Link: https://togithub.com/googleapis/googleapis/commit/cbf696d38a963c5ab333f85fc9a910b5698ad415 Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/a2f7ec1191813304b3bd0097caa33956bdb3b637 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYTJmN2VjMTE5MTgxMzMwNGIzYmQwMDk3Y2FhMzM5NTZiZGIzYjYzNyJ9 END_NESTED_COMMIT BEGIN_NESTED_COMMIT feat(aiplatform): add Pinecone and Vector Search integration for Vertex RAG PiperOrigin-RevId: 673087899 Source-Link: https://togithub.com/googleapis/googleapis/commit/afb6b3599d50103e022e9c22c5057bf94be9dcf8 Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/00a4515ab465e98d56627075675209631ee51f39 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMDBhNDUxNWFiNDY1ZTk4ZDU2NjI3MDc1Njc1MjA5NjMxZWU1MWYzOSJ9 END_NESTED_COMMIT --- aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go index 11f4a5500f75..e785bd90d28e 100755 --- a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go +++ b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go @@ -2585,4 +2585,4 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = nil file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_goTypes = nil file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_depIdxs = nil -} +} \ No newline at end of file From 2d586ea8f847d2d44bc0c897aefb53163f275caa Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 16:50:29 +0000 Subject: [PATCH 18/27] chore: update gapic-generator-go to 0.47.0 (#10848) - [ ] Regenerate this pull request now. PiperOrigin-RevId: 673380763 Source-Link: https://togithub.com/googleapis/googleapis/commit/8ebfd76bd91ba97b86491de9161c9e5e6884a68a Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/c7314d1edf63123ef0efbe9bc4d996391025fb44 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYzczMTRkMWVkZjYzMTIzZWYwZWZiZTliYzRkOTk2MzkxMDI1ZmI0NCJ9 BEGIN_NESTED_COMMIT feat(bigtable/admin): Add support for Cloud Bigtable Row Affinity in App Profiles PiperOrigin-RevId: 673093969 Source-Link: https://togithub.com/googleapis/googleapis/commit/cbf696d38a963c5ab333f85fc9a910b5698ad415 Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/a2f7ec1191813304b3bd0097caa33956bdb3b637 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYTJmN2VjMTE5MTgxMzMwNGIzYmQwMDk3Y2FhMzM5NTZiZGIzYjYzNyJ9 END_NESTED_COMMIT BEGIN_NESTED_COMMIT feat(aiplatform): add Pinecone and Vector Search integration for Vertex RAG PiperOrigin-RevId: 673087899 Source-Link: https://togithub.com/googleapis/googleapis/commit/afb6b3599d50103e022e9c22c5057bf94be9dcf8 Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/00a4515ab465e98d56627075675209631ee51f39 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMDBhNDUxNWFiNDY1ZTk4ZDU2NjI3MDc1Njc1MjA5NjMxZWU1MWYzOSJ9 END_NESTED_COMMIT --- .../aiplatformpb/vertex_rag_data.pb.go | 236 ++++++++++++++++++ 1 file changed, 236 insertions(+) diff --git a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go index e785bd90d28e..c9acf235ea78 100755 --- a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go +++ b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go @@ -1986,6 +1986,7 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = []byte{ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7d, 0x0a, 0x1a, 0x72, 0x61, 0x67, 0x5f, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, +<<<<<<< HEAD 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, @@ -2201,6 +2202,216 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = []byte{ 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +======= + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x52, 0x61, 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, + 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0xe0, 0x41, 0x01, 0xe0, 0x41, 0x05, + 0x52, 0x17, 0x72, 0x61, 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, + 0x64, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6b, 0x0a, 0x14, 0x72, 0x61, 0x67, + 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x62, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x56, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x44, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0xe0, 0x41, 0x01, + 0xe0, 0x41, 0x05, 0x52, 0x11, 0x72, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x62, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x63, 0x6f, + 0x72, 0x70, 0x75, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x3a, 0x80, 0x01, 0xea, 0x41, 0x7d, 0x0a, 0x23, 0x61, 0x69, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x3f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, + 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2a, + 0x0a, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x32, 0x09, 0x72, 0x61, 0x67, + 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x22, 0x9a, 0x09, 0x0a, 0x07, 0x52, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x69, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, + 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x6c, 0x0a, 0x14, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x12, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, + 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, + 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, + 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x0d, + 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x52, 0x61, + 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, + 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, + 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, + 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x51, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x5a, 0x0a, 0x0b, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x54, 0x58, 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, + 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x44, 0x46, 0x10, 0x02, 0x3a, 0x8f, + 0x01, 0xea, 0x41, 0x8b, 0x01, 0x0a, 0x21, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, + 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, + 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x7d, 0x2a, 0x08, 0x72, + 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x32, 0x07, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, + 0x42, 0x11, 0x0a, 0x0f, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x22, 0x5b, 0x0a, 0x15, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, + 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, + 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, + 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, + 0x22, 0x4f, 0x0a, 0x14, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, + 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x5f, + 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x70, 0x64, 0x66, 0x5f, 0x70, 0x61, 0x72, + 0x73, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x75, 0x73, 0x65, 0x41, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x64, 0x66, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, + 0x67, 0x22, 0x86, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x67, 0x46, + 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, + 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, + 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x8a, 0x08, 0x0a, 0x14, 0x49, + 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x4b, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x64, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, + 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, + 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, + 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, + 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, + 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x11, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, + 0x6a, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, + 0x72, 0x65, 0x5f, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, + 0x6c, 0x75, 0x72, 0x65, 0x47, 0x63, 0x73, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x79, 0x0a, 0x1d, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x62, + 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x1a, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x42, 0x69, 0x67, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, + 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6c, 0x0a, 0x17, 0x72, 0x61, 0x67, 0x5f, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x14, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x47, 0x0a, 0x1e, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x6d, 0x62, + 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, + 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, + 0x41, 0x01, 0x52, 0x1a, 0x6d, 0x61, 0x78, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x42, 0x0f, + 0x0a, 0x0d, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, + 0x16, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, + 0x72, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x42, 0xe9, 0x01, 0x0a, 0x23, 0x63, 0x6f, 0x6d, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, + 0x12, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x52, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x43, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0x3b, 0x61, 0x69, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x56, 0x31, 0x42, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1f, 0x47, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x41, 0x49, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xea, 0x02, + 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, + 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +>>>>>>> c90c6fc268 (chore: update gapic-generator-go to 0.47.0 (#10848)) } var ( @@ -2272,6 +2483,7 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_depIdxs = []int32 26, // 17: google.cloud.aiplatform.v1beta1.RagFile.direct_upload_source:type_name -> google.cloud.aiplatform.v1beta1.DirectUploadSource 27, // 18: google.cloud.aiplatform.v1beta1.RagFile.slack_source:type_name -> google.cloud.aiplatform.v1beta1.SlackSource 28, // 19: google.cloud.aiplatform.v1beta1.RagFile.jira_source:type_name -> google.cloud.aiplatform.v1beta1.JiraSource +<<<<<<< HEAD 29, // 20: google.cloud.aiplatform.v1beta1.RagFile.share_point_sources:type_name -> google.cloud.aiplatform.v1beta1.SharePointSources 2, // 21: google.cloud.aiplatform.v1beta1.RagFile.rag_file_type:type_name -> google.cloud.aiplatform.v1beta1.RagFile.RagFileType 23, // 22: google.cloud.aiplatform.v1beta1.RagFile.create_time:type_name -> google.protobuf.Timestamp @@ -2295,6 +2507,30 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_depIdxs = []int32 38, // [38:38] is the sub-list for extension type_name 38, // [38:38] is the sub-list for extension extendee 0, // [0:38] is the sub-list for field type_name +======= + 2, // 20: google.cloud.aiplatform.v1beta1.RagFile.rag_file_type:type_name -> google.cloud.aiplatform.v1beta1.RagFile.RagFileType + 23, // 21: google.cloud.aiplatform.v1beta1.RagFile.create_time:type_name -> google.protobuf.Timestamp + 23, // 22: google.cloud.aiplatform.v1beta1.RagFile.update_time:type_name -> google.protobuf.Timestamp + 5, // 23: google.cloud.aiplatform.v1beta1.RagFile.file_status:type_name -> google.cloud.aiplatform.v1beta1.FileStatus + 9, // 24: google.cloud.aiplatform.v1beta1.UploadRagFileConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig + 24, // 25: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.gcs_source:type_name -> google.cloud.aiplatform.v1beta1.GcsSource + 25, // 26: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.google_drive_source:type_name -> google.cloud.aiplatform.v1beta1.GoogleDriveSource + 27, // 27: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.slack_source:type_name -> google.cloud.aiplatform.v1beta1.SlackSource + 28, // 28: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.jira_source:type_name -> google.cloud.aiplatform.v1beta1.JiraSource + 29, // 29: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.share_point_sources:type_name -> google.cloud.aiplatform.v1beta1.SharePointSources + 30, // 30: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.partial_failure_gcs_sink:type_name -> google.cloud.aiplatform.v1beta1.GcsDestination + 31, // 31: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.partial_failure_bigquery_sink:type_name -> google.cloud.aiplatform.v1beta1.BigQueryDestination + 9, // 32: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig + 10, // 33: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_parsing_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileParsingConfig + 16, // 34: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig.bm25:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig.Bm25 + 14, // 35: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.HybridSearchConfig.sparse_embedding_config:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig + 13, // 36: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.HybridSearchConfig.dense_embedding_model_prediction_endpoint:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.VertexPredictionEndpoint + 37, // [37:37] is the sub-list for method output_type + 37, // [37:37] is the sub-list for method input_type + 37, // [37:37] is the sub-list for extension type_name + 37, // [37:37] is the sub-list for extension extendee + 0, // [0:37] is the sub-list for field type_name +>>>>>>> c90c6fc268 (chore: update gapic-generator-go to 0.47.0 (#10848)) } func init() { file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() } From 71cb71897321336043dd35ee6e22d64f78ff9e61 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 16:50:29 +0000 Subject: [PATCH 19/27] chore: update gapic-generator-go to 0.47.0 (#10848) - [ ] Regenerate this pull request now. PiperOrigin-RevId: 673380763 Source-Link: https://togithub.com/googleapis/googleapis/commit/8ebfd76bd91ba97b86491de9161c9e5e6884a68a Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/c7314d1edf63123ef0efbe9bc4d996391025fb44 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYzczMTRkMWVkZjYzMTIzZWYwZWZiZTliYzRkOTk2MzkxMDI1ZmI0NCJ9 BEGIN_NESTED_COMMIT feat(bigtable/admin): Add support for Cloud Bigtable Row Affinity in App Profiles PiperOrigin-RevId: 673093969 Source-Link: https://togithub.com/googleapis/googleapis/commit/cbf696d38a963c5ab333f85fc9a910b5698ad415 Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/a2f7ec1191813304b3bd0097caa33956bdb3b637 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYTJmN2VjMTE5MTgxMzMwNGIzYmQwMDk3Y2FhMzM5NTZiZGIzYjYzNyJ9 END_NESTED_COMMIT BEGIN_NESTED_COMMIT feat(aiplatform): add Pinecone and Vector Search integration for Vertex RAG PiperOrigin-RevId: 673087899 Source-Link: https://togithub.com/googleapis/googleapis/commit/afb6b3599d50103e022e9c22c5057bf94be9dcf8 Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/00a4515ab465e98d56627075675209631ee51f39 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMDBhNDUxNWFiNDY1ZTk4ZDU2NjI3MDc1Njc1MjA5NjMxZWU1MWYzOSJ9 END_NESTED_COMMIT --- .../aiplatformpb/vertex_rag_data.pb.go | 597 +++++++----------- 1 file changed, 213 insertions(+), 384 deletions(-) diff --git a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go index c9acf235ea78..5685111cae8f 100755 --- a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go +++ b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go @@ -1986,7 +1986,6 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = []byte{ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7d, 0x0a, 0x1a, 0x72, 0x61, 0x67, 0x5f, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, -<<<<<<< HEAD 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, @@ -2011,162 +2010,227 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = []byte{ 0x72, 0x70, 0x75, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x3a, 0x80, 0x01, 0xea, 0x41, 0x7d, 0x0a, 0x23, 0x61, 0x69, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x3f, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, - 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2a, - 0x0a, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x32, 0x09, 0x72, 0x61, 0x67, - 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x22, 0x80, 0x0a, 0x0a, 0x07, 0x52, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x69, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, - 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x6c, 0x0a, 0x14, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x62, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x48, 0x00, 0x52, 0x12, 0x76, 0x65, 0x72, 0x74, + 0x65, 0x78, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x43, + 0x0a, 0x08, 0x61, 0x70, 0x69, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, + 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x41, 0x70, 0x69, 0x41, 0x75, 0x74, 0x68, 0x52, 0x07, 0x61, 0x70, 0x69, 0x41, + 0x75, 0x74, 0x68, 0x1a, 0x0e, 0x0a, 0x0c, 0x52, 0x61, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x64, 0x44, 0x62, 0x1a, 0x58, 0x0a, 0x08, 0x57, 0x65, 0x61, 0x76, 0x69, 0x61, 0x74, 0x65, 0x12, + 0x23, 0x0a, 0x0d, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68, 0x74, 0x74, 0x70, 0x45, 0x6e, 0x64, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x51, 0x0a, + 0x12, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, + 0x69, 0x65, 0x77, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x56, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x42, 0x0b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x62, 0x22, 0xb9, 0x01, + 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4c, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x35, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x09, + 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x22, 0xc4, 0x01, 0x0a, 0x0c, 0x43, 0x6f, + 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x70, + 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x3c, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x49, 0x54, + 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, + 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, + 0x22, 0xbf, 0x05, 0x0a, 0x09, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x17, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, + 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7d, 0x0a, 0x1a, 0x72, 0x61, 0x67, 0x5f, 0x65, 0x6d, + 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, + 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0xe0, 0x41, 0x01, 0xe0, 0x41, 0x05, 0x52, 0x17, 0x72, 0x61, + 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6b, 0x0a, 0x14, 0x72, 0x61, 0x67, 0x5f, 0x76, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x62, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, + 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0xe0, 0x41, 0x01, 0xe0, 0x41, 0x05, 0x52, + 0x11, 0x72, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x62, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x12, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, - 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x64, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, + 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3a, + 0x80, 0x01, 0xea, 0x41, 0x7d, 0x0a, 0x23, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x3f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, + 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2a, 0x0a, 0x72, 0x61, 0x67, + 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x32, 0x09, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, + 0x75, 0x73, 0x22, 0x9a, 0x09, 0x0a, 0x07, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x50, + 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x69, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, + 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x48, 0x00, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, - 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, - 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, - 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x0d, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x14, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, - 0x69, 0x6c, 0x65, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, - 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x69, 0x6c, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x66, 0x69, - 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5a, 0x0a, 0x0b, 0x52, 0x61, 0x67, 0x46, - 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x41, 0x47, 0x5f, 0x46, - 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, - 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x58, 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, - 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, - 0x44, 0x46, 0x10, 0x02, 0x3a, 0x8f, 0x01, 0xea, 0x41, 0x8b, 0x01, 0x0a, 0x21, 0x61, 0x69, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, - 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x53, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, - 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2f, - 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, - 0x6c, 0x65, 0x7d, 0x2a, 0x08, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x32, 0x07, 0x72, - 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, - 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x5b, 0x0a, 0x15, 0x52, 0x61, 0x67, - 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, - 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4f, - 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x22, 0x4f, 0x0a, 0x14, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, - 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, - 0x0a, 0x18, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x70, - 0x64, 0x66, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x15, 0x75, 0x73, 0x65, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x64, 0x66, - 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x86, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x6c, 0x6f, - 0x61, 0x64, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, - 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x12, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x73, 0x6c, 0x61, + 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, + 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, + 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4e, 0x0a, 0x0b, + 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, - 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x22, 0x8a, 0x08, 0x0a, 0x14, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4b, 0x0a, 0x0a, 0x67, 0x63, 0x73, - 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, - 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, - 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x64, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x48, 0x00, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x6a, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, - 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x69, 0x6e, - 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, + 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, + 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x73, + 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x0d, 0x72, 0x61, 0x67, 0x5f, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, + 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x72, 0x61, 0x67, 0x46, + 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, + 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, + 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, + 0x41, 0x03, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5a, + 0x0a, 0x0b, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, + 0x19, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, + 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x58, + 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x44, 0x46, 0x10, 0x02, 0x3a, 0x8f, 0x01, 0xea, 0x41, 0x8b, + 0x01, 0x0a, 0x21, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, + 0x46, 0x69, 0x6c, 0x65, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, + 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, + 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, + 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x7d, 0x2a, 0x08, 0x72, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x32, 0x07, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x42, 0x11, 0x0a, 0x0f, + 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, + 0x5b, 0x0a, 0x15, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, + 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x75, 0x6e, + 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x68, + 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x75, 0x6e, 0x6b, + 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x22, 0x4f, 0x0a, 0x14, + 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x64, 0x76, 0x61, + 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x70, 0x64, 0x66, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x75, 0x73, 0x65, 0x41, 0x64, 0x76, 0x61, 0x6e, + 0x63, 0x65, 0x64, 0x50, 0x64, 0x66, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x86, 0x01, + 0x0a, 0x13, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, + 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x44, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x47, 0x63, 0x73, 0x53, 0x69, 0x6e, - 0x6b, 0x12, 0x79, 0x0a, 0x1d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x62, 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x69, - 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, + 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x8a, 0x08, 0x0a, 0x14, 0x49, 0x6d, 0x70, 0x6f, 0x72, + 0x74, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x4b, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, + 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, + 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x67, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, - 0x52, 0x1a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x42, 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x6f, 0x0a, 0x18, - 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, - 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, + 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x6a, 0x0a, 0x18, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x67, + 0x63, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x47, 0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, + 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, + 0x47, 0x63, 0x73, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x79, 0x0a, 0x1d, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x62, 0x69, 0x67, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, @@ -2202,216 +2266,6 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = []byte{ 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -======= - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x52, 0x61, 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, - 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0xe0, 0x41, 0x01, 0xe0, 0x41, 0x05, - 0x52, 0x17, 0x72, 0x61, 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, - 0x64, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6b, 0x0a, 0x14, 0x72, 0x61, 0x67, - 0x5f, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x62, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x56, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x44, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0xe0, 0x41, 0x01, - 0xe0, 0x41, 0x05, 0x52, 0x11, 0x72, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x62, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x63, 0x6f, - 0x72, 0x70, 0x75, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x3a, 0x80, 0x01, 0xea, 0x41, 0x7d, 0x0a, 0x23, 0x61, 0x69, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x3f, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, - 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2a, - 0x0a, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x32, 0x09, 0x72, 0x61, 0x67, - 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x22, 0x9a, 0x09, 0x0a, 0x07, 0x52, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x69, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, - 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x6c, 0x0a, 0x14, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x12, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, - 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, - 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x0d, - 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x52, 0x61, - 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, - 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x51, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x5a, 0x0a, 0x0b, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x54, 0x58, 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, - 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x44, 0x46, 0x10, 0x02, 0x3a, 0x8f, - 0x01, 0xea, 0x41, 0x8b, 0x01, 0x0a, 0x21, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, - 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, - 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x7d, 0x2a, 0x08, 0x72, - 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x32, 0x07, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, - 0x42, 0x11, 0x0a, 0x0f, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x22, 0x5b, 0x0a, 0x15, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, - 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, - 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, - 0x22, 0x4f, 0x0a, 0x14, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, - 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x5f, - 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x70, 0x64, 0x66, 0x5f, 0x70, 0x61, 0x72, - 0x73, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x75, 0x73, 0x65, 0x41, - 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x64, 0x66, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, - 0x67, 0x22, 0x86, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x67, 0x46, - 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, - 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, - 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, - 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x8a, 0x08, 0x0a, 0x14, 0x49, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x4b, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x64, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, - 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, - 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, - 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, - 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, - 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x11, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, - 0x6a, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x5f, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x47, 0x63, 0x73, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x79, 0x0a, 0x1d, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x62, - 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x1a, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x42, 0x69, 0x67, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, - 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, - 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6c, 0x0a, 0x17, 0x72, 0x61, 0x67, 0x5f, 0x66, - 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x14, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x47, 0x0a, 0x1e, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x6d, 0x62, - 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, - 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, - 0x41, 0x01, 0x52, 0x1a, 0x6d, 0x61, 0x78, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x42, 0x0f, - 0x0a, 0x0d, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, - 0x16, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x42, 0xe9, 0x01, 0x0a, 0x23, 0x63, 0x6f, 0x6d, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, - 0x12, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x52, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x43, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0x3b, 0x61, 0x69, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x56, 0x31, 0x42, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1f, 0x47, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x41, 0x49, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xea, 0x02, - 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, - 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, ->>>>>>> c90c6fc268 (chore: update gapic-generator-go to 0.47.0 (#10848)) } var ( @@ -2483,7 +2337,6 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_depIdxs = []int32 26, // 17: google.cloud.aiplatform.v1beta1.RagFile.direct_upload_source:type_name -> google.cloud.aiplatform.v1beta1.DirectUploadSource 27, // 18: google.cloud.aiplatform.v1beta1.RagFile.slack_source:type_name -> google.cloud.aiplatform.v1beta1.SlackSource 28, // 19: google.cloud.aiplatform.v1beta1.RagFile.jira_source:type_name -> google.cloud.aiplatform.v1beta1.JiraSource -<<<<<<< HEAD 29, // 20: google.cloud.aiplatform.v1beta1.RagFile.share_point_sources:type_name -> google.cloud.aiplatform.v1beta1.SharePointSources 2, // 21: google.cloud.aiplatform.v1beta1.RagFile.rag_file_type:type_name -> google.cloud.aiplatform.v1beta1.RagFile.RagFileType 23, // 22: google.cloud.aiplatform.v1beta1.RagFile.create_time:type_name -> google.protobuf.Timestamp @@ -2507,30 +2360,6 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_depIdxs = []int32 38, // [38:38] is the sub-list for extension type_name 38, // [38:38] is the sub-list for extension extendee 0, // [0:38] is the sub-list for field type_name -======= - 2, // 20: google.cloud.aiplatform.v1beta1.RagFile.rag_file_type:type_name -> google.cloud.aiplatform.v1beta1.RagFile.RagFileType - 23, // 21: google.cloud.aiplatform.v1beta1.RagFile.create_time:type_name -> google.protobuf.Timestamp - 23, // 22: google.cloud.aiplatform.v1beta1.RagFile.update_time:type_name -> google.protobuf.Timestamp - 5, // 23: google.cloud.aiplatform.v1beta1.RagFile.file_status:type_name -> google.cloud.aiplatform.v1beta1.FileStatus - 9, // 24: google.cloud.aiplatform.v1beta1.UploadRagFileConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig - 24, // 25: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.gcs_source:type_name -> google.cloud.aiplatform.v1beta1.GcsSource - 25, // 26: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.google_drive_source:type_name -> google.cloud.aiplatform.v1beta1.GoogleDriveSource - 27, // 27: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.slack_source:type_name -> google.cloud.aiplatform.v1beta1.SlackSource - 28, // 28: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.jira_source:type_name -> google.cloud.aiplatform.v1beta1.JiraSource - 29, // 29: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.share_point_sources:type_name -> google.cloud.aiplatform.v1beta1.SharePointSources - 30, // 30: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.partial_failure_gcs_sink:type_name -> google.cloud.aiplatform.v1beta1.GcsDestination - 31, // 31: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.partial_failure_bigquery_sink:type_name -> google.cloud.aiplatform.v1beta1.BigQueryDestination - 9, // 32: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig - 10, // 33: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_parsing_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileParsingConfig - 16, // 34: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig.bm25:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig.Bm25 - 14, // 35: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.HybridSearchConfig.sparse_embedding_config:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.SparseEmbeddingConfig - 13, // 36: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.HybridSearchConfig.dense_embedding_model_prediction_endpoint:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.VertexPredictionEndpoint - 37, // [37:37] is the sub-list for method output_type - 37, // [37:37] is the sub-list for method input_type - 37, // [37:37] is the sub-list for extension type_name - 37, // [37:37] is the sub-list for extension extendee - 0, // [0:37] is the sub-list for field type_name ->>>>>>> c90c6fc268 (chore: update gapic-generator-go to 0.47.0 (#10848)) } func init() { file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() } From 31aa908d448a66dd90b1ff351b14ad189ae07e81 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Mon, 16 Sep 2024 23:29:46 +0000 Subject: [PATCH 20/27] add integration test for next batch --- storage/dataflux/integration_test.go | 43 +++++++++++++++++++++++- storage/dataflux/sequential.go | 49 +++++++++++++++------------- 2 files changed, 68 insertions(+), 24 deletions(-) diff --git a/storage/dataflux/integration_test.go b/storage/dataflux/integration_test.go index 985205a5071c..63ff4c54b1b3 100644 --- a/storage/dataflux/integration_test.go +++ b/storage/dataflux/integration_test.go @@ -66,7 +66,7 @@ func TestMain(m *testing.M) { } // Lists the all the objects in the bucket. -func TestIntegration_NextBatch(t *testing.T) { +func TestIntegration_NextBatch_All(t *testing.T) { if testing.Short() { t.Skip("Integration tests skipped in short mode") } @@ -92,6 +92,47 @@ func TestIntegration_NextBatch(t *testing.T) { } } +func TestIntegration_NextBatch(t *testing.T) { + if testing.Short() { + t.Skip("Integration tests skipped in short mode") + } + const landsatBucket = "gcp-public-data-landsat" + const landsatPrefix = "LC08/01/001/00" + wantObjects := 17225 + ctx := context.Background() + c, err := storage.NewClient(ctx) + if err != nil { + t.Fatalf("NewClient: %v", err) + } + + in := &ListerInput{ + BucketName: landsatBucket, + Query: storage.Query{Prefix: landsatPrefix}, + BatchSize: 2000, + } + + df := NewLister(c, in) + defer df.Close() + totalObjects := 0 + for { + objects, err := df.NextBatch(ctx) + if err != nil && err != iterator.Done { + t.Errorf("df.NextBatch : %v", err) + } + totalObjects += len(objects) + if err == iterator.Done { + break + } + if len(objects) > in.BatchSize { + t.Errorf("expected to receive %d objects in each batch, got %d objects in a batch", in.BatchSize, len(objects)) + } + } + if totalObjects != wantObjects { + t.Errorf("expected to receive %d objects in results, got %d objects in results", wantObjects, totalObjects) + + } +} + // generateRandomFileInGCS uploads a file with random contents to GCS and returns // the crc32c hash of the contents. func generateFileInGCS(ctx context.Context, o *storage.ObjectHandle, size int64) (uint32, error) { diff --git a/storage/dataflux/sequential.go b/storage/dataflux/sequential.go index ce76a0ec4df1..d9aa8e7f8927 100644 --- a/storage/dataflux/sequential.go +++ b/storage/dataflux/sequential.go @@ -17,7 +17,6 @@ package dataflux import ( "context" "fmt" - "math" "strings" "cloud.google.com/go/storage" @@ -26,7 +25,7 @@ import ( const ( // defaultPageSize specifies the number of object results to include on a single page. - defaultPageSize = 5000 + defaultPageSize = 2000 ) // sequentialListing performs a sequential listing on the given bucket. @@ -34,39 +33,43 @@ const ( // If the next token is empty, then listing is complete. func (c *Lister) sequentialListing(ctx context.Context) ([]*storage.ObjectAttrs, string, error) { var result []*storage.ObjectAttrs - + var objectsListed int + var lastToken string objectIterator := c.bucket.Objects(ctx, &c.query) + objectIterator.PageInfo().Token = c.pageToken + objectIterator.PageInfo().MaxSize = defaultPageSize - var numObject int - if c.batchSize < defaultPageSize { - numObject = defaultPageSize - } else { - numObject = int(math.Floor(float64(c.batchSize)/float64(defaultPageSize))) * defaultPageSize - } - - pageInfo := objectIterator.PageInfo() - pageInfo.MaxSize = defaultPageSize - pageInfo.Token = c.pageToken - - i := 0 for { - // If page size is set, then stop listing after numPageRequest. - if c.batchSize > 0 && i >= numObject { + nextToken, err := doListing(objectIterator, &result, c.skipDirectoryObjects, &objectsListed) + if err != nil { + return nil, "", fmt.Errorf("failed while listing objects: %w", err) + } + lastToken = nextToken + if nextToken == "" || (c.batchSize > 0 && objectsListed >= c.batchSize) { break } - i++ + c.pageToken = nextToken + } + return result, lastToken, nil +} +func doListing(objectIterator *storage.ObjectIterator, result *[]*storage.ObjectAttrs, skipDirectoryObjects bool, objectsListed *int) (string, error) { + for { attrs, err := objectIterator.Next() - // When last item for the assigned range is listed, then stop listing. + *objectsListed++ + // Stop listing when all the requested objects have been listed. if err == iterator.Done { break } if err != nil { - return nil, "", fmt.Errorf("iterating through objects %w", err) + return "", fmt.Errorf("iterating through objects %w", err) } - if !(c.skipDirectoryObjects && strings.HasSuffix(attrs.Name, "/")) { - result = append(result, attrs) + if !(skipDirectoryObjects && strings.HasSuffix(attrs.Name, "/")) { + *result = append(*result, attrs) + } + if objectIterator.PageInfo().Remaining() == 0 { + break } } - return result, objectIterator.PageInfo().Token, nil + return objectIterator.PageInfo().Token, nil } From 39c8fd20a2d4bb41e9800eff58ac2d3b5eadc301 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Tue, 17 Sep 2024 22:43:54 +0000 Subject: [PATCH 21/27] Reset extra file --- .../aiplatformpb/vertex_rag_data.pb.go | 363 +++++++----------- 1 file changed, 149 insertions(+), 214 deletions(-) diff --git a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go index 5685111cae8f..11f4a5500f75 100755 --- a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go +++ b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go @@ -2010,227 +2010,162 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = []byte{ 0x72, 0x70, 0x75, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x62, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x48, 0x00, 0x52, 0x12, 0x76, 0x65, 0x72, 0x74, - 0x65, 0x78, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x43, - 0x0a, 0x08, 0x61, 0x70, 0x69, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, - 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x41, 0x70, 0x69, 0x41, 0x75, 0x74, 0x68, 0x52, 0x07, 0x61, 0x70, 0x69, 0x41, - 0x75, 0x74, 0x68, 0x1a, 0x0e, 0x0a, 0x0c, 0x52, 0x61, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x64, 0x44, 0x62, 0x1a, 0x58, 0x0a, 0x08, 0x57, 0x65, 0x61, 0x76, 0x69, 0x61, 0x74, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68, 0x74, 0x74, 0x70, 0x45, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x51, 0x0a, - 0x12, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, - 0x69, 0x65, 0x77, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x56, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x42, 0x0b, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x62, 0x22, 0xb9, 0x01, - 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4c, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x69, - 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x35, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x09, - 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x22, 0xc4, 0x01, 0x0a, 0x0c, 0x43, 0x6f, - 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x70, - 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x3c, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x49, 0x54, - 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, - 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, - 0x22, 0xbf, 0x05, 0x0a, 0x09, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x17, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, - 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7d, 0x0a, 0x1a, 0x72, 0x61, 0x67, 0x5f, 0x65, 0x6d, - 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, - 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0xe0, 0x41, 0x01, 0xe0, 0x41, 0x05, 0x52, 0x17, 0x72, 0x61, - 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6b, 0x0a, 0x14, 0x72, 0x61, 0x67, 0x5f, 0x76, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x62, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, - 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0xe0, 0x41, 0x01, 0xe0, 0x41, 0x05, 0x52, - 0x11, 0x72, 0x61, 0x67, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x44, 0x62, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x3a, 0x80, 0x01, 0xea, 0x41, 0x7d, 0x0a, 0x23, 0x61, 0x69, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x3f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, + 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2a, + 0x0a, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x32, 0x09, 0x72, 0x61, 0x67, + 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x22, 0x80, 0x0a, 0x0a, 0x07, 0x52, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x69, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, + 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x6c, 0x0a, 0x14, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3a, - 0x80, 0x01, 0xea, 0x41, 0x7d, 0x0a, 0x23, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x3f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, - 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2a, 0x0a, 0x72, 0x61, 0x67, - 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x32, 0x09, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, - 0x75, 0x73, 0x22, 0x9a, 0x09, 0x0a, 0x07, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x50, - 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x69, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, - 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x12, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, + 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x64, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x14, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x48, 0x00, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, + 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, + 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x0d, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, 0x12, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x70, 0x6c, - 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x73, 0x6c, 0x61, - 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, - 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, - 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4e, 0x0a, 0x0b, - 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, - 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, - 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x73, - 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x0d, 0x72, 0x61, 0x67, 0x5f, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, - 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x72, 0x61, 0x67, 0x46, - 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x66, - 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, - 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, - 0x41, 0x03, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5a, - 0x0a, 0x0b, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, - 0x19, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, - 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x58, - 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x44, 0x46, 0x10, 0x02, 0x3a, 0x8f, 0x01, 0xea, 0x41, 0x8b, - 0x01, 0x0a, 0x21, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, - 0x46, 0x69, 0x6c, 0x65, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, - 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, - 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, - 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x7d, 0x2a, 0x08, 0x72, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x32, 0x07, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x42, 0x11, 0x0a, 0x0f, - 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, - 0x5b, 0x0a, 0x15, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, - 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x75, 0x6e, - 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x68, - 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x75, 0x6e, 0x6b, - 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, - 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x22, 0x4f, 0x0a, 0x14, - 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x64, 0x76, 0x61, - 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x70, 0x64, 0x66, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x75, 0x73, 0x65, 0x41, 0x64, 0x76, 0x61, 0x6e, - 0x63, 0x65, 0x64, 0x50, 0x64, 0x66, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x86, 0x01, - 0x0a, 0x13, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, - 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x8a, 0x08, 0x0a, 0x14, 0x49, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x4b, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, - 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, - 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, + 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, + 0x69, 0x6c, 0x65, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, + 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, - 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x6a, 0x0a, 0x18, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x67, - 0x63, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x69, 0x6c, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x66, 0x69, + 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5a, 0x0a, 0x0b, 0x52, 0x61, 0x67, 0x46, + 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x41, 0x47, 0x5f, 0x46, + 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, + 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x58, 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, + 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, + 0x44, 0x46, 0x10, 0x02, 0x3a, 0x8f, 0x01, 0xea, 0x41, 0x8b, 0x01, 0x0a, 0x21, 0x61, 0x69, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x53, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, + 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2f, + 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x7d, 0x2a, 0x08, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x32, 0x07, 0x72, + 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x5b, 0x0a, 0x15, 0x52, 0x61, 0x67, + 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, + 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4f, + 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x22, 0x4f, 0x0a, 0x14, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, + 0x65, 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, + 0x0a, 0x18, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x70, + 0x64, 0x66, 0x5f, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x15, 0x75, 0x73, 0x65, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x50, 0x64, 0x66, + 0x50, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x86, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, + 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x22, 0x8a, 0x08, 0x0a, 0x14, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4b, 0x0a, 0x0a, 0x67, 0x63, 0x73, + 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x63, 0x73, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, - 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x47, 0x63, 0x73, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x79, 0x0a, 0x1d, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x62, 0x69, 0x67, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x5f, 0x73, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, + 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, + 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x0c, + 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x48, 0x00, 0x52, 0x0b, 0x73, 0x6c, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x4e, 0x0a, 0x0b, 0x6a, 0x69, 0x72, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6a, 0x69, 0x72, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x64, 0x0a, 0x13, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x48, 0x00, 0x52, 0x11, 0x73, 0x68, 0x61, 0x72, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x6a, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, + 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x69, 0x6e, + 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x44, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x47, 0x63, 0x73, 0x53, 0x69, 0x6e, + 0x6b, 0x12, 0x79, 0x0a, 0x1d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x69, + 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x62, 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x69, + 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x42, 0x69, 0x67, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, + 0x52, 0x1a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, + 0x42, 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x69, 0x6e, 0x6b, 0x12, 0x6f, 0x0a, 0x18, + 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, + 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, @@ -2650,4 +2585,4 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = nil file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_goTypes = nil file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_depIdxs = nil -} \ No newline at end of file +} From 64fbc6110f235292b1a28868b48e9296a04ceb14 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Wed, 18 Sep 2024 21:41:35 +0000 Subject: [PATCH 22/27] sequential list to return object instead of pointer --- storage/dataflux/integration_test.go | 6 ++++-- storage/dataflux/sequential.go | 13 ++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/storage/dataflux/integration_test.go b/storage/dataflux/integration_test.go index 63ff4c54b1b3..54cd1acfa044 100644 --- a/storage/dataflux/integration_test.go +++ b/storage/dataflux/integration_test.go @@ -93,6 +93,8 @@ func TestIntegration_NextBatch_All(t *testing.T) { } func TestIntegration_NextBatch(t *testing.T) { + // Accessing public bucket to list large number of files in batches. + // See https://cloud.google.com/storage/docs/public-datasets/landsat if testing.Short() { t.Skip("Integration tests skipped in short mode") } @@ -108,7 +110,7 @@ func TestIntegration_NextBatch(t *testing.T) { in := &ListerInput{ BucketName: landsatBucket, Query: storage.Query{Prefix: landsatPrefix}, - BatchSize: 2000, + BatchSize: 6000, } df := NewLister(c, in) @@ -123,7 +125,7 @@ func TestIntegration_NextBatch(t *testing.T) { if err == iterator.Done { break } - if len(objects) > in.BatchSize { + if len(objects) >= in.BatchSize { t.Errorf("expected to receive %d objects in each batch, got %d objects in a batch", in.BatchSize, len(objects)) } } diff --git a/storage/dataflux/sequential.go b/storage/dataflux/sequential.go index d9aa8e7f8927..d6408d59c39e 100644 --- a/storage/dataflux/sequential.go +++ b/storage/dataflux/sequential.go @@ -40,10 +40,11 @@ func (c *Lister) sequentialListing(ctx context.Context) ([]*storage.ObjectAttrs, objectIterator.PageInfo().MaxSize = defaultPageSize for { - nextToken, err := doListing(objectIterator, &result, c.skipDirectoryObjects, &objectsListed) + objects, nextToken, err := doListing(objectIterator, c.skipDirectoryObjects, &objectsListed) if err != nil { return nil, "", fmt.Errorf("failed while listing objects: %w", err) } + result = append(result, objects...) lastToken = nextToken if nextToken == "" || (c.batchSize > 0 && objectsListed >= c.batchSize) { break @@ -53,7 +54,9 @@ func (c *Lister) sequentialListing(ctx context.Context) ([]*storage.ObjectAttrs, return result, lastToken, nil } -func doListing(objectIterator *storage.ObjectIterator, result *[]*storage.ObjectAttrs, skipDirectoryObjects bool, objectsListed *int) (string, error) { +func doListing(objectIterator *storage.ObjectIterator, skipDirectoryObjects bool, objectsListed *int) ([]*storage.ObjectAttrs, string, error) { + + var result []*storage.ObjectAttrs for { attrs, err := objectIterator.Next() *objectsListed++ @@ -62,14 +65,14 @@ func doListing(objectIterator *storage.ObjectIterator, result *[]*storage.Object break } if err != nil { - return "", fmt.Errorf("iterating through objects %w", err) + return nil, "", fmt.Errorf("iterating through objects %w", err) } if !(skipDirectoryObjects && strings.HasSuffix(attrs.Name, "/")) { - *result = append(*result, attrs) + result = append(result, attrs) } if objectIterator.PageInfo().Remaining() == 0 { break } } - return objectIterator.PageInfo().Token, nil + return result, objectIterator.PageInfo().Token, nil } From d28cda22879532d9911c7b80872540da6b049c09 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Wed, 18 Sep 2024 21:48:57 +0000 Subject: [PATCH 23/27] fetch 5000 objects from gcs --- storage/dataflux/integration_test.go | 18 +++++++++--------- storage/dataflux/sequential.go | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/storage/dataflux/integration_test.go b/storage/dataflux/integration_test.go index 54cd1acfa044..35d73b60f68d 100644 --- a/storage/dataflux/integration_test.go +++ b/storage/dataflux/integration_test.go @@ -26,9 +26,9 @@ import ( "testing" "time" - "cloud.google.com/go/internal/testutil" "cloud.google.com/go/internal/uid" "cloud.google.com/go/storage" + "cloud.google.com/go/storage/dataflux" "google.golang.org/api/iterator" ) @@ -75,11 +75,11 @@ func TestIntegration_NextBatch_All(t *testing.T) { if err != nil { t.Fatalf("NewClient: %v", err) } - in := &ListerInput{ + in := &dataflux.ListerInput{ BucketName: httpTestBucket.bucket, } - df := NewLister(c, in) + df := dataflux.NewLister(c, in) defer df.Close() objects, err := df.NextBatch(ctx) @@ -93,7 +93,7 @@ func TestIntegration_NextBatch_All(t *testing.T) { } func TestIntegration_NextBatch(t *testing.T) { - // Accessing public bucket to list large number of files in batches. + // Accessing public bucket to list large number of files. // See https://cloud.google.com/storage/docs/public-datasets/landsat if testing.Short() { t.Skip("Integration tests skipped in short mode") @@ -107,13 +107,13 @@ func TestIntegration_NextBatch(t *testing.T) { t.Fatalf("NewClient: %v", err) } - in := &ListerInput{ + in := &dataflux.ListerInput{ BucketName: landsatBucket, Query: storage.Query{Prefix: landsatPrefix}, BatchSize: 6000, } - df := NewLister(c, in) + df := dataflux.NewLister(c, in) defer df.Close() totalObjects := 0 for { @@ -125,7 +125,7 @@ func TestIntegration_NextBatch(t *testing.T) { if err == iterator.Done { break } - if len(objects) >= in.BatchSize { + if len(objects) > in.BatchSize { t.Errorf("expected to receive %d objects in each batch, got %d objects in a batch", in.BatchSize, len(objects)) } } @@ -170,7 +170,7 @@ func deleteExpiredBuckets(prefix string) error { return fmt.Errorf("NewClient: %v", err) } - projectID := testutil.ProjID() + projectID := "zimbruplayground" it := client.Buckets(ctx, projectID) it.Prefix = prefix for { @@ -259,7 +259,7 @@ func (tb *downloadTestBucket) Create(prefix string) error { defer client.Close() b := client.Bucket(tb.bucket) - if err := b.Create(ctx, testutil.ProjID(), nil); err != nil { + if err := b.Create(ctx, "zimbruplayground", nil); err != nil { return fmt.Errorf("bucket(%q).Create: %v", tb.bucket, err) } diff --git a/storage/dataflux/sequential.go b/storage/dataflux/sequential.go index d6408d59c39e..2da88242c122 100644 --- a/storage/dataflux/sequential.go +++ b/storage/dataflux/sequential.go @@ -25,7 +25,7 @@ import ( const ( // defaultPageSize specifies the number of object results to include on a single page. - defaultPageSize = 2000 + defaultPageSize = 5000 ) // sequentialListing performs a sequential listing on the given bucket. From 081b8a7c2d6cffc5c485ed18c2617786737064cf Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Wed, 18 Sep 2024 22:05:28 +0000 Subject: [PATCH 24/27] fetch 5000 objects from gcs --- storage/dataflux/integration_test.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/storage/dataflux/integration_test.go b/storage/dataflux/integration_test.go index 35d73b60f68d..193356dc6c83 100644 --- a/storage/dataflux/integration_test.go +++ b/storage/dataflux/integration_test.go @@ -26,9 +26,9 @@ import ( "testing" "time" + "cloud.google.com/go/internal/testutil" "cloud.google.com/go/internal/uid" "cloud.google.com/go/storage" - "cloud.google.com/go/storage/dataflux" "google.golang.org/api/iterator" ) @@ -75,11 +75,11 @@ func TestIntegration_NextBatch_All(t *testing.T) { if err != nil { t.Fatalf("NewClient: %v", err) } - in := &dataflux.ListerInput{ + in := &ListerInput{ BucketName: httpTestBucket.bucket, } - df := dataflux.NewLister(c, in) + df := NewLister(c, in) defer df.Close() objects, err := df.NextBatch(ctx) @@ -93,7 +93,7 @@ func TestIntegration_NextBatch_All(t *testing.T) { } func TestIntegration_NextBatch(t *testing.T) { - // Accessing public bucket to list large number of files. + // Accessing public bucket to list large number of files in batches. // See https://cloud.google.com/storage/docs/public-datasets/landsat if testing.Short() { t.Skip("Integration tests skipped in short mode") @@ -107,13 +107,13 @@ func TestIntegration_NextBatch(t *testing.T) { t.Fatalf("NewClient: %v", err) } - in := &dataflux.ListerInput{ + in := &ListerInput{ BucketName: landsatBucket, Query: storage.Query{Prefix: landsatPrefix}, BatchSize: 6000, } - df := dataflux.NewLister(c, in) + df := NewLister(c, in) defer df.Close() totalObjects := 0 for { @@ -170,7 +170,7 @@ func deleteExpiredBuckets(prefix string) error { return fmt.Errorf("NewClient: %v", err) } - projectID := "zimbruplayground" + projectID := testutil.ProjID() it := client.Buckets(ctx, projectID) it.Prefix = prefix for { @@ -259,7 +259,7 @@ func (tb *downloadTestBucket) Create(prefix string) error { defer client.Close() b := client.Bucket(tb.bucket) - if err := b.Create(ctx, "zimbruplayground", nil); err != nil { + if err := b.Create(ctx, testutil.ProjID(), nil); err != nil { return fmt.Errorf("bucket(%q).Create: %v", tb.bucket, err) } From b84b32436c5452a626cd43451de635357fe56670 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Thu, 19 Sep 2024 02:16:39 +0000 Subject: [PATCH 25/27] make worker status unexported, round up batchsize comment --- storage/dataflux/fast_list.go | 1 + storage/dataflux/sequential.go | 20 +++++++++++--------- storage/dataflux/worksteal.go | 14 +++++++------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/storage/dataflux/fast_list.go b/storage/dataflux/fast_list.go index 8103aa55f0a9..116926b9ad54 100644 --- a/storage/dataflux/fast_list.go +++ b/storage/dataflux/fast_list.go @@ -45,6 +45,7 @@ type ListerInput struct { Parallelism int // BatchSize is the number of objects to list. Default value returns all objects at once. Optional. + // The number of objects returned will be rounded up to a multiple of gcs page size. BatchSize int // Query is the query to filter objects for listing. Default value is nil. Optional. diff --git a/storage/dataflux/sequential.go b/storage/dataflux/sequential.go index 2da88242c122..e68d733df879 100644 --- a/storage/dataflux/sequential.go +++ b/storage/dataflux/sequential.go @@ -40,12 +40,13 @@ func (c *Lister) sequentialListing(ctx context.Context) ([]*storage.ObjectAttrs, objectIterator.PageInfo().MaxSize = defaultPageSize for { - objects, nextToken, err := doListing(objectIterator, c.skipDirectoryObjects, &objectsListed) + objects, nextToken, numObjects, err := doListing(objectIterator, c.skipDirectoryObjects) if err != nil { return nil, "", fmt.Errorf("failed while listing objects: %w", err) } result = append(result, objects...) lastToken = nextToken + objectsListed += numObjects if nextToken == "" || (c.batchSize > 0 && objectsListed >= c.batchSize) { break } @@ -54,18 +55,18 @@ func (c *Lister) sequentialListing(ctx context.Context) ([]*storage.ObjectAttrs, return result, lastToken, nil } -func doListing(objectIterator *storage.ObjectIterator, skipDirectoryObjects bool, objectsListed *int) ([]*storage.ObjectAttrs, string, error) { +func doListing(objectIterator *storage.ObjectIterator, skipDirectoryObjects bool) (result []*storage.ObjectAttrs, token string, objectsListed int, err error) { - var result []*storage.ObjectAttrs for { - attrs, err := objectIterator.Next() - *objectsListed++ + attrs, errObjectIterator := objectIterator.Next() + objectsListed++ // Stop listing when all the requested objects have been listed. - if err == iterator.Done { + if errObjectIterator == iterator.Done { break } - if err != nil { - return nil, "", fmt.Errorf("iterating through objects %w", err) + if errObjectIterator != nil { + err = fmt.Errorf("iterating through objects %w", errObjectIterator) + return } if !(skipDirectoryObjects && strings.HasSuffix(attrs.Name, "/")) { result = append(result, attrs) @@ -74,5 +75,6 @@ func doListing(objectIterator *storage.ObjectIterator, skipDirectoryObjects bool break } } - return result, objectIterator.PageInfo().Token, nil + token = objectIterator.PageInfo().Token + return } diff --git a/storage/dataflux/worksteal.go b/storage/dataflux/worksteal.go index 0c89de1cefe9..bd73bcab5043 100644 --- a/storage/dataflux/worksteal.go +++ b/storage/dataflux/worksteal.go @@ -21,14 +21,14 @@ import ( "cloud.google.com/go/storage" ) -// WorkerStatus indicates the status of a worker. -type WorkerStatus int +// workerStatus indicates the status of a worker. +type workerStatus int const ( - // Idle status shows that the worker is currently not listing. - Idle WorkerStatus = iota - // Active status shows that the worker is currently listing objects within assigned range. - Active + // idle status shows that the worker is currently not listing. + idle workerStatus = iota + // active status shows that the worker is currently listing objects within assigned range. + active ) type listerResult struct { @@ -40,7 +40,7 @@ type worker struct { goroutineID int startRange string endRange string - status WorkerStatus + status workerStatus rangesplitter *rangeSplitter idleChannel chan int result *listerResult From 367172cc4d3535b8d9d7701a95fa83923a245196 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Thu, 19 Sep 2024 21:17:14 +0000 Subject: [PATCH 26/27] add comment to use no acl --- storage/dataflux/fast_list.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/storage/dataflux/fast_list.go b/storage/dataflux/fast_list.go index 116926b9ad54..45a59758ee0c 100644 --- a/storage/dataflux/fast_list.go +++ b/storage/dataflux/fast_list.go @@ -49,6 +49,8 @@ type ListerInput struct { BatchSize int // Query is the query to filter objects for listing. Default value is nil. Optional. + //Use ProjectionNoACL For faster listing. ACL is expensive and this results in fewer objects + // to be returned from GCS in each API call. Query storage.Query // SkipDirectoryObjects is to indicate whether to list directory objects. Default value is false. Optional. From af913aa5ebaaa8ce1690930560aaa93a61f4eee7 Mon Sep 17 00:00:00 2001 From: Akansha Maloo Date: Thu, 19 Sep 2024 21:20:46 +0000 Subject: [PATCH 27/27] update with go mod tidy --- storage/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/go.mod b/storage/go.mod index 009888a87639..73ad3c0d97ba 100644 --- a/storage/go.mod +++ b/storage/go.mod @@ -18,6 +18,7 @@ require ( go.opentelemetry.io/otel/sdk v1.29.0 go.opentelemetry.io/otel/sdk/metric v1.29.0 golang.org/x/oauth2 v0.23.0 + golang.org/x/sync v0.8.0 google.golang.org/api v0.197.0 google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 @@ -53,7 +54,6 @@ require ( go.opentelemetry.io/otel/trace v1.29.0 // indirect golang.org/x/crypto v0.27.0 // indirect golang.org/x/net v0.29.0 // indirect - golang.org/x/sync v0.8.0 // indirect golang.org/x/sys v0.25.0 // indirect golang.org/x/text v0.18.0 // indirect golang.org/x/time v0.6.0 // indirect