// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.34.1 // protoc (unknown) // source: audit/v1/audit_event.proto package auditV1 import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" anypb "google.golang.org/protobuf/types/known/anypb" structpb "google.golang.org/protobuf/types/known/structpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) // The severity of the event described in a log entry, expressed as one of the // standard severity levels listed below. For your reference, the levels are // assigned the listed numeric values. The effect of using numeric values other // than those listed is undefined. // Copied from // https://github.com/googleapis/googleapis/blob/master/google/logging/type/log_severity.proto type LogSeverity int32 const ( // (0) The log entry has no assigned severity level. LogSeverity_DEFAULT LogSeverity = 0 // (100) Debug or trace information. LogSeverity_DEBUG LogSeverity = 100 // (200) Routine information, such as ongoing status or performance. LogSeverity_INFO LogSeverity = 200 // (300) Normal but significant events, such as start up, shut down, or // a configuration change. LogSeverity_NOTICE LogSeverity = 300 // (400) Warning events might cause problems. LogSeverity_WARNING LogSeverity = 400 // (500) Error events are likely to cause problems. LogSeverity_ERROR LogSeverity = 500 // (600) Critical events cause more severe problems or outages. LogSeverity_CRITICAL LogSeverity = 600 // (700) A person must take an action immediately. LogSeverity_ALERT LogSeverity = 700 // (800) One or more systems are unusable. LogSeverity_EMERGENCY LogSeverity = 800 ) // Enum value maps for LogSeverity. var ( LogSeverity_name = map[int32]string{ 0: "DEFAULT", 100: "DEBUG", 200: "INFO", 300: "NOTICE", 400: "WARNING", 500: "ERROR", 600: "CRITICAL", 700: "ALERT", 800: "EMERGENCY", } LogSeverity_value = map[string]int32{ "DEFAULT": 0, "DEBUG": 100, "INFO": 200, "NOTICE": 300, "WARNING": 400, "ERROR": 500, "CRITICAL": 600, "ALERT": 700, "EMERGENCY": 800, } ) func (x LogSeverity) Enum() *LogSeverity { p := new(LogSeverity) *p = x return p } func (x LogSeverity) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (LogSeverity) Descriptor() protoreflect.EnumDescriptor { return file_audit_v1_audit_event_proto_enumTypes[0].Descriptor() } func (LogSeverity) Type() protoreflect.EnumType { return &file_audit_v1_audit_event_proto_enumTypes[0] } func (x LogSeverity) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use LogSeverity.Descriptor instead. func (LogSeverity) EnumDescriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{0} } // The data within all Cloud Audit Logs log entry events. // Equivalent to Google's LogEntryData. type AuditEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The resource name of the log to which this log entry belongs. LogName string `protobuf:"bytes,12,opt,name=log_name,json=logName,proto3" json:"log_name,omitempty"` // The monitored resource that produced this log entry. // // Example: a log entry that reports a database error would be associated with // the monitored resource designating the particular database that reported // the error. Resource *MonitoredResource `protobuf:"bytes,8,opt,name=resource,proto3" json:"resource,omitempty"` // The log entry payload, which is always an AuditLog for Cloud Audit Log // events. ProtoPayload *AuditLog `protobuf:"bytes,2,opt,name=proto_payload,json=protoPayload,proto3" json:"proto_payload,omitempty"` // A unique identifier for the log entry. InsertId string `protobuf:"bytes,4,opt,name=insert_id,json=insertId,proto3" json:"insert_id,omitempty"` // A set of user-defined (key, value) data that provides additional // information about the log entry. Labels map[string]string `protobuf:"bytes,11,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Information about an operation associated with the log entry, if // applicable. Operation *LogEntryOperation `protobuf:"bytes,15,opt,name=operation,proto3" json:"operation,omitempty"` // The time the event described by the log entry occurred. Timestamp *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // The time the log entry was received by Logging. ReceiveTimestamp *timestamppb.Timestamp `protobuf:"bytes,24,opt,name=receive_timestamp,json=receiveTimestamp,proto3" json:"receive_timestamp,omitempty"` // The severity of the log entry. Severity LogSeverity `protobuf:"varint,10,opt,name=severity,proto3,enum=audit.v1.LogSeverity" json:"severity,omitempty"` // Resource name of the trace associated with the log entry, if any. If it // contains a relative resource name, the name is assumed to be relative to // `//tracing.googleapis.com`. Example: // `projects/my-projectid/traces/06796866738c859f2f19b7cfb3214824` Trace string `protobuf:"bytes,22,opt,name=trace,proto3" json:"trace,omitempty"` // The span ID within the trace associated with the log entry, if any. // // For Trace spans, this is the same format that the Trace API v2 uses: a // 16-character hexadecimal encoding of an 8-byte array, such as // `000000000000004a`. SpanId string `protobuf:"bytes,27,opt,name=span_id,json=spanId,proto3" json:"span_id,omitempty"` // Information indicating this LogEntry is part of a sequence of multiple logs // split from a single LogEntry. Split *LogSplit `protobuf:"bytes,35,opt,name=split,proto3" json:"split,omitempty"` } func (x *AuditEvent) Reset() { *x = AuditEvent{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AuditEvent) String() string { return protoimpl.X.MessageStringOf(x) } func (*AuditEvent) ProtoMessage() {} func (x *AuditEvent) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[0] 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 AuditEvent.ProtoReflect.Descriptor instead. func (*AuditEvent) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{0} } func (x *AuditEvent) GetLogName() string { if x != nil { return x.LogName } return "" } func (x *AuditEvent) GetResource() *MonitoredResource { if x != nil { return x.Resource } return nil } func (x *AuditEvent) GetProtoPayload() *AuditLog { if x != nil { return x.ProtoPayload } return nil } func (x *AuditEvent) GetInsertId() string { if x != nil { return x.InsertId } return "" } func (x *AuditEvent) GetLabels() map[string]string { if x != nil { return x.Labels } return nil } func (x *AuditEvent) GetOperation() *LogEntryOperation { if x != nil { return x.Operation } return nil } func (x *AuditEvent) GetTimestamp() *timestamppb.Timestamp { if x != nil { return x.Timestamp } return nil } func (x *AuditEvent) GetReceiveTimestamp() *timestamppb.Timestamp { if x != nil { return x.ReceiveTimestamp } return nil } func (x *AuditEvent) GetSeverity() LogSeverity { if x != nil { return x.Severity } return LogSeverity_DEFAULT } func (x *AuditEvent) GetTrace() string { if x != nil { return x.Trace } return "" } func (x *AuditEvent) GetSpanId() string { if x != nil { return x.SpanId } return "" } func (x *AuditEvent) GetSplit() *LogSplit { if x != nil { return x.Split } return nil } // An object representing a resource that can be used for monitoring, logging, // billing, or other purposes. type MonitoredResource struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Required. The monitored resource type. For example, the type of a // Compute Engine VM instance is `gce_instance`. Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Values for all of the labels listed in the associated monitored // resource descriptor. For example, Compute Engine VM instances use the // labels `"project_id"`, `"instance_id"`, and `"zone"`. Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *MonitoredResource) Reset() { *x = MonitoredResource{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MonitoredResource) String() string { return protoimpl.X.MessageStringOf(x) } func (*MonitoredResource) ProtoMessage() {} func (x *MonitoredResource) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[1] 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 MonitoredResource.ProtoReflect.Descriptor instead. func (*MonitoredResource) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{1} } func (x *MonitoredResource) GetType() string { if x != nil { return x.Type } return "" } func (x *MonitoredResource) GetLabels() map[string]string { if x != nil { return x.Labels } return nil } // Additional information about a potentially long-running operation with which // a log entry is associated. type LogEntryOperation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // An arbitrary operation identifier. Log entries with the same // identifier are assumed to be part of the same operation. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // An arbitrary producer identifier. The combination of `id` and // `producer` must be globally unique. Examples for `producer`: // `"MyDivision.MyBigCompany.com"`, `"github.com/MyProject/MyApplication"`. Producer string `protobuf:"bytes,2,opt,name=producer,proto3" json:"producer,omitempty"` // True if this is the first log entry in the operation. First bool `protobuf:"varint,3,opt,name=first,proto3" json:"first,omitempty"` // True if this is the last log entry in the operation. Last bool `protobuf:"varint,4,opt,name=last,proto3" json:"last,omitempty"` } func (x *LogEntryOperation) Reset() { *x = LogEntryOperation{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LogEntryOperation) String() string { return protoimpl.X.MessageStringOf(x) } func (*LogEntryOperation) ProtoMessage() {} func (x *LogEntryOperation) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[2] 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 LogEntryOperation.ProtoReflect.Descriptor instead. func (*LogEntryOperation) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{2} } func (x *LogEntryOperation) GetId() string { if x != nil { return x.Id } return "" } func (x *LogEntryOperation) GetProducer() string { if x != nil { return x.Producer } return "" } func (x *LogEntryOperation) GetFirst() bool { if x != nil { return x.First } return false } func (x *LogEntryOperation) GetLast() bool { if x != nil { return x.Last } return false } // Common audit log format for Google Cloud Platform API operations. // Copied from // https://github.com/googleapis/googleapis/blob/master/google/cloud/audit/audit_log.proto, // but changing service_data from Any to Struct. type AuditLog struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The name of the API service performing the operation. For example, // `"datastore.googleapis.com"`. ServiceName string `protobuf:"bytes,7,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` // The name of the service method or operation. // For API calls, this should be the name of the API method. // For example, // // "google.datastore.v1.Datastore.RunQuery" // "google.logging.v1.LoggingService.DeleteLog" MethodName string `protobuf:"bytes,8,opt,name=method_name,json=methodName,proto3" json:"method_name,omitempty"` // The resource or collection that is the target of the operation. // The name is a scheme-less URI, not including the API service name. // For example: // // "shelves/SHELF_ID/books" // "shelves/SHELF_ID/books/BOOK_ID" ResourceName string `protobuf:"bytes,11,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"` // The resource location information. ResourceLocation *ResourceLocation `protobuf:"bytes,20,opt,name=resource_location,json=resourceLocation,proto3" json:"resource_location,omitempty"` // The resource's original state before mutation. Present only for // operations which have successfully modified the targeted resource(s). // In general, this field should contain all changed fields, except those // that are already been included in `request`, `response`, `metadata` or // `service_data` fields. // When the JSON object represented here has a proto equivalent, // the proto name will be indicated in the `@type` property. ResourceOriginalState *structpb.Struct `protobuf:"bytes,19,opt,name=resource_original_state,json=resourceOriginalState,proto3" json:"resource_original_state,omitempty"` // The number of items returned from a List or Query API method, // if applicable. NumResponseItems int64 `protobuf:"varint,12,opt,name=num_response_items,json=numResponseItems,proto3" json:"num_response_items,omitempty"` // The status of the overall operation. Status *RpcStatus `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // Authentication information. AuthenticationInfo *AuthenticationInfo `protobuf:"bytes,3,opt,name=authentication_info,json=authenticationInfo,proto3" json:"authentication_info,omitempty"` // Authorization information. If there are multiple // resources or permissions involved, then there is // one AuthorizationInfo element for each {resource, permission} tuple. AuthorizationInfo []*AuthorizationInfo `protobuf:"bytes,9,rep,name=authorization_info,json=authorizationInfo,proto3" json:"authorization_info,omitempty"` // Metadata about the operation. RequestMetadata *RequestMetadata `protobuf:"bytes,4,opt,name=request_metadata,json=requestMetadata,proto3" json:"request_metadata,omitempty"` // The operation request. This may not include all request parameters, // such as those that are too large, privacy-sensitive, or duplicated // elsewhere in the log record. // It should never include user-generated data, such as file contents. // When the JSON object represented here has a proto equivalent, the proto // name will be indicated in the `@type` property. Request *structpb.Struct `protobuf:"bytes,16,opt,name=request,proto3" json:"request,omitempty"` // The operation response. This may not include all response elements, // such as those that are too large, privacy-sensitive, or duplicated // elsewhere in the log record. // It should never include user-generated data, such as file contents. // When the JSON object represented here has a proto equivalent, the proto // name will be indicated in the `@type` property. Response *structpb.Struct `protobuf:"bytes,17,opt,name=response,proto3" json:"response,omitempty"` // Other service-specific data about the request, response, and other // information associated with the current audited event. Metadata *structpb.Struct `protobuf:"bytes,18,opt,name=metadata,proto3" json:"metadata,omitempty"` // Deprecated: Use `metadata` field instead. // Other service-specific data about the request, response, and other // activities. // When the JSON object represented here has a proto equivalent, the proto // name will be indicated in the `@type` property. ServiceData *structpb.Struct `protobuf:"bytes,15,opt,name=service_data,json=serviceData,proto3" json:"service_data,omitempty"` } func (x *AuditLog) Reset() { *x = AuditLog{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AuditLog) String() string { return protoimpl.X.MessageStringOf(x) } func (*AuditLog) ProtoMessage() {} func (x *AuditLog) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[3] 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 AuditLog.ProtoReflect.Descriptor instead. func (*AuditLog) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{3} } func (x *AuditLog) GetServiceName() string { if x != nil { return x.ServiceName } return "" } func (x *AuditLog) GetMethodName() string { if x != nil { return x.MethodName } return "" } func (x *AuditLog) GetResourceName() string { if x != nil { return x.ResourceName } return "" } func (x *AuditLog) GetResourceLocation() *ResourceLocation { if x != nil { return x.ResourceLocation } return nil } func (x *AuditLog) GetResourceOriginalState() *structpb.Struct { if x != nil { return x.ResourceOriginalState } return nil } func (x *AuditLog) GetNumResponseItems() int64 { if x != nil { return x.NumResponseItems } return 0 } func (x *AuditLog) GetStatus() *RpcStatus { if x != nil { return x.Status } return nil } func (x *AuditLog) GetAuthenticationInfo() *AuthenticationInfo { if x != nil { return x.AuthenticationInfo } return nil } func (x *AuditLog) GetAuthorizationInfo() []*AuthorizationInfo { if x != nil { return x.AuthorizationInfo } return nil } func (x *AuditLog) GetRequestMetadata() *RequestMetadata { if x != nil { return x.RequestMetadata } return nil } func (x *AuditLog) GetRequest() *structpb.Struct { if x != nil { return x.Request } return nil } func (x *AuditLog) GetResponse() *structpb.Struct { if x != nil { return x.Response } return nil } func (x *AuditLog) GetMetadata() *structpb.Struct { if x != nil { return x.Metadata } return nil } func (x *AuditLog) GetServiceData() *structpb.Struct { if x != nil { return x.ServiceData } return nil } // Authentication information for the operation. type AuthenticationInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The email address of the authenticated user (or service account on behalf // of third party principal) making the request. For third party identity // callers, the `principal_subject` field is populated instead of this field. // For privacy reasons, the principal email address is sometimes redacted. // For more information, see [Caller identities in audit // logs](https://cloud.google.com/logging/docs/audit#user-id). PrincipalEmail string `protobuf:"bytes,1,opt,name=principal_email,json=principalEmail,proto3" json:"principal_email,omitempty"` // The authority selector specified by the requestor, if any. // It is not guaranteed that the principal was allowed to use this authority. AuthoritySelector string `protobuf:"bytes,2,opt,name=authority_selector,json=authoritySelector,proto3" json:"authority_selector,omitempty"` // The third party identification (if any) of the authenticated user making // the request. // When the JSON object represented here has a proto equivalent, the proto // name will be indicated in the `@type` property. ThirdPartyPrincipal *structpb.Struct `protobuf:"bytes,4,opt,name=third_party_principal,json=thirdPartyPrincipal,proto3" json:"third_party_principal,omitempty"` // The name of the service account key used to create or exchange // credentials for authenticating the service account making the request. // This is a scheme-less URI full resource name. For example: // // "//iam.googleapis.com/projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{key}" ServiceAccountKeyName string `protobuf:"bytes,5,opt,name=service_account_key_name,json=serviceAccountKeyName,proto3" json:"service_account_key_name,omitempty"` // Identity delegation history of an authenticated service account that makes // the request. It contains information on the real authorities that try to // access GCP resources by delegating on a service account. When multiple // authorities present, they are guaranteed to be sorted based on the original // ordering of the identity delegation events. ServiceAccountDelegationInfo []*ServiceAccountDelegationInfo `protobuf:"bytes,6,rep,name=service_account_delegation_info,json=serviceAccountDelegationInfo,proto3" json:"service_account_delegation_info,omitempty"` // String representation of identity of requesting party. // Populated for both first and third party identities. PrincipalSubject string `protobuf:"bytes,8,opt,name=principal_subject,json=principalSubject,proto3" json:"principal_subject,omitempty"` } func (x *AuthenticationInfo) Reset() { *x = AuthenticationInfo{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AuthenticationInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*AuthenticationInfo) ProtoMessage() {} func (x *AuthenticationInfo) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[4] 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 AuthenticationInfo.ProtoReflect.Descriptor instead. func (*AuthenticationInfo) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{4} } func (x *AuthenticationInfo) GetPrincipalEmail() string { if x != nil { return x.PrincipalEmail } return "" } func (x *AuthenticationInfo) GetAuthoritySelector() string { if x != nil { return x.AuthoritySelector } return "" } func (x *AuthenticationInfo) GetThirdPartyPrincipal() *structpb.Struct { if x != nil { return x.ThirdPartyPrincipal } return nil } func (x *AuthenticationInfo) GetServiceAccountKeyName() string { if x != nil { return x.ServiceAccountKeyName } return "" } func (x *AuthenticationInfo) GetServiceAccountDelegationInfo() []*ServiceAccountDelegationInfo { if x != nil { return x.ServiceAccountDelegationInfo } return nil } func (x *AuthenticationInfo) GetPrincipalSubject() string { if x != nil { return x.PrincipalSubject } return "" } // Authorization information for the operation. type AuthorizationInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The resource being accessed, as a REST-style string. For example: // // bigquery.googleapis.com/projects/PROJECTID/datasets/DATASETID Resource string `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` // The required IAM permission. Permission string `protobuf:"bytes,2,opt,name=permission,proto3" json:"permission,omitempty"` // Whether or not authorization for `resource` and `permission` // was granted. Granted bool `protobuf:"varint,3,opt,name=granted,proto3" json:"granted,omitempty"` // Resource attributes used in IAM condition evaluation. This field contains // resource attributes like resource type and resource name. // // To get the whole view of the attributes used in IAM // condition evaluation, the user must also look into // `AuditLogData.request_metadata.request_attributes`. ResourceAttributes *AttributeContext_Resource `protobuf:"bytes,5,opt,name=resource_attributes,json=resourceAttributes,proto3" json:"resource_attributes,omitempty"` } func (x *AuthorizationInfo) Reset() { *x = AuthorizationInfo{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AuthorizationInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*AuthorizationInfo) ProtoMessage() {} func (x *AuthorizationInfo) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[5] 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 AuthorizationInfo.ProtoReflect.Descriptor instead. func (*AuthorizationInfo) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{5} } func (x *AuthorizationInfo) GetResource() string { if x != nil { return x.Resource } return "" } func (x *AuthorizationInfo) GetPermission() string { if x != nil { return x.Permission } return "" } func (x *AuthorizationInfo) GetGranted() bool { if x != nil { return x.Granted } return false } func (x *AuthorizationInfo) GetResourceAttributes() *AttributeContext_Resource { if x != nil { return x.ResourceAttributes } return nil } // This message defines the standard attribute vocabulary for Google APIs. // // An attribute is a piece of metadata that describes an activity on a network // service. For example, the size of an HTTP request, or the status code of // an HTTP response. // // Each attribute has a type and a name, which is logically defined as // a proto message field in `AttributeContext`. The field type becomes the // attribute type, and the field path becomes the attribute name. For example, // the attribute `source.ip` maps to field `AttributeContext.source.ip`. // // This message definition is guaranteed not to have any wire breaking change. // So you can use it directly for passing attributes across different systems. // // NOTE: Different system may generate different subset of attributes. Please // verify the system specification before relying on an attribute generated // a system. type AttributeContext struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *AttributeContext) Reset() { *x = AttributeContext{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AttributeContext) String() string { return protoimpl.X.MessageStringOf(x) } func (*AttributeContext) ProtoMessage() {} func (x *AttributeContext) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[6] 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 AttributeContext.ProtoReflect.Descriptor instead. func (*AttributeContext) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{6} } // Metadata about the request. type RequestMetadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The IP address of the caller. // For caller from internet, this will be public IPv4 or IPv6 address. // For caller from a Compute Engine VM with external IP address, this // will be the VM's external IP address. For caller from a Compute // Engine VM without external IP address, if the VM is in the same // organization (or project) as the accessed resource, `caller_ip` will // be the VM's internal IPv4 address, otherwise the `caller_ip` will be // redacted to "gce-internal-ip". // See https://cloud.google.com/compute/docs/vpc/ for more information. CallerIp string `protobuf:"bytes,1,opt,name=caller_ip,json=callerIp,proto3" json:"caller_ip,omitempty"` // The user agent of the caller. // This information is not authenticated and should be treated accordingly. // For example: // // - `google-api-python-client/1.4.0`: // The request was made by the Google API client for Python. // - `Cloud SDK Command Line Tool apitools-client/1.0 gcloud/0.9.62`: // The request was made by the Google Cloud SDK CLI (gcloud). // - `AppEngine-Google; (+http://code.google.com/appengine; appid: // // s~my-project`: // // The request was made from the `my-project` App Engine app. CallerSuppliedUserAgent string `protobuf:"bytes,2,opt,name=caller_supplied_user_agent,json=callerSuppliedUserAgent,proto3" json:"caller_supplied_user_agent,omitempty"` // The network of the caller. // Set only if the network host project is part of the same GCP organization // (or project) as the accessed resource. // See https://cloud.google.com/compute/docs/vpc/ for more information. // This is a scheme-less URI full resource name. For example: // // "//compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK_ID" CallerNetwork string `protobuf:"bytes,3,opt,name=caller_network,json=callerNetwork,proto3" json:"caller_network,omitempty"` // Request attributes used in IAM condition evaluation. This field contains // request attributes like request time and access levels associated with // the request. // // To get the whole view of the attributes used in IAM // condition evaluation, the user must also look into // `AuditLog.authentication_info.resource_attributes`. RequestAttributes *AttributeContext_Request `protobuf:"bytes,7,opt,name=request_attributes,json=requestAttributes,proto3" json:"request_attributes,omitempty"` // The destination of a network activity, such as accepting a TCP connection. // In a multi hop network activity, the destination represents the receiver of // the last hop. Only two fields are used in this message, Peer.port and // Peer.ip. These fields are optionally populated by those services utilizing // the IAM condition feature. DestinationAttributes *AttributeContext_Peer `protobuf:"bytes,8,opt,name=destination_attributes,json=destinationAttributes,proto3" json:"destination_attributes,omitempty"` } func (x *RequestMetadata) Reset() { *x = RequestMetadata{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RequestMetadata) String() string { return protoimpl.X.MessageStringOf(x) } func (*RequestMetadata) ProtoMessage() {} func (x *RequestMetadata) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[7] 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 RequestMetadata.ProtoReflect.Descriptor instead. func (*RequestMetadata) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{7} } func (x *RequestMetadata) GetCallerIp() string { if x != nil { return x.CallerIp } return "" } func (x *RequestMetadata) GetCallerSuppliedUserAgent() string { if x != nil { return x.CallerSuppliedUserAgent } return "" } func (x *RequestMetadata) GetCallerNetwork() string { if x != nil { return x.CallerNetwork } return "" } func (x *RequestMetadata) GetRequestAttributes() *AttributeContext_Request { if x != nil { return x.RequestAttributes } return nil } func (x *RequestMetadata) GetDestinationAttributes() *AttributeContext_Peer { if x != nil { return x.DestinationAttributes } return nil } // Location information about a resource. type ResourceLocation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The locations of a resource after the execution of the operation. // Requests to create or delete a location based resource must populate // the 'current_locations' field and not the 'original_locations' field. // For example: // // "europe-west1-a" // "us-east1" // "nam3" CurrentLocations []string `protobuf:"bytes,1,rep,name=current_locations,json=currentLocations,proto3" json:"current_locations,omitempty"` // The locations of a resource prior to the execution of the operation. // Requests that mutate the resource's location must populate both the // 'original_locations' as well as the 'current_locations' fields. // For example: // // "europe-west1-a" // "us-east1" // "nam3" OriginalLocations []string `protobuf:"bytes,2,rep,name=original_locations,json=originalLocations,proto3" json:"original_locations,omitempty"` } func (x *ResourceLocation) Reset() { *x = ResourceLocation{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ResourceLocation) String() string { return protoimpl.X.MessageStringOf(x) } func (*ResourceLocation) ProtoMessage() {} func (x *ResourceLocation) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[8] 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 ResourceLocation.ProtoReflect.Descriptor instead. func (*ResourceLocation) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{8} } func (x *ResourceLocation) GetCurrentLocations() []string { if x != nil { return x.CurrentLocations } return nil } func (x *ResourceLocation) GetOriginalLocations() []string { if x != nil { return x.OriginalLocations } return nil } // The `Status` type defines a logical error model that is suitable for // different programming environments, including REST APIs and RPC APIs. It is // used by [gRPC](https://github.com/grpc). Each `Status` message contains // three pieces of data: error code, error message, and error details. // // You can find out more about this error model and how to work with it in the // [API Design Guide](https://cloud.google.com/apis/design/errors). type RpcStatus struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` // A developer-facing error message, which should be in English. Any // user-facing error message should be localized and sent in the // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` // A list of messages that carry the error details. There is a common set of // message types for APIs to use. Details []*anypb.Any `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty"` } func (x *RpcStatus) Reset() { *x = RpcStatus{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RpcStatus) String() string { return protoimpl.X.MessageStringOf(x) } func (*RpcStatus) ProtoMessage() {} func (x *RpcStatus) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[9] 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 RpcStatus.ProtoReflect.Descriptor instead. func (*RpcStatus) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{9} } func (x *RpcStatus) GetCode() int32 { if x != nil { return x.Code } return 0 } func (x *RpcStatus) GetMessage() string { if x != nil { return x.Message } return "" } func (x *RpcStatus) GetDetails() []*anypb.Any { if x != nil { return x.Details } return nil } // Identity delegation history of an authenticated service account. type ServiceAccountDelegationInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Entity that creates credentials for service account and assumes its // identity for authentication. // // Types that are assignable to Authority: // // *ServiceAccountDelegationInfo_FirstPartyPrincipal_ // *ServiceAccountDelegationInfo_ThirdPartyPrincipal_ Authority isServiceAccountDelegationInfo_Authority `protobuf_oneof:"Authority"` } func (x *ServiceAccountDelegationInfo) Reset() { *x = ServiceAccountDelegationInfo{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ServiceAccountDelegationInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*ServiceAccountDelegationInfo) ProtoMessage() {} func (x *ServiceAccountDelegationInfo) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[10] 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 ServiceAccountDelegationInfo.ProtoReflect.Descriptor instead. func (*ServiceAccountDelegationInfo) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{10} } func (m *ServiceAccountDelegationInfo) GetAuthority() isServiceAccountDelegationInfo_Authority { if m != nil { return m.Authority } return nil } func (x *ServiceAccountDelegationInfo) GetFirstPartyPrincipal() *ServiceAccountDelegationInfo_FirstPartyPrincipal { if x, ok := x.GetAuthority().(*ServiceAccountDelegationInfo_FirstPartyPrincipal_); ok { return x.FirstPartyPrincipal } return nil } func (x *ServiceAccountDelegationInfo) GetThirdPartyPrincipal() *ServiceAccountDelegationInfo_ThirdPartyPrincipal { if x, ok := x.GetAuthority().(*ServiceAccountDelegationInfo_ThirdPartyPrincipal_); ok { return x.ThirdPartyPrincipal } return nil } type isServiceAccountDelegationInfo_Authority interface { isServiceAccountDelegationInfo_Authority() } type ServiceAccountDelegationInfo_FirstPartyPrincipal_ struct { // First party (Google) identity as the real authority. FirstPartyPrincipal *ServiceAccountDelegationInfo_FirstPartyPrincipal `protobuf:"bytes,1,opt,name=first_party_principal,json=firstPartyPrincipal,proto3,oneof"` } type ServiceAccountDelegationInfo_ThirdPartyPrincipal_ struct { // Third party identity as the real authority. ThirdPartyPrincipal *ServiceAccountDelegationInfo_ThirdPartyPrincipal `protobuf:"bytes,2,opt,name=third_party_principal,json=thirdPartyPrincipal,proto3,oneof"` } func (*ServiceAccountDelegationInfo_FirstPartyPrincipal_) isServiceAccountDelegationInfo_Authority() { } func (*ServiceAccountDelegationInfo_ThirdPartyPrincipal_) isServiceAccountDelegationInfo_Authority() { } // Additional information used to correlate multiple LogEntries. Used when a // single LogEntry would exceed the Google Cloud Logging size limit and is split // across multiple entries. type LogSplit struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // A globally unique identifier for all LogEntries in a sequence of split // logs. All LogEntries with the same |LogSplit.uid| are assumed to be part of // the same sequence of split logs. Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid,omitempty"` // The index of this LogEntry in the sequence of split logs. LogEntries are // given |index| values 0, 1, ..., n-1 for a sequence of n entries. Index int32 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"` // The total number of logs that the original LogEntry was split into. TotalSplits int32 `protobuf:"varint,3,opt,name=total_splits,json=totalSplits,proto3" json:"total_splits,omitempty"` } func (x *LogSplit) Reset() { *x = LogSplit{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LogSplit) String() string { return protoimpl.X.MessageStringOf(x) } func (*LogSplit) ProtoMessage() {} func (x *LogSplit) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[11] 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 LogSplit.ProtoReflect.Descriptor instead. func (*LogSplit) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{11} } func (x *LogSplit) GetUid() string { if x != nil { return x.Uid } return "" } func (x *LogSplit) GetIndex() int32 { if x != nil { return x.Index } return 0 } func (x *LogSplit) GetTotalSplits() int32 { if x != nil { return x.TotalSplits } return 0 } // This message defines attributes for a node that handles a network request. // The node can be either a service or an application that sends, forwards, // or receives the request. Service peers should fill in // `principal` and `labels` as appropriate. type AttributeContext_Peer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The IP address of the peer. Ip string `protobuf:"bytes,1,opt,name=ip,proto3" json:"ip,omitempty"` // The network port of the peer. Port int64 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` // The labels associated with the peer. Labels map[string]string `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // The identity of this peer. Similar to `Request.auth.principal`, but // relative to the peer instead of the request. For example, the // idenity associated with a load balancer that forwared the request. Principal string `protobuf:"bytes,7,opt,name=principal,proto3" json:"principal,omitempty"` // The CLDR country/region code associated with the above IP address. // If the IP address is private, the `region_code` should reflect the // physical location where this peer is running. RegionCode string `protobuf:"bytes,8,opt,name=region_code,json=regionCode,proto3" json:"region_code,omitempty"` } func (x *AttributeContext_Peer) Reset() { *x = AttributeContext_Peer{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AttributeContext_Peer) String() string { return protoimpl.X.MessageStringOf(x) } func (*AttributeContext_Peer) ProtoMessage() {} func (x *AttributeContext_Peer) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_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 AttributeContext_Peer.ProtoReflect.Descriptor instead. func (*AttributeContext_Peer) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{6, 0} } func (x *AttributeContext_Peer) GetIp() string { if x != nil { return x.Ip } return "" } func (x *AttributeContext_Peer) GetPort() int64 { if x != nil { return x.Port } return 0 } func (x *AttributeContext_Peer) GetLabels() map[string]string { if x != nil { return x.Labels } return nil } func (x *AttributeContext_Peer) GetPrincipal() string { if x != nil { return x.Principal } return "" } func (x *AttributeContext_Peer) GetRegionCode() string { if x != nil { return x.RegionCode } return "" } // This message defines request authentication attributes. Terminology is // based on the JSON Web Token (JWT) standard, but the terms also // correlate to concepts in other standards. type AttributeContext_Auth struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The authenticated principal. Reflects the issuer (`iss`) and subject // (`sub`) claims within a JWT. The issuer and subject should be `/` // delimited, with `/` percent-encoded within the subject fragment. For // Google accounts, the principal format is: // "https://accounts.google.com/{id}" Principal string `protobuf:"bytes,1,opt,name=principal,proto3" json:"principal,omitempty"` // The intended audience(s) for this authentication information. Reflects // the audience (`aud`) claim within a JWT. The audience // value(s) depends on the `issuer`, but typically include one or more of // the following pieces of information: // // - The services intended to receive the credential such as // ["pubsub.googleapis.com", "storage.googleapis.com"] // - A set of service-based scopes. For example, // ["https://www.googleapis.com/auth/cloud-platform"] // - The client id of an app, such as the Firebase project id for JWTs // from Firebase Auth. // // Consult the documentation for the credential issuer to determine the // information provided. Audiences []string `protobuf:"bytes,2,rep,name=audiences,proto3" json:"audiences,omitempty"` // The authorized presenter of the credential. Reflects the optional // Authorized Presenter (`azp`) claim within a JWT or the // OAuth client id. For example, a Google Cloud Platform client id looks // as follows: "123456789012.apps.googleusercontent.com". Presenter string `protobuf:"bytes,3,opt,name=presenter,proto3" json:"presenter,omitempty"` // Structured claims presented with the credential. JWTs include // `{key: value}` pairs for standard and private claims. The following // is a subset of the standard required and optional claims that would // typically be presented for a Google-based JWT: // // {'iss': 'accounts.google.com', // 'sub': '113289723416554971153', // 'aud': ['123456789012', 'pubsub.googleapis.com'], // 'azp': '123456789012.apps.googleusercontent.com', // 'email': 'jsmith@example.com', // 'iat': 1353601026, // 'exp': 1353604926} // // SAML assertions are similarly specified, but with an identity provider // dependent structure. Claims *structpb.Struct `protobuf:"bytes,4,opt,name=claims,proto3" json:"claims,omitempty"` // A list of access level resource names that allow resources to be // accessed by authenticated requester. It is part of Secure GCP processing // for the incoming request. An access level string has the format: // "//{api_service_name}/accessPolicies/{policy_id}/accessLevels/{short_name}" // // Example: // "//accesscontextmanager.googleapis.com/accessPolicies/MY_POLICY_ID/accessLevels/MY_LEVEL" AccessLevels []string `protobuf:"bytes,5,rep,name=access_levels,json=accessLevels,proto3" json:"access_levels,omitempty"` } func (x *AttributeContext_Auth) Reset() { *x = AttributeContext_Auth{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AttributeContext_Auth) String() string { return protoimpl.X.MessageStringOf(x) } func (*AttributeContext_Auth) ProtoMessage() {} func (x *AttributeContext_Auth) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[15] 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 AttributeContext_Auth.ProtoReflect.Descriptor instead. func (*AttributeContext_Auth) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{6, 1} } func (x *AttributeContext_Auth) GetPrincipal() string { if x != nil { return x.Principal } return "" } func (x *AttributeContext_Auth) GetAudiences() []string { if x != nil { return x.Audiences } return nil } func (x *AttributeContext_Auth) GetPresenter() string { if x != nil { return x.Presenter } return "" } func (x *AttributeContext_Auth) GetClaims() *structpb.Struct { if x != nil { return x.Claims } return nil } func (x *AttributeContext_Auth) GetAccessLevels() []string { if x != nil { return x.AccessLevels } return nil } // This message defines attributes for an HTTP request. If the actual // request is not an HTTP request, the runtime system should try to map // the actual request to an equivalent HTTP request. type AttributeContext_Request struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The unique ID for a request, which can be propagated to downstream // systems. The ID should have low probability of collision // within a single day for a specific service. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // The HTTP request method, such as `GET`, `POST`. Method string `protobuf:"bytes,2,opt,name=method,proto3" json:"method,omitempty"` // The HTTP request headers. If multiple headers share the same key, they // must be merged according to the HTTP spec. All header keys must be // lowercased, because HTTP header keys are case-insensitive. Headers map[string]string `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // The HTTP URL path. Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"` // The HTTP request `Host` header value. Host string `protobuf:"bytes,5,opt,name=host,proto3" json:"host,omitempty"` // The HTTP URL scheme, such as `http` and `https`. Scheme string `protobuf:"bytes,6,opt,name=scheme,proto3" json:"scheme,omitempty"` // The HTTP URL query in the format of `name1=value1&name2=value2`, as it // appears in the first line of the HTTP request. No decoding is performed. Query string `protobuf:"bytes,7,opt,name=query,proto3" json:"query,omitempty"` // The timestamp when the `destination` service receives the first byte of // the request. Time *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=time,proto3" json:"time,omitempty"` // The HTTP request size in bytes. If unknown, it must be -1. Size int64 `protobuf:"varint,10,opt,name=size,proto3" json:"size,omitempty"` // The network protocol used with the request, such as "http/1.1", // "spdy/3", "h2", "h2c", "webrtc", "tcp", "udp", "quic". See // https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids // for details. Protocol string `protobuf:"bytes,11,opt,name=protocol,proto3" json:"protocol,omitempty"` // A special parameter for request reason. It is used by security systems // to associate auditing information with a request. Reason string `protobuf:"bytes,12,opt,name=reason,proto3" json:"reason,omitempty"` // The request authentication. May be absent for unauthenticated requests. // Derived from the HTTP request `Authorization` header or equivalent. Auth *AttributeContext_Auth `protobuf:"bytes,13,opt,name=auth,proto3" json:"auth,omitempty"` } func (x *AttributeContext_Request) Reset() { *x = AttributeContext_Request{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AttributeContext_Request) String() string { return protoimpl.X.MessageStringOf(x) } func (*AttributeContext_Request) ProtoMessage() {} func (x *AttributeContext_Request) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_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 AttributeContext_Request.ProtoReflect.Descriptor instead. func (*AttributeContext_Request) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{6, 2} } func (x *AttributeContext_Request) GetId() string { if x != nil { return x.Id } return "" } func (x *AttributeContext_Request) GetMethod() string { if x != nil { return x.Method } return "" } func (x *AttributeContext_Request) GetHeaders() map[string]string { if x != nil { return x.Headers } return nil } func (x *AttributeContext_Request) GetPath() string { if x != nil { return x.Path } return "" } func (x *AttributeContext_Request) GetHost() string { if x != nil { return x.Host } return "" } func (x *AttributeContext_Request) GetScheme() string { if x != nil { return x.Scheme } return "" } func (x *AttributeContext_Request) GetQuery() string { if x != nil { return x.Query } return "" } func (x *AttributeContext_Request) GetTime() *timestamppb.Timestamp { if x != nil { return x.Time } return nil } func (x *AttributeContext_Request) GetSize() int64 { if x != nil { return x.Size } return 0 } func (x *AttributeContext_Request) GetProtocol() string { if x != nil { return x.Protocol } return "" } func (x *AttributeContext_Request) GetReason() string { if x != nil { return x.Reason } return "" } func (x *AttributeContext_Request) GetAuth() *AttributeContext_Auth { if x != nil { return x.Auth } return nil } // This message defines attributes for a typical network response. It // generally models semantics of an HTTP response. type AttributeContext_Response struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The HTTP response status code, such as `200` and `404`. Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` // The HTTP response size in bytes. If unknown, it must be -1. Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` // The HTTP response headers. If multiple headers share the same key, they // must be merged according to HTTP spec. All header keys must be // lowercased, because HTTP header keys are case-insensitive. Headers map[string]string `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // The timestamp when the `destination` service generates the first byte of // the response. Time *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=time,proto3" json:"time,omitempty"` } func (x *AttributeContext_Response) Reset() { *x = AttributeContext_Response{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AttributeContext_Response) String() string { return protoimpl.X.MessageStringOf(x) } func (*AttributeContext_Response) ProtoMessage() {} func (x *AttributeContext_Response) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[17] 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 AttributeContext_Response.ProtoReflect.Descriptor instead. func (*AttributeContext_Response) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{6, 3} } func (x *AttributeContext_Response) GetCode() int64 { if x != nil { return x.Code } return 0 } func (x *AttributeContext_Response) GetSize() int64 { if x != nil { return x.Size } return 0 } func (x *AttributeContext_Response) GetHeaders() map[string]string { if x != nil { return x.Headers } return nil } func (x *AttributeContext_Response) GetTime() *timestamppb.Timestamp { if x != nil { return x.Time } return nil } // This message defines core attributes for a resource. A resource is an // addressable (named) entity provided by the destination service. For // example, a file stored on a network storage service. type AttributeContext_Resource struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The name of the service that this resource belongs to, such as // `pubsub.googleapis.com`. The service may be different from the DNS // hostname that actually serves the request. Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` // The stable identifier (name) of a resource on the `service`. A resource // can be logically identified as "//{resource.service}/{resource.name}". // The differences between a resource name and a URI are: // // - Resource name is a logical identifier, independent of network // protocol and API version. For example, // `//pubsub.googleapis.com/projects/123/topics/news-feed`. // - URI often includes protocol and version information, so it can // be used directly by applications. For example, // `https://pubsub.googleapis.com/v1/projects/123/topics/news-feed`. // // See https://cloud.google.com/apis/design/resource_names for details. Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // The type of the resource. The syntax is platform-specific because // different platforms define their resources differently. // // For Google APIs, the type format must be "{service}/{kind}". Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` // The labels or tags on the resource, such as AWS resource tags and // Kubernetes resource labels. Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *AttributeContext_Resource) Reset() { *x = AttributeContext_Resource{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *AttributeContext_Resource) String() string { return protoimpl.X.MessageStringOf(x) } func (*AttributeContext_Resource) ProtoMessage() {} func (x *AttributeContext_Resource) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_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 AttributeContext_Resource.ProtoReflect.Descriptor instead. func (*AttributeContext_Resource) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{6, 4} } func (x *AttributeContext_Resource) GetService() string { if x != nil { return x.Service } return "" } func (x *AttributeContext_Resource) GetName() string { if x != nil { return x.Name } return "" } func (x *AttributeContext_Resource) GetType() string { if x != nil { return x.Type } return "" } func (x *AttributeContext_Resource) GetLabels() map[string]string { if x != nil { return x.Labels } return nil } // First party identity principal. type ServiceAccountDelegationInfo_FirstPartyPrincipal struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The email address of a Google account. PrincipalEmail string `protobuf:"bytes,1,opt,name=principal_email,json=principalEmail,proto3" json:"principal_email,omitempty"` // Metadata about the service that uses the service account. ServiceMetadata *structpb.Struct `protobuf:"bytes,2,opt,name=service_metadata,json=serviceMetadata,proto3" json:"service_metadata,omitempty"` } func (x *ServiceAccountDelegationInfo_FirstPartyPrincipal) Reset() { *x = ServiceAccountDelegationInfo_FirstPartyPrincipal{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ServiceAccountDelegationInfo_FirstPartyPrincipal) String() string { return protoimpl.X.MessageStringOf(x) } func (*ServiceAccountDelegationInfo_FirstPartyPrincipal) ProtoMessage() {} func (x *ServiceAccountDelegationInfo_FirstPartyPrincipal) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[23] 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 ServiceAccountDelegationInfo_FirstPartyPrincipal.ProtoReflect.Descriptor instead. func (*ServiceAccountDelegationInfo_FirstPartyPrincipal) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{10, 0} } func (x *ServiceAccountDelegationInfo_FirstPartyPrincipal) GetPrincipalEmail() string { if x != nil { return x.PrincipalEmail } return "" } func (x *ServiceAccountDelegationInfo_FirstPartyPrincipal) GetServiceMetadata() *structpb.Struct { if x != nil { return x.ServiceMetadata } return nil } // Third party identity principal. type ServiceAccountDelegationInfo_ThirdPartyPrincipal struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Metadata about third party identity. ThirdPartyClaims *structpb.Struct `protobuf:"bytes,1,opt,name=third_party_claims,json=thirdPartyClaims,proto3" json:"third_party_claims,omitempty"` } func (x *ServiceAccountDelegationInfo_ThirdPartyPrincipal) Reset() { *x = ServiceAccountDelegationInfo_ThirdPartyPrincipal{} if protoimpl.UnsafeEnabled { mi := &file_audit_v1_audit_event_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ServiceAccountDelegationInfo_ThirdPartyPrincipal) String() string { return protoimpl.X.MessageStringOf(x) } func (*ServiceAccountDelegationInfo_ThirdPartyPrincipal) ProtoMessage() {} func (x *ServiceAccountDelegationInfo_ThirdPartyPrincipal) ProtoReflect() protoreflect.Message { mi := &file_audit_v1_audit_event_proto_msgTypes[24] 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 ServiceAccountDelegationInfo_ThirdPartyPrincipal.ProtoReflect.Descriptor instead. func (*ServiceAccountDelegationInfo_ThirdPartyPrincipal) Descriptor() ([]byte, []int) { return file_audit_v1_audit_event_proto_rawDescGZIP(), []int{10, 1} } func (x *ServiceAccountDelegationInfo_ThirdPartyPrincipal) GetThirdPartyClaims() *structpb.Struct { if x != nil { return x.ThirdPartyClaims } return nil } var File_audit_v1_audit_event_proto protoreflect.FileDescriptor var file_audit_v1_audit_event_proto_rawDesc = []byte{ 0x0a, 0x1a, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf5, 0x04, 0x0a, 0x0a, 0x41, 0x75, 0x64, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x09, 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, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x47, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x18, 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, 0x52, 0x10, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x31, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x70, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x05, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x52, 0x05, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa3, 0x01, 0x0a, 0x11, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x69, 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x22, 0xa2, 0x06, 0x0a, 0x08, 0x41, 0x75, 0x64, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x47, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x17, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x15, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x70, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4d, 0x0a, 0x13, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x12, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4a, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x44, 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x31, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x8e, 0x03, 0x0a, 0x12, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2d, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x4b, 0x0a, 0x15, 0x74, 0x68, 0x69, 0x72, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x13, 0x74, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x18, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x6d, 0x0a, 0x1f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x1c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xbf, 0x01, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x12, 0x54, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0xb5, 0x0a, 0x0a, 0x10, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0xe9, 0x01, 0x0a, 0x04, 0x50, 0x65, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x43, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xb6, 0x01, 0x0a, 0x04, 0x41, 0x75, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x1a, 0xbb, 0x03, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x49, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 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, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x04, 0x61, 0x75, 0x74, 0x68, 0x1a, 0x3a, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xea, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x04, 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, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x3a, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xd0, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbd, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x70, 0x12, 0x3b, 0x0a, 0x1a, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x16, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x15, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x69, 0x0a, 0x09, 0x52, 0x70, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xf2, 0x03, 0x0a, 0x1c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x70, 0x0a, 0x15, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x13, 0x66, 0x69, 0x72, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x12, 0x70, 0x0a, 0x15, 0x74, 0x68, 0x69, 0x72, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x13, 0x74, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x1a, 0x82, 0x01, 0x0a, 0x13, 0x46, 0x69, 0x72, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x42, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x5c, 0x0a, 0x13, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x12, 0x45, 0x0a, 0x12, 0x74, 0x68, 0x69, 0x72, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x10, 0x74, 0x68, 0x69, 0x72, 0x64, 0x50, 0x61, 0x72, 0x74, 0x79, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x55, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x2a, 0x82, 0x01, 0x0a, 0x0b, 0x4c, 0x6f, 0x67, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x64, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xc8, 0x01, 0x12, 0x0b, 0x0a, 0x06, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xac, 0x02, 0x12, 0x0c, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x90, 0x03, 0x12, 0x0a, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0xf4, 0x03, 0x12, 0x0d, 0x0a, 0x08, 0x43, 0x52, 0x49, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x10, 0xd8, 0x04, 0x12, 0x0a, 0x0a, 0x05, 0x41, 0x4c, 0x45, 0x52, 0x54, 0x10, 0xbc, 0x05, 0x12, 0x0e, 0x0a, 0x09, 0x45, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x4e, 0x43, 0x59, 0x10, 0xa0, 0x06, 0x42, 0x81, 0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x63, 0x68, 0x77, 0x61, 0x72, 0x7a, 0x2e, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x69, 0x74, 0x2e, 0x61, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x41, 0x75, 0x64, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x0f, 0x2e, 0x2f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x3b, 0x61, 0x75, 0x64, 0x69, 0x74, 0x56, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x08, 0x41, 0x75, 0x64, 0x69, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x08, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x14, 0x41, 0x75, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x41, 0x75, 0x64, 0x69, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_audit_v1_audit_event_proto_rawDescOnce sync.Once file_audit_v1_audit_event_proto_rawDescData = file_audit_v1_audit_event_proto_rawDesc ) func file_audit_v1_audit_event_proto_rawDescGZIP() []byte { file_audit_v1_audit_event_proto_rawDescOnce.Do(func() { file_audit_v1_audit_event_proto_rawDescData = protoimpl.X.CompressGZIP(file_audit_v1_audit_event_proto_rawDescData) }) return file_audit_v1_audit_event_proto_rawDescData } var file_audit_v1_audit_event_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_audit_v1_audit_event_proto_msgTypes = make([]protoimpl.MessageInfo, 25) var file_audit_v1_audit_event_proto_goTypes = []interface{}{ (LogSeverity)(0), // 0: audit.v1.LogSeverity (*AuditEvent)(nil), // 1: audit.v1.AuditEvent (*MonitoredResource)(nil), // 2: audit.v1.MonitoredResource (*LogEntryOperation)(nil), // 3: audit.v1.LogEntryOperation (*AuditLog)(nil), // 4: audit.v1.AuditLog (*AuthenticationInfo)(nil), // 5: audit.v1.AuthenticationInfo (*AuthorizationInfo)(nil), // 6: audit.v1.AuthorizationInfo (*AttributeContext)(nil), // 7: audit.v1.AttributeContext (*RequestMetadata)(nil), // 8: audit.v1.RequestMetadata (*ResourceLocation)(nil), // 9: audit.v1.ResourceLocation (*RpcStatus)(nil), // 10: audit.v1.RpcStatus (*ServiceAccountDelegationInfo)(nil), // 11: audit.v1.ServiceAccountDelegationInfo (*LogSplit)(nil), // 12: audit.v1.LogSplit nil, // 13: audit.v1.AuditEvent.LabelsEntry nil, // 14: audit.v1.MonitoredResource.LabelsEntry (*AttributeContext_Peer)(nil), // 15: audit.v1.AttributeContext.Peer (*AttributeContext_Auth)(nil), // 16: audit.v1.AttributeContext.Auth (*AttributeContext_Request)(nil), // 17: audit.v1.AttributeContext.Request (*AttributeContext_Response)(nil), // 18: audit.v1.AttributeContext.Response (*AttributeContext_Resource)(nil), // 19: audit.v1.AttributeContext.Resource nil, // 20: audit.v1.AttributeContext.Peer.LabelsEntry nil, // 21: audit.v1.AttributeContext.Request.HeadersEntry nil, // 22: audit.v1.AttributeContext.Response.HeadersEntry nil, // 23: audit.v1.AttributeContext.Resource.LabelsEntry (*ServiceAccountDelegationInfo_FirstPartyPrincipal)(nil), // 24: audit.v1.ServiceAccountDelegationInfo.FirstPartyPrincipal (*ServiceAccountDelegationInfo_ThirdPartyPrincipal)(nil), // 25: audit.v1.ServiceAccountDelegationInfo.ThirdPartyPrincipal (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp (*structpb.Struct)(nil), // 27: google.protobuf.Struct (*anypb.Any)(nil), // 28: google.protobuf.Any } var file_audit_v1_audit_event_proto_depIdxs = []int32{ 2, // 0: audit.v1.AuditEvent.resource:type_name -> audit.v1.MonitoredResource 4, // 1: audit.v1.AuditEvent.proto_payload:type_name -> audit.v1.AuditLog 13, // 2: audit.v1.AuditEvent.labels:type_name -> audit.v1.AuditEvent.LabelsEntry 3, // 3: audit.v1.AuditEvent.operation:type_name -> audit.v1.LogEntryOperation 26, // 4: audit.v1.AuditEvent.timestamp:type_name -> google.protobuf.Timestamp 26, // 5: audit.v1.AuditEvent.receive_timestamp:type_name -> google.protobuf.Timestamp 0, // 6: audit.v1.AuditEvent.severity:type_name -> audit.v1.LogSeverity 12, // 7: audit.v1.AuditEvent.split:type_name -> audit.v1.LogSplit 14, // 8: audit.v1.MonitoredResource.labels:type_name -> audit.v1.MonitoredResource.LabelsEntry 9, // 9: audit.v1.AuditLog.resource_location:type_name -> audit.v1.ResourceLocation 27, // 10: audit.v1.AuditLog.resource_original_state:type_name -> google.protobuf.Struct 10, // 11: audit.v1.AuditLog.status:type_name -> audit.v1.RpcStatus 5, // 12: audit.v1.AuditLog.authentication_info:type_name -> audit.v1.AuthenticationInfo 6, // 13: audit.v1.AuditLog.authorization_info:type_name -> audit.v1.AuthorizationInfo 8, // 14: audit.v1.AuditLog.request_metadata:type_name -> audit.v1.RequestMetadata 27, // 15: audit.v1.AuditLog.request:type_name -> google.protobuf.Struct 27, // 16: audit.v1.AuditLog.response:type_name -> google.protobuf.Struct 27, // 17: audit.v1.AuditLog.metadata:type_name -> google.protobuf.Struct 27, // 18: audit.v1.AuditLog.service_data:type_name -> google.protobuf.Struct 27, // 19: audit.v1.AuthenticationInfo.third_party_principal:type_name -> google.protobuf.Struct 11, // 20: audit.v1.AuthenticationInfo.service_account_delegation_info:type_name -> audit.v1.ServiceAccountDelegationInfo 19, // 21: audit.v1.AuthorizationInfo.resource_attributes:type_name -> audit.v1.AttributeContext.Resource 17, // 22: audit.v1.RequestMetadata.request_attributes:type_name -> audit.v1.AttributeContext.Request 15, // 23: audit.v1.RequestMetadata.destination_attributes:type_name -> audit.v1.AttributeContext.Peer 28, // 24: audit.v1.RpcStatus.details:type_name -> google.protobuf.Any 24, // 25: audit.v1.ServiceAccountDelegationInfo.first_party_principal:type_name -> audit.v1.ServiceAccountDelegationInfo.FirstPartyPrincipal 25, // 26: audit.v1.ServiceAccountDelegationInfo.third_party_principal:type_name -> audit.v1.ServiceAccountDelegationInfo.ThirdPartyPrincipal 20, // 27: audit.v1.AttributeContext.Peer.labels:type_name -> audit.v1.AttributeContext.Peer.LabelsEntry 27, // 28: audit.v1.AttributeContext.Auth.claims:type_name -> google.protobuf.Struct 21, // 29: audit.v1.AttributeContext.Request.headers:type_name -> audit.v1.AttributeContext.Request.HeadersEntry 26, // 30: audit.v1.AttributeContext.Request.time:type_name -> google.protobuf.Timestamp 16, // 31: audit.v1.AttributeContext.Request.auth:type_name -> audit.v1.AttributeContext.Auth 22, // 32: audit.v1.AttributeContext.Response.headers:type_name -> audit.v1.AttributeContext.Response.HeadersEntry 26, // 33: audit.v1.AttributeContext.Response.time:type_name -> google.protobuf.Timestamp 23, // 34: audit.v1.AttributeContext.Resource.labels:type_name -> audit.v1.AttributeContext.Resource.LabelsEntry 27, // 35: audit.v1.ServiceAccountDelegationInfo.FirstPartyPrincipal.service_metadata:type_name -> google.protobuf.Struct 27, // 36: audit.v1.ServiceAccountDelegationInfo.ThirdPartyPrincipal.third_party_claims:type_name -> google.protobuf.Struct 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_audit_v1_audit_event_proto_init() } func file_audit_v1_audit_event_proto_init() { if File_audit_v1_audit_event_proto != nil { return } file_audit_v1_common_proto_init() if !protoimpl.UnsafeEnabled { file_audit_v1_audit_event_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AuditEvent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MonitoredResource); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LogEntryOperation); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AuditLog); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AuthenticationInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AuthorizationInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AttributeContext); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RequestMetadata); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResourceLocation); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RpcStatus); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServiceAccountDelegationInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LogSplit); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AttributeContext_Peer); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AttributeContext_Auth); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AttributeContext_Request); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AttributeContext_Response); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AttributeContext_Resource); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServiceAccountDelegationInfo_FirstPartyPrincipal); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_audit_v1_audit_event_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServiceAccountDelegationInfo_ThirdPartyPrincipal); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_audit_v1_audit_event_proto_msgTypes[10].OneofWrappers = []interface{}{ (*ServiceAccountDelegationInfo_FirstPartyPrincipal_)(nil), (*ServiceAccountDelegationInfo_ThirdPartyPrincipal_)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_audit_v1_audit_event_proto_rawDesc, NumEnums: 1, NumMessages: 25, NumExtensions: 0, NumServices: 0, }, GoTypes: file_audit_v1_audit_event_proto_goTypes, DependencyIndexes: file_audit_v1_audit_event_proto_depIdxs, EnumInfos: file_audit_v1_audit_event_proto_enumTypes, MessageInfos: file_audit_v1_audit_event_proto_msgTypes, }.Build() File_audit_v1_audit_event_proto = out.File file_audit_v1_audit_event_proto_rawDesc = nil file_audit_v1_audit_event_proto_goTypes = nil file_audit_v1_audit_event_proto_depIdxs = nil }