Add TAG query usage event (#34386)

This PR adds the boilerplate code so we can emmit usage events for TAG
queries

Part of https://github.com/gravitational/access-graph/issues/185

Signed-off-by: Tiago Silva <tiago.silva@goteleport.com>
Co-authored-by: Jakub Nyckowski <jakub.nyckowski@goteleport.com>
This commit is contained in:
Tiago Silva 2023-11-14 02:31:30 +00:00 committed by GitHub
parent 29d965d2fa
commit 5ba372f53e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 1879 additions and 1028 deletions

View file

@ -3608,6 +3608,76 @@ func (m *FeatureRecommendationEvent) GetFeatureRecommendationStatus() FeatureRec
return FeatureRecommendationStatus_FEATURE_RECOMMENDATION_STATUS_UNSPECIFIED
}
// TAGExecuteQueryEvent is an event that is emitted
// when a single query is executed in the Teleport Access Graph.
// This event is emitted for both successful and failed queries and for
// successful queries, the total number of nodes and edges is reported.
type TAGExecuteQueryEvent struct {
// total_nodes is the total amount of nodes returned by the query.
TotalNodes int64 `protobuf:"varint,1,opt,name=total_nodes,json=totalNodes,proto3" json:"total_nodes,omitempty"`
// total_edges is the total amount of edges returned by the query.
TotalEdges int64 `protobuf:"varint,2,opt,name=total_edges,json=totalEdges,proto3" json:"total_edges,omitempty"`
// is_success is true if the query was successful and false it if failed.
IsSuccess bool `protobuf:"varint,3,opt,name=is_success,json=isSuccess,proto3" json:"is_success,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TAGExecuteQueryEvent) Reset() { *m = TAGExecuteQueryEvent{} }
func (m *TAGExecuteQueryEvent) String() string { return proto.CompactTextString(m) }
func (*TAGExecuteQueryEvent) ProtoMessage() {}
func (*TAGExecuteQueryEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{54}
}
func (m *TAGExecuteQueryEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *TAGExecuteQueryEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_TAGExecuteQueryEvent.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *TAGExecuteQueryEvent) XXX_Merge(src proto.Message) {
xxx_messageInfo_TAGExecuteQueryEvent.Merge(m, src)
}
func (m *TAGExecuteQueryEvent) XXX_Size() int {
return m.Size()
}
func (m *TAGExecuteQueryEvent) XXX_DiscardUnknown() {
xxx_messageInfo_TAGExecuteQueryEvent.DiscardUnknown(m)
}
var xxx_messageInfo_TAGExecuteQueryEvent proto.InternalMessageInfo
func (m *TAGExecuteQueryEvent) GetTotalNodes() int64 {
if m != nil {
return m.TotalNodes
}
return 0
}
func (m *TAGExecuteQueryEvent) GetTotalEdges() int64 {
if m != nil {
return m.TotalEdges
}
return 0
}
func (m *TAGExecuteQueryEvent) GetIsSuccess() bool {
if m != nil {
return m.IsSuccess
}
return false
}
// UsageEventOneOf is a message that can accept a oneof of any supported
// external usage event.
type UsageEventOneOf struct {
@ -3661,6 +3731,7 @@ type UsageEventOneOf struct {
// *UsageEventOneOf_UiDiscoverEc2InstanceSelection
// *UsageEventOneOf_UiDiscoverDeployEice
// *UsageEventOneOf_UiDiscoverCreateNode
// *UsageEventOneOf_TagExecuteQuery
Event isUsageEventOneOf_Event `protobuf_oneof:"event"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
@ -3671,7 +3742,7 @@ func (m *UsageEventOneOf) Reset() { *m = UsageEventOneOf{} }
func (m *UsageEventOneOf) String() string { return proto.CompactTextString(m) }
func (*UsageEventOneOf) ProtoMessage() {}
func (*UsageEventOneOf) Descriptor() ([]byte, []int) {
return fileDescriptor_94cf2ca1c69fd564, []int{54}
return fileDescriptor_94cf2ca1c69fd564, []int{55}
}
func (m *UsageEventOneOf) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -3850,6 +3921,9 @@ type UsageEventOneOf_UiDiscoverDeployEice struct {
type UsageEventOneOf_UiDiscoverCreateNode struct {
UiDiscoverCreateNode *UIDiscoverCreateNodeEvent `protobuf:"bytes,49,opt,name=ui_discover_create_node,json=uiDiscoverCreateNode,proto3,oneof" json:"ui_discover_create_node,omitempty"`
}
type UsageEventOneOf_TagExecuteQuery struct {
TagExecuteQuery *TAGExecuteQueryEvent `protobuf:"bytes,50,opt,name=tag_execute_query,json=tagExecuteQuery,proto3,oneof" json:"tag_execute_query,omitempty"`
}
func (*UsageEventOneOf_UiBannerClick) isUsageEventOneOf_Event() {}
func (*UsageEventOneOf_UiOnboardCompleteGoToDashboardClick) isUsageEventOneOf_Event() {}
@ -3899,6 +3973,7 @@ func (*UsageEventOneOf_AccessListGrantsToUser) isUsageEventOneOf_Event()
func (*UsageEventOneOf_UiDiscoverEc2InstanceSelection) isUsageEventOneOf_Event() {}
func (*UsageEventOneOf_UiDiscoverDeployEice) isUsageEventOneOf_Event() {}
func (*UsageEventOneOf_UiDiscoverCreateNode) isUsageEventOneOf_Event() {}
func (*UsageEventOneOf_TagExecuteQuery) isUsageEventOneOf_Event() {}
func (m *UsageEventOneOf) GetEvent() isUsageEventOneOf_Event {
if m != nil {
@ -4243,6 +4318,13 @@ func (m *UsageEventOneOf) GetUiDiscoverCreateNode() *UIDiscoverCreateNodeEvent {
return nil
}
func (m *UsageEventOneOf) GetTagExecuteQuery() *TAGExecuteQueryEvent {
if x, ok := m.GetEvent().(*UsageEventOneOf_TagExecuteQuery); ok {
return x.TagExecuteQuery
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*UsageEventOneOf) XXX_OneofWrappers() []interface{} {
return []interface{}{
@ -4294,6 +4376,7 @@ func (*UsageEventOneOf) XXX_OneofWrappers() []interface{} {
(*UsageEventOneOf_UiDiscoverEc2InstanceSelection)(nil),
(*UsageEventOneOf_UiDiscoverDeployEice)(nil),
(*UsageEventOneOf_UiDiscoverCreateNode)(nil),
(*UsageEventOneOf_TagExecuteQuery)(nil),
}
}
@ -4360,6 +4443,7 @@ func init() {
proto.RegisterType((*ResourceCreateEvent)(nil), "teleport.usageevents.v1.ResourceCreateEvent")
proto.RegisterType((*DiscoveredDatabaseMetadata)(nil), "teleport.usageevents.v1.DiscoveredDatabaseMetadata")
proto.RegisterType((*FeatureRecommendationEvent)(nil), "teleport.usageevents.v1.FeatureRecommendationEvent")
proto.RegisterType((*TAGExecuteQueryEvent)(nil), "teleport.usageevents.v1.TAGExecuteQueryEvent")
proto.RegisterType((*UsageEventOneOf)(nil), "teleport.usageevents.v1.UsageEventOneOf")
}
@ -4368,263 +4452,268 @@ func init() {
}
var fileDescriptor_94cf2ca1c69fd564 = []byte{
// 4086 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5c, 0xdd, 0x6f, 0xdb, 0x58,
0x76, 0x17, 0xe5, 0x38, 0x1f, 0x27, 0x8e, 0xc3, 0xdc, 0x24, 0x8e, 0x6c, 0xc7, 0x89, 0xa3, 0x7c,
0x3b, 0x59, 0x3b, 0xf1, 0xcc, 0xee, 0xa4, 0x3b, 0xdb, 0x4e, 0x29, 0x8a, 0x36, 0x19, 0x4b, 0xa2,
0xe6, 0x92, 0x4a, 0xea, 0x29, 0x16, 0x04, 0x2d, 0xde, 0x78, 0x88, 0x48, 0xa4, 0x96, 0xa4, 0xec,
0x71, 0x8b, 0x62, 0xfb, 0x8d, 0xa2, 0xb3, 0x2d, 0xda, 0xb7, 0x16, 0x0b, 0x14, 0x2d, 0xda, 0x02,
0x7d, 0x28, 0xb0, 0x4f, 0xc5, 0xa2, 0x8f, 0x7d, 0x6a, 0x1f, 0x0b, 0xf4, 0xb1, 0x2f, 0xc5, 0xfc,
0x03, 0x7d, 0x6a, 0x1f, 0x8a, 0x16, 0x2d, 0x78, 0xf9, 0x21, 0x4a, 0x22, 0x45, 0x4e, 0x3a, 0x83,
0x05, 0x3c, 0x6f, 0xe6, 0xbd, 0xe7, 0xe3, 0x77, 0xce, 0x3d, 0x3c, 0xf7, 0xf2, 0x9c, 0x2b, 0xc3,
0x63, 0x8f, 0xf4, 0xc8, 0xc0, 0x76, 0xbc, 0xad, 0xa1, 0xab, 0x1f, 0x12, 0x72, 0x44, 0x2c, 0xcf,
0xdd, 0x3a, 0x7a, 0x9e, 0x7c, 0xdc, 0x1c, 0x38, 0xb6, 0x67, 0xa3, 0x1b, 0x11, 0xe9, 0x66, 0x72,
0xee, 0xe8, 0x79, 0x75, 0x03, 0x50, 0x47, 0xaa, 0xe9, 0x96, 0x45, 0x1c, 0xbe, 0x67, 0x76, 0xdf,
0x0a, 0xfe, 0x0c, 0xba, 0x06, 0xf3, 0x7a, 0x8f, 0x38, 0x5e, 0x85, 0x59, 0x67, 0x1e, 0x5d, 0xc0,
0xc1, 0x43, 0x75, 0x07, 0x1e, 0x75, 0x24, 0xd9, 0x3a, 0xb0, 0x75, 0xc7, 0xe0, 0xed, 0xfe, 0xa0,
0x47, 0x3c, 0xb2, 0x6b, 0xab, 0x76, 0x5d, 0x77, 0x3f, 0x0d, 0x06, 0x47, 0x12, 0x56, 0xe0, 0xfc,
0xd0, 0x25, 0x8e, 0xa5, 0xf7, 0x49, 0x28, 0x24, 0x7e, 0xae, 0xde, 0x87, 0xbb, 0xb1, 0x1c, 0xce,
0x30, 0x76, 0x4c, 0xc7, 0xf5, 0x30, 0x71, 0xed, 0xa1, 0xd3, 0x25, 0x23, 0x11, 0xd5, 0x8d, 0x84,
0xba, 0x49, 0xb2, 0x86, 0xee, 0x25, 0x01, 0x57, 0x3f, 0x82, 0x3b, 0x31, 0xad, 0x42, 0x3c, 0xde,
0x21, 0x06, 0xb1, 0x3c, 0x53, 0xef, 0x29, 0xc3, 0x83, 0xbe, 0xe9, 0xe5, 0x63, 0x4a, 0x0a, 0xf8,
0x78, 0x48, 0x5c, 0xcf, 0xb4, 0x2d, 0x4b, 0x37, 0x1d, 0x52, 0x54, 0xc0, 0xaf, 0xc1, 0xfd, 0x58,
0x00, 0x26, 0x87, 0xa6, 0xeb, 0x03, 0xfc, 0x54, 0xef, 0xf5, 0x88, 0x75, 0x58, 0x54, 0x08, 0x5a,
0x86, 0xf3, 0xfd, 0x37, 0xba, 0xe6, 0x9d, 0x0c, 0x48, 0xa5, 0x4c, 0xe7, 0xce, 0xf5, 0xdf, 0xe8,
0xea, 0xc9, 0x80, 0xa0, 0x35, 0x80, 0x9e, 0x7d, 0x68, 0x5a, 0xda, 0x9b, 0x9e, 0x7d, 0x5c, 0x99,
0xa3, 0x93, 0x17, 0xe8, 0xc8, 0x4e, 0xcf, 0x3e, 0x0e, 0xf0, 0x63, 0xd2, 0xb5, 0x8f, 0x88, 0x73,
0xc2, 0xdb, 0x06, 0x71, 0x79, 0xdb, 0xf2, 0x4c, 0x6b, 0x48, 0x0a, 0x2e, 0xca, 0x87, 0xb0, 0x36,
0x25, 0x60, 0x70, 0x52, 0x90, 0xf9, 0x7b, 0x70, 0x6b, 0x82, 0xb9, 0xed, 0x98, 0x96, 0x57, 0x90,
0xbb, 0x0a, 0x6c, 0xdd, 0x74, 0x29, 0x73, 0x93, 0x78, 0xba, 0xa1, 0x7b, 0x3a, 0x5a, 0x84, 0xb2,
0x69, 0x84, 0x94, 0x65, 0xd3, 0xa8, 0xea, 0x50, 0x89, 0x68, 0xa2, 0x18, 0x88, 0x69, 0x05, 0x38,
0xef, 0x84, 0x63, 0x94, 0x63, 0x71, 0xfb, 0xf1, 0x66, 0x46, 0xbc, 0x6f, 0x4e, 0x0a, 0xc1, 0x31,
0x6b, 0xf5, 0x2d, 0xa0, 0x68, 0x56, 0xf1, 0xc8, 0x40, 0xf1, 0x74, 0x6f, 0xe8, 0xa2, 0x8f, 0xe0,
0xac, 0x4b, 0xff, 0x0a, 0x45, 0x3f, 0xcc, 0x15, 0x1d, 0x30, 0xe2, 0x90, 0xcd, 0x7f, 0x97, 0x88,
0xe3, 0xd8, 0x4e, 0xb8, 0xa0, 0xc1, 0x43, 0xf5, 0xaf, 0x18, 0x58, 0xea, 0x48, 0x09, 0x16, 0xc7,
0x23, 0x46, 0xe0, 0x2a, 0x01, 0xce, 0xf7, 0x43, 0xd3, 0xa8, 0xce, 0x8b, 0x05, 0xcc, 0x89, 0x7c,
0x81, 0x63, 0x56, 0xc4, 0xc7, 0xc0, 0xcb, 0x54, 0xc8, 0x93, 0x02, 0xc0, 0x23, 0xab, 0x23, 0xf0,
0xd5, 0xff, 0x61, 0x60, 0x7d, 0x04, 0x33, 0x72, 0x9a, 0x42, 0x7a, 0xa4, 0xeb, 0xbf, 0x21, 0x5f,
0x29, 0xe0, 0x66, 0x62, 0x19, 0x03, 0xc8, 0xcf, 0x0b, 0x2f, 0xe3, 0x48, 0x5c, 0x24, 0x22, 0x61,
0xff, 0xdc, 0xbb, 0xdb, 0xff, 0x3b, 0x65, 0x3f, 0x09, 0x45, 0x04, 0x92, 0xe5, 0x91, 0x43, 0x47,
0xf7, 0x2d, 0xe7, 0x5e, 0x2b, 0xb2, 0x54, 0xe7, 0x79, 0xdb, 0xb2, 0x48, 0xd7, 0x3b, 0xf5, 0x7e,
0xf8, 0x69, 0x39, 0x19, 0x07, 0x75, 0xdd, 0xd3, 0x0f, 0x74, 0x97, 0xe0, 0xba, 0x22, 0x58, 0x8e,
0xdd, 0xeb, 0x9d, 0x76, 0xfb, 0xd1, 0x0b, 0xa8, 0xb8, 0x34, 0xe8, 0x89, 0xa1, 0x45, 0x92, 0x5d,
0xad, 0x6b, 0x0f, 0x2d, 0xaf, 0x72, 0x66, 0x9d, 0x79, 0x34, 0x87, 0x97, 0xa2, 0xf9, 0x08, 0x8a,
0xcb, 0xfb, 0xb3, 0xd5, 0x97, 0x50, 0xe9, 0x48, 0xbc, 0xde, 0xeb, 0xa9, 0x36, 0x47, 0xdf, 0x99,
0x44, 0x52, 0xdc, 0x84, 0xb9, 0x6e, 0xe8, 0xab, 0xc5, 0xed, 0x9b, 0x99, 0xb8, 0x78, 0x95, 0xc3,
0x3e, 0x61, 0xf5, 0x0f, 0xe6, 0xe1, 0x66, 0x62, 0x15, 0xc8, 0xa0, 0x67, 0x9f, 0x28, 0xc4, 0x39,
0x32, 0xbb, 0xe4, 0xd4, 0xaf, 0xc0, 0x21, 0x5c, 0x32, 0xa8, 0xc1, 0x5a, 0x9f, 0x78, 0x9f, 0xda,
0x06, 0x75, 0xfb, 0xe2, 0x76, 0x2d, 0x53, 0xd6, 0x2c, 0x47, 0x6d, 0x06, 0x43, 0x4d, 0x2a, 0x09,
0x2f, 0x18, 0x89, 0x27, 0xa4, 0xc3, 0xc5, 0x50, 0x11, 0xdd, 0x86, 0xe7, 0xa9, 0x9a, 0x5f, 0xfc,
0xff, 0xa8, 0xf1, 0xf7, 0x6f, 0x0c, 0x46, 0xfc, 0x77, 0x55, 0x83, 0x85, 0x24, 0x00, 0xb4, 0x06,
0xcb, 0x75, 0xa1, 0xdd, 0x90, 0xf7, 0xb5, 0xa6, 0xa0, 0x8a, 0x72, 0x5d, 0xeb, 0xb4, 0x94, 0xb6,
0xc0, 0x4b, 0x3b, 0x92, 0x50, 0x67, 0x4b, 0x68, 0x09, 0xd0, 0xf8, 0x34, 0xd7, 0x51, 0x65, 0x96,
0x41, 0x15, 0xb8, 0x36, 0x3e, 0xde, 0xe4, 0x5a, 0x1d, 0xae, 0xc1, 0x96, 0xab, 0x04, 0x60, 0xa4,
0x1a, 0xad, 0xc2, 0x8d, 0x90, 0x4e, 0xdd, 0x6f, 0x0b, 0x13, 0xc2, 0x6f, 0xc1, 0x4a, 0x72, 0x52,
0x6a, 0x29, 0x2a, 0xd7, 0x68, 0x68, 0x0a, 0x8f, 0xa5, 0xb6, 0xca, 0x32, 0x68, 0x05, 0x96, 0x92,
0xf3, 0x5c, 0x93, 0xfb, 0x44, 0x6e, 0x69, 0x02, 0xaf, 0xb0, 0xe5, 0xea, 0x7f, 0x33, 0x70, 0x3b,
0x25, 0x2b, 0x84, 0xa7, 0x9f, 0x53, 0x9f, 0x14, 0x7f, 0xa3, 0x0c, 0xf7, 0xa6, 0xcd, 0xe7, 0x6d,
0xeb, 0x8d, 0x79, 0x38, 0x74, 0x48, 0x53, 0x6d, 0x28, 0xa7, 0xde, 0x07, 0x7f, 0x58, 0x86, 0xe7,
0xc9, 0x57, 0xc0, 0x7d, 0xeb, 0xd9, 0x03, 0x3f, 0xd1, 0x1d, 0x91, 0xba, 0xe9, 0x90, 0xae, 0x67,
0x3b, 0x27, 0xaa, 0x6d, 0xf7, 0x5c, 0xc9, 0x72, 0x3d, 0xfd, 0xf4, 0xef, 0x14, 0xd5, 0xcf, 0xcb,
0xb0, 0x99, 0xe7, 0x90, 0x38, 0x44, 0x4e, 0xbd, 0x37, 0xfe, 0xb6, 0x0c, 0x0f, 0x46, 0xde, 0xe0,
0x86, 0x9e, 0x1d, 0xfd, 0x9d, 0xd8, 0x28, 0x4f, 0xfd, 0xde, 0xf5, 0x10, 0x2e, 0xa7, 0x1f, 0x1a,
0x16, 0x9d, 0xf1, 0xc3, 0xc2, 0xaf, 0x97, 0xfd, 0x4f, 0xe3, 0x48, 0x92, 0xc0, 0x6f, 0xd3, 0xb7,
0xc6, 0xfa, 0x26, 0x9d, 0xb8, 0xff, 0x93, 0x81, 0xe5, 0xc9, 0x3d, 0x55, 0x90, 0x78, 0xe1, 0x1b,
0x66, 0x38, 0xef, 0x10, 0xdd, 0x23, 0x2d, 0xdb, 0x38, 0xfd, 0x39, 0xe2, 0x77, 0xcb, 0xf0, 0x78,
0xc6, 0x36, 0x2a, 0x71, 0xcd, 0xb6, 0xdd, 0x33, 0xbb, 0x27, 0xa7, 0xde, 0x11, 0xff, 0xcb, 0x40,
0x75, 0xe4, 0x88, 0xb6, 0x63, 0x5a, 0x5d, 0x73, 0xa0, 0xf7, 0xdc, 0x6f, 0xce, 0x76, 0xf1, 0x5f,
0x0c, 0xac, 0x8d, 0x3c, 0xa0, 0x12, 0xd7, 0x0b, 0x3f, 0xb0, 0xbf, 0x09, 0x99, 0xef, 0x3f, 0x18,
0xff, 0x53, 0x31, 0x4e, 0x00, 0x61, 0x81, 0xd5, 0x38, 0xf5, 0x76, 0xaf, 0xfa, 0x79, 0x2f, 0xcc,
0x77, 0xe4, 0x18, 0xdb, 0xbd, 0x64, 0x11, 0xf8, 0xb6, 0x1f, 0x10, 0x63, 0x93, 0x8a, 0x7e, 0x94,
0x24, 0xb8, 0xe3, 0x7f, 0x82, 0x8c, 0x73, 0xfb, 0x1b, 0x66, 0x2f, 0x41, 0xf2, 0x14, 0x36, 0x26,
0x48, 0x5e, 0x99, 0xe4, 0xb8, 0x6e, 0x77, 0x87, 0x7d, 0x62, 0x79, 0xfa, 0xf8, 0x47, 0x79, 0xf5,
0xef, 0x18, 0xb8, 0xce, 0xb9, 0xae, 0xe9, 0xc7, 0x1e, 0x5d, 0x82, 0x38, 0xf6, 0x1e, 0xc2, 0xe5,
0xae, 0x6d, 0x1d, 0x11, 0xc7, 0xa5, 0x3c, 0x5a, 0x5c, 0xa0, 0x5c, 0x4c, 0x0e, 0x4b, 0x06, 0xba,
0x03, 0x0b, 0x9e, 0xed, 0xe9, 0x3d, 0xcd, 0xb3, 0xdf, 0x12, 0x2b, 0x28, 0xc0, 0xcd, 0xe1, 0x8b,
0x74, 0x4c, 0xa5, 0x43, 0xe8, 0x2e, 0x5c, 0x1a, 0x38, 0x76, 0x7f, 0xe0, 0x45, 0x34, 0x73, 0x94,
0x66, 0x21, 0x18, 0x0c, 0x89, 0x9e, 0xc0, 0x95, 0x6e, 0x8c, 0x21, 0x22, 0x0c, 0x4e, 0x0e, 0xec,
0x68, 0x22, 0x20, 0xae, 0xfe, 0x0b, 0x03, 0xd7, 0x02, 0xdc, 0xc2, 0x67, 0xa4, 0x3b, 0x7c, 0x07,
0xd8, 0x6b, 0x00, 0x96, 0x6d, 0x90, 0xf0, 0x84, 0x12, 0x80, 0xbe, 0xe0, 0x8f, 0xd0, 0xc3, 0xc9,
0x94, 0x55, 0x73, 0x05, 0xac, 0x3a, 0x53, 0xd4, 0xaa, 0xf9, 0x0c, 0xab, 0x5e, 0xc0, 0x4a, 0x60,
0x54, 0x8b, 0x1c, 0xf3, 0x09, 0xb8, 0x71, 0x55, 0xb9, 0xab, 0x7b, 0xe4, 0xd0, 0x76, 0x4e, 0xa2,
0xaa, 0x72, 0xf4, 0x5c, 0xfd, 0x09, 0x03, 0x57, 0x03, 0x56, 0xae, 0xdb, 0x25, 0xae, 0x8b, 0xc9,
0x0f, 0x86, 0xc4, 0xf5, 0x7c, 0x8c, 0x51, 0xfc, 0x06, 0x5f, 0xf8, 0x01, 0xe3, 0x42, 0x34, 0x48,
0x3f, 0x99, 0x7f, 0x26, 0x2b, 0xf8, 0x63, 0x06, 0x16, 0x22, 0xc4, 0xfe, 0x30, 0x5a, 0x82, 0xb3,
0x3a, 0xfd, 0x2b, 0xc4, 0x18, 0x3e, 0xfd, 0x6c, 0xd0, 0xdd, 0x03, 0x14, 0x38, 0xb2, 0x61, 0xba,
0x5e, 0x66, 0x9d, 0xfe, 0x97, 0x81, 0x1d, 0x51, 0x05, 0xef, 0x1c, 0xda, 0x9d, 0xca, 0x5d, 0xd9,
0x79, 0x62, 0x5a, 0xc5, 0x28, 0x7b, 0x8d, 0x0b, 0xef, 0x0c, 0x8c, 0xaf, 0x4f, 0x78, 0x9d, 0xf8,
0xb9, 0xf7, 0xab, 0x13, 0xae, 0xc3, 0x52, 0x72, 0xbe, 0x7f, 0x10, 0x9d, 0xf0, 0xbe, 0x56, 0x15,
0x5f, 0xb5, 0x8b, 0x52, 0x54, 0x7c, 0xd5, 0x8e, 0xfa, 0x95, 0xa4, 0x8a, 0x5d, 0x47, 0xb7, 0x3c,
0x57, 0xb5, 0x3b, 0x2e, 0x71, 0xd0, 0x26, 0x5c, 0xa5, 0x89, 0x49, 0x73, 0xec, 0x1e, 0x71, 0xb5,
0x43, 0x7f, 0x8e, 0x04, 0xa1, 0x37, 0x8f, 0xaf, 0xd0, 0x29, 0x3f, 0xb5, 0xbb, 0xbb, 0xc1, 0x04,
0x7a, 0x06, 0xd7, 0x02, 0x7a, 0xcf, 0xd1, 0x4d, 0x6f, 0xc4, 0x50, 0xa6, 0x0c, 0x88, 0xce, 0xa9,
0x74, 0x2a, 0xe4, 0xa8, 0xfe, 0x88, 0x81, 0xe5, 0x44, 0x89, 0x3f, 0x28, 0x6d, 0x67, 0x45, 0x3a,
0xaa, 0xc1, 0x99, 0xb7, 0xa6, 0x15, 0xc8, 0x5b, 0xdc, 0xde, 0xcc, 0x34, 0x77, 0x4a, 0xe2, 0x9e,
0x69, 0x19, 0x98, 0xf2, 0xa2, 0x55, 0xb8, 0x30, 0x74, 0x89, 0xa3, 0xd1, 0xb6, 0xd8, 0xdc, 0xa8,
0x2d, 0xd6, 0xd2, 0xfb, 0xa4, 0x6a, 0xfb, 0x5b, 0xdf, 0x14, 0x37, 0x6d, 0x15, 0x05, 0xd9, 0xaf,
0x35, 0xe5, 0xf4, 0xed, 0xe2, 0x28, 0x52, 0x7c, 0xef, 0xc0, 0x7a, 0x8a, 0xc2, 0xe8, 0x20, 0xf2,
0xf5, 0xe8, 0xfc, 0x57, 0x06, 0xae, 0xc6, 0xbd, 0x5f, 0xfa, 0x46, 0x04, 0x7a, 0x0a, 0x65, 0xe9,
0xc4, 0x77, 0xb5, 0x66, 0x3b, 0xe6, 0xa1, 0x69, 0x85, 0x4d, 0xb6, 0xf8, 0xbb, 0x5a, 0xa6, 0xa3,
0xe8, 0x3e, 0x2c, 0x76, 0x7b, 0xf6, 0xd0, 0xd0, 0x06, 0x8e, 0x7d, 0x64, 0x1a, 0xc4, 0x09, 0x9d,
0x7d, 0x89, 0x8e, 0xb6, 0xc3, 0x41, 0x24, 0xc3, 0x79, 0x23, 0xfc, 0xfc, 0xa0, 0x69, 0xf0, 0xe2,
0xf6, 0x7b, 0xb9, 0x07, 0x1a, 0x62, 0x44, 0x5f, 0x2c, 0x23, 0xeb, 0x22, 0x21, 0xd5, 0x57, 0xb0,
0x92, 0x4d, 0x87, 0x6e, 0xc0, 0x39, 0xe3, 0x20, 0x69, 0xdd, 0x59, 0xe3, 0x80, 0xda, 0x75, 0x1b,
0x2e, 0x1a, 0x07, 0x1a, 0xed, 0xdc, 0x77, 0xed, 0x5e, 0x68, 0x13, 0x18, 0x07, 0xed, 0x70, 0xa4,
0xfa, 0xef, 0x0c, 0xac, 0xec, 0x10, 0xdd, 0x1b, 0x3a, 0x04, 0x93, 0xae, 0xdd, 0xef, 0x13, 0xcb,
0x48, 0x6c, 0x8b, 0x63, 0x61, 0xc5, 0x8c, 0x87, 0x15, 0xfa, 0x2e, 0x9c, 0x7b, 0x13, 0xb0, 0x86,
0xa1, 0xbb, 0x9e, 0x69, 0x63, 0xa4, 0x22, 0x62, 0x40, 0x9f, 0xc1, 0x5a, 0xf8, 0xa7, 0xe6, 0x8c,
0xe9, 0xd5, 0x12, 0xc7, 0xc0, 0xc5, 0xed, 0xf7, 0x73, 0x25, 0x8e, 0x31, 0x87, 0xe7, 0xc1, 0xd5,
0x37, 0xd9, 0x93, 0xd5, 0x9f, 0x3c, 0x83, 0xcb, 0x1d, 0x5f, 0x16, 0xb5, 0x50, 0xb6, 0x88, 0xfc,
0x06, 0x75, 0xe0, 0xf2, 0xd0, 0xd4, 0x0e, 0xe8, 0xe5, 0x05, 0xad, 0xeb, 0x9f, 0xe0, 0x72, 0x73,
0xcf, 0xf4, 0x5d, 0x07, 0xb1, 0x84, 0x2f, 0x0d, 0xcd, 0xc4, 0x28, 0xfa, 0x31, 0x03, 0x8f, 0x87,
0xa6, 0x66, 0x07, 0xbd, 0x7c, 0x2d, 0xdc, 0x08, 0x89, 0x76, 0x68, 0x6b, 0x9e, 0xad, 0x19, 0xd1,
0x65, 0x87, 0x50, 0x63, 0x70, 0xf0, 0xe5, 0x66, 0x68, 0x2c, 0x76, 0x63, 0x42, 0x2c, 0xe1, 0xbb,
0x43, 0x33, 0x97, 0x16, 0x7d, 0xce, 0xc0, 0xdd, 0x04, 0x3a, 0xdd, 0x30, 0xb4, 0x37, 0xa6, 0xe3,
0x7a, 0x71, 0x5b, 0x2a, 0xc4, 0x15, 0xc4, 0xef, 0xf7, 0xf2, 0x71, 0x65, 0xdf, 0xc0, 0x10, 0x4b,
0xf8, 0x56, 0x0c, 0x29, 0x95, 0x6c, 0xd2, 0x57, 0x29, 0x68, 0x7a, 0xba, 0x17, 0xaf, 0xce, 0x7c,
0x51, 0x5f, 0xe5, 0x5c, 0xf7, 0x18, 0xf3, 0x55, 0x36, 0x2d, 0xfa, 0x6d, 0x06, 0xd6, 0x13, 0xe8,
0x5c, 0xe2, 0x69, 0xdd, 0xf8, 0x66, 0x88, 0xe6, 0xd2, 0x4b, 0x19, 0x95, 0xb3, 0x14, 0xd4, 0x77,
0xf3, 0x41, 0x65, 0xdd, 0x2b, 0x11, 0x4b, 0xf8, 0x66, 0x8c, 0x26, 0x85, 0x08, 0xfd, 0x11, 0x03,
0xf7, 0x12, 0x30, 0x9c, 0xb0, 0x3f, 0xa2, 0x75, 0xa3, 0xeb, 0x21, 0x11, 0x94, 0x73, 0x14, 0xca,
0x2f, 0xe4, 0x43, 0x99, 0x75, 0xc1, 0x44, 0x2c, 0xe1, 0xf5, 0x18, 0x4e, 0x06, 0x61, 0xe4, 0x19,
0x27, 0xbc, 0xb2, 0xa1, 0x75, 0x6d, 0x83, 0x96, 0x26, 0x83, 0x2b, 0x23, 0xe1, 0x72, 0x9d, 0xcf,
0xf5, 0x4c, 0xce, 0x85, 0x93, 0xc0, 0x33, 0xd9, 0x44, 0xe8, 0x33, 0xb8, 0x99, 0x86, 0x62, 0x70,
0x12, 0x22, 0xb8, 0x40, 0x11, 0x7c, 0xa7, 0x38, 0x82, 0xe4, 0x8d, 0x15, 0xb1, 0x84, 0x2b, 0x53,
0xda, 0x43, 0x02, 0xf4, 0xab, 0xb0, 0x36, 0xad, 0x79, 0xe0, 0x98, 0x96, 0x17, 0xaa, 0x06, 0xaa,
0xfa, 0x83, 0xa2, 0xaa, 0x27, 0xee, 0xbb, 0x88, 0x25, 0xbc, 0x3c, 0xa1, 0x7b, 0x44, 0x81, 0x7a,
0xb0, 0x3c, 0x34, 0x35, 0x23, 0xdc, 0x19, 0xfc, 0xdc, 0xe9, 0x78, 0xc4, 0xd0, 0xa8, 0xf0, 0xca,
0x45, 0xaa, 0x78, 0xab, 0x40, 0xc3, 0x31, 0x79, 0x6b, 0x44, 0x2c, 0xe1, 0xa5, 0xa1, 0x99, 0x7a,
0x9f, 0xe4, 0xf3, 0x20, 0xfc, 0x62, 0x75, 0xf1, 0xab, 0xe9, 0x46, 0x45, 0xe5, 0x50, 0xf3, 0x02,
0xd5, 0xfc, 0x73, 0x05, 0x34, 0xa7, 0x5f, 0x04, 0x09, 0x22, 0x2f, 0xe7, 0xb2, 0xc8, 0x0f, 0x69,
0xe0, 0xc5, 0x60, 0xc2, 0x56, 0xab, 0x1b, 0x74, 0x4d, 0x43, 0x20, 0x97, 0x28, 0x90, 0x6f, 0xbf,
0x53, 0xcf, 0x35, 0x88, 0xb9, 0x19, 0x3d, 0xf2, 0xdf, 0x0b, 0x12, 0xe8, 0x08, 0x41, 0xb8, 0x2d,
0x8f, 0xde, 0xcb, 0x00, 0xc4, 0x22, 0x05, 0xf1, 0xa2, 0x08, 0x88, 0xb4, 0xc6, 0xa7, 0x58, 0xc2,
0xb7, 0x13, 0x38, 0x52, 0x7b, 0xa3, 0x7f, 0x12, 0x64, 0xcf, 0x69, 0x28, 0xdd, 0xa8, 0xe2, 0xa7,
0xf5, 0xbd, 0x9e, 0x1b, 0x02, 0xba, 0x4c, 0x01, 0xfd, 0xfc, 0x97, 0x00, 0x34, 0xdd, 0x8a, 0x14,
0x4b, 0xf8, 0xde, 0x34, 0xaa, 0x11, 0x9d, 0xd7, 0x0b, 0xbb, 0x31, 0xff, 0xc0, 0xc0, 0x8b, 0xf1,
0x75, 0xa2, 0x8d, 0x2c, 0x4d, 0xa7, 0x9d, 0x2c, 0xcd, 0x88, 0x5a, 0x59, 0x9a, 0x67, 0xdb, 0x3d,
0x57, 0x33, 0x83, 0xee, 0x5e, 0x88, 0x94, 0xa5, 0x48, 0x5f, 0x16, 0x5a, 0xbf, 0x42, 0x0d, 0x43,
0xb1, 0x84, 0x9f, 0x27, 0x17, 0xb5, 0x58, 0x97, 0xf1, 0xa7, 0x0c, 0xbc, 0x5f, 0xc8, 0x86, 0x91,
0xbb, 0x03, 0xfc, 0x57, 0x28, 0xfe, 0xdd, 0x77, 0xc6, 0x3f, 0x5e, 0xb0, 0x15, 0x4b, 0x78, 0x33,
0x0f, 0xfc, 0x44, 0x89, 0xf7, 0xcf, 0x18, 0x78, 0x92, 0x44, 0xae, 0x0f, 0xfd, 0x93, 0x47, 0x7c,
0x92, 0x4c, 0x5c, 0x41, 0x09, 0x00, 0x23, 0x0a, 0xf8, 0xa3, 0x02, 0x80, 0x67, 0xb5, 0xe0, 0xc4,
0x12, 0x7e, 0x30, 0x02, 0x3a, 0xb3, 0x59, 0xf7, 0x37, 0x0c, 0x6c, 0xe5, 0x44, 0xae, 0xa9, 0xf7,
0xb5, 0x01, 0x2d, 0xdc, 0x87, 0x20, 0xaf, 0x52, 0x90, 0xb5, 0x77, 0x89, 0xdf, 0xf1, 0x1e, 0x80,
0x58, 0xc2, 0x8f, 0x67, 0x04, 0xb1, 0xa4, 0xf7, 0x93, 0x0d, 0x83, 0x3f, 0x66, 0xe0, 0x41, 0x12,
0xea, 0x20, 0xae, 0xab, 0x4f, 0xad, 0xfb, 0x35, 0x8a, 0xf0, 0xc3, 0x02, 0x08, 0xb3, 0x8a, 0xf3,
0x62, 0x09, 0x57, 0x47, 0xd0, 0x32, 0x4b, 0xf8, 0xbf, 0xc9, 0xc0, 0x9d, 0x24, 0x26, 0x8f, 0xb8,
0x9e, 0x8f, 0xc6, 0x1a, 0xcb, 0xc7, 0xd7, 0x73, 0x77, 0xbf, 0x19, 0x95, 0x72, 0xb1, 0x84, 0xd7,
0x46, 0x48, 0xd2, 0x4a, 0xe9, 0x0e, 0xac, 0x26, 0x31, 0x44, 0xe7, 0xdc, 0x68, 0x1f, 0x5a, 0xca,
0x29, 0x0f, 0x67, 0x95, 0xaa, 0x83, 0x6d, 0x37, 0xa3, 0x8c, 0xdd, 0x83, 0xca, 0xd0, 0xf4, 0x0f,
0x61, 0xba, 0x47, 0x34, 0x8b, 0x1c, 0xd3, 0x8f, 0xf9, 0x70, 0xc7, 0xbd, 0x91, 0xf3, 0x39, 0x99,
0x59, 0x24, 0x16, 0x4b, 0xf8, 0xda, 0xd0, 0x9c, 0x9e, 0x44, 0x27, 0x74, 0x93, 0x9f, 0xd4, 0xe6,
0xea, 0x47, 0x91, 0xca, 0x4a, 0xae, 0x87, 0x67, 0x94, 0x9e, 0x03, 0x43, 0xd3, 0x09, 0xd0, 0x0f,
0xe1, 0x76, 0x9a, 0xa1, 0xb4, 0x34, 0x1d, 0x2a, 0x5f, 0xce, 0xdd, 0x60, 0x66, 0x96, 0xb5, 0xc5,
0x12, 0x5e, 0x99, 0xb4, 0x7a, 0x44, 0x82, 0xfe, 0x22, 0x48, 0x21, 0x93, 0x08, 0x8e, 0x4c, 0x72,
0xac, 0x19, 0xc9, 0xd2, 0x77, 0x88, 0x66, 0x85, 0xa2, 0xe1, 0x8b, 0xa2, 0x99, 0x51, 0x41, 0x17,
0x4b, 0xf8, 0xfe, 0x04, 0xb0, 0x74, 0x6a, 0xf4, 0xd7, 0x0c, 0x6c, 0x26, 0x43, 0xd0, 0x1c, 0x15,
0x0c, 0x34, 0xfd, 0xd8, 0xd5, 0x6c, 0xd3, 0xe8, 0x46, 0xaf, 0x45, 0x18, 0x95, 0xab, 0xb9, 0x9f,
0x10, 0xc5, 0x2e, 0x6b, 0x8a, 0x25, 0xfc, 0x68, 0x14, 0xa5, 0x49, 0xda, 0x63, 0x57, 0x36, 0x8d,
0xee, 0xd8, 0xc5, 0xce, 0x1f, 0x31, 0x70, 0x3f, 0xfd, 0xc8, 0x60, 0xb8, 0x1a, 0xa1, 0xa5, 0x8d,
0x10, 0xde, 0xcd, 0xc2, 0x47, 0xa8, 0xf4, 0x3b, 0x94, 0xe3, 0x47, 0xa8, 0x98, 0xc6, 0x70, 0x93,
0xf7, 0x2c, 0xbd, 0x20, 0xac, 0xfd, 0xfd, 0xd6, 0xb3, 0xb5, 0xa0, 0x26, 0x1c, 0xac, 0x62, 0x88,
0x62, 0x2d, 0xf7, 0xd5, 0x4d, 0xbf, 0x90, 0x18, 0x46, 0x74, 0xfa, 0x65, 0xc5, 0xef, 0xc3, 0x15,
0x9d, 0x16, 0xa7, 0xb5, 0x51, 0x69, 0xb8, 0x72, 0x8b, 0x6a, 0xca, 0x2e, 0x7e, 0xa5, 0x36, 0x52,
0xc4, 0x12, 0x66, 0xf5, 0x89, 0x89, 0x28, 0x25, 0x26, 0x43, 0x20, 0xf4, 0x2c, 0x3d, 0x1e, 0x87,
0x96, 0xdd, 0xce, 0x7d, 0x61, 0x67, 0x14, 0xcc, 0x82, 0x94, 0x38, 0xab, 0xa2, 0x16, 0x1e, 0x95,
0x53, 0x40, 0xc4, 0x55, 0x80, 0x00, 0xc7, 0x7a, 0xee, 0x3a, 0xcf, 0xae, 0xa3, 0x05, 0xeb, 0x9c,
0x53, 0x6b, 0xfb, 0x2d, 0x86, 0x26, 0x91, 0xe8, 0xbb, 0xf1, 0x07, 0xc9, 0x9f, 0x25, 0x44, 0x9f,
0x8c, 0x77, 0x8a, 0x7e, 0xbd, 0x66, 0xfd, 0xa8, 0x61, 0xec, 0xeb, 0x35, 0x85, 0x08, 0x7d, 0x02,
0xe1, 0x62, 0x69, 0x24, 0xea, 0x2b, 0x55, 0xaa, 0x54, 0xeb, 0xb7, 0x72, 0x96, 0x7d, 0xbc, 0x0f,
0x25, 0x96, 0xf0, 0x65, 0x7d, 0x7c, 0x1c, 0xf5, 0xe1, 0x46, 0x28, 0xdb, 0x4f, 0x50, 0xc9, 0x76,
0x54, 0xe5, 0x6e, 0x4e, 0xfd, 0x2d, 0xbb, 0x2b, 0x24, 0x96, 0xf0, 0x75, 0x3d, 0x6d, 0x16, 0x1d,
0xc0, 0xf5, 0x51, 0x95, 0x24, 0x48, 0x8c, 0xc1, 0x72, 0xde, 0xa3, 0xca, 0x9e, 0x66, 0x2a, 0x4b,
0xa9, 0x50, 0x8a, 0x25, 0x7c, 0xd5, 0x49, 0x29, 0x5c, 0x1e, 0xc3, 0xcd, 0x8c, 0x12, 0x59, 0xa0,
0xea, 0x7e, 0x8e, 0x5d, 0xd9, 0x65, 0x3d, 0x3f, 0xe1, 0xbf, 0xc9, 0x2e, 0xfa, 0x1d, 0x40, 0x68,
0xb5, 0xa6, 0xd3, 0x02, 0xba, 0xe6, 0x04, 0x0d, 0xaf, 0xca, 0x83, 0x1c, 0xe3, 0x52, 0x9a, 0x64,
0xbe, 0x71, 0x7a, 0x4a, 0xef, 0xac, 0x01, 0x97, 0x62, 0x1d, 0x74, 0x95, 0x1e, 0x52, 0xd9, 0xf7,
0x73, 0x65, 0xfb, 0xc4, 0x62, 0x09, 0x2f, 0xe8, 0xc9, 0xf6, 0xd6, 0x3e, 0xa0, 0x10, 0x6a, 0x8f,
0xa6, 0x15, 0xea, 0xc5, 0xca, 0xa3, 0x9c, 0xee, 0xf6, 0x64, 0x7b, 0x89, 0x66, 0x93, 0xc9, 0x96,
0xd3, 0x84, 0xe8, 0x21, 0x6d, 0x84, 0x54, 0x1e, 0x17, 0x16, 0x1d, 0x74, 0x4e, 0xc6, 0x45, 0x87,
0xdd, 0x94, 0x09, 0xd1, 0x06, 0x6d, 0x80, 0x54, 0x36, 0x0a, 0x8b, 0x0e, 0x3a, 0x26, 0xe3, 0xa2,
0xc3, 0x2e, 0x4a, 0x0f, 0x96, 0x93, 0xa2, 0xfb, 0xb4, 0xc3, 0x12, 0xf9, 0xe5, 0x49, 0x4e, 0x5d,
0x20, 0xbd, 0xbf, 0x24, 0x96, 0xf0, 0x92, 0x9e, 0xde, 0x79, 0x4a, 0xd7, 0x16, 0xba, 0xea, 0xe9,
0x97, 0xd4, 0x16, 0x3b, 0x6c, 0x4a, 0x5b, 0xe8, 0xb6, 0x74, 0x6d, 0xa1, 0xf7, 0xbe, 0xf5, 0x25,
0xb5, 0xc5, 0x3e, 0x9c, 0xd2, 0x16, 0x7a, 0xb2, 0x0f, 0x2b, 0x49, 0x6d, 0xb4, 0xf7, 0xe3, 0xfa,
0xbb, 0xe5, 0xd0, 0x25, 0x4e, 0x65, 0xb3, 0xb0, 0xba, 0x64, 0x07, 0x6a, 0x5c, 0xdd, 0x58, 0x6f,
0xea, 0xf7, 0x19, 0xa8, 0x26, 0x0f, 0x08, 0xa4, 0xbb, 0x1d, 0x7c, 0x12, 0x5b, 0xc9, 0x32, 0x4b,
0x65, 0x2b, 0xb7, 0x26, 0x9b, 0x7b, 0xf5, 0x2f, 0xa8, 0xc9, 0xc6, 0x64, 0xdd, 0x69, 0x32, 0xf4,
0x16, 0x6e, 0xa4, 0x54, 0x58, 0x88, 0xd9, 0x25, 0x95, 0x67, 0xb9, 0x47, 0xec, 0x8c, 0x8b, 0x77,
0xc1, 0x11, 0x7b, 0x62, 0xd2, 0xec, 0x92, 0x49, 0x65, 0xd1, 0x71, 0xd3, 0x36, 0x48, 0xe5, 0x79,
0x61, 0x65, 0x13, 0x97, 0xdd, 0xc6, 0x95, 0x8d, 0x26, 0x6b, 0xe7, 0x60, 0x9e, 0xb2, 0xbf, 0x3c,
0x73, 0xbe, 0xcc, 0xce, 0xf9, 0xfb, 0x56, 0xbc, 0x39, 0x1e, 0x12, 0x2f, 0xae, 0xa3, 0xd1, 0xa3,
0xd0, 0xc6, 0xdf, 0x2f, 0x8e, 0x7e, 0x56, 0x16, 0xe5, 0x6f, 0x74, 0x07, 0xd6, 0xea, 0x92, 0xc2,
0xcb, 0xaf, 0x04, 0xac, 0x61, 0x41, 0x91, 0x3b, 0x98, 0x9f, 0xbc, 0x10, 0x7f, 0x13, 0x2a, 0xd3,
0x24, 0x8a, 0x80, 0x5f, 0x09, 0x98, 0x65, 0xd0, 0x3a, 0xdc, 0x9c, 0x9e, 0xdd, 0xeb, 0xd4, 0x04,
0xdc, 0x12, 0x54, 0x41, 0x61, 0xcb, 0xe8, 0x3d, 0xd8, 0x9a, 0xa6, 0xa8, 0x73, 0x2a, 0x57, 0xe3,
0x14, 0x41, 0x6b, 0xcb, 0x8a, 0xba, 0x8b, 0x05, 0x45, 0x53, 0x84, 0xc6, 0x8e, 0x26, 0xca, 0x8a,
0x2a, 0xd4, 0xd9, 0x39, 0xf4, 0x0c, 0x9e, 0xce, 0x60, 0x6a, 0xee, 0x2b, 0x1f, 0x37, 0xc6, 0x38,
0xce, 0xa0, 0x6d, 0xd8, 0x9c, 0xc5, 0x21, 0xb7, 0x76, 0xe5, 0x7a, 0x6d, 0x8c, 0x67, 0x1e, 0x3d,
0x81, 0x87, 0x45, 0xa0, 0xe1, 0xba, 0xc2, 0x9e, 0x45, 0x8f, 0xe0, 0x5e, 0x2e, 0x24, 0x9f, 0xf2,
0x1c, 0x7a, 0x00, 0xd5, 0x69, 0x4a, 0xae, 0xdd, 0x6e, 0x48, 0x3c, 0xa7, 0x4a, 0x72, 0x4b, 0x13,
0x55, 0xb5, 0xcd, 0x9e, 0x47, 0xf7, 0xe1, 0xce, 0x6c, 0x3a, 0x95, 0x6f, 0xb3, 0x17, 0xd2, 0xc9,
0x5e, 0x4b, 0xad, 0xba, 0xfc, 0x5a, 0xd1, 0xea, 0x82, 0xb2, 0xa7, 0xca, 0x6d, 0x16, 0xd0, 0x53,
0x78, 0x34, 0x03, 0x9f, 0xf2, 0x71, 0x23, 0x58, 0x33, 0x8a, 0xf1, 0x62, 0x8e, 0x83, 0x47, 0xa6,
0x0b, 0x75, 0x45, 0x94, 0x76, 0x54, 0x76, 0x01, 0xbd, 0x0f, 0xcf, 0x0a, 0xc9, 0x4f, 0xba, 0xf8,
0x52, 0x8e, 0x1e, 0x2c, 0xd4, 0xa5, 0xf1, 0xa5, 0x5f, 0x2c, 0xba, 0x28, 0xbb, 0x7c, 0x9b, 0xbd,
0x5c, 0x68, 0x51, 0x7c, 0x4a, 0xb6, 0xb0, 0x7b, 0x7c, 0xea, 0x2b, 0xe8, 0x43, 0xf8, 0xe0, 0xcb,
0xb8, 0x27, 0x7c, 0x1f, 0x1a, 0x82, 0xa2, 0xb0, 0x08, 0x7d, 0x0b, 0x1e, 0x17, 0x61, 0xe6, 0x3e,
0xe9, 0x60, 0x81, 0xbd, 0x8a, 0x1e, 0xc2, 0xdd, 0x19, 0xe4, 0xf5, 0xfd, 0x16, 0xd7, 0x94, 0xeb,
0x35, 0xf6, 0x5a, 0x4e, 0x88, 0xf3, 0x9c, 0xa2, 0x70, 0xad, 0x3a, 0xe6, 0xb4, 0x3d, 0x61, 0x5f,
0x69, 0x73, 0xbc, 0xa0, 0xb0, 0xd7, 0x73, 0x56, 0x6d, 0xc4, 0x93, 0x5c, 0x83, 0x25, 0xf4, 0x02,
0xde, 0x9f, 0xc1, 0x25, 0x34, 0x38, 0x45, 0x95, 0x78, 0x45, 0xe0, 0x30, 0x2f, 0x8e, 0x71, 0xde,
0x28, 0xb4, 0xde, 0x21, 0x3f, 0xc7, 0x8b, 0x02, 0x5b, 0xc9, 0xf1, 0x56, 0xc0, 0xd1, 0x14, 0x9a,
0x32, 0xde, 0xaf, 0xd7, 0xd8, 0xe5, 0x42, 0x0a, 0xa8, 0x67, 0xb5, 0x40, 0xc1, 0x4a, 0x8e, 0x31,
0x01, 0x07, 0xdf, 0xe8, 0x28, 0xea, 0x44, 0xf0, 0xae, 0xa2, 0x0d, 0x78, 0x90, 0x1b, 0x5d, 0xc1,
0x2a, 0xde, 0x44, 0x9b, 0xb0, 0x51, 0x28, 0xbe, 0x02, 0xfa, 0xb5, 0x9c, 0xc5, 0x1c, 0xd1, 0x37,
0x25, 0x1e, 0xcb, 0x8a, 0xbc, 0xa3, 0xb2, 0xb7, 0xd0, 0x77, 0x60, 0x7b, 0xd6, 0x62, 0xca, 0xfc,
0x1e, 0x96, 0x39, 0x5e, 0x9c, 0xc8, 0x73, 0xb7, 0x73, 0x62, 0x3f, 0xca, 0x8d, 0x9c, 0xda, 0xe0,
0x14, 0x76, 0x3d, 0xe7, 0x9d, 0x52, 0x5a, 0xf2, 0xeb, 0x9d, 0x06, 0xb7, 0x27, 0xb0, 0x77, 0x32,
0xe4, 0xca, 0x7c, 0xc2, 0xbb, 0x75, 0x45, 0x6b, 0x63, 0xf9, 0x97, 0xf6, 0xd9, 0x6a, 0x46, 0x28,
0x26, 0xa9, 0x45, 0x69, 0x57, 0xd4, 0xb8, 0x57, 0x9c, 0xd4, 0xe0, 0x6a, 0x52, 0x43, 0x52, 0xf7,
0xd9, 0xbb, 0xe8, 0x03, 0x78, 0x2f, 0x87, 0x8b, 0xbe, 0x21, 0x12, 0xaf, 0x61, 0x61, 0x57, 0x52,
0x54, 0x4c, 0x53, 0x27, 0x7b, 0x2f, 0x3d, 0x0b, 0x2b, 0x5c, 0xb3, 0x91, 0x4c, 0xb1, 0xec, 0x7d,
0x54, 0x85, 0x5b, 0xd3, 0x74, 0x02, 0xbf, 0x1d, 0xfc, 0xf4, 0xab, 0xc5, 0x0b, 0xec, 0x83, 0x8d,
0xbf, 0x64, 0x60, 0x71, 0xfc, 0xe7, 0xcc, 0xe8, 0x36, 0xac, 0xc6, 0x6c, 0x8a, 0xca, 0xa9, 0x1d,
0x65, 0x62, 0xdf, 0x5c, 0x85, 0x1b, 0x93, 0x04, 0x4a, 0x87, 0xe7, 0xfd, 0x14, 0xc1, 0xa4, 0x4e,
0xee, 0x49, 0xed, 0xb6, 0x50, 0x67, 0xcb, 0x68, 0x19, 0xae, 0x4f, 0x4e, 0x0a, 0x18, 0xcb, 0x98,
0x9d, 0x4b, 0xe3, 0xe3, 0x6a, 0x32, 0xa6, 0x5b, 0xe0, 0xc6, 0x3f, 0x32, 0x30, 0xc7, 0xab, 0x1c,
0xba, 0x0a, 0x97, 0x79, 0x95, 0x9b, 0xfe, 0xd1, 0x9c, 0x3f, 0xc8, 0x75, 0x54, 0x51, 0xe3, 0xe5,
0x56, 0x4b, 0xe0, 0x55, 0xd9, 0xdf, 0xc0, 0x6f, 0xc0, 0x55, 0x3a, 0xce, 0xab, 0xd2, 0x2b, 0x7f,
0x5f, 0x57, 0x14, 0x49, 0x6e, 0xf9, 0xfb, 0x76, 0x3c, 0xe1, 0x43, 0xd6, 0xb0, 0xf0, 0x71, 0x47,
0x50, 0x54, 0x85, 0x9d, 0x8b, 0x26, 0xda, 0x58, 0x68, 0x4a, 0x9d, 0xa6, 0xa6, 0x74, 0xda, 0x6d,
0x19, 0xab, 0xec, 0x99, 0x68, 0x42, 0xc5, 0xfe, 0xbb, 0x54, 0xd7, 0xea, 0xc2, 0x2b, 0xc9, 0x4f,
0x42, 0xf3, 0x91, 0xee, 0x4e, 0x7b, 0x17, 0x73, 0x75, 0x41, 0xab, 0x71, 0xad, 0x96, 0x80, 0xd9,
0xb3, 0x11, 0x43, 0x4d, 0x6a, 0x34, 0xa4, 0xd6, 0xae, 0xa6, 0x74, 0x9a, 0x4d, 0x0e, 0xef, 0xb3,
0xe7, 0x36, 0xfe, 0xf4, 0x2c, 0x5c, 0x4f, 0xbd, 0x27, 0xe4, 0x27, 0x4b, 0xa9, 0xa5, 0x0a, 0xbb,
0xc1, 0x32, 0x6b, 0x42, 0x0b, 0xcb, 0x8d, 0x86, 0xb6, 0x27, 0xb5, 0x26, 0x7f, 0x24, 0x78, 0x07,
0xd6, 0xb2, 0x08, 0x95, 0x06, 0xc7, 0xef, 0xb1, 0x0c, 0xba, 0x07, 0xeb, 0x59, 0x24, 0xdc, 0x6b,
0x45, 0x93, 0xa5, 0x3a, 0xcf, 0x96, 0xfd, 0xed, 0x37, 0x8b, 0xaa, 0xcd, 0xed, 0x0a, 0xb8, 0xde,
0x51, 0xf7, 0xd9, 0xb9, 0x59, 0xfa, 0x84, 0x26, 0x27, 0x35, 0xd8, 0x33, 0xfe, 0x59, 0x29, 0x8b,
0xe4, 0xa5, 0x84, 0x39, 0x76, 0x1e, 0xdd, 0x85, 0xdb, 0x59, 0x14, 0x74, 0xd9, 0x71, 0x9d, 0x3d,
0xeb, 0x07, 0x76, 0x16, 0x51, 0x93, 0x53, 0x55, 0x01, 0x37, 0x65, 0x45, 0x65, 0xcf, 0xcd, 0x32,
0xaf, 0xa9, 0x68, 0xaa, 0xc0, 0x35, 0x15, 0xf6, 0xfc, 0x2c, 0x2a, 0xb9, 0xad, 0xec, 0x0a, 0x2d,
0x49, 0x60, 0x2f, 0xcc, 0x82, 0x2e, 0xef, 0xa9, 0x1c, 0x0b, 0x33, 0x8d, 0xe3, 0x9a, 0x3b, 0xec,
0xc5, 0xd9, 0xb8, 0x79, 0x51, 0x6a, 0x09, 0x9a, 0x54, 0x67, 0x17, 0xd0, 0xb7, 0xe1, 0x79, 0x3e,
0x9d, 0xb6, 0x2b, 0xa9, 0x62, 0xa7, 0x46, 0xe3, 0xd6, 0x8f, 0xd7, 0x4b, 0x68, 0x0b, 0x9e, 0x14,
0x60, 0xe3, 0x25, 0xcc, 0x37, 0x04, 0x5e, 0x62, 0x17, 0xfd, 0x8d, 0xa7, 0x98, 0x9e, 0x06, 0x57,
0x63, 0x2f, 0xfb, 0x09, 0xbe, 0x00, 0xf9, 0x4b, 0xa1, 0xb5, 0x27, 0xb5, 0x14, 0x96, 0x2d, 0x48,
0xcf, 0xb5, 0x14, 0xa9, 0xd6, 0x10, 0xd8, 0x2b, 0xb3, 0xdc, 0xe3, 0x6f, 0x05, 0x12, 0x2f, 0xb4,
0xe4, 0xd7, 0x2c, 0xda, 0xf8, 0x08, 0xce, 0x85, 0x35, 0x11, 0xff, 0xfd, 0xd9, 0x11, 0x38, 0xd5,
0xdf, 0xec, 0xa6, 0x72, 0x4f, 0x34, 0x31, 0xf9, 0x36, 0x32, 0x1b, 0x7f, 0xce, 0xc0, 0xea, 0x8c,
0x7b, 0x47, 0xbe, 0x5f, 0x22, 0x66, 0x2c, 0xf0, 0x72, 0xb3, 0x29, 0xb4, 0xea, 0x01, 0xa6, 0xd4,
0x3c, 0xb7, 0x01, 0x0f, 0x66, 0x93, 0xb7, 0x64, 0x35, 0xa0, 0x65, 0x7c, 0x1b, 0x67, 0xd3, 0xd6,
0xe5, 0x96, 0xc0, 0x96, 0x6b, 0xdf, 0xff, 0xa7, 0x2f, 0x6e, 0x31, 0xff, 0xfc, 0xc5, 0x2d, 0xe6,
0xdf, 0xbe, 0xb8, 0xc5, 0x7c, 0x22, 0x1f, 0x9a, 0xde, 0xa7, 0xc3, 0x83, 0xcd, 0xae, 0xdd, 0xdf,
0x3a, 0x74, 0xf4, 0x23, 0x33, 0xa8, 0x99, 0xeb, 0xbd, 0xad, 0xf8, 0x1f, 0xbe, 0xe8, 0x03, 0x73,
0xeb, 0x90, 0x58, 0x5b, 0xf4, 0x8e, 0xd8, 0xd6, 0xa1, 0x3d, 0xf1, 0x1f, 0x60, 0x3e, 0x4c, 0x3c,
0x1e, 0x3d, 0x3f, 0x38, 0x4b, 0xc9, 0xde, 0xfb, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0xab,
0xfa, 0xa6, 0x31, 0x46, 0x00, 0x00,
// 4176 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5c, 0xdd, 0x6f, 0xdb, 0xc8,
0x76, 0x17, 0xe5, 0x38, 0x71, 0x4e, 0x1c, 0x87, 0x99, 0x24, 0x8e, 0x6c, 0xc7, 0xb1, 0xa3, 0x7c,
0x3b, 0xbb, 0xf6, 0xc6, 0xbb, 0xf7, 0x6e, 0x7a, 0xf7, 0xb6, 0x5b, 0x9a, 0xa2, 0x4d, 0xc6, 0x92,
0xa8, 0x0c, 0xa9, 0xa4, 0xde, 0x8b, 0x0b, 0x82, 0x16, 0x27, 0x5e, 0x22, 0x92, 0xa8, 0x4b, 0x52,
0xf6, 0xba, 0x45, 0x71, 0xfb, 0x8d, 0xa2, 0xbb, 0x2d, 0xda, 0xb7, 0x16, 0x17, 0x28, 0x5a, 0xb4,
0x05, 0xfa, 0x50, 0xa0, 0x4f, 0xc5, 0x45, 0x1f, 0xfb, 0xd4, 0x3e, 0x16, 0xe8, 0x63, 0x5f, 0x8a,
0xfd, 0x07, 0xfa, 0xd4, 0x3e, 0x14, 0x2d, 0x5a, 0x70, 0x86, 0xa4, 0x28, 0x89, 0x12, 0xb9, 0xe9,
0x2e, 0x2e, 0xe0, 0x7d, 0x33, 0x67, 0xce, 0xc7, 0x6f, 0xce, 0xcc, 0x9c, 0x33, 0x73, 0xce, 0xc8,
0xf0, 0xd8, 0x27, 0x6d, 0xd2, 0x73, 0x5c, 0x7f, 0xab, 0xef, 0x99, 0x47, 0x84, 0x1c, 0x93, 0xae,
0xef, 0x6d, 0x1d, 0x3f, 0x4d, 0x7e, 0x6e, 0xf6, 0x5c, 0xc7, 0x77, 0xd0, 0xcd, 0x88, 0x74, 0x33,
0xd9, 0x77, 0xfc, 0xb4, 0xbc, 0x01, 0xa8, 0xa9, 0xec, 0x98, 0xdd, 0x2e, 0x71, 0xc5, 0xb6, 0xdd,
0x7a, 0x23, 0x05, 0x3d, 0xe8, 0x3a, 0xcc, 0x9a, 0x6d, 0xe2, 0xfa, 0x25, 0x6e, 0x9d, 0x7b, 0x74,
0x11, 0xb3, 0x8f, 0xf2, 0x2e, 0x3c, 0x6a, 0x2a, 0x6a, 0xf7, 0xd0, 0x31, 0x5d, 0x4b, 0x74, 0x3a,
0xbd, 0x36, 0xf1, 0xc9, 0x9e, 0xa3, 0x3b, 0x15, 0xd3, 0xfb, 0x94, 0x35, 0x0e, 0x24, 0x2c, 0xc3,
0x5c, 0xdf, 0x23, 0x6e, 0xd7, 0xec, 0x90, 0x50, 0x48, 0xfc, 0x5d, 0xbe, 0x0f, 0x77, 0x63, 0x39,
0x82, 0x65, 0xed, 0xda, 0xae, 0xe7, 0x63, 0xe2, 0x39, 0x7d, 0xb7, 0x45, 0x06, 0x22, 0xca, 0x1b,
0x09, 0x75, 0xa3, 0x64, 0x55, 0xd3, 0x4f, 0x02, 0x2e, 0x7f, 0x0c, 0x77, 0x62, 0x5a, 0x8d, 0xf8,
0xa2, 0x4b, 0x2c, 0xd2, 0xf5, 0x6d, 0xb3, 0xad, 0xf5, 0x0f, 0x3b, 0xb6, 0x9f, 0x8d, 0x29, 0x29,
0xe0, 0x45, 0x9f, 0x78, 0xbe, 0xed, 0x74, 0xbb, 0xa6, 0xed, 0x92, 0xbc, 0x02, 0x7e, 0x15, 0xee,
0xc7, 0x02, 0x30, 0x39, 0xb2, 0xbd, 0x00, 0xe0, 0xa7, 0x66, 0xbb, 0x4d, 0xba, 0x47, 0x79, 0x85,
0xa0, 0x25, 0x98, 0xeb, 0xbc, 0x36, 0x0d, 0xff, 0xb4, 0x47, 0x4a, 0x45, 0xda, 0x77, 0xa1, 0xf3,
0xda, 0xd4, 0x4f, 0x7b, 0x04, 0xad, 0x02, 0xb4, 0x9d, 0x23, 0xbb, 0x6b, 0xbc, 0x6e, 0x3b, 0x27,
0xa5, 0x19, 0xda, 0x79, 0x91, 0xb6, 0xec, 0xb6, 0x9d, 0x13, 0x86, 0x1f, 0x93, 0x96, 0x73, 0x4c,
0xdc, 0x53, 0xd1, 0xb1, 0x88, 0x27, 0x3a, 0x5d, 0xdf, 0xee, 0xf6, 0x49, 0xce, 0x49, 0xf9, 0x08,
0x56, 0xc7, 0x04, 0xf4, 0x4e, 0x73, 0x32, 0x7f, 0x1f, 0x6e, 0x8f, 0x30, 0x37, 0x5c, 0xbb, 0xeb,
0xe7, 0xe4, 0x2e, 0x03, 0x5f, 0xb1, 0x3d, 0xca, 0x5c, 0x23, 0xbe, 0x69, 0x99, 0xbe, 0x89, 0x16,
0xa0, 0x68, 0x5b, 0x21, 0x65, 0xd1, 0xb6, 0xca, 0x26, 0x94, 0x22, 0x9a, 0x68, 0x0d, 0xc4, 0xb4,
0x12, 0xcc, 0xb9, 0x61, 0x1b, 0xe5, 0x58, 0xd8, 0x7e, 0xbc, 0x39, 0x61, 0xbd, 0x6f, 0x8e, 0x0a,
0xc1, 0x31, 0x6b, 0xf9, 0x0d, 0xa0, 0xa8, 0x57, 0xf3, 0x49, 0x4f, 0xf3, 0x4d, 0xbf, 0xef, 0xa1,
0x8f, 0xe1, 0xbc, 0x47, 0xff, 0x0a, 0x45, 0x3f, 0xcc, 0x14, 0xcd, 0x18, 0x71, 0xc8, 0x16, 0xec,
0x25, 0xe2, 0xba, 0x8e, 0x1b, 0x4e, 0x28, 0xfb, 0x28, 0xff, 0x25, 0x07, 0x8b, 0x4d, 0x25, 0xc1,
0xe2, 0xfa, 0xc4, 0x62, 0xa6, 0x92, 0x60, 0xae, 0x13, 0x0e, 0x8d, 0xea, 0xbc, 0x94, 0x63, 0x38,
0x91, 0x2d, 0x70, 0xcc, 0x8a, 0xc4, 0x18, 0x78, 0x91, 0x0a, 0x79, 0x92, 0x03, 0x78, 0x34, 0xea,
0x08, 0x7c, 0xf9, 0x7f, 0x38, 0x58, 0x1f, 0xc0, 0x8c, 0x8c, 0xa6, 0x91, 0x36, 0x69, 0x05, 0x3b,
0xe4, 0x6b, 0x05, 0x5c, 0x4b, 0x4c, 0x23, 0x83, 0xfc, 0x34, 0xf7, 0x34, 0x0e, 0xc4, 0x45, 0x22,
0x12, 0xe3, 0x9f, 0x79, 0xfb, 0xf1, 0xff, 0x76, 0x31, 0x70, 0x42, 0x11, 0x81, 0xd2, 0xf5, 0xc9,
0x91, 0x6b, 0x06, 0x23, 0x17, 0x5e, 0x69, 0xaa, 0x52, 0x11, 0x45, 0xa7, 0xdb, 0x25, 0x2d, 0xff,
0xcc, 0xdb, 0xe1, 0xa7, 0xc5, 0xe4, 0x3a, 0xa8, 0x98, 0xbe, 0x79, 0x68, 0x7a, 0x04, 0x57, 0x34,
0xa9, 0xeb, 0x3a, 0xed, 0xf6, 0x59, 0x1f, 0x3f, 0x7a, 0x06, 0x25, 0x8f, 0x2e, 0x7a, 0x62, 0x19,
0x91, 0x64, 0xcf, 0x68, 0x39, 0xfd, 0xae, 0x5f, 0x3a, 0xb7, 0xce, 0x3d, 0x9a, 0xc1, 0x8b, 0x51,
0x7f, 0x04, 0xc5, 0x13, 0x83, 0xde, 0xf2, 0x73, 0x28, 0x35, 0x15, 0xd1, 0x6c, 0xb7, 0x75, 0x47,
0xa0, 0x7b, 0x26, 0xe1, 0x14, 0x37, 0x61, 0xa6, 0x15, 0xda, 0x6a, 0x61, 0xfb, 0xd6, 0x44, 0x5c,
0xa2, 0x2e, 0xe0, 0x80, 0xb0, 0xfc, 0xfb, 0xb3, 0x70, 0x2b, 0x31, 0x0b, 0xa4, 0xd7, 0x76, 0x4e,
0x35, 0xe2, 0x1e, 0xdb, 0x2d, 0x72, 0xe6, 0x67, 0xe0, 0x08, 0x2e, 0x5b, 0x74, 0xc0, 0x46, 0x87,
0xf8, 0x9f, 0x3a, 0x16, 0x35, 0xfb, 0xc2, 0xf6, 0xce, 0x44, 0x59, 0xd3, 0x0c, 0xb5, 0xc9, 0x9a,
0x6a, 0x54, 0x12, 0x9e, 0xb7, 0x12, 0x5f, 0xc8, 0x84, 0x4b, 0xa1, 0x22, 0x1a, 0x86, 0x67, 0xa9,
0x9a, 0x5f, 0xfc, 0xff, 0xa8, 0x09, 0xe2, 0x37, 0x06, 0x2b, 0xfe, 0xbb, 0x6c, 0xc0, 0x7c, 0x12,
0x00, 0x5a, 0x85, 0xa5, 0x8a, 0xd4, 0xa8, 0xaa, 0x07, 0x46, 0x4d, 0xd2, 0x65, 0xb5, 0x62, 0x34,
0xeb, 0x5a, 0x43, 0x12, 0x95, 0x5d, 0x45, 0xaa, 0xf0, 0x05, 0xb4, 0x08, 0x68, 0xb8, 0x5b, 0x68,
0xea, 0x2a, 0xcf, 0xa1, 0x12, 0x5c, 0x1f, 0x6e, 0xaf, 0x09, 0xf5, 0xa6, 0x50, 0xe5, 0x8b, 0x65,
0x02, 0x30, 0x50, 0x8d, 0x56, 0xe0, 0x66, 0x48, 0xa7, 0x1f, 0x34, 0xa4, 0x11, 0xe1, 0xb7, 0x61,
0x39, 0xd9, 0xa9, 0xd4, 0x35, 0x5d, 0xa8, 0x56, 0x0d, 0x4d, 0xc4, 0x4a, 0x43, 0xe7, 0x39, 0xb4,
0x0c, 0x8b, 0xc9, 0x7e, 0xa1, 0x26, 0x7c, 0xa2, 0xd6, 0x0d, 0x49, 0xd4, 0xf8, 0x62, 0xf9, 0xbf,
0x39, 0x58, 0x4b, 0xf1, 0x0a, 0xe1, 0xe9, 0xe7, 0xcc, 0x3b, 0xc5, 0x5f, 0x2f, 0xc2, 0xbd, 0xf1,
0xe1, 0x8b, 0x4e, 0xf7, 0xb5, 0x7d, 0xd4, 0x77, 0x49, 0x4d, 0xaf, 0x6a, 0x67, 0xde, 0x06, 0x7f,
0x50, 0x84, 0xa7, 0xc9, 0x2d, 0xe0, 0xbd, 0xf1, 0x9d, 0x5e, 0xe0, 0xe8, 0x8e, 0x49, 0xc5, 0x76,
0x49, 0xcb, 0x77, 0xdc, 0x53, 0xdd, 0x71, 0xda, 0x9e, 0xd2, 0xf5, 0x7c, 0xf3, 0xec, 0x47, 0x8a,
0xf2, 0xe7, 0x45, 0xd8, 0xcc, 0x32, 0x48, 0xbc, 0x44, 0xce, 0xbc, 0x35, 0xfe, 0xa6, 0x08, 0x0f,
0x06, 0xd6, 0x10, 0xfa, 0xbe, 0x13, 0xfd, 0x9d, 0x08, 0x94, 0x67, 0x3e, 0x76, 0x3d, 0x84, 0x2b,
0xe9, 0x87, 0x86, 0x05, 0x77, 0xf8, 0xb0, 0xf0, 0x6b, 0xc5, 0xe0, 0x6a, 0x1c, 0x49, 0x92, 0xc4,
0x6d, 0xba, 0x6b, 0xba, 0xdf, 0xa6, 0x13, 0xf7, 0x7f, 0x72, 0xb0, 0x34, 0x1a, 0x53, 0x25, 0x45,
0x94, 0xbe, 0x65, 0x03, 0x17, 0x5d, 0x62, 0xfa, 0xa4, 0xee, 0x58, 0x67, 0xdf, 0x47, 0xfc, 0x4e,
0x11, 0x1e, 0x4f, 0x09, 0xa3, 0x8a, 0x50, 0x6b, 0x38, 0x6d, 0xbb, 0x75, 0x7a, 0xe6, 0x0d, 0xf1,
0xbf, 0x1c, 0x94, 0x07, 0x86, 0x68, 0xb8, 0x76, 0xb7, 0x65, 0xf7, 0xcc, 0xb6, 0xf7, 0xed, 0x09,
0x17, 0xff, 0xc5, 0xc1, 0xea, 0xc0, 0x02, 0x3a, 0xf1, 0xfc, 0xf0, 0x82, 0xfd, 0x6d, 0xf0, 0x7c,
0xff, 0xc1, 0x05, 0x57, 0xc5, 0xd8, 0x01, 0x84, 0x09, 0x56, 0xeb, 0xcc, 0x8f, 0x7b, 0x25, 0xf0,
0x7b, 0xa1, 0xbf, 0x23, 0x27, 0xd8, 0x69, 0x27, 0x93, 0xc0, 0x6b, 0xc1, 0x82, 0x18, 0xea, 0xd4,
0xcc, 0xe3, 0x24, 0xc1, 0x9d, 0xe0, 0x0a, 0x32, 0xcc, 0x1d, 0x04, 0xcc, 0x76, 0x82, 0xe4, 0x1d,
0xd8, 0x18, 0x21, 0x79, 0x69, 0x93, 0x93, 0x8a, 0xd3, 0xea, 0x77, 0x48, 0xd7, 0x37, 0x87, 0x2f,
0xe5, 0xe5, 0xbf, 0xe3, 0xe0, 0x86, 0xe0, 0x79, 0x76, 0xb0, 0xf6, 0xe8, 0x14, 0xc4, 0x6b, 0xef,
0x21, 0x5c, 0x69, 0x39, 0xdd, 0x63, 0xe2, 0x7a, 0x94, 0xc7, 0x88, 0x13, 0x94, 0x0b, 0xc9, 0x66,
0xc5, 0x42, 0x77, 0x60, 0xde, 0x77, 0x7c, 0xb3, 0x6d, 0xf8, 0xce, 0x1b, 0xd2, 0x65, 0x09, 0xb8,
0x19, 0x7c, 0x89, 0xb6, 0xe9, 0xb4, 0x09, 0xdd, 0x85, 0xcb, 0x3d, 0xd7, 0xe9, 0xf4, 0xfc, 0x88,
0x66, 0x86, 0xd2, 0xcc, 0xb3, 0xc6, 0x90, 0xe8, 0x09, 0x5c, 0x6d, 0xc5, 0x18, 0x22, 0x42, 0x76,
0x72, 0xe0, 0x07, 0x1d, 0x8c, 0xb8, 0xfc, 0x2f, 0x1c, 0x5c, 0x67, 0xb8, 0xa5, 0xcf, 0x48, 0xab,
0xff, 0x16, 0xb0, 0x57, 0x01, 0xba, 0x8e, 0x45, 0xc2, 0x13, 0x0a, 0x03, 0x7d, 0x31, 0x68, 0xa1,
0x87, 0x93, 0xb1, 0x51, 0xcd, 0xe4, 0x18, 0xd5, 0xb9, 0xbc, 0xa3, 0x9a, 0x9d, 0x30, 0xaa, 0x67,
0xb0, 0xcc, 0x06, 0x55, 0x27, 0x27, 0x62, 0x02, 0x6e, 0x9c, 0x55, 0x6e, 0x99, 0x3e, 0x39, 0x72,
0xdc, 0xd3, 0x28, 0xab, 0x1c, 0x7d, 0x97, 0xff, 0x96, 0x83, 0x6b, 0x8c, 0x55, 0x68, 0xb5, 0x88,
0xe7, 0x61, 0xf2, 0xa3, 0x3e, 0xf1, 0xfc, 0x00, 0x63, 0xb4, 0x7e, 0xd9, 0x0d, 0x9f, 0x31, 0xce,
0x47, 0x8d, 0xf4, 0xca, 0xfc, 0x33, 0x99, 0xc1, 0x9f, 0x70, 0x30, 0x1f, 0x21, 0x0e, 0x9a, 0xd1,
0x22, 0x9c, 0x37, 0xe9, 0x5f, 0x21, 0xc6, 0xf0, 0xeb, 0x67, 0x83, 0xee, 0x1e, 0x20, 0x66, 0xc8,
0xaa, 0xed, 0xf9, 0x13, 0xf3, 0xf4, 0x3f, 0x00, 0x7e, 0x40, 0xc5, 0xf6, 0x1c, 0xda, 0x1b, 0xf3,
0x5d, 0x93, 0xfd, 0xc4, 0xb8, 0x8a, 0x81, 0xf7, 0x1a, 0x16, 0xde, 0xec, 0x59, 0xdf, 0x9c, 0xf0,
0x0a, 0x09, 0x7c, 0xef, 0xd7, 0x27, 0xdc, 0x84, 0xc5, 0x64, 0x7f, 0xe7, 0x30, 0x3a, 0xe1, 0x7d,
0xa3, 0x2a, 0xbe, 0x6e, 0x13, 0xa5, 0xa8, 0xf8, 0xba, 0x0d, 0xf5, 0xcb, 0x49, 0x15, 0x7b, 0xae,
0xd9, 0xf5, 0x3d, 0xdd, 0x69, 0x7a, 0xc4, 0x45, 0x9b, 0x70, 0x8d, 0x3a, 0x26, 0xc3, 0x75, 0xda,
0xc4, 0x33, 0x8e, 0x82, 0x3e, 0xc2, 0x96, 0xde, 0x2c, 0xbe, 0x4a, 0xbb, 0x02, 0xd7, 0xee, 0xed,
0xb1, 0x0e, 0xf4, 0x1e, 0x5c, 0x67, 0xf4, 0xbe, 0x6b, 0xda, 0xfe, 0x80, 0xa1, 0x48, 0x19, 0x10,
0xed, 0xd3, 0x69, 0x57, 0xc8, 0x51, 0xfe, 0x82, 0x83, 0xa5, 0x44, 0x8a, 0x9f, 0xa5, 0xb6, 0x27,
0xad, 0x74, 0xb4, 0x03, 0xe7, 0xde, 0xd8, 0x5d, 0x26, 0x6f, 0x61, 0x7b, 0x73, 0xe2, 0x70, 0xc7,
0x24, 0xee, 0xdb, 0x5d, 0x0b, 0x53, 0x5e, 0xb4, 0x02, 0x17, 0xfb, 0x1e, 0x71, 0x0d, 0x5a, 0x16,
0x9b, 0x19, 0x94, 0xc5, 0xea, 0x66, 0x87, 0x94, 0x9d, 0x20, 0xf4, 0x8d, 0x71, 0xd3, 0x52, 0x11,
0xf3, 0x7e, 0xf5, 0x31, 0xa3, 0x6f, 0xe7, 0x47, 0x91, 0x62, 0x7b, 0x17, 0xd6, 0x53, 0x14, 0x46,
0x07, 0x91, 0x6f, 0x46, 0xe7, 0xbf, 0x72, 0x70, 0x2d, 0xae, 0xfd, 0xd2, 0x1d, 0xc1, 0xf4, 0xe4,
0xf2, 0xd2, 0x89, 0x7b, 0xb5, 0xe1, 0xb8, 0xf6, 0x91, 0xdd, 0x0d, 0x8b, 0x6c, 0xf1, 0xbd, 0x5a,
0xa5, 0xad, 0xe8, 0x3e, 0x2c, 0xb4, 0xda, 0x4e, 0xdf, 0x32, 0x7a, 0xae, 0x73, 0x6c, 0x5b, 0xc4,
0x0d, 0x8d, 0x7d, 0x99, 0xb6, 0x36, 0xc2, 0x46, 0xa4, 0xc2, 0x9c, 0x15, 0x5e, 0x3f, 0xa8, 0x1b,
0xbc, 0xb4, 0xfd, 0x7e, 0xe6, 0x81, 0x86, 0x58, 0xd1, 0x8d, 0x65, 0x30, 0xba, 0x48, 0x48, 0xf9,
0x25, 0x2c, 0x4f, 0xa6, 0x43, 0x37, 0xe1, 0x82, 0x75, 0x98, 0x1c, 0xdd, 0x79, 0xeb, 0x90, 0x8e,
0x6b, 0x0d, 0x2e, 0x59, 0x87, 0x06, 0xad, 0xdc, 0xb7, 0x9c, 0x76, 0x38, 0x26, 0xb0, 0x0e, 0x1b,
0x61, 0x4b, 0xf9, 0xdf, 0x39, 0x58, 0xde, 0x25, 0xa6, 0xdf, 0x77, 0x09, 0x26, 0x2d, 0xa7, 0xd3,
0x21, 0x5d, 0x2b, 0x11, 0x16, 0x87, 0x96, 0x15, 0x37, 0xbc, 0xac, 0xd0, 0xf7, 0xe0, 0xc2, 0x6b,
0xc6, 0x1a, 0x2e, 0xdd, 0xf5, 0x89, 0x63, 0x8c, 0x54, 0x44, 0x0c, 0xe8, 0x33, 0x58, 0x0d, 0xff,
0x34, 0xdc, 0x21, 0xbd, 0x46, 0xe2, 0x18, 0xb8, 0xb0, 0xfd, 0x41, 0xa6, 0xc4, 0x21, 0xe6, 0xf0,
0x3c, 0xb8, 0xf2, 0x7a, 0x72, 0x67, 0xf9, 0x04, 0xae, 0xeb, 0xc2, 0x1e, 0x3b, 0xd9, 0x90, 0x17,
0x7d, 0xe2, 0x86, 0xd7, 0xc1, 0x35, 0x60, 0x61, 0xcf, 0x08, 0xce, 0x29, 0xac, 0x46, 0x3b, 0x83,
0x81, 0x36, 0x05, 0x97, 0x67, 0x6f, 0x40, 0x40, 0xac, 0x23, 0x12, 0x85, 0x4a, 0x46, 0x20, 0x05,
0x2d, 0xc1, 0xa9, 0xc7, 0xf6, 0x0c, 0xaf, 0x4f, 0xbd, 0x0e, 0x1d, 0xc0, 0x1c, 0xbe, 0x68, 0x7b,
0x1a, 0x6b, 0x28, 0x7f, 0xf1, 0x14, 0xae, 0x34, 0x83, 0x41, 0x50, 0x7d, 0x6a, 0x97, 0xa8, 0xaf,
0x51, 0x13, 0xae, 0xf4, 0x6d, 0xe3, 0x90, 0xbe, 0x9a, 0x30, 0x5a, 0xc1, 0xd1, 0x31, 0xd3, 0xe9,
0x8d, 0x3f, 0xb2, 0x90, 0x0b, 0xf8, 0x72, 0xdf, 0x4e, 0xb4, 0xa2, 0x9f, 0x70, 0xf0, 0xb8, 0x6f,
0x1b, 0x0e, 0x7b, 0x44, 0x60, 0x84, 0x11, 0x98, 0x18, 0x47, 0x8e, 0xe1, 0x3b, 0x86, 0x15, 0xbd,
0xb2, 0x08, 0x35, 0xb2, 0x13, 0xb7, 0x30, 0x45, 0x63, 0xbe, 0xa7, 0x1a, 0x72, 0x01, 0xdf, 0xed,
0xdb, 0x99, 0xb4, 0xe8, 0x73, 0x0e, 0xee, 0x26, 0xd0, 0x99, 0x96, 0x65, 0xbc, 0xb6, 0x5d, 0xcf,
0x8f, 0xeb, 0x61, 0x21, 0x2e, 0xb6, 0x71, 0xbe, 0x9f, 0x8d, 0x6b, 0xf2, 0xd3, 0x0f, 0xb9, 0x80,
0x6f, 0xc7, 0x90, 0x52, 0xc9, 0x46, 0x6d, 0x95, 0x82, 0xa6, 0x6d, 0xfa, 0xf1, 0xec, 0xcc, 0xe6,
0xb5, 0x55, 0xc6, 0x3b, 0x93, 0x21, 0x5b, 0x4d, 0xa6, 0x45, 0xbf, 0xc5, 0xc1, 0x7a, 0x02, 0x9d,
0x47, 0x7c, 0xa3, 0x15, 0x3f, 0x49, 0x31, 0x3c, 0xfa, 0x1a, 0xa4, 0x74, 0x9e, 0x82, 0xfa, 0x5e,
0x36, 0xa8, 0x49, 0x0f, 0x5a, 0xe4, 0x02, 0xbe, 0x15, 0xa3, 0x49, 0x21, 0x42, 0x7f, 0xc8, 0xc1,
0xbd, 0x04, 0x0c, 0x37, 0x2c, 0xcc, 0x18, 0xad, 0xe8, 0x5d, 0x4a, 0x04, 0xe5, 0x02, 0x85, 0xf2,
0x0b, 0xd9, 0x50, 0xa6, 0xbd, 0x6c, 0x91, 0x0b, 0x78, 0x3d, 0x86, 0x33, 0x81, 0x30, 0xb2, 0x8c,
0x1b, 0xbe, 0x15, 0x31, 0x5a, 0xc1, 0x26, 0x35, 0x5a, 0xe1, 0x5b, 0x95, 0x70, 0xba, 0xe6, 0x32,
0x2d, 0x93, 0xf1, 0xd2, 0x85, 0x59, 0x66, 0x32, 0x11, 0xfa, 0x0c, 0x6e, 0xa5, 0xa1, 0xe8, 0x9d,
0x86, 0x08, 0x2e, 0x52, 0x04, 0xdf, 0xcd, 0x8f, 0x20, 0xf9, 0x54, 0x46, 0x2e, 0xe0, 0xd2, 0x98,
0xf6, 0x90, 0x00, 0xfd, 0x0a, 0xac, 0x8e, 0x6b, 0xee, 0xb9, 0x76, 0xd7, 0x0f, 0x55, 0x03, 0x55,
0xfd, 0x61, 0x5e, 0xd5, 0x23, 0x0f, 0x6d, 0xe4, 0x02, 0x5e, 0x1a, 0xd1, 0x3d, 0xa0, 0x40, 0x6d,
0x58, 0xea, 0xdb, 0x86, 0x15, 0x86, 0xa4, 0xc0, 0x69, 0xbb, 0x3e, 0xb1, 0x0c, 0x2a, 0xbc, 0x74,
0x89, 0x2a, 0xde, 0xca, 0x51, 0xe9, 0x4c, 0x3e, 0x57, 0x91, 0x0b, 0x78, 0xb1, 0x6f, 0xa7, 0x3e,
0x64, 0xf9, 0x9c, 0x2d, 0xbf, 0x58, 0x5d, 0xbc, 0x35, 0xbd, 0x28, 0x9b, 0x1d, 0x6a, 0x9e, 0xa7,
0x9a, 0x7f, 0x2e, 0x87, 0xe6, 0xf4, 0x17, 0x28, 0x6c, 0xe5, 0x65, 0xbc, 0x52, 0xf9, 0x31, 0x5d,
0x78, 0x31, 0x98, 0xb0, 0xc6, 0xeb, 0xb1, 0x72, 0x6d, 0x08, 0xe4, 0x32, 0x05, 0xf2, 0x9d, 0xb7,
0x2a, 0xf6, 0xb2, 0x35, 0x37, 0xa5, 0x38, 0xff, 0xbb, 0xcc, 0x81, 0x0e, 0x10, 0x84, 0xe7, 0x81,
0xc1, 0xbe, 0x64, 0x20, 0x16, 0x28, 0x88, 0x67, 0x79, 0x40, 0xa4, 0x55, 0x5c, 0xe5, 0x02, 0x5e,
0x4b, 0xe0, 0x48, 0x2d, 0xca, 0xfe, 0x31, 0xf3, 0x9e, 0xe3, 0x50, 0x5a, 0x51, 0xaa, 0xd1, 0xe8,
0xf8, 0x6d, 0x2f, 0x04, 0x74, 0x85, 0x02, 0xfa, 0xf9, 0xaf, 0x00, 0x68, 0xbc, 0x06, 0x2a, 0x17,
0xf0, 0xbd, 0x71, 0x54, 0x03, 0x3a, 0xbf, 0x1d, 0x96, 0x81, 0xfe, 0x81, 0x83, 0x67, 0xc3, 0xf3,
0x44, 0x2b, 0x68, 0x86, 0x49, 0x4b, 0x68, 0x86, 0x15, 0xd5, 0xd0, 0x0c, 0xdf, 0x71, 0xda, 0x9e,
0x61, 0xb3, 0xb2, 0x62, 0x88, 0x94, 0xa7, 0x48, 0x9f, 0xe7, 0x9a, 0xbf, 0x5c, 0x95, 0x4a, 0xb9,
0x80, 0x9f, 0x26, 0x27, 0x35, 0x5f, 0x79, 0xf3, 0xa7, 0x1c, 0x7c, 0x90, 0x6b, 0x0c, 0x03, 0x73,
0x33, 0xfc, 0x57, 0x29, 0xfe, 0xbd, 0xb7, 0xc6, 0x3f, 0x9c, 0x29, 0x96, 0x0b, 0x78, 0x33, 0x0b,
0xfc, 0x48, 0x6e, 0xf9, 0x4f, 0x39, 0x78, 0x92, 0x44, 0x6e, 0xf6, 0x83, 0x93, 0x47, 0x7c, 0x84,
0x4d, 0xbc, 0x7d, 0x61, 0x80, 0x11, 0x05, 0xfc, 0x71, 0x0e, 0xc0, 0xd3, 0x6a, 0x7f, 0x72, 0x01,
0x3f, 0x18, 0x00, 0x9d, 0x5a, 0x25, 0xfc, 0x6b, 0x0e, 0xb6, 0x32, 0x56, 0xae, 0x6d, 0x76, 0x8c,
0x1e, 0xad, 0x18, 0x84, 0x20, 0xaf, 0x51, 0x90, 0x3b, 0x6f, 0xb3, 0x7e, 0x87, 0x8b, 0x0f, 0x72,
0x01, 0x3f, 0x9e, 0xb2, 0x88, 0x15, 0xb3, 0x93, 0xac, 0x54, 0xfc, 0x11, 0x07, 0x0f, 0x92, 0x50,
0x7b, 0x71, 0x42, 0x7f, 0x6c, 0xde, 0xaf, 0x53, 0x84, 0x1f, 0xe5, 0x40, 0x38, 0xa9, 0x2a, 0x20,
0x17, 0x70, 0x79, 0x00, 0x6d, 0x62, 0xed, 0xe0, 0x37, 0x38, 0xb8, 0x93, 0xc4, 0xe4, 0x13, 0xcf,
0x0f, 0xd0, 0x74, 0x87, 0xfc, 0xf1, 0x8d, 0xcc, 0xe8, 0x37, 0x25, 0x45, 0x2f, 0x17, 0xf0, 0xea,
0x00, 0x49, 0x5a, 0x0e, 0xdf, 0x85, 0x95, 0x24, 0x86, 0xe8, 0x9c, 0x1b, 0xc5, 0xa1, 0xc5, 0x8c,
0xbc, 0xf4, 0xa4, 0x1c, 0x39, 0x0b, 0xbb, 0x13, 0xf2, 0xe7, 0x6d, 0x28, 0xf5, 0xed, 0xe0, 0x10,
0x66, 0xfa, 0xc4, 0xe8, 0x92, 0x13, 0x9a, 0x45, 0x08, 0x23, 0xee, 0xcd, 0x8c, 0x7b, 0xec, 0xc4,
0xec, 0xb4, 0x5c, 0xc0, 0xd7, 0xfb, 0xf6, 0x78, 0x27, 0x3a, 0xa5, 0x41, 0x7e, 0x54, 0x9b, 0x67,
0x1e, 0x47, 0x2a, 0x4b, 0x99, 0x16, 0x9e, 0x92, 0xf3, 0x66, 0x03, 0x4d, 0x27, 0x40, 0x3f, 0x86,
0xb5, 0xb4, 0x81, 0xd2, 0x9c, 0x78, 0xa8, 0x7c, 0x29, 0x33, 0xc0, 0x4c, 0xcd, 0xa7, 0xcb, 0x05,
0xbc, 0x3c, 0x3a, 0xea, 0x01, 0x09, 0xfa, 0x73, 0xe6, 0x42, 0x46, 0x11, 0x1c, 0xdb, 0xe4, 0xc4,
0xb0, 0x92, 0x39, 0xf7, 0x10, 0xcd, 0x32, 0x45, 0x23, 0xe6, 0x45, 0x33, 0x25, 0x75, 0x2f, 0x17,
0xf0, 0xfd, 0x11, 0x60, 0xe9, 0xd4, 0xe8, 0xaf, 0x38, 0xd8, 0x4c, 0x2e, 0x41, 0x7b, 0x90, 0xa9,
0x30, 0xcc, 0x13, 0xcf, 0x70, 0x6c, 0xab, 0x15, 0x6d, 0x8b, 0x70, 0x55, 0xae, 0x64, 0x5e, 0x21,
0xf2, 0xbd, 0x12, 0x95, 0x0b, 0xf8, 0xd1, 0x60, 0x95, 0x26, 0x69, 0x4f, 0x3c, 0xd5, 0xb6, 0x5a,
0x43, 0x2f, 0x4a, 0xbf, 0xe0, 0xe0, 0x7e, 0xfa, 0x91, 0xc1, 0xf2, 0x0c, 0x42, 0x73, 0x2a, 0x21,
0xbc, 0x5b, 0xb9, 0x8f, 0x50, 0xe9, 0x8f, 0x37, 0x87, 0x8f, 0x50, 0x31, 0x8d, 0xe5, 0x25, 0x1f,
0x78, 0xfa, 0x6c, 0x59, 0x07, 0xf1, 0xd6, 0x77, 0x0c, 0x96, 0x8c, 0x66, 0xb3, 0x18, 0xa2, 0x58,
0xcd, 0xdc, 0xba, 0xe9, 0x2f, 0x21, 0xc3, 0x15, 0x9d, 0xfe, 0x4a, 0xf2, 0x87, 0x70, 0xd5, 0xa4,
0x59, 0x71, 0x63, 0x90, 0x93, 0x2e, 0xdd, 0xa6, 0x9a, 0x26, 0x67, 0xdd, 0x52, 0x2b, 0x38, 0x72,
0x01, 0xf3, 0xe6, 0x48, 0x47, 0xe4, 0x12, 0x93, 0x4b, 0x20, 0xb4, 0x2c, 0x3d, 0x1e, 0x87, 0x23,
0x5b, 0xcb, 0xdc, 0xb0, 0x53, 0x32, 0x75, 0xcc, 0x25, 0x4e, 0x4b, 0xe5, 0x85, 0x47, 0xe5, 0x14,
0x10, 0x71, 0x16, 0x80, 0xe1, 0x58, 0xcf, 0x9c, 0xe7, 0xe9, 0x09, 0x3c, 0x36, 0xcf, 0x19, 0x49,
0xbe, 0xdf, 0xe4, 0xa8, 0x13, 0x89, 0xee, 0x8d, 0x3f, 0x4a, 0xfe, 0x1e, 0x22, 0xba, 0x32, 0xde,
0xc9, 0x7b, 0x7b, 0x9d, 0xf4, 0x6b, 0x8a, 0xa1, 0xdb, 0x6b, 0x0a, 0x11, 0xfa, 0x04, 0xc2, 0xc9,
0x32, 0x48, 0x54, 0xd0, 0x2a, 0x95, 0xa9, 0xd6, 0x77, 0x33, 0xa6, 0x7d, 0xb8, 0x00, 0x26, 0x17,
0xf0, 0x15, 0x73, 0xb8, 0x1d, 0x75, 0xe0, 0x66, 0x28, 0x3b, 0x70, 0x50, 0xc9, 0x3a, 0x58, 0xe9,
0x6e, 0x46, 0xe2, 0x6f, 0x72, 0x39, 0x4a, 0x2e, 0xe0, 0x1b, 0x66, 0x5a, 0x2f, 0x3a, 0x84, 0x1b,
0x83, 0x2c, 0x09, 0x73, 0x8c, 0x6c, 0x3a, 0xef, 0x51, 0x65, 0xef, 0x4c, 0x54, 0x96, 0x92, 0x1a,
0x95, 0x0b, 0xf8, 0x9a, 0x9b, 0x92, 0x31, 0x3d, 0x81, 0x5b, 0x13, 0x72, 0x73, 0x4c, 0xd5, 0xfd,
0x8c, 0x71, 0x4d, 0xce, 0x27, 0x06, 0x0e, 0xff, 0xf5, 0xe4, 0x6c, 0xe3, 0x21, 0x84, 0xa3, 0x36,
0x4c, 0x9a, 0x32, 0x33, 0x5c, 0x56, 0x69, 0x2b, 0x3d, 0xc8, 0x18, 0x5c, 0x4a, 0x75, 0x2e, 0x18,
0x9c, 0x99, 0x52, 0xb4, 0xab, 0xc2, 0xe5, 0x58, 0x07, 0x9d, 0xa5, 0x87, 0x54, 0xf6, 0xfd, 0x4c,
0xd9, 0x01, 0xb1, 0x5c, 0xc0, 0xf3, 0x66, 0xb2, 0xae, 0x76, 0x00, 0x28, 0x84, 0xda, 0xa6, 0x6e,
0x85, 0x5a, 0xb1, 0xf4, 0x28, 0xa3, 0xac, 0x3e, 0x5a, 0xd7, 0xa2, 0xde, 0x64, 0xb4, 0xd6, 0x35,
0x22, 0xba, 0x4f, 0x2b, 0x30, 0xa5, 0xc7, 0xb9, 0x45, 0xb3, 0x92, 0xcd, 0xb0, 0xe8, 0xb0, 0x8c,
0x33, 0x22, 0xda, 0xa2, 0x95, 0x97, 0xd2, 0x46, 0x6e, 0xd1, 0xac, 0x54, 0x33, 0x2c, 0x3a, 0x2c,
0xdf, 0xb4, 0x61, 0x29, 0x29, 0xba, 0x43, 0x4b, 0x3b, 0x91, 0x5d, 0x9e, 0x64, 0xe4, 0x05, 0xd2,
0x0b, 0x5b, 0x72, 0x01, 0x2f, 0x9a, 0xe9, 0x25, 0xaf, 0x74, 0x6d, 0xa1, 0xa9, 0xde, 0xf9, 0x8a,
0xda, 0x62, 0x83, 0x8d, 0x69, 0x0b, 0xcd, 0x96, 0xae, 0x2d, 0xb4, 0xde, 0xbb, 0x5f, 0x51, 0x5b,
0x6c, 0xc3, 0x31, 0x6d, 0xa1, 0x25, 0x3b, 0xb0, 0x9c, 0xd4, 0x46, 0x8b, 0x4e, 0x5e, 0x10, 0x2d,
0xfb, 0x1e, 0x71, 0x4b, 0x9b, 0xb9, 0xd5, 0x25, 0x4b, 0x5f, 0xc3, 0xea, 0x86, 0x8a, 0x62, 0xbf,
0xc7, 0x41, 0x39, 0x79, 0x40, 0x20, 0xad, 0x6d, 0x76, 0x25, 0xee, 0x26, 0xd3, 0x2c, 0xa5, 0xad,
0xcc, 0x9c, 0x6c, 0xe6, 0x9b, 0x43, 0x96, 0x93, 0x8d, 0xc9, 0x5a, 0xe3, 0x64, 0xe8, 0x0d, 0xdc,
0x4c, 0xc9, 0xb0, 0x10, 0xbb, 0x45, 0x4a, 0xef, 0x65, 0x1e, 0xb1, 0x27, 0xbc, 0xf8, 0x63, 0x47,
0xec, 0x91, 0x4e, 0xbb, 0x45, 0x46, 0x95, 0x45, 0xc7, 0x4d, 0xc7, 0x22, 0xa5, 0xa7, 0xb9, 0x95,
0x8d, 0xbc, 0xb2, 0x1b, 0x56, 0x36, 0xe8, 0x44, 0x3f, 0x80, 0xab, 0xbe, 0x79, 0x14, 0xc6, 0x21,
0x12, 0x04, 0x44, 0xf7, 0xb4, 0xb4, 0x9d, 0x11, 0x8b, 0xd2, 0xea, 0x15, 0x41, 0x2c, 0xf2, 0xcd,
0xa3, 0x64, 0xfb, 0xce, 0x05, 0x98, 0xa5, 0x4c, 0xcf, 0xcf, 0xcd, 0x15, 0xf9, 0x99, 0x20, 0x28,
0xc6, 0x91, 0xf7, 0x88, 0xf8, 0x71, 0x92, 0x8e, 0x9e, 0xb3, 0x36, 0xfe, 0x7e, 0x61, 0xf0, 0x63,
0xb9, 0x28, 0x38, 0xa0, 0x3b, 0xb0, 0x5a, 0x51, 0x34, 0x51, 0x7d, 0x29, 0x61, 0x03, 0x4b, 0x9a,
0xda, 0xc4, 0xe2, 0xe8, 0x33, 0xff, 0x5b, 0x50, 0x1a, 0x27, 0xd1, 0x24, 0xfc, 0x52, 0xc2, 0x3c,
0x87, 0xd6, 0xe1, 0xd6, 0x78, 0xef, 0x7e, 0x73, 0x47, 0xc2, 0x75, 0x49, 0x97, 0x34, 0xbe, 0x88,
0xde, 0x87, 0xad, 0x71, 0x8a, 0x8a, 0xa0, 0x0b, 0x3b, 0x82, 0x26, 0x19, 0x0d, 0x55, 0xd3, 0xf7,
0xb0, 0xa4, 0x19, 0x9a, 0x54, 0xdd, 0x35, 0x64, 0x55, 0xd3, 0xa5, 0x0a, 0x3f, 0x83, 0xde, 0x83,
0x77, 0xa6, 0x30, 0xd5, 0x0e, 0xb4, 0x17, 0xd5, 0x21, 0x8e, 0x73, 0x68, 0x1b, 0x36, 0xa7, 0x71,
0xa8, 0xf5, 0x3d, 0xb5, 0xb2, 0x33, 0xc4, 0x33, 0x8b, 0x9e, 0xc0, 0xc3, 0x3c, 0xd0, 0x70, 0x45,
0xe3, 0xcf, 0xa3, 0x47, 0x70, 0x2f, 0x13, 0x52, 0x40, 0x79, 0x01, 0x3d, 0x80, 0xf2, 0x38, 0xa5,
0xd0, 0x68, 0x54, 0x15, 0x51, 0xd0, 0x15, 0xb5, 0x6e, 0xc8, 0xba, 0xde, 0xe0, 0xe7, 0xd0, 0x7d,
0xb8, 0x33, 0x9d, 0x4e, 0x17, 0x1b, 0xfc, 0xc5, 0x74, 0xb2, 0x57, 0x4a, 0xbd, 0xa2, 0xbe, 0xd2,
0x8c, 0x8a, 0xa4, 0xed, 0xeb, 0x6a, 0x83, 0x07, 0xf4, 0x0e, 0x3c, 0x9a, 0x82, 0x4f, 0x7b, 0x51,
0x65, 0x73, 0x46, 0x31, 0x5e, 0xca, 0x30, 0xf0, 0x60, 0xe8, 0x52, 0x45, 0x93, 0x95, 0x5d, 0x9d,
0x9f, 0x47, 0x1f, 0xc0, 0x7b, 0xb9, 0xe4, 0x27, 0x4d, 0x7c, 0x39, 0x43, 0x0f, 0x96, 0x2a, 0xca,
0xf0, 0xd4, 0x2f, 0xe4, 0x9d, 0x94, 0x3d, 0xb1, 0xc1, 0x5f, 0xc9, 0x35, 0x29, 0x01, 0x25, 0x9f,
0xdb, 0x3c, 0x01, 0xf5, 0x55, 0xf4, 0x11, 0x7c, 0xf8, 0x55, 0xcc, 0x13, 0xee, 0x87, 0xaa, 0xa4,
0x69, 0x3c, 0x42, 0xef, 0xc2, 0xe3, 0x3c, 0xcc, 0xc2, 0x27, 0x4d, 0x2c, 0xf1, 0xd7, 0xd0, 0x43,
0xb8, 0x3b, 0x85, 0xbc, 0x72, 0x50, 0x17, 0x6a, 0x6a, 0x65, 0x87, 0xbf, 0x9e, 0xb1, 0xc4, 0x45,
0x41, 0xd3, 0x84, 0x7a, 0x05, 0x0b, 0xc6, 0xbe, 0x74, 0xa0, 0x35, 0x04, 0x51, 0xd2, 0xf8, 0x1b,
0x19, 0xb3, 0x36, 0xe0, 0x49, 0xce, 0xc1, 0x22, 0x7a, 0x06, 0x1f, 0x4c, 0xe1, 0x92, 0xaa, 0x82,
0xa6, 0x2b, 0xa2, 0x26, 0x09, 0x58, 0x94, 0x87, 0x38, 0x6f, 0xe6, 0x9a, 0xef, 0x90, 0x5f, 0x10,
0x65, 0x89, 0x2f, 0x65, 0x58, 0x8b, 0x71, 0xd4, 0xa4, 0x9a, 0x8a, 0x0f, 0x2a, 0x3b, 0xfc, 0x52,
0x2e, 0x05, 0xd4, 0xb2, 0x06, 0x53, 0xb0, 0x9c, 0x31, 0x18, 0xc6, 0x21, 0x56, 0x9b, 0x9a, 0x3e,
0xb2, 0x78, 0x57, 0xd0, 0x06, 0x3c, 0xc8, 0x5c, 0x5d, 0x6c, 0x16, 0x6f, 0xa1, 0x4d, 0xd8, 0xc8,
0xb5, 0xbe, 0x18, 0xfd, 0x6a, 0xc6, 0x64, 0x0e, 0xe8, 0x6b, 0x8a, 0x88, 0x55, 0x4d, 0xdd, 0xd5,
0xf9, 0xdb, 0xe8, 0xbb, 0xb0, 0x3d, 0x6d, 0x32, 0x55, 0x71, 0x1f, 0xab, 0x82, 0x28, 0x8f, 0xf8,
0xb9, 0xb5, 0x8c, 0xb5, 0x1f, 0xf9, 0x46, 0x41, 0xaf, 0x0a, 0x1a, 0xbf, 0x9e, 0xb1, 0xa7, 0xb4,
0xba, 0xfa, 0x6a, 0xb7, 0x2a, 0xec, 0x4b, 0xfc, 0x9d, 0x09, 0x72, 0x55, 0x31, 0x61, 0xdd, 0x8a,
0x66, 0x34, 0xb0, 0xfa, 0x4b, 0x07, 0x7c, 0x79, 0xc2, 0x52, 0x4c, 0x52, 0xcb, 0xca, 0x9e, 0x6c,
0x08, 0x2f, 0x05, 0xa5, 0x2a, 0xec, 0x28, 0x55, 0x45, 0x3f, 0xe0, 0xef, 0xa2, 0x0f, 0xe1, 0xfd,
0x0c, 0x2e, 0xba, 0x43, 0x14, 0xd1, 0xc0, 0xd2, 0x9e, 0xa2, 0xe9, 0x98, 0xba, 0x4e, 0xfe, 0x5e,
0xba, 0x17, 0xd6, 0x84, 0x5a, 0x35, 0xe9, 0x62, 0xf9, 0xfb, 0xa8, 0x0c, 0xb7, 0xc7, 0xe9, 0x24,
0x71, 0x9b, 0xfd, 0xa0, 0xad, 0x2e, 0x4a, 0xfc, 0x83, 0x8d, 0xbf, 0xe0, 0x60, 0x61, 0xf8, 0x47,
0xda, 0x68, 0x0d, 0x56, 0x62, 0x36, 0x4d, 0x17, 0xf4, 0xa6, 0x36, 0x12, 0x37, 0x57, 0xe0, 0xe6,
0x28, 0x81, 0xd6, 0x14, 0xc5, 0xc0, 0x45, 0x70, 0xa9, 0x9d, 0xfb, 0x4a, 0xa3, 0x21, 0x55, 0xf8,
0x22, 0x5a, 0x82, 0x1b, 0xa3, 0x9d, 0x12, 0xc6, 0x2a, 0xe6, 0x67, 0xd2, 0xf8, 0x84, 0x1d, 0x15,
0xd3, 0x10, 0xb8, 0xf1, 0x8f, 0x1c, 0xcc, 0x88, 0xba, 0x80, 0xae, 0xc1, 0x15, 0x51, 0x17, 0xc6,
0x7f, 0x0a, 0x18, 0x34, 0x0a, 0x4d, 0x5d, 0x36, 0x44, 0xb5, 0x5e, 0x97, 0x44, 0x5d, 0x0d, 0x02,
0xf8, 0x4d, 0xb8, 0x46, 0xdb, 0x45, 0x5d, 0x79, 0x19, 0xc4, 0x75, 0x4d, 0x53, 0xd4, 0x7a, 0x10,
0xb7, 0xe3, 0x8e, 0x00, 0xb2, 0x81, 0xa5, 0x17, 0x4d, 0x49, 0xd3, 0x35, 0x7e, 0x26, 0xea, 0x68,
0x60, 0xa9, 0xa6, 0x34, 0x6b, 0x86, 0xd6, 0x6c, 0x34, 0x54, 0xac, 0xf3, 0xe7, 0xa2, 0x0e, 0x1d,
0x07, 0x7b, 0xa9, 0x62, 0x54, 0xa4, 0x97, 0x4a, 0xe0, 0x84, 0x66, 0x23, 0xdd, 0xcd, 0xc6, 0x1e,
0x16, 0x2a, 0x92, 0xb1, 0x23, 0xd4, 0xeb, 0x12, 0xe6, 0xcf, 0x47, 0x0c, 0x3b, 0x4a, 0xb5, 0xaa,
0xd4, 0xf7, 0x0c, 0xad, 0x59, 0xab, 0x09, 0xf8, 0x80, 0xbf, 0xb0, 0xf1, 0x27, 0xe7, 0xe1, 0x46,
0xea, 0xeb, 0xa7, 0xc0, 0x59, 0x2a, 0x75, 0x5d, 0xda, 0x63, 0xd3, 0x6c, 0x48, 0x75, 0xac, 0x56,
0xab, 0xc6, 0xbe, 0x52, 0x1f, 0xfd, 0xe9, 0xe3, 0x1d, 0x58, 0x9d, 0x44, 0xa8, 0x55, 0x05, 0x71,
0x9f, 0xe7, 0xd0, 0x3d, 0x58, 0x9f, 0x44, 0x22, 0xbc, 0xd2, 0x0c, 0x55, 0xa9, 0x88, 0x7c, 0x31,
0x08, 0xbf, 0x93, 0xa8, 0x1a, 0xc2, 0x9e, 0x84, 0x2b, 0x4d, 0xfd, 0x80, 0x9f, 0x99, 0xa6, 0x4f,
0xaa, 0x09, 0x4a, 0x95, 0x3f, 0x17, 0x9c, 0x95, 0x26, 0x91, 0x3c, 0x57, 0xb0, 0xc0, 0xcf, 0xa2,
0xbb, 0xb0, 0x36, 0x89, 0x82, 0x4e, 0x3b, 0xae, 0xf0, 0xe7, 0x83, 0x85, 0x3d, 0x89, 0xa8, 0x26,
0xe8, 0xba, 0x84, 0x6b, 0xaa, 0xa6, 0xf3, 0x17, 0xa6, 0x0d, 0xaf, 0xa6, 0x19, 0xba, 0x24, 0xd4,
0x34, 0x7e, 0x6e, 0x1a, 0x95, 0xda, 0xd0, 0xf6, 0xa4, 0xba, 0x22, 0xf1, 0x17, 0xa7, 0x41, 0x57,
0xf7, 0x75, 0x81, 0x87, 0xa9, 0x83, 0x13, 0x6a, 0xbb, 0xfc, 0xa5, 0xe9, 0xb8, 0x45, 0x59, 0xa9,
0x4b, 0x86, 0x52, 0xe1, 0xe7, 0xd1, 0x77, 0xe0, 0x69, 0x36, 0x9d, 0xb1, 0xa7, 0xe8, 0x72, 0x73,
0x87, 0xae, 0xdb, 0x60, 0xbd, 0x5e, 0x46, 0x5b, 0xf0, 0x24, 0x07, 0x9b, 0xa8, 0x60, 0xb1, 0x2a,
0x89, 0x0a, 0xbf, 0x10, 0x04, 0x9e, 0x7c, 0x7a, 0xaa, 0xc2, 0x0e, 0x7f, 0x25, 0x70, 0xf0, 0x39,
0xc8, 0x9f, 0x4b, 0xf5, 0x7d, 0xa5, 0xae, 0xf1, 0x7c, 0x4e, 0x7a, 0xa1, 0xae, 0x29, 0x3b, 0x55,
0x89, 0xbf, 0x3a, 0xcd, 0x3c, 0x41, 0x28, 0x50, 0x44, 0xa9, 0xae, 0xbe, 0xe2, 0xd1, 0xc6, 0xc7,
0x70, 0x21, 0x4c, 0xb8, 0x04, 0xfb, 0x67, 0x57, 0x12, 0xf4, 0x20, 0xd8, 0x8d, 0xf9, 0x9e, 0xa8,
0x63, 0x74, 0x37, 0x72, 0x1b, 0x7f, 0xc6, 0xc1, 0xca, 0x94, 0xd7, 0x54, 0x81, 0x5d, 0x22, 0x66,
0x2c, 0x89, 0x6a, 0xad, 0x26, 0xd5, 0x2b, 0x0c, 0x53, 0xaa, 0x9f, 0xdb, 0x80, 0x07, 0xd3, 0xc9,
0xeb, 0xaa, 0xce, 0x68, 0xb9, 0x60, 0x8c, 0xd3, 0x69, 0x2b, 0x6a, 0x5d, 0xe2, 0x8b, 0x3b, 0x3f,
0xfc, 0xa7, 0x2f, 0x6f, 0x73, 0xff, 0xfc, 0xe5, 0x6d, 0xee, 0xdf, 0xbe, 0xbc, 0xcd, 0x7d, 0xa2,
0x1e, 0xd9, 0xfe, 0xa7, 0xfd, 0xc3, 0xcd, 0x96, 0xd3, 0xd9, 0x3a, 0x72, 0xcd, 0x63, 0x9b, 0x25,
0xe4, 0xcd, 0xf6, 0x56, 0xfc, 0x6f, 0x6c, 0xcc, 0x9e, 0xbd, 0x75, 0x44, 0xba, 0x5b, 0xf4, 0xe5,
0xdb, 0xd6, 0x91, 0x33, 0xf2, 0x7f, 0x6d, 0x3e, 0x4a, 0x7c, 0x1e, 0x3f, 0x3d, 0x3c, 0x4f, 0xc9,
0xde, 0xff, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2a, 0xa6, 0xf7, 0x31, 0x07, 0x47, 0x00, 0x00,
}
func (m *UIBannerClickEvent) Marshal() (dAtA []byte, err error) {
@ -7100,6 +7189,53 @@ func (m *FeatureRecommendationEvent) MarshalToSizedBuffer(dAtA []byte) (int, err
return len(dAtA) - i, nil
}
func (m *TAGExecuteQueryEvent) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *TAGExecuteQueryEvent) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *TAGExecuteQueryEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if m.XXX_unrecognized != nil {
i -= len(m.XXX_unrecognized)
copy(dAtA[i:], m.XXX_unrecognized)
}
if m.IsSuccess {
i--
if m.IsSuccess {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i--
dAtA[i] = 0x18
}
if m.TotalEdges != 0 {
i = encodeVarintUsageevents(dAtA, i, uint64(m.TotalEdges))
i--
dAtA[i] = 0x10
}
if m.TotalNodes != 0 {
i = encodeVarintUsageevents(dAtA, i, uint64(m.TotalNodes))
i--
dAtA[i] = 0x8
}
return len(dAtA) - i, nil
}
func (m *UsageEventOneOf) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -8212,6 +8348,29 @@ func (m *UsageEventOneOf_UiDiscoverCreateNode) MarshalToSizedBuffer(dAtA []byte)
}
return len(dAtA) - i, nil
}
func (m *UsageEventOneOf_TagExecuteQuery) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *UsageEventOneOf_TagExecuteQuery) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
if m.TagExecuteQuery != nil {
{
size, err := m.TagExecuteQuery.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintUsageevents(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x3
i--
dAtA[i] = 0x92
}
return len(dAtA) - i, nil
}
func encodeVarintUsageevents(dAtA []byte, offset int, v uint64) int {
offset -= sovUsageevents(v)
base := offset
@ -9286,6 +9445,27 @@ func (m *FeatureRecommendationEvent) Size() (n int) {
return n
}
func (m *TAGExecuteQueryEvent) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.TotalNodes != 0 {
n += 1 + sovUsageevents(uint64(m.TotalNodes))
}
if m.TotalEdges != 0 {
n += 1 + sovUsageevents(uint64(m.TotalEdges))
}
if m.IsSuccess {
n += 2
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
return n
}
func (m *UsageEventOneOf) Size() (n int) {
if m == nil {
return 0
@ -9877,6 +10057,18 @@ func (m *UsageEventOneOf_UiDiscoverCreateNode) Size() (n int) {
}
return n
}
func (m *UsageEventOneOf_TagExecuteQuery) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.TagExecuteQuery != nil {
l = m.TagExecuteQuery.Size()
n += 2 + l + sovUsageevents(uint64(l))
}
return n
}
func sovUsageevents(x uint64) (n int) {
return (math_bits.Len64(x|1) + 6) / 7
@ -16069,6 +16261,115 @@ func (m *FeatureRecommendationEvent) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *TAGExecuteQueryEvent) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowUsageevents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: TAGExecuteQueryEvent: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: TAGExecuteQueryEvent: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field TotalNodes", wireType)
}
m.TotalNodes = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowUsageevents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.TotalNodes |= int64(b&0x7F) << shift
if b < 0x80 {
break
}
}
case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field TotalEdges", wireType)
}
m.TotalEdges = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowUsageevents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.TotalEdges |= int64(b&0x7F) << shift
if b < 0x80 {
break
}
}
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field IsSuccess", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowUsageevents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
m.IsSuccess = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipUsageevents(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthUsageevents
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *UsageEventOneOf) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@ -17778,6 +18079,41 @@ func (m *UsageEventOneOf) Unmarshal(dAtA []byte) error {
}
m.Event = &UsageEventOneOf_UiDiscoverCreateNode{v}
iNdEx = postIndex
case 50:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field TagExecuteQuery", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowUsageevents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthUsageevents
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthUsageevents
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
v := &TAGExecuteQueryEvent{}
if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
m.Event = &UsageEventOneOf_TagExecuteQuery{v}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipUsageevents(dAtA[iNdEx:])

View file

@ -576,6 +576,19 @@ enum FeatureRecommendationStatus {
FEATURE_RECOMMENDATION_STATUS_DONE = 2;
}
// TAGExecuteQueryEvent is an event that is emitted
// when a single query is executed in the Teleport Access Graph.
// This event is emitted for both successful and failed queries and for
// successful queries, the total number of nodes and edges is reported.
message TAGExecuteQueryEvent {
// total_nodes is the total amount of nodes returned by the query.
int64 total_nodes = 1;
// total_edges is the total amount of edges returned by the query.
int64 total_edges = 2;
// is_success is true if the query was successful and false it if failed.
bool is_success = 3;
}
// UsageEventOneOf is a message that can accept a oneof of any supported
// external usage event.
message UsageEventOneOf {
@ -628,6 +641,7 @@ message UsageEventOneOf {
UIDiscoverEC2InstanceSelectionEvent ui_discover_ec2_instance_selection = 47;
UIDiscoverDeployEICEEvent ui_discover_deploy_eice = 48;
UIDiscoverCreateNodeEvent ui_discover_create_node = 49;
TAGExecuteQueryEvent tag_execute_query = 50;
}
reserved 2; //UIOnboardGetStartedClickEvent
reserved "ui_onboard_get_started_click";

File diff suppressed because it is too large Load diff

View file

@ -2254,6 +2254,39 @@ export namespace DesktopClipboardEvent {
}
}
export class TAGExecuteQueryEvent extends jspb.Message {
getUserName(): string;
setUserName(value: string): TAGExecuteQueryEvent;
getTotalNodes(): number;
setTotalNodes(value: number): TAGExecuteQueryEvent;
getTotalEdges(): number;
setTotalEdges(value: number): TAGExecuteQueryEvent;
getIsSuccess(): boolean;
setIsSuccess(value: boolean): TAGExecuteQueryEvent;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): TAGExecuteQueryEvent.AsObject;
static toObject(includeInstance: boolean, msg: TAGExecuteQueryEvent): TAGExecuteQueryEvent.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: TAGExecuteQueryEvent, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): TAGExecuteQueryEvent;
static deserializeBinaryFromReader(message: TAGExecuteQueryEvent, reader: jspb.BinaryReader): TAGExecuteQueryEvent;
}
export namespace TAGExecuteQueryEvent {
export type AsObject = {
userName: string,
totalNodes: number,
totalEdges: number,
isSuccess: boolean,
}
}
export class SubmitEventRequest extends jspb.Message {
getClusterName(): string;
setClusterName(value: string): SubmitEventRequest;
@ -2661,6 +2694,12 @@ export class SubmitEventRequest extends jspb.Message {
setDesktopClipboardTransfer(value?: DesktopClipboardEvent): SubmitEventRequest;
hasTagExecuteQuery(): boolean;
clearTagExecuteQuery(): void;
getTagExecuteQuery(): TAGExecuteQueryEvent | undefined;
setTagExecuteQuery(value?: TAGExecuteQueryEvent): SubmitEventRequest;
getEventCase(): SubmitEventRequest.EventCase;
serializeBinary(): Uint8Array;
@ -2743,6 +2782,7 @@ export namespace SubmitEventRequest {
uiDiscoverCreateNode?: UIDiscoverCreateNodeEvent.AsObject,
desktopDirectoryShare?: DesktopDirectoryShareEvent.AsObject,
desktopClipboardTransfer?: DesktopClipboardEvent.AsObject,
tagExecuteQuery?: TAGExecuteQueryEvent.AsObject,
}
export enum EventCase {
@ -2880,6 +2920,8 @@ export namespace SubmitEventRequest {
DESKTOP_CLIPBOARD_TRANSFER = 69,
TAG_EXECUTE_QUERY = 70,
}
}

View file

@ -72,6 +72,7 @@ goog.exportSymbol('proto.prehog.v1alpha.SubmitEventRequest.EventCase', null, glo
goog.exportSymbol('proto.prehog.v1alpha.SubmitEventResponse', null, global);
goog.exportSymbol('proto.prehog.v1alpha.SubmitEventsRequest', null, global);
goog.exportSymbol('proto.prehog.v1alpha.SubmitEventsResponse', null, global);
goog.exportSymbol('proto.prehog.v1alpha.TAGExecuteQueryEvent', null, global);
goog.exportSymbol('proto.prehog.v1alpha.UIBannerClickEvent', null, global);
goog.exportSymbol('proto.prehog.v1alpha.UICallToActionClickEvent', null, global);
goog.exportSymbol('proto.prehog.v1alpha.UICreateNewRoleCancelClickEvent', null, global);
@ -1643,6 +1644,27 @@ if (goog.DEBUG && !COMPILED) {
*/
proto.prehog.v1alpha.DesktopClipboardEvent.displayName = 'proto.prehog.v1alpha.DesktopClipboardEvent';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.prehog.v1alpha.TAGExecuteQueryEvent, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.displayName = 'proto.prehog.v1alpha.TAGExecuteQueryEvent';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
@ -16459,6 +16481,226 @@ proto.prehog.v1alpha.DesktopClipboardEvent.prototype.setUserName = function(valu
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.prototype.toObject = function(opt_includeInstance) {
return proto.prehog.v1alpha.TAGExecuteQueryEvent.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.prehog.v1alpha.TAGExecuteQueryEvent} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.toObject = function(includeInstance, msg) {
var f, obj = {
userName: jspb.Message.getFieldWithDefault(msg, 1, ""),
totalNodes: jspb.Message.getFieldWithDefault(msg, 2, 0),
totalEdges: jspb.Message.getFieldWithDefault(msg, 3, 0),
isSuccess: jspb.Message.getBooleanFieldWithDefault(msg, 4, false)
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.prehog.v1alpha.TAGExecuteQueryEvent}
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.prehog.v1alpha.TAGExecuteQueryEvent;
return proto.prehog.v1alpha.TAGExecuteQueryEvent.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.prehog.v1alpha.TAGExecuteQueryEvent} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.prehog.v1alpha.TAGExecuteQueryEvent}
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = /** @type {string} */ (reader.readString());
msg.setUserName(value);
break;
case 2:
var value = /** @type {number} */ (reader.readInt64());
msg.setTotalNodes(value);
break;
case 3:
var value = /** @type {number} */ (reader.readInt64());
msg.setTotalEdges(value);
break;
case 4:
var value = /** @type {boolean} */ (reader.readBool());
msg.setIsSuccess(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.prehog.v1alpha.TAGExecuteQueryEvent.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.prehog.v1alpha.TAGExecuteQueryEvent} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getUserName();
if (f.length > 0) {
writer.writeString(
1,
f
);
}
f = message.getTotalNodes();
if (f !== 0) {
writer.writeInt64(
2,
f
);
}
f = message.getTotalEdges();
if (f !== 0) {
writer.writeInt64(
3,
f
);
}
f = message.getIsSuccess();
if (f) {
writer.writeBool(
4,
f
);
}
};
/**
* optional string user_name = 1;
* @return {string}
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.prototype.getUserName = function() {
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
};
/**
* @param {string} value
* @return {!proto.prehog.v1alpha.TAGExecuteQueryEvent} returns this
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.prototype.setUserName = function(value) {
return jspb.Message.setProto3StringField(this, 1, value);
};
/**
* optional int64 total_nodes = 2;
* @return {number}
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.prototype.getTotalNodes = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
};
/**
* @param {number} value
* @return {!proto.prehog.v1alpha.TAGExecuteQueryEvent} returns this
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.prototype.setTotalNodes = function(value) {
return jspb.Message.setProto3IntField(this, 2, value);
};
/**
* optional int64 total_edges = 3;
* @return {number}
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.prototype.getTotalEdges = function() {
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
};
/**
* @param {number} value
* @return {!proto.prehog.v1alpha.TAGExecuteQueryEvent} returns this
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.prototype.setTotalEdges = function(value) {
return jspb.Message.setProto3IntField(this, 3, value);
};
/**
* optional bool is_success = 4;
* @return {boolean}
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.prototype.getIsSuccess = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));
};
/**
* @param {boolean} value
* @return {!proto.prehog.v1alpha.TAGExecuteQueryEvent} returns this
*/
proto.prehog.v1alpha.TAGExecuteQueryEvent.prototype.setIsSuccess = function(value) {
return jspb.Message.setProto3BooleanField(this, 4, value);
};
/**
* Oneof group definitions for this message. Each group defines the field
* numbers belonging to that group. When of these fields' value is set, all
@ -16467,7 +16709,7 @@ proto.prehog.v1alpha.DesktopClipboardEvent.prototype.setUserName = function(valu
* @private {!Array<!Array<number>>}
* @const
*/
proto.prehog.v1alpha.SubmitEventRequest.oneofGroups_ = [[3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69]];
proto.prehog.v1alpha.SubmitEventRequest.oneofGroups_ = [[3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70]];
/**
* @enum {number}
@ -16539,7 +16781,8 @@ proto.prehog.v1alpha.SubmitEventRequest.EventCase = {
UI_DISCOVER_DEPLOY_EICE: 66,
UI_DISCOVER_CREATE_NODE: 67,
DESKTOP_DIRECTORY_SHARE: 68,
DESKTOP_CLIPBOARD_TRANSFER: 69
DESKTOP_CLIPBOARD_TRANSFER: 69,
TAG_EXECUTE_QUERY: 70
};
/**
@ -16647,7 +16890,8 @@ proto.prehog.v1alpha.SubmitEventRequest.toObject = function(includeInstance, msg
uiDiscoverDeployEice: (f = msg.getUiDiscoverDeployEice()) && proto.prehog.v1alpha.UIDiscoverDeployEICEEvent.toObject(includeInstance, f),
uiDiscoverCreateNode: (f = msg.getUiDiscoverCreateNode()) && proto.prehog.v1alpha.UIDiscoverCreateNodeEvent.toObject(includeInstance, f),
desktopDirectoryShare: (f = msg.getDesktopDirectoryShare()) && proto.prehog.v1alpha.DesktopDirectoryShareEvent.toObject(includeInstance, f),
desktopClipboardTransfer: (f = msg.getDesktopClipboardTransfer()) && proto.prehog.v1alpha.DesktopClipboardEvent.toObject(includeInstance, f)
desktopClipboardTransfer: (f = msg.getDesktopClipboardTransfer()) && proto.prehog.v1alpha.DesktopClipboardEvent.toObject(includeInstance, f),
tagExecuteQuery: (f = msg.getTagExecuteQuery()) && proto.prehog.v1alpha.TAGExecuteQueryEvent.toObject(includeInstance, f)
};
if (includeInstance) {
@ -17023,6 +17267,11 @@ proto.prehog.v1alpha.SubmitEventRequest.deserializeBinaryFromReader = function(m
reader.readMessage(value,proto.prehog.v1alpha.DesktopClipboardEvent.deserializeBinaryFromReader);
msg.setDesktopClipboardTransfer(value);
break;
case 70:
var value = new proto.prehog.v1alpha.TAGExecuteQueryEvent;
reader.readMessage(value,proto.prehog.v1alpha.TAGExecuteQueryEvent.deserializeBinaryFromReader);
msg.setTagExecuteQuery(value);
break;
default:
reader.skipField();
break;
@ -17595,6 +17844,14 @@ proto.prehog.v1alpha.SubmitEventRequest.serializeBinaryToWriter = function(messa
proto.prehog.v1alpha.DesktopClipboardEvent.serializeBinaryToWriter
);
}
f = message.getTagExecuteQuery();
if (f != null) {
writer.writeMessage(
70,
f,
proto.prehog.v1alpha.TAGExecuteQueryEvent.serializeBinaryToWriter
);
}
};
@ -20095,6 +20352,43 @@ proto.prehog.v1alpha.SubmitEventRequest.prototype.hasDesktopClipboardTransfer =
};
/**
* optional TAGExecuteQueryEvent tag_execute_query = 70;
* @return {?proto.prehog.v1alpha.TAGExecuteQueryEvent}
*/
proto.prehog.v1alpha.SubmitEventRequest.prototype.getTagExecuteQuery = function() {
return /** @type{?proto.prehog.v1alpha.TAGExecuteQueryEvent} */ (
jspb.Message.getWrapperField(this, proto.prehog.v1alpha.TAGExecuteQueryEvent, 70));
};
/**
* @param {?proto.prehog.v1alpha.TAGExecuteQueryEvent|undefined} value
* @return {!proto.prehog.v1alpha.SubmitEventRequest} returns this
*/
proto.prehog.v1alpha.SubmitEventRequest.prototype.setTagExecuteQuery = function(value) {
return jspb.Message.setOneofWrapperField(this, 70, proto.prehog.v1alpha.SubmitEventRequest.oneofGroups_[0], value);
};
/**
* Clears the message field making it undefined.
* @return {!proto.prehog.v1alpha.SubmitEventRequest} returns this
*/
proto.prehog.v1alpha.SubmitEventRequest.prototype.clearTagExecuteQuery = function() {
return this.setTagExecuteQuery(undefined);
};
/**
* Returns whether this field is set.
* @return {boolean}
*/
proto.prehog.v1alpha.SubmitEventRequest.prototype.hasTagExecuteQuery = function() {
return jspb.Message.getField(this, 70) != null;
};

View file

@ -875,6 +875,22 @@ func (e *DesktopClipboardEvent) Anonymize(a utils.Anonymizer) prehogv1a.SubmitEv
}
}
type TagExecuteQueryEvent prehogv1a.TAGExecuteQueryEvent
// Anonymize anonymizes the event.
func (e *TagExecuteQueryEvent) Anonymize(a utils.Anonymizer) prehogv1a.SubmitEventRequest {
return prehogv1a.SubmitEventRequest{
Event: &prehogv1a.SubmitEventRequest_TagExecuteQuery{
TagExecuteQuery: &prehogv1a.TAGExecuteQueryEvent{
UserName: a.AnonymizeString(e.UserName),
TotalEdges: e.TotalEdges,
TotalNodes: e.TotalNodes,
IsSuccess: e.IsSuccess,
},
},
}
}
// ConvertUsageEvent converts a usage event from an API object into an
// anonymizable event. All events that can be submitted externally via the Auth
// API need to be defined here.
@ -1276,6 +1292,14 @@ func ConvertUsageEvent(event *usageeventsv1.UsageEventOneOf, userMD UserMetadata
CountTraitsGranted: e.AccessListGrantsToUser.CountTraitsGranted,
}
return ret, nil
case *usageeventsv1.UsageEventOneOf_TagExecuteQuery:
ret := &TagExecuteQueryEvent{
UserName: userMD.Username,
TotalEdges: e.TagExecuteQuery.TotalEdges,
TotalNodes: e.TagExecuteQuery.TotalNodes,
IsSuccess: e.TagExecuteQuery.IsSuccess,
}
return ret, nil
default:
return nil, trace.BadParameter("invalid usage event type %T", event.GetEvent())
}

View file

@ -1012,6 +1012,22 @@ message DesktopClipboardEvent {
string user_name = 2;
}
// TAGExecuteQueryEvent is an event that is emitted
// when a single query is executed in the Teleport Access Graph.
// This event is emitted for both successful and failed queries and for
// successful queries, the total number of nodes and edges is reported.
message TAGExecuteQueryEvent {
// anonymized
string user_name = 1;
// total_nodes is the total amount of nodes returned by the query.
int64 total_nodes = 2;
// total_edges is the total amount of edges returned by the query.
int64 total_edges = 3;
// is_success is true if the query was successful and false it if failed.
bool is_success = 4;
}
message SubmitEventRequest {
// anonymized, 32 bytes (HMAC-SHA-256) encoded in base64
//
@ -1121,6 +1137,8 @@ message SubmitEventRequest {
DesktopDirectoryShareEvent desktop_directory_share = 68;
DesktopClipboardEvent desktop_clipboard_transfer = 69;
TAGExecuteQueryEvent tag_execute_query = 70;
}
reserved 8; // UIOnboardGetStartedClickEvent